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

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程序连接数据库成功,页面显示正常。

  • 23
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值