天天看點

Qt5.13連接配接MySQL過程記錄Qt編譯MySQL驅動遠端Ubuntu配置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驅動
  • 遠端Ubuntu配置MySQL開啟遠端連接配接

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

Qt編譯MySQL驅動

1. 這裡會需要Qt的源碼,因為編譯MySQL的動态庫的工程在源碼中,需要自己編譯,是以安裝Qt的時候要勾選Sources,如下圖:

Qt5.13連接配接MySQL過程記錄Qt編譯MySQL驅動遠端Ubuntu配置MySQL開啟遠端連接配接

  我們這個時候可以找到mysql項目的代碼,我電腦中的路徑為:

D:\Qt\Qt5.13.2\5.13.2\Src\qtbase\src\plugins\sqldrivers\mysql

工程如下:

Qt5.13連接配接MySQL過程記錄Qt編譯MySQL驅動遠端Ubuntu配置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編譯器

Qt5.13連接配接MySQL過程記錄Qt編譯MySQL驅動遠端Ubuntu配置MySQL開啟遠端連接配接

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

Qt5.13連接配接MySQL過程記錄Qt編譯MySQL驅動遠端Ubuntu配置MySQL開啟遠端連接配接
Qt5.13連接配接MySQL過程記錄Qt編譯MySQL驅動遠端Ubuntu配置MySQL開啟遠端連接配接

到這裡,我們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配置好,下一節進行介紹):

Qt5.13連接配接MySQL過程記錄Qt編譯MySQL驅動遠端Ubuntu配置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端口的配置,如下圖所示:

Qt5.13連接配接MySQL過程記錄Qt編譯MySQL驅動遠端Ubuntu配置MySQL開啟遠端連接配接

到這裡,我們運作前面Qt的連接配接資料庫的工程,就可以連接配接成功了~~~