天天看点

3、mysql热备--逻辑备份之mysqldump的备份与恢复

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%。

继续阅读