在使用Docker搭建環(huán)境時(shí)捌木,分別創(chuàng)建多個(gè)容器亏娜,mysql焕窝,redis,web等维贺。所有容器啟動(dòng)后發(fā)現(xiàn)web容器連接不上mysql容器它掂,返回ERROR 2002。無論如何重建容器也不能解決溯泣,但如果只是重啟mysql容器虐秋,web容器就可以連接上,不過數(shù)據(jù)庫中缺少大量表垃沦,所以懷疑是sql文件過大導(dǎo)致Docker假死客给,連接失敗。經(jīng)嘗試后發(fā)現(xiàn)的確是sql文件過大的原因肢簿,sql文件有6萬4千多行靶剑,整個(gè)遷移過程大約20左右。
大sql文件的導(dǎo)入方法
- 連接數(shù)據(jù)庫
mysql -uroot -psecret -hmysqlhost
- 修改配置
set global net_buffer_length=1000000; --Set network buffer length to a large byte number
set global max_allowed_packet=1000000000; --Set maximum allowed packet size to a large byte number
set foreign_key_checks = 0; --Disable foreign key checking to avoid delays,errors and unwanted behaviour
- 導(dǎo)入文件
use dbname;
source path/to/bak.sql;
- 恢復(fù)配置
set foreign_key_checks = 1;
- 可能遇見的問題與解決方法
Tablespace for table '`dbname`.`tablename`' exists. Please DISCARD the tablespace before IMPORT.
//導(dǎo)入到大概100個(gè)表左右時(shí)可能會(huì)出現(xiàn)ERROR池充,導(dǎo)入過程中斷
//解決方案:刪除mysql對(duì)應(yīng)表緩存桩引,一般位于/var/lib/mysql/數(shù)據(jù)庫名/表名,移除他再執(zhí)行剩下的遷移即可收夸。
//對(duì)較大的遷移文件可分割為多個(gè)小文件后再遷移
新建一個(gè)all.sql
vim all.sql
在里面寫入:
source 1.sql
source 2.sql
......
source 53.sql
source 54.sql
然后只要
mysql> source all.sql
少量數(shù)據(jù)快速遷移
mysql -uroot -psecret -hmysqlhost dbname < /path/to/bak.sql