13.MySQL备份恢复管理
孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。
1.备份的作用
处理数据库损坏。
损坏分类
物理:磁盘、文件系统、数据文件。处理方案:主从、高可用、备份+日志。
逻辑: drop truncate delete update。处理方案:备份+日志、延时从。
2.备份工具
逻辑备份: mysqldump(MDP)、binlog 、主从..
物理备份:Percona xtrabackup(PXB\XBK\Xbakcup)
3.DBA在备份恢复工作职责
a.设计备份策略:备份周期、备份工具、备份方式(全备、增量..)
b.定期备份检查。
c.定期恢复演练。
d.数据恢复。
e.数据的迁移升级。
4.mysqldump应用
1.介绍
逻辑备份工具。文本形式保存备份,可读性较强。
备份逻辑:将建库、建表、数据插入语句导出,保存至一个sql文件中。
比较适合于:数据量较小的场景,单表数据行百万级别以内。跨版本、跨平台迁移。
可以本地、可以远程备份。
注意:一般情况下,恢复需要耗费的时间是备份耗费时间的3-5倍。
2.使用
2.1 连接参数
mysqldump -u -p -s -h -P
2.2备份基础参数
-A全备
[root@db01 ~]# mysqldump -uroot -p123 -A >/data/backup/full.sql
-B单库或多库备份
[root@db01 ~]# mysqldump -uroot -p123 -B test world >/data/backup/db. sql
单表或多表备份
[root@db01 ~]# mysqldump -uroot -p123 world city country >/data/backup/tb. sql
注意:
-A和-B都带有了create database 和use语句,直接恢复即可
单表或多表备份方式,没有 create database和use 语句,所以要手工进行建库和use,再恢复数据。
2.3高级功能参数
全备+binlog恢复数据时,binlog截取的起点问题?
参数一: --master-data=2
a.自动记录binlog位置点
b.自动加GRL锁(FTWLRL,flush tables with read lock)
c.配合--single-transaction,减少锁的时间
参数二:--single-transaction
a.对于InnoDB表,利用MVCC中一致性快照进行备份。备份数据时,不加锁
b.备粉期间如果出现DDL操作,导致备份数据不一致
问题: mysqldump是严格意义上的热备吗?
8.0之后 master-data和single-transaction,对于InnoDB数据备份时是快照备份的.备份表结构等数据时,还是FTMRL过程备份.
--single-transaction只是针对InnoDB表数据进行一致性快照备份。
问题:mysqldump各份需要锁表吗?
是有的-global read lock.
参数三: -R -E --triggers 备份特殊对象
存储过程 函数 触发器 事件等的备份
参数四:--max_allowed_packet=6M
最大允许数据包的大小。
2.4标准化备份
mysqldump -uroot -p -A --master-data --single-transaction -R -E --triggers --max_allowed_packet=64M > /data/backup/full_`data +%F`.sql
2.5案例:通过mysqldump全备+binlog实现PIT数据恢复
环境背景:小型的业务数据库,50G,每天23:00全备,定期binlog异地备份。
故障场景:周三下午2点,开发Navicat连接数据库实例错误,导致生产数据被误删除(DROP)
恢复思路:
1.挂维护页
2.检查备份、日志可用。
3.如果只是部分损坏,建议找一个应急库进行恢复
a.全备恢复
b.日志截取并恢复
4.恢复后教据校验(业务测试部门验证)
5.立即备份(停机冷备)
6.恢复架构系统
7.撤维护页,恢复业务
模拟环境
mysql> create database mdb;
Query OK, 1 row affected (0.01 sec)
mysql> use mdb
Database changed
mysql> create table t1 (id int);
Query OK, 0 rows affected (0.01 sec)
mysql> create table t2 (id int);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values(1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> commit;
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t2 values(1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
[root@db01 ~]# mysqldump -uroot -A --master-data=2 --single-transaction -R -E --triggers --max_allowed_packet=64M > /data/full_`date +%F`.sql
mysql> create table t3 (id int);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t3 values(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> commit;
Query OK, 0 rows affected (0.01 sec)
mysql> drop database mdb;
Query OK, 3 rows affected (0.02 sec)
恢复过程:
a.查看备份,获取二进制日志位置点
[root@db01 ~]# grep -Ei "master_log_file='binlog" /data/full_2022-03-29.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000012', MASTER_LOG_POS=1274;
b.恢复全备
mysql> source /data/full_2022-03-29.sql;
c.查看事件起点
mysql> show binlog events in 'binlog.000012';
d.截取binlog日志
[root@db01 ~]# mysqlbinlog --start-position=1274 --stop-position=1742 /data/3316/data/binlog.000012 > /tmp/bin.sql
e.导入数据
mysql> source /tmp/bin.sql;
5.Percona xtrabackup应用
1.介绍
物理备份工具,支持全各和增量备份
备份逻辑:
a.数据库运行期间,拷贝数据文件.
b.拷贝的同时,会将备份期间的redo进行备份
恢复逻辑:
模拟了InnoDB Crash Recovery 功能,需要要将备份进行处理(前滚和回滚〉后才能恢复
2.安装
yum install percona-xtrabackup*.rpm
注意:
对于NySQL 8.0.20版本,需要使用PXB 8.0.12+以上版本,MysQL: 8.0.11 ~8.0.19使用PXB 8.0正式版本。MySQL
8.0之前(5.6,5.7 )的版本:PXB 2.4
3.全量备份
1.全量备份
[root@db01 bin]# ./xtrabackup --defaults-file=/etc/my.cnf --host=localhost --user=root --port=3306 --password="" --backup --target-dir=/data/backup/full
2.数据恢复
搞破坏:
[root@db01 ~]# rm -rf /data/3316/data/*
准备恢复
[root@db01 bin]# ./xtrabackup --prepare --target-dir=/data/backup/full
说明:模拟CR过程,将redo前滚,undo回滚,让备份数据是一致状态
拷贝数据
[root@db01 bin]# ./xtrabackup --copy-back --target-dir=/data/backup/full
修改权限并重启数据库
[root@db01 bin]# chown -R mysql. /data/3316/
[root@db01 bin]# systemctl start mysql
4.增量备份
1 介绍
增量备份,是基于上一次备份LSN变化过的数据页进行备份,在备份同时产生的新变勇,会将redo备份.
第一次增量是依赖于全备的。将来的恢复也要合并到全备中,再进行统一恢复。
2 增量备份演练
全量备份的目录为:mkdir -p /data/backup/full
增量备份的目录为:mkdir -p /data/backup/inc
2.1.备份操作:
2.1.1.全量备份:
[root@db01 bin]# ./xtrabackup --defaults-file=/etc/my.cnf --host=localhost --user=root --port=3306 --password="" --backup --target-dir=/data/backup/full
mysql> create database pxb;
Query OK, 1 row affected (0.01 sec)
mysql> use pxb
Database changed
mysql> create table t1 (id int);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values(1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
2.1.2.增量备份:
[root@db01 bin]# ./xtrabackup --defaults-file=/etc/my.cnf --host=localhost --user=root --port=3306 --password="" --backup --parallel=4 --target-dir=/data/backup/inc --incremental-basedir=/data/backup/full
2.1.3.搞破坏:
[root@db01 ~]# rm -rf /data/3316/data/*
2.2.恢复操作:
2.2.1准备全备份的日志
[root@db01 bin]# ./xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full
2.2.2准备增量备份的日志
[root@db01 bin]# ./xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full --incremental-dir=/data/backup/inc
2.2.3全备份准备
[root@db01 bin]# ./xtrabackup --prepare --target-dir=/data/backup/full
2.2.4拷贝数据
[root@db01 bin]# ./xtrabackup --copy-back --target-dir=/data/backup/full
2.2.5修改权限属性,重启
[root@db01 ~]# chown -R mysql. /data/3316/data/
[root@db01 ~]# systemctl restart mysql.service
未经允许不得转载:孙某某的运维之路 » 13.MySQL备份恢复管理
评论已关闭