1. MySQL批量導入-LOAD DATA
使用本地客戶端連接MySQL數據庫,批量導入數據,出現報錯:
2017-06-07 09:30:45,936 MySqlWrapper::ImportCSVtoDB ERROR 13:Can't get stat of '/opt/sdc/merge/WorkData/7374182833.csv' (Errcode: 2 - No such file or directory)
查詢后得知,本地導數據需要添加local,修改導入SQL如下:
LOAD DATA LOCAL INFILE '/opt/sdb/test.csv'
INTO TABLE t_test
CHARACTER SET utf8
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n';
另外注意,批量導入數據會產生大量無效bin-log,可以通過關閉log來避免:
set sql_log_bin=0;
導入結束后打開:
set sql_log_bin=1;
手動清楚bin-log日志:
purge master logs before '2017-06-07 17:07:00';
(刪除某個時間點之前的日志)
2. MySQL批量導出-select into outfile
使用select導出數據需要注意,指定目錄必須存在,且沒有同名文件,MySQL導出的時候,不會覆蓋重名文件,語法案例如下:
select *
from t_test into outfile
'/opt/wifidb/mysql_datatest.csv'
fields terminated by ','
optionally enclosed by ''
LINES TERMINATED BY '\n';
3. 利用mysqldump導出sql
MySQL支持mysqldump導出整個數據庫結構和數據庫數據,代碼如下:
1、導出數據庫為dbname的表結構(其中用戶名為root,密碼為dbpasswd,生成的腳本名為db.sql)
mysqldump -uroot -pdbpasswd -d dbname >db.sql;
2、導出數據庫為dbname某張表(test)結構
mysqldump -uroot -pdbpasswd -d dbname test>db.sql;
3、導出數據庫為dbname所有表結構及表數據(不加-d)
mysqldump -ucellDB -p -h172.16.2.01 -P3309 db631 >/opt/data/mysql_data/db1.sql
4、導出數據庫為dbname某張表(test)結構及表數據(不加-d)
mysqldump -uroot -pdbpasswd dbname test>db.sql;
4.導入SQL文件
首先確保MySQL里面有存在該數據庫,導入案例如下:
MySQL -uroot -p123456123 -h172.16.2.01 -P3308 db1 < /opt/data/mysql_data/db1.sql;
5.MyCAT批量導入數據-Load Data
MyCAT的批量導入與MySQL相似,不同的是,MyCAT導入的時候需要明確指出列名,便於分片插入,否則會報lost connection的錯誤。案例如下:
LOAD DATA LOCAL INFILE '/opt/data/mysql_data/test.csv' ignore
INTO TABLE t_test
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(i_ID, i_MAC, i_RSSI, i_Grid);
6. MyCAT批量導入數據-source sql
MyCAT的也支持source sql文件。與MySQL不同的是,導入到mycat的sql文件需要攜帶columnslist,所以在導出時,mysqldump命令如下:
mysqldump -uroot -p123456 -h172.16.2.01 -P3308 -c --skip-add-locks db1 t_test > /opt/data/mysql_data/buffer.sql
注意加粗字段。與此同時,導入導出的表名要一致。
這種辦法可以用於MyCat遷移數據的使用。
7. MyCAT批量導出--select into outfile
MyCAT實質為SQL parser,select會下發到每個數據節點。如果每台機器上有兩個數據節點,那么導出時就會報錯。建議到每一個數據節點下導出數據再拼接起來