1)备份原理
mysqldump是mysql自带命令工具,是最基础的一款备份工具。它的备份过程就是从buffer中找到要备份的数据,如果buffer中没有,就要去磁盘中的数据文件中查找并调回到buffer里面再备份,最后形成一个可编辑的备份文件。
2)几个核心参数
1> --single-transaction
用于保证InnoDB备份数据的一致性,配合RR隔离级别一起使用。
2> --all-databases (-A)
备份所有数据库
3> --master-data
1和2两个值,1代表备份出来的文件添加一个CHNAGE MASTER的语句(后期配置搭建主从架构);如果等于2,就会在备份出来的文件添加一个CHNAGE MASTER的语句,并在语句前增加注释符号。
4> --dump-slave
用于库端备份数据,在线搭建新的从库使用。也有1和2两个值。1代表备份出来的文件添加一个CHNAGE MASTER的语句;2则会在命令前加注释信息。
5> --no-create-info (-t)
只备份表数据,不备份表数据
6> --no-data (-d)
只备份表结构,不备份表数据
7> --complete-insert (-c)
使用完整的insert语句会包含表中的列信息,这么做可以提供插入效率
8> --databases (-B)
备份过个数据库,如:mysqldump -uroot -p123 --databases db1 db2
9> --default-character-set
字符集,MySQL目前默认UTF-8,要与备份出表的字符集一致
10> --quick (-q)
相当于加sql_no_query, 意味着并不会读取缓存中的数据
11> --where=name (-w)
按条件备份出想要的数据
3)常用备份方式举例
1> 备份全库
mysqldump --single-transaction -uroot -p123 -A >all_20190524.sql
// 备份过程中不想带gtid信息,可以加上--set-gtid-purged=OFF
2> 恢复全库,使用mysql客户端工具进行
mysql -uroot -p123 <all_20190524.sql
3> 备份单个全库
mysqldump --single-transaction -uroot -p123 db1 >db1_20190524.sql
4> 恢复单个库
mysql -uroot -p123 db1 <db1_20190524.sql
// 如果db1存在则直接恢复,如果db1被drop掉,需要新建一个,然后恢复!
// create database db1;
5> 备份单个表
mysqldump --single-transaction -uroot -p123 db1 t1 >db1_t1_20190524.sql
6> 恢复单表
mysql -uroot -p123 db1 <db1_t1_20190524.sql
// 不需要写表明,只写库名就可以了
7> 备份单个表表结构
mysqldump --single-transaction -uroot -p123 db1 t1 -d >db1_t1_20190524.sql
8> 备份单个表数据
mysqldump --single-transaction -uroot -p123 db1 t1 -t >db1_t1_20190524.sql
9> 备份单个表id>3的记录
mysqldump --single-transaction -uroot -p123 db1 t1 --where="id>3">db1_t1_20190524.sql
4) 缺点
使用mysqldump时,可能对数据库带来性能抖动,因为如果要备份的数据如果不在buffer中需要从数据文件中读取到buffer,这样会使用使用的业务热点数据被冲掉,影响现有业务运行。
MySQL5.7后新增了一个innodb_buffer_pool_dump_pct,控制器使用innodb buffer page的比例,只有1s内再次访问才放到热区域内,防止数据被冲走。默认值:25%。