MySQL数据的导入导出方案通常是配套的,例如:
方案一:使用mysqldump导出数据,再使用mysql客户端导入数据
方案二:使用SELECT INTO OUTFILE命令导出数据,再使用LOAD DATA或mysqlimport导入数据
方案三:使用mysql程序的批处理模式导出数据,再使用LOAD DATA或mysqlimport导入数据
# 语法 mysqldump db_name --tables tb1_name tb2_name > filemname.sql # 实例 mysqldump mytest --tables t1 t2 > t1_t2.sql
# 语法 mysqldump db_name --tab=dir # 实例 mysqldump mytest1 --tab=/home/mysql/__test
以下导出时,数据值以逗号分隔
mysqldump mytest1 --tab=/home/mysql/__test --fields-terminated-by=','
参数说明如下:
mysqldump --complete-insert --force --add-drop-database --insert-ignore --hex-blob --databases mytest > mytest_db.sql
mysqldump --all-databases --add-drop-database > db.sql
mysqldump --xml mytest1 > /tmp/mytest1.xml
导出时可以选择忽略哪些表,即不导出哪些表,只需加上参数–ignore-table=db_name.tbl_name1、–ignore-table=db_name.tbl_name2。
mysqldump --databases=mytest,mytest1 --ignore-table=mytest.tb1,mytest1.tb2
mysqldump不支持直接利用通配符导出多个表,但可以先用SELECT加通配符查询要导出的多张表的表名,将表名写到文件中,然后再用mysqldump读出表名再导出这些表。
# 1. 获得表名,写入文件 mysql -N information_schema -e "select table_name from tables where table_name like 'prefix_%' " > tbs.txt # 2. 读取包含表名的文件,导出表 mysqldump db 'cat tbs.txt' > dump.sql
mysql db_name < db_name.sql
# 语法 mysql --default-character-set=charset_name database_name < import_table.sql # 示例 mysql --default-character-set=gbk < import_table.sql
SELECT * INTO OUTFILE '/tmp/testfile.txt' FROM t1; SELECT * INTO OUTFILE '/tmp/t1.txt' FIELDS TERMINATED BY ':' OPTIONALLY ENCLOSED BY '+' ESCAPED BY '!' FROM t1;
mysql> load data infile '/tmp/t2.txt' into table t2;
# 生成csv文件 mysql> select field_list from table_name into outfile '/home/garychen/tmp/table_name_2.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\n'; # 导入文件 mysql> load data local infile '/home/garychen/tmp/table_name_2.csv' into table table_name fields terminated by ',' lines terminated by '\n'(field1,field2,field3);
# 语法 mysqlimport databasename tablename.txt # 实例 mysqlimport mytest /tmp/t2.txt
使用mysql程序的批处理模式,支持比较灵活的导出数据,因为可以利用SQL语句。
# 方式一,-e选项 mysql --batch --default-character-set=utf8 -e "SELECT * FROM t2;" mytest > t2.txt # 方式二,--execute mysql --batch --default-character-set=utf8 "--execute=SELECT * FROM t2;" mytest > t3.txt
mysql --batch --default-character-set=utf8 --vertical -e "SELECT * FROM t2;" mytest > t2.txt
mysql --batch --default-character-set=utf8 --html -e "SELECT * FROM t2;" mytest > t2.txt
mysql --batch --default-character-set=utf8 --xml -e "SELECT * FROM t2;" mytest > t2.txt
split [OPTION] [INPUT [PREFIX]]
split -l 10000 /tmp/t1.txt t1_split_sub_
MySQL导出导入数据(即数据转储)主要有以下三种方式:
注:设置MYSQL数据导出与导入,secure_file_priv参数设置
通过show variables like ‘%secure_file_priv%’;
secure_file_priv参数说明
这个参数用来限制数据导入和导出操作的效果,例如执行LOAD DATA、SELECT … INTO OUTFILE语句和LOAD_FILE()函数。这些操作需要用户具有FILE权限。
secure_file_priv=null 不允许导入导出
secure_file_priv=具体文件路径 只允许从这个路径导入导出
secure_file_priv=空 可以从任意路径导入导出。
此时修改secure_file_priv的参数只需要修改mysql