遇到这个问题第二次了,特此记录一下。
问题出现背景:在云服务器上使用mysql数据库,写程序的时候连接得好好的,能各种查询数据,过了一段时间发现突然连不上了,报错:
W/System.err: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
W/System.err:
W/System.err: The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
解决方案:
首先需要去确认服务器上mysql服务是否还在运行:
输入命令 mysql -uroot -p,然后输入密码登录mysql
尝试登陆mysql,发现连接不上,并显示缺失/tmp/mysql.sock文件
2.使用命令 service mysqld status 查看mysql服务状态:
使用命令 systemctl start mysqld 启动mysql服务
结果发现重启后登录还是报一样的错,显示/tmp/mysql.sock不存在
查看/etc/my.cnf文件,这个是mysql的配置文件
显示socket文件存放路径是/tmp/mysql.sock,然而去文件目录发现该文件真的不存在。
重启mysql服务,命令:/etc/init.d/mysqld restart
重新登录mysql,登录成功
7.登入数据库,发现数据全部没了,只剩下系统的数据库,并且会发现root用户没有权限创建或删除数据库。
我们需要去修改/etc/my.cnf配置文件,在[mysqld]下面加上这句话 skip-grant-tables,然后重启 /etc/init.d/mysqld restart,这样我们就能免密登入mysql并修改root用户的权限了(后面改完后记得把这行话去掉),
9.修改root用户的权限
登录mysql后,首先刷新用户权限: flush privileges;
然后执行授权语句,代表来自所有域名的root用户拥有对所有表的所有权限:
grant all privileges on *.* to 'root'@'%' identified by 'your_root_password' with grant option;
然后再刷新权限:flush privileges;
然后我们就可以对数据库进行操作了,用备份数据恢复我们的数据库,
cd进入到sql备份文件所在目录
使用命令:mysql -u root -p your_database_name < your_backup_file.sql(文件名不要包含-)将备份文件导入到我们的数据库
做完这一步我们就可以重新连上我们原来的数据库了。
来源地址:https://blog.csdn.net/m0_53917001/article/details/127483063