MySQL-使用Percona进行备份与恢复

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: MySQL 使用Percona进行备份与恢复


一、安装Percona

1.1. 安装依赖包

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
1.2. Percona官网下载软件并安装

二、Percona介绍

Percona是物理备份工具,拷贝数据文件,比mysqldump快很多;原生态支持全备和增量。

2.1 InooDB表:

热备份:业务正常发生的时候可以进行备份,影响比较小的备份方式;

    1. checkpoint:将已提交数据页刷新到磁盘,会记录一个LSN号;

    2. 拷贝InnoDB表相关的文件(ibdata,frm,ibd);

    3. 如果备份期间产生的新的数据变化,redo也会备份走。

2.2 非InnoDB表:

温备份:锁表备份(全局锁)。

    1. FTWRL,触发全局锁;

    2. 拷贝非InnoDB的数据;

    3. 解锁;

2.3 统计LSN号码,写入到专用文件,记录二进制日志位置进行保存。

2.4 所有的备份文件统一存放在一个目录下

三、 XBK应用-全备和恢复

3.1 前提

1. 数据库必须启动;

2. 能连上数据库;

        配置文件my.cnf中指定socket,需要在配置文件中加入,    

[client]
socket=/tmp/mysql.sock

3. 默认会读取[mysqld]----> datadir= xxxxxxx

4. 服务器端工具,不能远程备份;

3.2 使用-全备

innobackupex --user=root --password=123 /data/xbk

innobackupex --user=root --password=123 --no-timestamp /data/xbk/full_'date +%F' ##控制输出文件夹名字

3.3 备份结果查看

需要着重关注:
  1. xtrabackup_binlog_info(记录备份后binlog为位置信息,方便做binglog截取位置点),

    1. xtrabackup_checkpoints(备份过程中的LSN记录,方便做增量备份)

3.4 全备恢复演练

1. 破坏

pkill mysqld
rm -rf /data/3306/* #破坏

2. 备份处理:

    prepare(在恢复之前都要进行prepare, 原理:redo前滚,undo后滚,模仿CSR(自动故障恢复)过程,)

innobakupex --apply-log /data/xbk/full_2021-03-31/

3. 数据恢复:

cp -a /data/xbk/full_2021-03-31/* /data/3306/

4. 授权:

chown -R mysql.mysql /data/*

5. 启动数据库

/etc/init.d/mysqld start

四、 xbk的增量备份

4.1 说明:

备份时:

    1. 增量必须依赖全备;

    2. 每次增量都要参照上次备份的LSN号码,在此基础上变化的数据页,备份走;并且,会将备份过程中产生新的变化的redo一并备份走。

恢复时:

     需要将所有需要的INC备份(增量备份)按顺序合并到全备中,并且需要将每个备份进行prepare 

4.2 增量备份演练

1. 创建环境

create database xbk charset unf8mb4;
use xbk;
create table t1(id int);
insert into t1 values(1),(2),(3);
commit;
4.2 模拟周日全备

innobackupex --user=root -password=123 --no-timestamp /data/backup/full
4.3 模拟周一的数据变化

use xbk;
create table t2(id int);
insert into t2 values(1),(2),(3);
commit;
4.4 模拟周一晚上增量备份inc1

innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/data/backup/full /data/back/inc1
参数:

--incremental: 增量备份开关;

--incremental-basedir: 增量备份基目录,上次备份的路径;

4.5 模拟周二的数据变化

use xbk;
create table t3(id, int);
insert into t3 values(1),(2),(3);
commit;
4.6 模拟周二晚上增量备份inc2

innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/data/backup/inc1 /data/back/inc2
4.7 模拟周三数据变化

use xbk;
create table t4(id, int);
insert into t4 values(1),(2),(3);
commit;
4.8 周三10点搞破坏

pkill mysqld
rm -rf /data/3306/*
4.9 确认备份完整性

检查checkpoint,增量备份的from_lsn= 基文件的last_lsn- 9(内置原因);则说明是完整的。

4.10 xbk full+ inc+ binlog备份恢复

    a. 恢复思路

     ​1.合并整理(prepare)所有inc备份到全备,

     ​2.恢复数据,启动数据库,

     ​3.截取而二进制日志,

     ​4.恢复日志;

​    ​b. 恢复过程

​1. 合并,prepare所有inc备份到全备

innobackupex --apply-log --redo-only /data/backup/full #基础全备的整理,
​2. 合并,prepare inc2到full

innobackupex --apply-log --redo-only --incremental-dir=/data/backup/inc1 /data/backup/full
​3. 合并,prepare inc2到full,检查checkpoint是否对的上

innobackupex --apply-log --incremental-dir=/data/backup/inc2 /data/backup/full
​4. 整体再整理一次(prepare)

innobackupex --apply-log /data/backup/full
​5. 恢复1:修改mysql 数据路径 -修复数据至周二晚上

chown -R mysql.mysql /data/backup/full #
更改配置文件my.cnf中data路径 datadir=/data/backup/full

重启数据库

​6. 截取日志恢复

起点:/data/backup/inc2/xtrabackup_binlog_info

终点:文件末尾

mysqlbinlog --skip-gtids --start-position=1629 /data/binlog/mysql-bin.000020 /data/binlog/mysql-bin.000021> tmp/bin.sql

  1. 恢复截取文件

mysql -uroot -p
set sql_log_bin=0;
source tmp/bin.sql;
set sql_log_bin=1;

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
存储 关系型数据库 MySQL
mysql数据库备份与恢复
MySQL数据库的备份与恢复是确保数据安全性和业务连续性的关键操作。
75 4
|
8天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
27 3
|
8天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
22 3
|
1月前
|
安全 关系型数据库 MySQL
MySQL用户备份
【10月更文挑战第2天】MySQL用户备份
53 3
|
1月前
|
存储 关系型数据库 MySQL
MySQL如何备份?
【10月更文挑战第2天】MySQL如何备份?
94 3
|
2月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
55 2
zabbix agent集成percona监控MySQL的插件实战案例
|
3月前
|
SQL 关系型数据库 MySQL
在Linux中,如何备份和恢复MySQL数据库?
在Linux中,如何备份和恢复MySQL数据库?
|
3月前
|
SQL 数据可视化 关系型数据库
MySQL 备份可视化巡检系统
MySQL 备份可视化巡检系统
|
3月前
|
存储 关系型数据库 MySQL
MySQL备份与恢复
MySQL备份与恢复
59 0
|
3月前
|
关系型数据库 MySQL Shell
分享一篇mysql数据库备份脚本
分享一篇mysql数据库备份脚本
32 0