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:导出数据库列表,单个库时可省略)

备注

  1. 同时导出结构以及数据时可同时省略-d和-t
  2. 同时 不 导出结构和数据可使用-ntd
  3. 只导出存储过程和函数可使用-R -ntd
  4. 导出所有(结构&数据&存储过程&函数&事件&触发器)使用-R -E(相当于①,省略了-d -t;触发器默认导出)
  5. 只导出结构&函数&事件&触发器使用 -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