这段时间闲来无事尝试了一下使用QT连接数据库,发现遇见一下问题Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ ,网上查阅了一些大佬的博客,总结了以下解决方案
主机设备环境:Windows 11
阿里云服务器OS:Alibaba Cloud Linux 3.2104 LTS 64位
分析原因:当远程登陆的时候,首先确定登陆密码是否正确;第二确定是否远程授权;
第一种情况:如果登录密码不正确,可先修改数据库密码
方法:用SET PASSWORD命令
首先登录MySQL。登录命令:mysql -uroot -p
格式:mysql> set password for 用户名@localhost = password('新密码');
例子:mysql> set password for root@localhost = password('123');
第二种情况:未开启远程授权
第一步:在阿里云服务器的安全组中开放端口,手动添加端口(安全组 -> 管理规则 -> 手动添加)
端口是3306,源的意思是哪些可以访问到,这里可按需自选,我选0.0.0.0代表可以允许所有访问
第二步:通过SSH连接服务器
我们看一下服务器端口是否放开,执行以下命令
先看一下mysql的运行状态
systemctl status mysql
如果没运行,就需要先运行
systemctl start mysql
下面命令列出开放的端口
firewall-cmd --list-ports
如果里面没有端口3306,那么就用以下命令开放端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
随后重启防火墙
systemctl restart firewalld.service
这里有些朋友使用的Finalshell可能会断开与服务器的连接,小问题,可以不用理会,随后在阿里云官网重启服务器,一定要重启!!!
重启完之后重新登录数据库(mysql -u root -p)
执行授权命令
grant all privileges on *.* to 'root'@'%' identified by '123' with grant option;
!!!注意,这个123应该要改为你自己数据库的密码
再执行以下命令 (这步很重要!)
FLUSH PRIVILEGES;
第三步:测试SSH连接是否成功
现在可以在自己本地环境连接一下数据库
1.以Windows环境为例,打开cmd 执行以下命令,然后输入刚刚配置的密码(我设置的是123)
mysql -uroot -h xxx.xxx.xxx.xxx -p
xxx.xxx.xxx.xxx是数据库所在服务器的地址
OK,如果出现连接成功,就可以运行Qt代码进行连接了,然后就大功告成了