Qt5.13連接MySQL過程記錄

本博文記錄Qt5.13連接MySQL過程中踩過的一些坑
系統環境:

  1. 本地主機 Windows 10
  2. 服務器 Ubuntu 16.04

軟件版本

  1. Qt 5.13.2 (安裝在win10上)
  2. MySQL 5.7.28 (安裝在Ubuntu上)

目的: 通過Qt程序連接遠程服務器上的MySQL數據庫完成相關操作

  當Qt和MySQL分別在對應主機上安裝完成後,直接在Qt上寫程序連接MySQL肯定是連接不上的,因爲Qt5版本好像默認就沒有mysql的驅動,而且MySQL也是默認就沒有開啓遠程連接的,接下來需要進行相關配置。

Qt編譯MySQL驅動

1. 這裏會需要Qt的源碼,因爲編譯MySQL的動態庫的工程在源碼中,需要自己編譯,所以安裝Qt的時候要勾選Sources,如下圖:
在這裏插入圖片描述
  我們這個時候可以找到mysql項目的代碼,我電腦中的路徑爲:
D:\Qt\Qt5.13.2\5.13.2\Src\qtbase\src\plugins\sqldrivers\mysql
工程如下:
在這裏插入圖片描述
  編譯該工程會用到MySQL的庫文件,所以我們在windows下面需要下載mysql的源碼,我的ubuntu服務器上安裝的是mysql 5.7.27版本,所以我在win下下載的是5.7.28版本的源碼(找不到5.7.27的了…),下載完後解壓放着就行。
  用Qt Creater打開上圖的工程,需要在mysql.pro修改三個地方,其中第二處修改會用到我們剛剛下載的mysql的源碼,如下:

  這裏需要注意mysql的位數,qt的位數,我ubuntu下安裝的是64位mysql,所以我在win下下載的是x64的mysql源碼,然後打開這個工程的時候也一定要用64位的編譯器,我用的是msvc2017 64bit (使用MinGW)編譯器是一樣的,後面我默認全部使用msvc編譯器

在這裏插入圖片描述
2. 到這裏工程就配置完成了,可以點一下Qt窗口左下角的像錘子的按鍵build一下,失敗的話請仔細看看前面步驟哪裏做錯了(博主親測有效),這時你可以在你Qt的安裝路徑的最外層(也就是盤符下)得到一個plugins的文件夾,這個目錄裏面就有我們編譯好的mysql的驅動:qsqlmysql.dll,qsqlmysqld.dll(這兩個是我們需要的),如下圖所示
在這裏插入圖片描述
在這裏插入圖片描述
到這裏,我們mysql的驅動就編好了,一共三個:

  • 我們自己編譯出來的兩個 qsqlmysql.dll,qsqlmysqld.dll,我們將這兩個拷貝到D:\Qt\Qt5.13.2\5.13.2\msvc2017_64\plugins\sqldrivers目錄下(如果使用的MinGW,則自行拷貝到對應目錄下);
  • 我們下載的mysql的源碼中的一個libmysql.dll,路徑如下:
    D:\mysql-5.7.28-winx64\mysql-5.7.28-winx64\lib,然後將該文件拷貝到D:\Qt\Qt5.13.2\5.13.2\msvc2017_64\bin目錄下。

3. 這時Qt方面就應該可以用了。
  測試連接數據庫的時候,項目的pro文件要加入QT += sql,我的測試代碼如下,(可連接成功,不過這還需要我們把服務器端的mysql配置好,下一節進行介紹):
在這裏插入圖片描述

遠端Ubuntu配置MySQL開啓遠程連接

本人是租用的阿里雲的服務器,這一點需要說一下,因爲開啓連接的時候有個細節需要注意一下(後面說到)。
1. 使用root登錄mysql: mysql -u root -p
2. 新增一個用戶:use mysql; CREATE USER ‘username’@‘localhost’ IDENTIFIED BY ‘password’;
3. 給新用戶添加權限:GRANT ALL PRIVILEGES ON . TO ‘username’@’%’ IDENTIFIED BY ‘password’ WITH GRANT OPTION; flush privileges; quit;
4. 修改mysql的配置文件:sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到找到 bind-address = 127.0.0.1 行,在改行前面加 # 號將改行註釋掉
:wq保存文本並退出
5. 重啓mysql: service mysql restart
6. 這一步就是需要注意的細節,一般服務器配置防火牆規則來開放3306端口(mysql默認端口)的命令行:sudo ufw allow 3306
但是阿里雲服務器的防火牆配置需登錄其官網,進入控制檯,然後爲其添加一項開放3306端口的配置,如下圖所示:
在這裏插入圖片描述

到這裏,我們運行前面Qt的連接數據庫的工程,就可以連接成功了~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章