MySQL的备份策略
1.全备
2.增备
3.差异备份
1.备份的类型:
1.冷备
停库,停服务,备份
? 这些备份在用户不能访问数据时进行,因此无法读取或修改数据。这些脱机备份会阻止执行任何使用数据的活动。这些类型的备份不会干扰正常运行的系统的性能。但是,对于某些应用程序,会无法接受必须在一段较长的时间里锁定或完全阻止用户访问数据。
2.热备
不停库,不停服务,备份,也不会(锁表)阻止用户的写入
? 这些动态备份在读取或修改数据的过程中进行,很少中断或者不中断传输或处理数据的功能。使用热备份时,系统仍可供读取和修改数据的操作访问。
3.温备
不停库,不停服务,备份,会(锁表)阻止用户的写入
? 这些备份在读取数据时进行,但在多数情况下,在进行备份时不能修改数据本身。这种中途备份类型的优点是不必完全锁定最终用户。但是,其不足之处在于无法在进行备份时修改数据集,这可能使这种类型的备份不适用于某些应用程序。在备份过程中无法修改数据可能产生性能问题。
MySQL备份方式:
1.逻辑备份
? binlog
? into outfile
? mysqldump
? replication
? mysqlbinlog
2.物理备份(数据文件的二进制副本)
? Xtrabackup
备份工具:
? 1.mysqldump: mysql原生自带很好用的逻辑备份工具
? 2.mysqlbinlog: 实现binlog备份的原生态命令
? 3. Xtrabackup: precona公司开发的性能很高的物理备份工具
其他常用的备份方式:
全量备份:
? 全量数据就是数据库中所有的数据(或某一个库的全部数据);
全量备份就是把数据库中所有的数据进行备份。
mysqldump会取得一个时刻的一致性数据.
增量备份 (刷新二进制日志)
? 增量数据就是指上一次全量备份数据之后到下一次全备之前数据库所更新的数据
对于mysqldump,binlog就是增量数据.
差异备份
? 备份自从上一次完全备份后的全部改动和新文件
? 备份速度较快,恢复速度较快,空间要求较多
? 能够更快且简单的恢复(相比较增量)
? 需要最近一次完全备份和最后一次差异备份就嫩恶搞恢复
mysqldump:
#备份全库
-A:--all-databases 全库备份
mysqldump -A
#备份多个库
-B:--databases 指定库备份 只能指定数据库
mysqldump -B zls world db1
--triggers 备份触发器数据
#备份user表
单表备份:mysqldump mysql user
-F,--fiush-logs:备份的同时刷新binlog
刷新binlog日志,#每个库都会刷新一次
--master-data=N (温备)
N={0,1,2}
2:打点备份,注释
1:打点备份,不注释
0:不打点备份...关闭
--single-transaction 对innodb引擎进行热备
-x,--lock-all-tables 锁定所有数据库的所有表,这是通过在整个转储期间采用全局读锁来实现的。
-l,--lock-tables 锁定所有表以供读取
-d 仅表结构
-t 仅数据
--compact 减少无用数据输出(调试)
一个完整的备份语句(全备):
mysqldump -uroot -p -A -R --triggers --master-data=2 --single-transaction |gzip > /tmp/full$(date +%F).sql.gz ##全备
#gtid模式备份
mysqldump -uroot -p -A -R --triggers --master-data=2 --single-transaction --set-gtid-purged=OFF |gzip > /tmp/full$(date +%F).sql.gz
--single-transaction:快照备份(热备)
对innodb引擎进行热备
只支持innodb引擎
? 使用该参数会单独开启一个事务进行备份,利用事务的快照技术实现.
基于事务引擎:不用锁表就可以获得一致性的备份.
提现了ACID四大特性中的隔离性.生产中99%使用innodb事务引擎.
虽然支持热备,但并不是说可以任意时间进行备份.特别是白天业务繁忙的时间,不要做备份策略,一般我们 是在夜里进行备份.
+------------------+----------+
| File | Position |
+------------------+----------+
| mysql-bin.000017 | 120 |
+------------------+----------+
-d:备份表结构
-t:备份数据
?
? -R:备份函数,存储过程
?
--triggers:备份触发器
----------------------------------------------------------------
gzip:压缩
mysqldump -A -R --triggers --master-data=2 --single-transaction
?
[root@db02 tmp]# mysqldump -A -R --triggers --master-data=2 --single-transaction|gzip > /tmp/full$(date +%F).sql.gz
mysql -urep -p‘密码‘ -h192.168.1.2 -P 3306
解压备份:
gzip -d full$(date +%F).sql.gz #此解压会删除原压缩包
gunzip full$(date +%F).sql.gz #解压
zcat full$(date +%F).sql.gz > full$(date +%F).sql
适合多引擎混合(例如:myisam与innodb混合)的备份命令如下:
mysqldump -A -R --triggers --master-data=2 |gzip > /tmp/full$(date +%F).sql.gz
MySQL物理备份:Xtrabackup
? 1)对于非innodb表(比如myisam)是直接锁表cp数据文件,属于一种温备。
? 2)对于innodb的表(支持事务),不锁表,cp数据页最终以数据文件方式保存下来,并且把redo和undo一并备走,属于热备方式。
? 3)备份时读取配置文件/etc/my.cnf
[root@db01 ~]# yum localinstall -y percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
不加时间戳,全备
[root@db01 full]# innobackupex --user=root --no-timestamp /backup/full
190720 01:41:57 completed OK!