MySQL导入和导出
MySQL导出
mysqldump 有如下三种使用方式:
- mysqldump [OPTIONS] database [tables]
- mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3…]
- mysqldump [OPTIONS] –all-databases [OPTIONS]
说明:
- 如果是本机(localhost或127.0.0.1),可忽略 -h 参数
- 如果是默认端口(3306),可忽略 -P 参数
示例
1# 备份test数据库
2mysqldump -h127.0.0.1 -P3306 -uroot -proot test > /data/backup/test.sql
3
4# 备份test数据库并压缩(因为导出的数据有可能比较大)
5mysqldump -h127.0.0.1 -P3306 -uroot -proot test | gzip > /data/backup/test.sql.gz
6
7# 备份test数据库的多个表
8mysqldump -h127.0.0.1 -P3306 -uroot -proot test ms_order ms_user > /data/backup/multi_table.sql
9
10# 同时备份多个库
11mysqldump -h127.0.0.1 -P3306 -uroot -proot --databases test bbs blog > /data/backup/multi_db.sql
12
13# 备份实例上所有的数据库
14mysqldump -h127.0.0.1 -P3306 -uroot -proot --all-databases > /data/backup/all_db.sql
15
16# 备份数据库结构,不备份数据(加 --no-data 参数)
17mysqldump -h127.0.0.1 -P3306 -uroot -proot --no-data test > /data/backup/test.sql
18
19# 一次备份多个数据库
20mysqldump -h127.0.0.1 -P3306 -uroot -proot --no-data --databases test bbs blog > /data/backup/multi_db.sql
21
22# 导出数据库中每个表的前100条(前n条)
23# --no-defaults 不使用 my.cnf 的默认配置
24# 指定 socket
25mysqldump --no-defaults --socket /app/soft/mysql/mysql.sock -uroot -p jygz --where='true limit 100' > ~/jygz.sql
26
27# 只导出数据库中的存储过程、函数、事件
28mysqldump --no-defaults --socket /app/soft/mysql/mysql.sock -uroot -p jygz -R -E -ntd > ~/jygz-other.sql
如果在导出时,报类似如下的警告或错误:
1Warning: A partial dump from a server that has GTIDs will by default include the GTIDs
那么,添加如下导出参数: --set-gtid-purged=off --column-statistics=0
例如:mysqldump --set-gtid-purged=off --column-statistics=0 -h127.0.0.1 -P3306 -uroot -proot test ms_order ms_user > /data/backup/multi_table.sql
导出参数说明:
- -d 结构(–no-data:不导出任何数据,只导出数据库表结构)
- -t 数据(–no-create-info:只导出数据,而不添加CREATE TABLE 语句)
- -n (–no-create-db:只导出数据,而不添加CREATE DATABASE 语句)
- -R (–routines:导出存储过程以及自定义函数)
- -E (–events:导出事件)
- –triggers (默认导出触发器,使用–skip-triggers屏蔽导出)
- -B (–databases:导出数据库列表,单个库时可省略)
备注
- 同时导出结构以及数据时可同时省略-d和-t
- 同时 不 导出结构和数据可使用-ntd
- 只导出存储过程和函数可使用-R -ntd
- 导出所有(结构&数据&存储过程&函数&事件&触发器)使用-R -E(相当于①,省略了-d -t;触发器默认导出)
- 只导出结构&函数&事件&触发器使用 -R -E -d
MySQL导入
方式一:source 导入
在终端中登录mysql:mysql -uroot -p,之后的操作示例如下:
1 -- 创建database(如果有必要的话)
2 mysql> CREATE DATABASE test_db;
3 -- 选择需要导入数据的database
4 mysql> USE test_db;
5 -- 导入sql脚本文件
6 mysql> SOURCE /data/backup/test_db.sql;
方式二:直接导入
例如,把 testdb.sql 的脚本文件导出到 test 数据库中:
1mysql -h127.0.0.1 -P3306 -uroot -proot test < /data/backup/testdb.sql
评论