Qt连接mysql8.0数据库+新增用户支持远程访问

1.安装下载mysql

参考MySQL超详细安装配置教程(亲测有效)_mysql安装教程-CSDN博客

2.获取相关的库文件

(1)将QT安装目录底下的sql驱动qsqlmysql.dll和qsqlmysqld.dll放置到要测试的程序下。

驱动路径为:...(QT安装路径)\mingw73_32(选择自己的编译器版本)\plugins\sqldrivers。

如果没有这两个库,需要下载qt的源码编译mysql.pro生成。

(2)将mysql的相关库libmysql.dll和libmysql.lib放到QT对应的bin目录下。

mysql相关库地址:...(mysql安装路径)\lib(注意,这两个库的位数和要测试程序的位数是否一致

放入:...(QT安装路径)\mingw73_32\bin

ps:看到其他人的分享,有放在lib和plugins文件夹中的,我同步放置了。以及要测试的程序下目录内也放置了。

如果没有下载mysql,可以到官网中下载这两个库,下载zip即可。

https://downloads.mysql.com/archives/c-c/

3.代码连接部分

记得先在pro文件中添加sql支持,即QT += sql

4.新增mysql用户

因为我需要开放数据库用于远程访问,不能使用本地的root账号,所以需要新建用户。

(1)修改my.ini

添加如下信息

#允许远程访问
bind-address = 0.0.0.0

 (2)用管理员权限打开cmd,进入到mysql安装目录的bin目录中,登入mysql

mysql -u root -p

回车后输入密码,登录成功

(3)创建账号 

CREATE USER 'user'@'%' IDENTIFIED BY '123456';

其中'user'代表账号名,可以改成实际想要使用的账号名

'%'代表允许所有IP访问,'123456'是对应的密码

(4)给账号赋予权限 

GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY '123456';

*.*代表给所有数据库权限,如果只想给某一个数据库比如db123,应该是改成db123.*

这里可能报错sql语法错误在 identified by '123456' 部分,但是看很多文章都是使用这个语句,不知道是不是mysql8的版本问题,去掉后可以正常执行,但是这里可能有坑

(5)刷新权限

flush privilege;

5.新增用户时常见异常处理 

执行完刷新权限之后,重启一下mysql服务,可以尝试登录新的账密看看是否成功,有可能会遇到一直报错说authentication plugin caching_sha2相关,导致登录失败,这是因为mysql8使用这个新的验证方式,但是很多客户端不支持,所以需要改掉。可以尝试以下方法解决

1.以root账号登录mysql

2.输入use mysql;

3.输入select user,host,plugin from user;查看账号、主机、以及验证方式

4.输入 ALTER USER '账号名'@'主机' identified with 'mysql_native_password';将验证方式改成mysql_native_password

5.输入flush privileges;刷新

6.可以重复第3步查看验证方式是否已经更新成功

PS:看到其他文章中第4步最后会输入ALTER USER '账号名'@'主机' identified with 'mysql_native_password' BY '密码';但是我实测还是会报语法错误在密码附近,去掉就可以正常执行,但是这里可能有坑

如果是遇到Access denied for user 'usert'@'localhost' (using password: YES) 

可以先检查一下前面的各种权限赋予有没有问题,如果没问题,那么可以尝试一下我当时解决的方法(踩过的坑):

1.以root账号登录mysql

2.输入use mysql;

3.删除空账号用户delete from user where user='';

4.输入select user,host,authentication_string from user;其中authentication_string是加密后的密码字符串

如果看到登录报错的账号authentication_string值是空的!!就会登录不上!!不知道是不是前面给账号赋权限的时候因为输入密码报了语法错误我去掉了identified by '密码' 部分导致我实际上是没有密码的!!

5.这个时候输入 SET PASSWORD FOR '账号'@'主机'='密码';重置密码

6.执行第4步看看密码有没有加上,不为空时重新登录应该就能成功了

这个登录失败的问题当时查了好久,都没有想到是实际上账号并没有密码...因为我创建账号时设置密码并没有报错,想来想去可能是后面其他语句报语法错误的时候,我把密码相关部分删掉了,导致重置为空密码。

总感觉前面报语法错误的时候不能直接去掉,是我哪里搞错了,但是我也不知道正确做法是什么,好在最后还是解决了....

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值