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会下发到每个数据节点。如果每台机器上有两个数据节点,那么导出时就会报错。建议到每一个数据节点下导出数据再拼接起来