上篇文章我们一起学习了Xtrabackup的备份原理和使用方法,今天一起聊下mysqldump的使用。mysqldump是MySQL数据库自带的一个备份命令,它支持数据库全备也可以指定库进行备份,它备份的文件以SQL语句的形式存储。它在备份时会先从buffer中寻找需要备份的数据,如果buffer中没有就要去磁盘查找并调回buffer里面在进行备份。
1. mysqldump参数
下面我们介绍几个mysqldump的核心参数,
1. --single-transaction:用于保证innodb备份数据时的一致性,配合RR隔离级别一起使用,当发起一个事务时,会读取当前的数据快照,知道备份结束,都不会读取到本事务开始之后提交的数据。
2. --all-databases(-A):备份所有数据库。
3. --master-data:该参数为1时,表示备份出来的文件中添加一个CHANGE MASTER语句,该值为2时,表示会在CHANGE MASTER命令前端增加注释信息。
4. --database(-B):备份多个数据库。
5. --no-create-info(-t):备份过程中,只备份数据,不备份表结构。
6. --no-data(-d):备份过程中,只备份表结构,不备份表数据。
7. --dump-slave:该参数用于在从库端备份,在线搭建新的从库时使用。该参数也有两个值1和2,该参数为1时,表示备份出来的文件中添加一个CHANGE MASTER语句,该值为2时,表示会在CHANGE MASTER命令前端增加注释信息。
8. --add-drop-database:在CREATE DATABASE语句前添加DROP DATABASE语句。
9. --add-drop-table:在CREATE TABLE语句前添加DROP TABLE。
10. --complete-insert(-c):使用包括列名的完整的INNSERT语句。
11. --flush-log(-F):开始转储前刷新MySQL的日志。该选项要求RELOAD权限。
12. --default-character-set:字符集选项,MySQL目前默认的字符集是UTF-8(MySQL8.0默认 utf8mb4),要与备份出来的表的字符集保持一致。
13. --quick(-q):不缓冲查询,直接输出到stdout。
14. --where=name(-w):按条件备份想要的数据。
2. mysqldump备份演示
(1) 备份所有数据库:
代码语言:javascript复制shell> mysqldump -uuser_name -p --single-transaction --all-databases > all.sql
(2) 备份数据库 test:
代码语言:javascript复制shell> mysqldump -uuser_name -p --single-transaction test > test.sql
(3) 备份数据库 test 下的表 emp:
代码语言:javascript复制shell>mysqldump -uuser_name -p --single-transaction test emp > emp.sql
(4) 备份存储过程
代码语言:javascript复制shell>mysqldump -uuser_name -p -R -d -t database_name>triggers.sql
(5) 只导出数据库结构
代码语言:javascript复制shell>mysqldump -uuser_name -p -d database_name > outfile.sql
(6) 备份后压缩
代码语言:javascript复制shell> mysqldump -uuser_name -p --single-transaction --all-databases|gzip >all.gz
(7) 备份test数据库t表中id>3的记录
代码语言:javascript复制shell> mysqldump -uuser_name -p --single-transaction test t –where=”id>3” > test.sql
3. 数据恢复
mysqldump工具备份的数据可以通过以下方式恢复。
1. 使用mysql命令还原
代码语言:javascript复制mysql –uuser_name –p dbname <outfile.sql
其中dbname是数据库名,outfile.sql是我们用mysqldump命令备份出来的文件。
2. 通过source命令还原
首先要登录到mysql服务器,选择要恢复的数据库,然后执行source命令。
代码语言:javascript复制Mysql>use dbname
Mysql>source outfile.sql
4. 小结
mysqldump速度较慢,针对数据不是太大的库或者表可以选择采用mysqldump的方式备份,如果数据量比较大建议采用Xtrabackup等物理备份方式。mysqldump备份时会从磁盘读取数据到buffer中,占用内存及磁盘I/O,不建议日间业务高峰期进行此操作。