目录
下载MySQL压缩包
配置MySQL
Qt下编译MySQL
测试
下载MySQL压缩包
网址:
MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/
我为了跟云服务器上的MySQL版本一致,减少不必要的麻烦,所以我选择了8.0.24的版本,其他版本应该也可以。
系统选择了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
第一个地方,使用“#”把整行注释。
第二个地方,INCLUDEPATH为mysql.h文件的路径,通过下面命令进行查找。
sudo find / -name mysql.h
第三个地方, LIBS为libmysqlclient.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;
结果。