XtraBackup实现MySQL数据库全量+增量+Binlog恢复库

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述XtraBackup实现MySQL数据库全量+增量+Binlog恢复库相关的知识,希望能为你提供帮助。
2.XtraBackup实现全量+增量+Binlog恢复库2.1XtraBackup概述
2.1.1XtraBackup介绍Percona XtraBackup是一款基于mysql的服务器的开源热备份实用程序,备份时不影响数据库的正常读写,它可以备份MySQL5.1,5.5,5.6,5.7,8.0服务器上的InnoDB,XtraDB和MyISAM表的数据,以及带有XtraDB的Percona服务器。
?xtrabackup功能:?

  • 在不暂停数据库的情况下创建热的InnoDB备份
  • 进行MySQL的增量备份
  • 将压缩的MySQL备份传输到另一台服务器
  • 在MySQL服务器之间移动表格
  • 轻松创建新的MySQL复制从站
  • 在不增加服务器负载的情况下备份MySQL
?xtrabackup 特点:?
  • 备份还原过程快速、可靠
  • 备份过程不会打断正在执行的事务
  • 能够基于压缩等功能节约磁盘空间和流量
  • 自动实现备份检验
  • 还原速度快
  • 开源,免费
?xtrabackup 资源:?
手册:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html
下载: https://www.percona.com/downloads/
2.1.2XtraBackup使用相关技术点?xtrabackup工具文件组成?
Xtrabackup2.2 版之前包括4个可执行文件:
  • innobackupex: Perl 脚本
  • xtrabackup: C/C++,编译的二进制程序
  • xbcrypt: 加解密
  • xbstream: 支持并发写的流文件格式
说明:xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 MySQL Server 没有交互
innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和
MySQL Server 发送命令进行交互,如加全局读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)
等。即innobackupex是在 xtrabackup 之上做了一层封装实现的。
?xtrabackup的新版变化?
XtraBackup版本比较多,选用要多加注意,否则备份或者恢复过程中会报错。XtraBackup版本升级到2.4后,相比之前的2.1有了比较大的变化:nnobackupex 功能全部集成到xtrabackup 里面,只有一个 binary程序,另外为了兼容考虑,innobackupex作为 xtrabackup 的软链接,即xtrabackup现在支持非Innodb表备份,并且 Innobackupex 在下一版本中移除,建议通过xtrabackup替换innobackupex。
?xtrabackup备份过程?
![PXB备份过程](马哥SRE第12周作业.assets/PXB-backup-procedure.png)
【XtraBackup实现MySQL数据库全量+增量+Binlog恢复库】?备份生成的相关文件?
使用innobackupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中,在备份时,innobackupex还会在备
份目录中创建如下文件:
  • xtrabackup_info:文本文件,innobackupex工具执行时的相关信息,包括版本,备份选项,备份时长,备份LSN(log sequence number日志序列号),BINLOG的位置。
  • xtrabackup_checkpoints:文本文件,备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序列号LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
  • xtrabackup_binlog_info:文本文件,MySQL服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置,可利用实现基于binlog的恢复。
  • backup-my.cnf:文本文件,备份命令用到的配置选项信息
  • xtrabackup_logfile:备份生成的二进制日志文件
2.2XtraBackup实现全量备份和恢复
2.2.1架构图及环境说明
两台服务器
1源服务器:
MySQLPri
CentOS 8.4
IP: 192.168.250.58/24
MySQL 8.0.26
percona-xtrabackup-80-8.0.27-19.1.el8.x86_64

2目标服务器:
MySQL-Bak
CentOS 8.4
IP: 192.168.250.68/24
MySQL 8.0.26
percona-xtrabackup-80-8.0.27-19.1.el8.x86_64

# 基本思路:在源服务器上完成数据库文件备份,传到目标服务器上,在目标服务器上恢复好数据库,确保恢复出来的目标服务器与源服务器的数据一致。在生产中可以用来实现迁移数据库服务器和定时备份数据库。

2.2.2源服务器和目标服务器准备准备工作包括:主机名修改、关闭防火墙和SELinux、同步时间、安装好MySQL 8.0.26 数据库
2.2.2.1源服务器
[root@CentOS84 ]#hostnamectl set-hostname MySQLPri
[root@CentOS84 ]#hostname
MySQLPri
[root@CentOS84 ]#exit
[root@MySQLPri ]#
[root@MySQLPri ]#hostname -I
192.168.250.58
[root@MySQLPri ]#getenforce
Disabled
[root@MySQLPri ]#systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@MySQLPri ]#systemctl enable --nowchronyd.service
Created symlink /etc/systemd/system/multi-user.target.wants/chronyd.service → /usr/lib/systemd/system/chronyd.service.
[root@MySQLPri ]#date
Fri Feb 25 14:09:42 CST 2022
[root@MySQLPri ]#
[root@MySQLPri ]#pwd
/root

