本博文記錄Qt5.13連接配接MySQL過程中踩過的一些坑
系統環境:
- 本地主機 Windows 10
- 伺服器 Ubuntu 16.04
軟體版本
- Qt 5.13.2 (安裝在win10上)
- 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,如下圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSPRNzYxQ2VkZHeywEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcukzN4ATOzEjMxAjMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
我們這個時候可以找到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的連接配接資料庫的工程,就可以連接配接成功了~~~