【Qt】10.Linux下,Qt连接云MySQL数据库

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

下载MySQL压缩包

配置MySQL

Qt下编译MySQL

测试

下载MySQL压缩包

网址

MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/

  1. 我为了跟云服务器上的MySQL版本一致减少不必要的麻烦所以我选择了8.0.24的版本其他版本应该也可以。

  2. 系统选择了Linux通用的。

 下载完成后将压缩包拉进Linux里。

 这里有个问题需要注意下载的压缩包是xz结尾所以需要用另一个命令进行解压

tar -xf mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz

配置MySQL

检查是否有mysql用户组和mysql用户没有就添加有就忽略。

sudo groups mysql 

  添加用户组和用户。

sudo groupadd mysql && useradd -r -g mysql mysql

 创建数据目录并赋予权限。

sudo mkdir -p /data/mysql
sudo chown mysql:mysql -R /data/mysql

  修改配置文件如果没有就新建。

sudo vim /etc/my.cnf

修改为下面内容。

[mysqld]
skip-grant-tables	#免密登录不需要可以删除这行
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true

 重启服务使配置生效。

sudo service mysql restart

 将解压后的MySQL文件拷贝到/usr/local/mysql

sudo cp -r mysql-8.0.24-linux-glibc2.12-x86_64 /usr/local/mysql

 初始化MySQL

cd /usr/local/mysql/bin/
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize

 查看初始密码。

sudo cat /data/mysql/mysql.err

 执行下面语句否则在运行MySQL的时候会报错。

sudo ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

 启动MySQL。

sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
sudo service mysql start

 登录MySQL直接回车进入。

sudo mysql -u root -p

 修改密码。

SET PASSWORD = PASSWORD('123456')

 安装下面依赖库否则会引起一些不必要的报错。

sudo apt-get install mysql-server
sudo apt-get install qtbase5-private-dev
sudo apt-get install libmysqlclient-dev
sudo apt-get install mysql-client

Qt下编译MySQL

       在Qt的/opt/Qt5.12.9/5.12.9/gcc_64/plugins/sqldrivers/路径下是缺少libqsqlmysql.so文件的在最初Qt程序连接MySQL云数据库的时候会发生报错。所以接下来需要通过Qt的qmake编译生成libqsqlmysql.so文件。

       修改mysql.pro文件。

sudo vim mysql.pro

 修改为下面内容。

TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

#QMAKE_USE += mysql

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)

INCLUDEPATH +=/usr/include/mysql/
LIBS += -L/usr/lib/x86_64-linux-gnu/ -lmysqlclient

第一个地方使用“#”把整行注释。

第二个地方INCLUDEPATHmysql.h文件的路径通过下面命令进行查找。

sudo find / -name mysql.h

 第三个地方 LIBSlibmysqlclient.so文件的路径通过下面命令进行查找。

sudo find / -name libmysqlclient.so

 修改qsqldriverbase.pri文件。

sudo vim qsqldriverbase.pri

 修改为下面内容。

QT  = core core-private sql-private
# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)  删除此行
include($$shadowed($$PWD)/configure.pri) #增加此行
PLUGIN_TYPE = sqldrivers
load(qt_plugin)
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

 编译MySQL需要使用Qt的qmake的绝对路径去编译。

sudo /opt/Qt5.12.9/5.12.9/gcc_64/bin/qmake mysql.pro
sudo make

 最终得到了libqsqlmysql.so文件。

 但是还缺最后一步将生成的libqsqlmysql.so文件拷贝到/opt/Qt5.12.9/5.12.9/gcc_64/plugins/sqldrivers/下。

sudo cp libqsqlmysql.so /opt/Qt5.12.9/5.12.9/gcc_64/plugins/sqldrivers/

测试

在程序中添加下面代码进行测试。

 

 在xxx.cpp文件中添加下面头文件。

#include <QSqlDatabase>
#include <QSqlQuery>

 在xxx.cpp文件中添加下面代码。

QSqlDatabase d = QSqlDatabase::addDatabase("QMYSQL"); //加载mysql驱动这个字符串是固定的
d.setHostName("xxx.xxx.xxx.xxx");	//云服务器的IP地址
d.setDatabaseName("xxx");        //数据库名称
d.setPort(3306);                     //数据库端口如果没有更改/etc/mysql/my.cnf就不用改
d.setUserName("root");	//用户名
d.setPassword("xxx");	//密码
if(d.open()){
	qDebug()<<"Hi mysql!连接";
}
else{
	qDebug()<<"失败";
}
qDebug()<<QSqlDatabase::drivers()<<endl;

 结果。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6