命令记不住

登陆

Mysql 的备份

Mysql的备份

1.备份类型

  • 热备
    在数据库正常业务是,备份数据,并且能够一致性恢复(只能是innodb)
  • 温备
    锁表备份,只能查询不能修改(myisam)
  • 冷备
    关闭数据库业务,数据库没有任何变更的情况下,进行备份数据.

2.备份方式及工具介绍

2.1逻辑备份工具:基于SQL语句进行备份

mysqldump       *****
mysqlbinlog     *****

2.2物理备份工具:基于磁盘数据文件备份

xtrabackup(XBK) :percona 第三方   *****
MySQL Enterprise Backup(MEB)

3.逻辑备份和物理备份的比较

3.1 mysqldump -----自带的逻辑备份工具
优点:

1.不需要下载安装
2.备份出来的是SQL,文本格式,可读性高,便于备份处理
3.压缩比较高,节省备份的磁盘空间

缺点:

1..依赖于数据库引擎,需要从磁盘把数据读出,
然后转换成SQL进行转储,比较耗费资源,数据量大的话效率较低

建议:

100G以内的数据量级,可以使用mysqldump
超过TB以上,我们也可能选择的是mysqldump,配合分布式的系统

3.2 xtrabackup(XBK)--第三方物理备份工具
优点:

1.类似于直接cp数据文件,不需要管逻辑结构,相对来说性能较高

缺点:

1..可读性差
2.压缩比低,需要更多磁盘空间

建议:

4.备份策略

4.1全备:全库备份,备份所有数据
4.2增量:备份变化的数据

逻辑备份=mysqldump+mysqlbinlog
物理备份=xtrabackup

4.3备份周期:根据数据量设计备份周期

比如:周日全备,周1-周6增量

5.备份工具使用

5.1 mysqldump (逻辑备份的客户端工具)
5.1.1 客户端通用参数

-u  -p   -S   -h  -P  

mysqldump -uroot -p 

5.1.2 备份专用基本参数

[1] -A 全备参数

例子1--全备:
mkdir /backup
mysqldump -uroot -p -A >/backup/full.sql
Enter password: 

[2] -B db1 db2 db3 备份多个单库

例子2--单库或多库备份,比较适合于做跨版本的迁移,只备份生产库

mysqldump -uroot -p -B oldboy world >/backup/bak.sql

[3] 备份单个或多个表

例子3--world数据库下的city,country表
mysqldump -uroot -p world city country >/backup/bak1.sql

以上备份恢复时:必须库事先存在,并且ues才能source恢复

注意:

1.mysqldump -uroot -p -B world >/backup/oldboy.sql

2. mysqldump -uroot -p  world  >/backup/oldboy1.sql

以上两个语句都是可以备份world数据库下所有表
-B添加了会生成建库语句

create database  和 use

结论:和库有关的备份增加参数 -B

[4] 特殊参数使用(必须要加)

-R          备份存储过程及函数
--triggers  备份触发器

例子4

mysqldump -uroot -p  -A  -R --triggers  >/backup/full.sql

[5] 特殊参数-F使用

每天晚上12点全备
上午10点钟,数据库被误删除了
二进制日志截取将成为我们比较棘手的问题
起点:怎么办
终点:好找

-F  在备份开始时,刷新一个新binlog日志

例子5:

mysqldump -uroot -p  -A  -R --triggers -F >/bak/full.sql

[6] --master-data=2

以注释的形式,保存备份开始时间点的binlog的状态信息

mysqldump -uroot -p  -A  -R --triggers --master-data=2   >/bak/full.sql
  • 0 默认值
  • 1 以change master to命令形式,可以用作主从复制
  • 2 以注释的形式记录,备份时刻的文件名+postion号

master-data可以自动加锁

1.在不加--single-transaction ,启动所有表的温备份,所有表都锁定
2.加上--single-transaction ,对innodb可以不锁表热备,对非innodb表可以实现自动锁表功能

6.备份必加参数

mysqldump -uroot -p  -A  -R --triggers --master-data=2 --single-transaction  >/backup/full.sql

功能:

  • (1) 以注释的形式,保存备份开始时间点的binlog的状态信息
  • (2) 对innodb可以不锁表热备
  • (3) 对非innodb表可以实现自动锁表功能

注意:什么时候使用--set-gtid-purged=OFF参数

[root@db01 home]#mysqldump -uroot -p123 -A > /backup/full.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events. 

1.常规备份是要加 --set-gtid-purged=OFF参数
2.构建主从时,做的备份,不需要加这个参数--set-gtid-purged=OFF

7.创建新表的方式备份表

create table $name as select * from 表名
推荐阅读