# 下载数据库yum源rpm包,并更新本机的yum源配置,再安装 MySQL 8.0.26
[root@MySQLPri ]#wget https://repo.mysql.com//mysql80-community-release-el8-1.noarch.rpm
--2022-02-25 15:29:12--https://repo.mysql.com//mysql80-community-release-el8-1.noarch.rpm
Resolving repo.mysql.com (repo.mysql.com)... 23.12.149.85
Connecting to repo.mysql.com (repo.mysql.com)|23.12.149.85|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 30388 (30K) [application/x-redhat-package-manager]
Saving to: ‘mysql80-community-release-el8-1.noarch.rpm’

mysql80-community-release-el8-1.noarch 100%[==========================================================================> ]29.68K113KB/sin 0.3s

2022-02-25 15:29:14 (113 KB/s) - ‘mysql80-community-release-el8-1.noarch.rpm’ saved [30388/30388]

[root@MySQLPri ]#rpm -ivh mysql80-community-release-el8-1.noarch.rpm
warning: mysql80-community-release-el8-1.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Verifying...################################# [100%]
Preparing...################################# [100%]
Updating / installing...
1:mysql80-community-release-el8-1################################# [100%]

# 此步骤开始 yum 在线安装 MySQL 8.0.26数据库
[root@MySQLPri ]#yum install mysql-server

# 查看监听端口
[root@MySQLPri ]#ss -tnl
StateRecv-QSend-QLocal Address:PortPeer Address:PortProcess
LISTEN032192.168.122.1:530.0.0.0:*
LISTEN01280.0.0.0:220.0.0.0:*
LISTEN05127.0.0.1:6310.0.0.0:*
LISTEN01280.0.0.0:1110.0.0.0:*
LISTEN0128[::]:22[::]:*
LISTEN05[::1]:631[::]:*
LISTEN0128[::]:111[::]:*

# 在源服务器上启动,并开启开机自启动 MySQL8.0.26数据库
[root@MySQLPri ]#systemctl enable --now mysqld.service
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.

[root@MySQLPri ]#
[root@MySQLPri ]#ss -tnl
StateRecv-QSend-QLocal Address:PortPeer Address:PortProcess
LISTEN0151*:3306*:*

# 默认 root账号是没有密& 码的
[root@MySQLPri ]#mysql -u root -p
Enter password:
Welcome to the MySQL monitor.Commands end with ; or \\g.
Your MySQL connection id is 8
Server version: 8.0.26 Source distribution

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type help; or \\h for help. Type \\c to clear the current input statement.

# 登录进数据库,修改root账号的密& 码
mysql> alter userroot@localhost identified by shone2022;
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

# 导入用于测试的 hellodb 数据库
[root@MySQLPri ]#rz
rz waiting to receive.
Starting zmodem transfer.Press Ctrl+C to cancel.
Transferring hellodb_innodb.sql...
100%7 KB7 KB/sec00:00:010 Errors

[root@MySQLPri ]#ll
total 847304
-rw-r--r--1 root root30388 Oct42019 mysql80-community-release-el8-1.noarch.rpm
-rw-r--r--1 root root13738948 Sep1 18:13 percona-xtrabackup-80-8.0.23-16.1.el8.x86_64.rpm

[root@MySQLPri ]#mysql -uroot -pshone2022 < hellodb_innodb.sql
mysql: [Warning] Using a password on the command line interface can be insecure.

[root@MySQLPri ]#mysql -uroot -pshone2022
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.Commands end with ; or \\g.
Your MySQL connection id is 13
Server version: 8.0.26 Source distribution

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type help; or \\h for help. Type \\c to clear the current input statement.

mysql> show databases;
+--------------------+
| Database|
+--------------------+
| hellodb|
| information_schema |
| mysql|
| performance_schema |
| sys|
+--------------------+
5 rows in set (0.01 sec)

mysql> quit
Bye
[root@MySQLPri ]#ll /var/lib/mysql/
total 188884
-rw-r----- 1 mysql mysql56 Feb 25 15:34auto.cnf
-rw-r----- 1 mysql mysql11209 Feb 25 15:41binlog.000001
-rw-r----- 1 mysql mysql16 Feb 25 15:34binlog.index
-rw------- 1 mysql mysql1676 Feb 25 15:34ca-key.pem
-rw-r--r-- 1 mysql mysql1112 Feb 25 15:34ca.pem
-rw-r--r--

    推荐阅读