0x01: Linux 下 MySQL 数据库导入与导出
1.MySQL 数据库的导出命令参数:
(1) MySQL 连接参数:
-u : 用户名
-p : 密码
-h 127.0.0.1 :如果连接远程服务器,请用对应的主机名或IP地址替换。
-p 3306 :端口
--default-character-set=utf8 : 指定字符集
--skip-column-names:不显示数据列的名字
-B:以批处理的方式运行MySQL程序,查询结果将显示为制表符间隔格式。
-e:执行命令后退出。
(2) mysqldump 参数:
-A : 全库备份。
--routines : 备份存储过程和函数。
--default-character-set=utf8 : 指定字符集
--lock-all-tables : 全局一致性锁。
--add-drop-database : 在每次执行建表语句之前,先执行DROP TABLE IF EXIST 语句。
--no-create-db: 不输出 CREATE DATABASE 语句。
--no-create-info;不输出 create table 语句。
--databases: 将后面的参数解析为域名。
--tables:第一个参数为库名。
2.MySQL 数据库的常见导出命令:
(1) 导出全库备份到本地数据库:
mysqldump -u user -p passwd -h 127.0.0.1 -p 3306 --routines --default-character-set=utf8 --lock-all-tables --add-drop-database -A > db.all.sql
(2) 导出指定数据库到本地目录:
mysqldump -u user -p passwd -h 127.0.0.1 -p 3306 --routines --default-character-set=utf8 --databases antian > antian.sql
(3)导出某个库的表到本地的目录:
mysqldump -u user -p passwd -h 127.0.0.1 -p 3306 --routines --default-character-set=utf8 --tables antian user>antian.user.sql
(4) 导出指定库的表(仅数据)到本地的目录(Mysql 数据库的 user表,带过滤条件:
mysqldump -u user -p passwd -h 127.0.0.1 -p 3306 --routines --default-character-set=utf8 --no-create-db --no-create-info --tables mysql user --where="host='localhost'" >db.table,sql
(5) 导出某个库的所有表结构:
mysqldump -u user -p passwd -h 127.0.0.1 -p 3306 --routines --default-character-set=utf8 --no-data --databases mysql > db.nodata.sql
(6) 导出某个查询sql的数据为 .txt 格式文件到本地的目录(各数据值之间用制表符分隔)
' select user,host,password from mysql.user;'
mysqldump -u user -p passwd -h 127.0.0.1 -p 3306 --routines --default-character-set=utf8 --skip-column-names -B -e 'select user,host,password from mysql.user;' > mysql_user.txt
(7) 导出某个查询SQL的数据为txt 格式文件到 MySQL 服务器:
登录到MySQL,将默认的制表符换成逗号(适应 .csv文件),后跟指定的路径,MySQL要有写的权限,最好用 tmp 目录,文件用完后删除。
select user,host,password from mysql.user into outfile '/tmp/mysql_user.csv' fields terminated by ' ,';
3. 加快MySQL 数据库导出速度的技巧:
Mysql 导出的 SQL 语句在导入时有可能会非常慢,在处理百万级的数据时,可能导入需要几个小时。在导出合理使用几个参数,可以大大的加快导入的速度。在命令中加入 “ -e“ 及几个参数就可以加快导入速度。
- —max_allowed_packet=XXXX: 客户端/ 服务器之间通信缓存区的最大值。
- —net_buffer_length=XXX: TCP / IP 和套接字通信缓冲区大小,创建长度达 net_buffer_length 的行。
注意: —max_allowed_packet 和 —net_buffer_length 不能比目标数据库的设定值大,否则可能会出错。
首先确定目标数据库的参数值:
show variables like 'max_allowed_packet';
show variables like 'net_buffer_length';
根据参数值书写mysqldump 命令:
mysqldump -uroot -p antian antian365 -e --max-allowed_packet=8388608 --net_buffer_length=8192 > antian.sql
4. MySQL 数据库导入常见命令:
导入恢复全库数据到MySQL,因为包含的MySQL数据库的权限表,导入完成时需要执行 ” flush privileges; “命令。
(1) 使用 mysql 命令导入数据库:
mysql -u user -p passwd -h 127.0.0.1 -p 3306 --routines --default-character-set=utf8 < db.all.sql
(2) 使用 source 命令导入:
需要登录MySQL ,然后执行 source 命令,需要注意的是,后面的文件要用绝对路径。
mysql> source /tmp/db.all.sql;
(3)使用 mysql 命令恢复某个库的数据(如 antian365库的 user表)
mysqldump -u$user -p$password -h 127.0.0.1 -p 3306 --default-character-set=utf8 antian365 < antian365.user.sql
(4)使用 source 命令恢复某个库的数据:
mysqldump -u$user -p$password -h 127.0.0.1 -p 3306 --default-character-set=utf8
user mysql
source /tmp/ antian365.user.sql
(5) 恢复 Mysql 服务器上面的 TXT文件:
mysqldump -u$user -p$password -h 127.0.0.1 -p 3306 --default-character-set=utf8
user mysql;
load data infile '/tmp/mysql_user.txt' into table user
(6)恢复mysql 服务器上的 .csv 格式文件(需要 file 权限,各数据值之间用逗号分隔):
mysqldump -u$user -p$password -h 127.0.0.1 -p 3306 --default-character-set=utf8
user mysql;
load data infile '/tmp/mysql_user.csv' into table user fields terminated by ',';
(7) 恢复本地的 .txt 或 .csv 文件到Mysql:
mysqldump -u$user -p$password -h 127.0.0.1 -p 3306 --default-character-set=utf8
user mysql;
load data infile '/tmp/mysql_user.txt' into table user
load data infile '/tmp/mysql_user.csv' into table user fields terminated by ',';
0x02:WIndows 下 MySQL 数据库导入导出:
(1)Mysqldump 命令导出:
mysqldump -u 用户名 -p 123456 数据库名称 > 导出的数据库文件
(2)Mysqldump导入数据库的命令行
mysqldump -u 用户名 -p 123456 数据库名称 < 导出的数据库文件
(3)mysql 命令导入与导出
将数据库 xxx 导出到 D盘根目录 xxx.sql 文件:
mysqldump -u 用户名 -p 123456 -h localhost xxx>d:\xxx.sql
将数据库D盘下的 xxx.sql 文件导入到数据库 xxx中;
mysqldump -u 用户名 -p 123456 -h localhost xxx < d:\xxx.sql
或者登录mysql以后通过命令导出:
source d:\xxx.sql