黃石做網(wǎng)站的公司網(wǎng)絡(luò)營銷實施計劃
剛安裝的MySQL使用Navicat操作數(shù)據(jù)庫遇到的問題
- 一、編輯連接保存報錯
- 二、打開數(shù)據(jù)表很慢
- 三、MySQL的進程出現(xiàn)大量“sleep”狀態(tài)的進程
- 四、執(zhí)行sql腳本報錯,部分表導不進去
- 五、當前MySQL配置文件
一、編輯連接保存報錯
連接上了數(shù)據(jù)庫,編輯連接保存報錯,如下圖:
解決辦法:
重啟Navicat。
二、打開數(shù)據(jù)表很慢
第一次打開數(shù)據(jù)表時速度還能接受,過幾分鐘再次打開就變得很慢很慢,且查詢很少的數(shù)據(jù)都很耗時。比如我只想查詢用戶表中的十條數(shù)據(jù),竟然查了8秒。
解決辦法:
打開關(guān)閉數(shù)據(jù)庫,編輯數(shù)據(jù)庫連接,默認是240秒,我這里改為了30秒,還覺得慢可以改為0秒。
這樣就會讓數(shù)據(jù)庫連接保持隨時待命的狀態(tài),不會出現(xiàn)因為間隔幾分鐘沒有打開數(shù)據(jù)表,再次打開時變得很慢很慢了的情況了。
再次查詢用戶表的10條數(shù)據(jù)
三、MySQL的進程出現(xiàn)大量“sleep”狀態(tài)的進程
這可能是剛安裝的MySQL還沒有優(yōu)化,查詢MySQL的連接超時時間
show variables like 'wait_timeout';
show variables like 'interactive_timeout';
解釋:
wait_timeout:用于指定服務(wù)器等待客戶端發(fā)送命令的時間的上限。
interactive_timeout:用于指定MySQL服務(wù)器在等待客戶端發(fā)送命令的時間后關(guān)閉非交互式連接的超時時間。
MySQL默認的連接超時時間是8小時,太長了,沒有進行數(shù)據(jù)操作的時候應(yīng)該釋放資源,可以將超時時間調(diào)小一些,注意需要上面兩個參數(shù)同時設(shè)置才能生效。
打開MySQL的配置文件
vim /etc/my.cnf
在“[mysqld]”中加入如下配置
#減少超時時間,避免使用“SHOW PROCESSLIST”命令出現(xiàn)很多“sleep”狀態(tài)的進程,這里設(shè)置為120秒
wait_timeout=120
interactive_timeout=120
這是我的
然后重啟MySQL
service mysql restart
再次查詢MySQL的進程
SHOW PROCESSLIST
可以看到前面的很多“sleep”狀態(tài)的進程已經(jīng)不見了。
四、執(zhí)行sql腳本報錯,部分表導不進去
我的問題是這樣的,新安裝的MySQL從Navicat執(zhí)行sql腳本,結(jié)束時出現(xiàn)失敗的錯誤,看一下執(zhí)行結(jié)束后的數(shù)據(jù)庫,大部分表都導入了,只是部分數(shù)據(jù)表沒能導入。
這是導入時的報錯
一開始也沒看出那里的問題,于是將就著用,等項目連接上的時候報缺少某個數(shù)據(jù)表,看了一下數(shù)據(jù)庫中還真沒有,就把沒導入的數(shù)據(jù)表從原數(shù)據(jù)庫中單獨導出sql文件,再單獨導入,結(jié)果也是報類似的錯
看來導入數(shù)據(jù)庫的時候就是這些表出的問題了。
然后就想著既然sql腳本有問題,那我通過執(zhí)行sql的形式導入,這些應(yīng)該總行了吧,但是報如下錯:
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
看報錯提示似乎字段的長度不夠,需要改為“TEXT“或者”BLOB”類型,我直接把我內(nèi)容比較多的字段類型改為“LONGTEXT”,這樣應(yīng)該承得下了把,但執(zhí)行sql時還是報這個錯。
后面發(fā)現(xiàn)這是InnoDB 存儲引擎的一個配置參數(shù)“innodb_strict_mode”,是否采取嚴格模式的問題,只要把它關(guān)了就可以導入了。
解釋:
innodb_strict_mode 是 MySQL 中 InnoDB 存儲引擎的一個配置參數(shù),它用于控制 InnoDB 存儲引擎在處理某些可能的不規(guī)范或錯誤的數(shù)據(jù)時是否采取嚴格模式,默認是開啟。
關(guān)閉采取嚴格模式的辦法如下:
在“[mysqld]”下加入如下配置
#處理 MySQL導入數(shù)據(jù)庫1118錯誤解決方案[ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB
innodb_strict_mode=0
保存退出,再重啟MySQL
service mysql restart
刪除原來的數(shù)據(jù)庫,再次導入
成功。
五、當前MySQL配置文件
[mysqld]
port=3306
basedir=/usr/local/mysql/mysql-8.0.35 # MySQL根目錄
datadir=/usr/local/mysql/mysql-8.0.35/data/ # MySQL的data目錄
socket=/tmp/mysql.sock
character-set-server=UTF8MB4
symbolic-links=0#配置大小寫不敏感,配合初始化mysql時使用
lower_case_table_names=1#減少超時時間,避免使用“SHOW PROCESSLIST”命令出現(xiàn)很多“sleep”狀態(tài)的進程,這里設(shè)置為120秒
wait_timeout=120
interactive_timeout=120#解決“java.sql.SQLException: Expression #1 of ORDER BY clause is not in SELECT list,references column”
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'#處理 MySQL導入數(shù)據(jù)庫1118錯誤解決方案[ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB
innodb_strict_mode=0