一、 导出
导出用户需要有导出对象的权限,例如导出表要有select权限、导出视图要有show view权限、导出触发器要有trigger权限、需要锁表时要有lock tables权限等。
如果dump文件中包含了GTID信息,则无法导入到未启用GTID的数据库(低于5.6.9版本的数据库不支持GTID,因此也无法导入到这些库中)。
1. db级
导出所有db结构和数据(-A参数)mysqldump -uroot -p -A > /data/bak/all.sql 仅导出所有db结构(-d参数)mysqldump -uroot -p -A -d > /data/bak/all_struct.sql 仅导出所有db数据(-t参数)mysqldump -uroot -p -A -t > /data/bak/all_data.sql 导出单个db结构和数据mysqldump -uroot -p mydb > /data/bak/mydb.sql 导出单个db结构和数据(排除部分表)mysqldump -uroot -p mydb --ignore-table=mydb.test1 --ignore-table=mydb.test2 > /data/bak/mydb.sql 仅导出单个db结构mysqldump -uroot -p mydb -d > /data/bak/mydb.sql 仅导出单个db数据mysqldump -uroot -p mydb -t > /data/bak/mydb.sql 导出多个db结构和数据(--databases参数,数据,结构单独导出方法同上)mysqldump -uroot -p --databases db1 db2 > /data/bak/muldbs.sql2. 表级
导出指定db某张表(test)结构及数据(数据,结构单独备份方法同上)mysqldump -uroot -p dbname test > db.sql 导出指定db中多张表(test1,test2,test3)结构及数据mysqldump -uroot -p dbname test1 test2 test3 > db.sq
3. 主要导出参数
- --all-databases, -A:备份所有数据库
- --databases, -B:备份多个数据库。不使用该选项时,mysqldump把第一个名字参数作为db名,后面的作为表名;使用该选项时,则把每个名字都当作为db名。
- default-character-set:指定默认字符集,不指定默认为UTF-8
- --force, -f:即使发现sql错误,仍然继续备份
- --no-data, -d:只导出表结构
- --port=port_num, -P port_num:连接端口号
- --quick, -q:强制mysqldump从服务器每次查询一行数据而不是查询整个表。避免大表导出时查询刷爆内存,同时还导致热点数据被刷出缓冲池。通常建议总是启用该选项。
- --tables:覆盖 --databases or -B选项,后面所跟参数被视作表名
- --tab=path(-T path):产生TAB分割的数据文件,为每张表建一个包含create table语句的tabname.sql和一个包含数据的tabname.txt文件
- --xml, -X:导出为xml文件
- --single-transaction:导出开始前先执行start transaction命令,导出时不锁表,仅支持InnoDB存储引擎,需要确保导出时无DDL操作
- --lock-tables(-l):导出过程中依次锁住每个schema下所有表(只能保证各schema下表导出的一致性),被锁的表只能读,MyISAM存储引擎常用
- --lock-all-tables(-x):导出过程中锁住所有schema下所有表,避免前面参数无法保证所有schema下表导出的一致性的问题,但是所有表都变为只读
- --master-data=[value] 主要用于建从库。value=1时,dump文件包含change master语句,导入时自动执行;value=2时,change master语句被注释,需手动执行。--master-data会忽略--lock-tables选项,如果不加--single-transaction选项会自动使用--lock-all-tables
- --where:指定导出条件
- --events(-E):导出事件调度器
- --routines(-R):导出存储过程和函数
- --triggers:导出触发器
- --hex-blob:将binary,varbinary,blog,bit列类型导出为16进制格式
二、 导入
导入用户需要有执行备份文件中语句的权限(ddl、dml等)。1. 常用导入方法
- 系统命令行方法
- mysql命令行source方法
2. 导入示例
导入所有数据库- mysql命令行:mysql>source /data/bak/all.sql
- 系统命令行:mysql -uroot -p123456
- mysql命令行:
- 系统命令行:
- mysql命令行:
- 系统命令行:
- mysql命令行:
- 系统命令行: