JAVA开发常见问题及解决方法(一)

news/2024/9/21 5:31:56

1.问题描述
前端页面无法访问,java后端应用无法连接MySQL数据库。
2.问题报错
ERROR c.a.d.p.DruidDataSource - [run,2912] - create connection SQLException
3.问题报错日志截图

4.问题分析
导致无法连接数据库原因一般有以下几种:
1、应用服务与数据库服务网络不通
2、数据库服务未配置远程连接访问授权
3、数据库服务账号密码不对
4、数据库服务未启动成功
问题产生原因:
上面第二和第三种同时发生,数据库root账号密码被修改,其对应远程访问权限被禁用。
5.排查步骤
1、通过数据库客户端(如Navicat)连接数据库无法连接,报下面这个错

2、在应用服务所在服务器ping数据库所在服务器,可以ping通,说明应用服务与数据库服务网络是通的。
3、通过ssh远程连接到应用服务器,通过mysql -h指定数据库服务ip地址链接数据库,无法连接:
4、通过ssh远程连接到数据库所在服务器,通过mysql -hlocalhost -uroot -p连接本地数据库,无法连接,报错如下:
[root@localhost ~]# mysql -hlocalhost -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
5、systemctl status mysqld 查看数据库运行状态,运行正常。
诊断结果:
数据库访问root账号密码被篡改,数据库root远程连接权限被篡改,需对数据库root账号密码修改,并开放数据库root远程连接权限。

6.解决方法
6.1跳过数据库账号访问密码限制
1、首先修改配置文件my.cnf,
my.cnf文件所在路径:/etc/my.cnf或/etc/mysql/my.cnf,如果不在该路径下,则使用find / -name my.cnf进行查找数据库配置文件所在路径。
修改my.cnf:vim /etc/mysql/my.cnf
在my.cnf中[mysqld]下添加skip-grant-tables,添加后效果如下:

[mysqld]
skip-grant-tables

2、重启MySQL
重启MySQL数据库有以下几种常用方法,在实际操作中,你可根据所使用的操作系统和MySQL版本选择合适的方法。(注意:为了确保数据安全和服务稳定性,建议在重启MySQL之前备份重要数据,并在非高峰时段进行重启操作。)
(1)使用系统服务管理工具(service/systemctl)
Linux系统(如Debian/Ubuntu、RedHat Linux等)
service命令(适用于SysVinit系统)
启动: service mysql start
停止: service mysql stop
重启: service mysql restart
systemctl命令(适用于systemd系统)
启动: systemctl start mysqld
停止: systemctl stop mysqld
重启: systemctl restart mysqld
注意:在某些Linux发行版中,MySQL服务的名称可能是mysql而不是mysqld,因此请根据实际情况调整命令。
(2)使用初始化脚本(/etc/init.d/)
Linux系统
对于Debian/Ubuntu等系统,可以使用:
启动: /etc/init.d/mysql start
停止: /etc/init.d/mysql stop
重启: /etc/init.d/mysql restart
对于RedHat Linux(包括CentOS)等系统,可以使用:
启动: /etc/init.d/mysqld start
停止: /etc/init.d/mysqld stop
重启: /etc/init.d/mysqld restart
(3)使用Windows命令提示符
Windows系统
启动: net start mysql
停止: 由于Windows下不能直接重启MySQL服务,需要先停止再启动。因此,首先使用net stop mysql停止服务,然后再使用net start mysql启动服务。
(4)使用mysqladmin工具(Linux系统)
停止MySQL服务:$mysql_dir/bin/mysqladmin -u root -p shutdown
注意:mysqladmin和mysqld_safe通常位于MySQL安装目录的bin目录下。停止服务后,可以手动或使用其他方法(如systemctl或/etc/init.d/脚本)重新启动MySQL。
(5)使用图形界面工具
对于Windows和某些Linux发行版,也可以使用图形界面工具(如MySQL Workbench、phpMyAdmin的“服务器状态”页面等)来重启MySQL服务。这些工具通常提供了直观的界面来管理MySQL服务的状态。
6.2在数据库所在服务器登录数据库
使用mysql -hlocalhost -uroot -p连接本地数据库,无需输入密码直接回车,连接数据库成功。

6.3将root账号密码置为空
mysql> update mysql.user set authentication_string='' where User='root';
6.4去掉跳过密码验证配置,并重启MYSQL
(1)去掉my.cnf中跳过密码验证配置
[mysqld]

skip-grant-tables

