飞道的博客

MySQL热备之PXB备份与恢复

438人阅读  评论(0)

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

前言

Percona-Xtrabackup就是为了实现MySQL增量备份而出现的一款主流备份工具。

📣 1.PXB介绍

Xtrabackup 是由 Percona 公司提供的一款 MySQL 数据库备份恢复工具,是一款开源的能够对 Innodb 和 xtradb 存储引擎数据库进行热备的工具(备份时不影响数据读写)MySQL冷备、mysqldump、MySQL热拷贝都无法实现对数据库进行增量备份, 在实际生产环境中增量备份是非常实用的.,而Percona-Xtrabackup就是为了实现增量备份而出现的一款主流备份工具。

官网:https://www.percona.com/
下载地址:https://www.percona.com/downloads/

📣 2.PXB特点

(1)备份过程快速、可靠;
(2)备份过程不会打断正在执行的事务;
(3)能够基于压缩等功能节约磁盘空间和流量;
(4)自动实现备份检验;
(5)还原速度快;
注意事项
1.PXB的版本8.0 只支持mysql8.0版本
2.PXB的版本2.4 只支持mysql5.6、5.7
3.PXB一定要和mysql服务安装在一起

📣 3.MySQL8.0安装

✨ 3.1 安装依赖

cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

生成缓存更新
yum makecache
yum install net-tools -y


yum install libaio
yum -y install perl perl-devel
yum install libncurses*
yum -y install autoconf
yum -y install numactl.x86_64

✨ 3.2 创建目录

mkdir -p /usr/local/mysqlsoft
tar -Jxf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz -C /usr/local/mysqlsoft

✨ 3.3 创建快捷方式

mkdir -p /usr/local/mysql80
ln -s /usr/local/mysqlsoft/mysql-8.0.27-linux-glibc2.12-x86_64 /usr/local/mysql80/mysql8027

✨ 3.4 用户组添加

groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql /usr/local/mysqlsoft

✨ 3.5 初始化

/usr/local/mysql80/mysql8027/bin/mysqld --initialize-insecure --user=mysql \
--basedir=/usr/local/mysql80/mysql8027 --datadir=/usr/local/mysql80/mysql8027/data

✨ 3.6 环境变量

[root@pxb /]# echo "export PATH=$PATH:/usr/local/mysql80/mysql8027/bin" >> /root/.bashrc
[root@pxb /]# source /root/.bashrc
## 启动mysql
mysqld_safe &

✨ 3.7 新增用户改密码

[root@pxb ~]# mysql -uroot -p
mysql> select user,host,authentication_string from mysql.user; 
mysql> ALTER USER root@'localhost' identified with mysql_native_password BY 'root';
mysql> select user,host,authentication_string from mysql.user;
mysql> create user root@'%' identified with mysql_native_password by 'root';
mysql> grant all on *.* to root@'%' with grant option;
mysql> flush privileges;

📣 4.PXB安装

[root@pxb /]# tar -zxvf percona-xtrabackup-8.0.28-20-Linux-x86_64.glibc2.17.tar.gz
[root@pxb /]# mv percona-xtrabackup-8.0.28-20-Linux-x86_64.glibc2.17 /usr/local/percona-xtrabackup

##创建软连接
[root@pxb /]# ln -s /usr/local/percona-xtrabackup/bin/xtrabackup /usr/bin/xtrabackup
[root@pxb /]# ln -s /usr/local/percona-xtrabackup/bin/xbstream /usr/bin/xbstream

[root@pxb /]# which xtrabackup  
/usr/bin/xtrabackup
[root@pxb /]# xtrabackup -version
xtrabackup version 8.0.28-20 based on MySQL server 8.0.28 Linux (x86_64) (revision id: 4cc3081873d)

📣 5.备份恢复

✨ 5.1 全备和恢复

1.登陆mysql
[root@pxb /]# mysql -uroot -p
mysql> select @@socket;
+-----------------+
| @@socket        |
+-----------------+
| /tmp/mysql.sock |
+-----------------+
1 row in set (0.00 sec)


##环境准备
create database ceshi character set utf8mb4;
create table ceshi.articles (id int primary key auto_increment,content longtext not null) ENGINE=InnoDB;
insert into ceshi.articles (id,content) values (11,'aa'),(12,'bb'),(13,'cc'),(14,'dd');

mysql> select * from ceshi.articles;
+----+---------+
| id | content |
+----+---------+
| 11 | aa      |
| 12 | bb      |
| 13 | cc      |
| 14 | dd      |
+----+---------+
4 rows in set (0.00 sec)

2.全量备份
[root@pxb /]# mkdir -p /bk/
[root@pxb /]# xtrabackup -uroot -proot -S/tmp/mysql.sock --backup --target-dir=/bk/full


3.全量恢复
##prepare过程
[root@pxb /]# xtrabackup --prepare --target-dir=/bk/full --no-server-version-check
“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态

##copy-back过程,先关闭数据库
[root@pxb /]# cd /usr/local/mysql80/mysql8027/data
[root@pxb data]# rm -rf *
[root@pxb /]# xtrabackup --copy-back --target-dir=/bk/full --datadir=/usr/local/mysql80/mysql8027/data
[root@pxb /]# chown -R mysql:mysql /usr/local/mysql80/mysql8027/data

4、启动数据库验证数据
## 启动mysql
mysqld_safe &

mysql> select * from ceshi.articles;
+----+---------+
| id | content |
+----+---------+
| 11 | aa      |
| 12 | bb      |
| 13 | cc      |
| 14 | dd      |
+----+---------+
4 rows in set (0.01 sec)

 

✨ 5.2 增备恢复

1.插入数据
mysql> insert into ceshi.articles (id,content) values (110,'bbbbbbb'),(111,'ccccc'),(112,'aaaaaa'),(113,'dddddddd');
mysql> select * from ceshi.articles;
+-----+----------+
| id  | content  |
+-----+----------+
|  11 | aa       |
|  12 | bb       |
|  13 | cc       |
|  14 | dd       |
| 110 | bbbbbbb  |
| 111 | ccccc    |
| 112 | aaaaaa   |
| 113 | dddddddd |
+-----+----------+
8 rows in set (0.00 sec)

在做增备前做一次全备
[root@pxb /]# xtrabackup -uroot -proot -S/tmp/mysql.sock --backup --target-dir=/bk/full

2.一级增备
[root@pxb /]# xtrabackup -uroot -proot -S/tmp/mysql.sock --backup --target-dir=/bk/inc1 --incremental-basedir=/bk/full

3.二级增备
xtrabackup -uroot -proot -S/tmp/mysql.sock --backup --target-dir=/bk/inc2 --incremental-basedir=/bk/inc1

4.恢复增备
xtrabackup --prepare --apply-log-only --target-dir=/bk/full/
##将第一次增备加载至全备中
xtrabackup --prepare --apply-log-only --target-dir=/bk/full/ --incremental-dir=/bk/inc1
##将第二次增备加载至全备中
xtrabackup --prepare --target-dir=/bk/full/ --incremental-dir=/bk/inc2

##恢复的过程
xtrabackup --copy-back --target-dir=/bk/full/ --datadir=/usr/local/mysql80/mysql8027/data
chown -R mysql:mysql /usr/local/mysql80/mysql8027/data

 



转载:https://blog.csdn.net/weixin_41645135/article/details/128434578
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场