今天往線上數(shù)據(jù)庫導數(shù)據(jù)的時候發(fā)現(xiàn)了一些問題迫吐,這里分別記錄一下問題和解決方法.
- 導出數(shù)據(jù)的時候把insert語句導出成了一行醒第,由于這是個大寬表溯祸,導入數(shù)據(jù)的時候叹俏,報這樣的錯:
SQL over max sql length!
MySQL單條數(shù)據(jù)大小是有限制的,可以用這條命令查看單條sql長度限制
SHOW VARIABLES LIKE 'max_allowed_packet';
這是個只讀變量嚷往,需要通過修改配置文件進行修改葛账。
- 使用mysqldump的時候遇到的問題:
由于SQL長度限制,于是把一條insert語句導出為多行insert語句皮仁。相關參數(shù)--skip-extended-insert
.
在往MySQL里面導數(shù)據(jù)時籍琳,分別遇到了
ERROR 1044 (42000) at line 22: Access denied for user xx@xx to database 'xx'
ERROR 1290 (HY000) at line 22: The MySQL server is running with the --read-only option so it cannot execute this statement
這些都是相關參數(shù)可以控制的,第一個是由于到導數(shù)據(jù)時候會鎖表贷祈,但是這個狗賬號沒有加鎖權限趋急,增加--skip-add-locks
參數(shù)即可。
第二個問題是由于這個參數(shù)導致的ALTER TABLE ... DISABLE KEYS;
势誊,這個參數(shù)應用于MyISAM引擎表呜达,如果表里有非唯一索引,插入數(shù)據(jù)在堆上做batch處理粟耻。我們線上的表示innodb查近,這個根本用不上。用這個參數(shù) --skip-disable-keys
跳過即可挤忙。
在MySQL官網(wǎng)可以找到全部的mysqldump參數(shù)設置:
mysqldump相關參數(shù).
最后使用的命令如下:
mysqldump --single-transaction -uxx -hxxx -Pxxx -l --default-character-set=utf8 --skip-extended-insert --skip-disable-keys -n -t db table > dddd.sql
mysql -hxx -P xx -u xx -p xx < tttt.sql
我們的線上服務會定期執(zhí)行mysqldump命令霜威,備份我們主服務的配置表,今天用線上服務dump下來的sql文件做切庫著實花了點功夫册烈,看來回頭需要記個TODO把線上的mysqldump定時任務修改一下...
參考:
https://dba.stackexchange.com/questions/76565/mysqldumps-disable-keys-have-no-effect-on-import