(2)重启MYSQL
[root@localhost ~]# systemctl stop mysqld.service
[root@localhost ~]# systemctl start mysqld.service
6.5重置数据库密码
在数据库所在服务器使用mysql -hlocalhost -uroot -p连接本地数据库,无需输入密码直接回车,连接数据库成功,重置root密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
说明:mysql5.7以上使用以上命令进行修改密码,我的是5.8版本,采用的是alter user这种命令。
拓展知识:
在MySQL中,修改root用户密码的方法有多种。以下是一些常见的方法,你可以选择一种适合你服务版本的方法实现,:
(1) 使用mysqladmin命令行工具(适用于MySQL 5.7及更早版本)
注意:从MySQL 5.7.6开始,mysql_secure_installation脚本会推荐使用ALTER USER或SET PASSWORD命令来修改密码,而不是mysqladmin。
mysqladmin -u root -p password "NEWPASSWORD"
执行上述命令后,系统会提示你输入当前的root密码。输入后,密码将被修改为"NEWPASSWORD"。
(2)使用mysql命令行客户端(适用于所有版本)
方法一:使用ALTER USER(MySQL 5.7.6及更高版本)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEWPASSWORD';
FLUSH PRIVILEGES;
方法二:使用SET PASSWORD(MySQL 5.7.6之前版本)
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NEWPASSWORD');
FLUSH PRIVILEGES;
注意:在MySQL 5.7.6及更高版本中,PASSWORD()函数已被弃用,因此建议使用ALTER USER方法。
(3)使用UPDATE语句和FLUSH PRIVILEGES(适用于所有版本,但不建议)
虽然可以使用UPDATE语句直接修改mysql.user表中的密码,但这种方法并不推荐,因为它可能绕过权限系统。但如果你知道自己在做什么,并且确实需要这样做,可以这样做:
UPDATE mysql.user SET authentication_string=PASSWORD('NEWPASSWORD') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
注意:在MySQL 5.7.6及更高版本中,密码字段是authentication_string,而不是password。另外,如前所述,PASSWORD()函数在MySQL 5.7.6及更高版本中已被弃用。
(4)使用mysql_secure_installation脚本(适用于新安装的MySQL)
当你首次安装MySQL并启动服务器后,通常会提示你运行mysql_secure_installation脚本。这个脚本会帮助你设置root密码、删除匿名用户、禁止root远程登录等。在脚本运行过程中,你可以选择修改root密码。
(5) 配置文件(不推荐)
虽然可以通过编辑MySQL的配置文件(如my.cnf或my.ini)来设置root密码,但这种方法并不安全,因为配置文件通常是明文存储的,并且可以被其他用户读取。因此,不建议使用这种方法来设置或修改密码。
注意事项:
在修改密码后,务必确保你有权使用新密码登录到MySQL服务器。
修改密码后,可能需要重启MySQL服务以使更改生效(尽管在大多数情况下,FLUSH PRIVILEGES;命令就足够了)。
如果你的MySQL服务器允许远程连接,并且你修改了root用户的密码,请确保所有远程连接都已更新为新密码。
6.6使用新密码登录数据库
使用mysql -hlocalhost -uroot -p连接本地数据库,输入密码123456直接回车,连接数据库成功。
6.7设置数据库远程访问权限
mysql> use mysql;
mysql> update user set host = '%' where user = 'root';
mysql> flush privileges;
6.8验证数据库连接成功
通过ssh远程连接到应用服务器,通过mysql -h指定数据库服务ip地址链接数据库,输入修改后的密码,连接成功,同时,业务系统java程序连接数据库成功,页面显示正常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/47336.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

BUUCTF---old flashion

1.题目2.知识 3.解题 很奇怪,一段英文字母,看起来像维吉尼亚,但需要key,不知道什么是Key,我们丢到q爆破中试试直接得出来了flag:flag{n1_2hen-d3_hu1-mi-ma_a}

openGauss 查看审计结果

查看审计结果 前提条件审计功能总开关已开启。 需要审计的审计项开关已开启。 数据库正常运行,并且对数据库执行了一系列增、删、改、查操作,保证在查询时段内有审计结果产生。 数据库各个节点审计日志单独记录。背景信息只有拥有AUDITADMIN属性的用户才可以查看审计记录。有…

Pandas-2-2-中文文档-三十二-

Pandas 2.2 中文文档(三十二)原文:pandas.pydata.org/docs/pandas.tseries.offsets.YearBegin.is_month_start原文:pandas.pydata.org/docs/reference/api/pandas.tseries.offsets.YearBegin.is_month_start.htmlYearBegin.is_month_start(ts)返回一个布尔值,指示时间戳是…

Pandas-2-2-中文文档-二十二-

Pandas 2.2 中文文档(二十二)原文:pandas.pydata.org/docs/pandas.DataFrame.min原文:pandas.pydata.org/docs/reference/api/pandas.DataFrame.min.htmlDataFrame.min(axis=0, skipna=True, numeric_only=False, **kwargs)返回所请求轴的最小值。 如果要获取最小值的 索引…

Pandas-2-2-中文文档-二十-

Pandas 2.2 中文文档(二十)原文:pandas.pydata.org/docs/pandas.DataFrame.__iter__原文:pandas.pydata.org/docs/reference/api/pandas.DataFrame.__iter__.htmlDataFrame.__iter__()遍历信息轴。 返回: 迭代器 信息轴作为迭代器。 示例 >>> df = pd.DataFrame(…

使用PowerShell/CMD自动化安装并配置MySQL数据库

报错ERROR 1396 (HY000): Operation ALTER USER failed for root@localhostselect user,host from user;ALTER USER root@localhost IDENTIFIED BY 123456;life runs on code作者: zhaotianff转载请注明出处

解锁煤矿运输的未来:数字孪生技术引领革命性变革

数字孪生模型,就是在虚拟世界中构建一个与现实世界完全对应的“双胞胎”。在煤矿运输领域,数字孪生模型可以精确地模拟出煤矿运输系统的运行状态,包括设备的工作情况、运输流程的优化、安全隐患的预警等。这个“虚拟双胞胎”不仅可以帮助我们更加深入地了解煤矿运输系统的运…