MySQL遠程登錄及數據庫性能調優

之前整理過一篇Qt下數據庫編程基礎 :最近在進行單元測試,所以把遇到的一些問題整理出來,主要是關於數據庫的

1.遠程連接數據庫

連接語句是:
mysql -h 192.168.xx.xx(IP地址) -P 3306(端口) -u remoteuser(登錄用戶名) -p(按回車輸入密碼)。
在遠程連接之前首先要在遠端配置一下,我使用的是添加授權用戶的方法:
在5.7版本下的命令
下面是允許任意ip地址進行連接,用戶名:remoteuser,密碼:password:
mysql>GRANT ALL PRIVILEGES ON *.* TO ‘remoteuser’@’%‘IDENTIFIED BY ‘password’ WITH GRANT OPTION;
下面是指定ip爲192.168.10.33的主機才能連接到mysql服務器:
mysql>GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@‘192.168.10.33’IDENTIFIED BY ‘password’ WITH GRANT OPTION;
使授權生效:
mysql>FLUSH PRIVILEGES
可以參考這篇講遠程連接數據庫的文章
這些都做好之後還要注意一點防火牆相關的問題,我把MySQL布在了Linux系統上,剛開始的時候試了重啓數據庫都提示無法連接,後來發現是自己的防火牆沒有設置,下面是防火牆的設置:
sudo ufw allow 3306 (允許外部訪問3306端口)
sudo ufw enable(開啓防火牆)
sudo ufw default deny(禁止外部訪問)
sudo ufw status(查看防火牆狀態)
之後再連接就可以了。
在mac系統下,需要先創建用戶然後再授權,見這篇文章:mac開啓mysql遠程連接
CREATE USER ‘username’@’%’ IDENTIFIED BY ‘password’;
grant all privileges on *.* to ‘username’@’%’ with grant option;
然後重啓mysql服務即可

在8.0版本下的操作(允許任意主機對remoteuser進行遠程訪問):

create user 'remoteuser'@'%' identified by 'password';
grant all on*.*to 'remoteuser'@'%';
flush privileges;

2.插入數據速度優化

用Qt編寫的插入接口是用的QSqlTableModel,每插入一條數據就進行一次提交,剛開始的時候覺得不會有太大問題,但測試的時候發現插入一條數據大概要40ms的樣子,這樣顯然是不夠的,於是查了資料,說是要用事務,於是改成先transaction後commit,插入數據也換成了用SQL語句的方法,發現速度並沒有快多少,於是又查了數據庫相關的資料,詳見這篇文章,發現由於用的是InnoDB引擎,默認是會autocommit的,所以速度纔沒什麼提升,所以在配置文件里加了一句autocommit = 0。速度馬上就提上去了。但是我發現autocommit設爲0之後,qt的commit函數就不起作用了。我使用的是Qt5.10,測試下來好像這裏的transaction和commit對本地數據庫還是起作用的,但對遠程連接數據庫就不起作用了,不知道是不是哪裏做的不對,最後還是執行的語句set autocommit=0,可以正常使用。

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