问题描述
qt 连接数据库会有驱动问题,特别是三方数据库。
先已经确定了远端数据库可以以 root 身份连接,但是依然报错:QMYSQL driver not loaded
网上有很多参考文章,不过我没有尝试:
- 我的数据库在区域网内的 NAS 上, 不想装本地数据库
- 他们的解答没有条理,主要是没有分析;给的解决方案可想而知
分析并解决
分析
驱动错误就先到驱动目录: Qt安装目录/具体版本目录/clang_64/plugins/sqldrivers
依旧是说,它以来 libmysqlclient
, 显然我没有安装, 去官网下载
1 | Connector/C (libmysqlclient) |
发现他安装在了: /usr/local/mysql-connector-c-6.1.11-macos10.12-x86_64/lib
然后查看了一下,发现还是缺依赖:
分析结果:发现实际依赖的最终是 mysql 的一个库
解决
安装mysql(我是只安装,但不实用本地数据库; 我有专门的远程数据库)
官网下载 mysql-5.7.17-macos10.12-x86_64.dmg
安装之后会为 root 设置一个默认的密码,不用管也没事儿。找到系统偏好设置, 先不要启动,先修改密码:
1 | ## 启动mysql但可以不用密码就登录 |
新开一个 shell 窗口, 修改密码 (如果知道密码直接通过 mysqladmin -u root -p password newpass
)
1 | ## 确保 mysql 命令可以使用 |
然后启动连接试试看:
说明现在 mysql 安装正常, 现在直接做个软连接,满足 qt mysql 驱动插件的依赖即可:
1 | sudo ln -fs /usr/local/mysql/lib/libmysqlclient.20.dylib /opt/local/lib/mysql55/mysql/libmysqlclient.18.dylib |
具体指令过程如下图:
然后再试试程序:
1 | //测试 mysql 驱动是否正常 |
运行结果是: 连接 NAS 数据库成功
总结并补充
我解决的时候并没有改变 qt mysql插件的依赖目录,我觉得可能其版本的 qt库也会这么依赖。
mysql 还有一些其他问题, 比如UninstallPKG软件
卸载, tcp连接问题(套接字配置问题), 启动问题等
列举如下:
1 | $ sudo /usr/local/MySQL/support-files/mysql.server start |
套接字问题: Connect to MySql error: "Can't connect to local MySQL server through socket
可能需要改变一下, localhost 为 IP 地址.
MySQL 的套接字(socket)文件默认路径是 /tmp/mysql.sock
,
但是有时候连接需要的却是 /var/mysql/mysql.sock
,这就导致了很多程序建立 MySQL 连接时提示找不到文件的错误。
1 | ## Message: mysqli::real_connect(): (HY000/2002): No such file or directory |