基于 xtrabackup 的备份

最近做数据同步恢复方面的东西,做一下整理,仅供参考

xtrabackup安装

版本说明

(1)Percona XtraBackup 2.4版本,支持 MySQL 5.1 [1]、5.5、5.6 和 5.7服务器上的InnoDB数据库备份,但不支持MySQL 8.0 数据库备份。
** (2)Percona XtraBackup8.0版本,仅支持MySQL 8.0服务器上存储引擎为InnoDB的数据库备份,但不支持在MySQL 8.0之前版本的数据库备份**

前提安装好mysql

我选用mysql版本是5.7的,就用Percona XtraBackup 2.4版本的

下载XtraBackup
 wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.22/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm

直接安装会报错,缺少**xtrabackup**的依赖包,

image-20220824153358955.png

下载libev依赖并安装
 wget  ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/libev-4.15-1.el6.rf.x86_64.rpm
 
  rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm

Snipaste_2022-08-24_15-35-36.png

安装perl(DBD::mysql)
 yum install  perl-DBD-MySQL 

Snipaste_2022-08-24_15-37-59.png

安装perl(Digest::MD5)
 yum -y install rsync perl l perl-Digest-MD5

Snipaste_2022-08-24_15-39-18.png

这些依赖安装完毕之后就可以安装xtrabackup了。

安装XtraBackup
 rpm -ivh percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm

Snipaste_2022-08-24_15-41-48.png

前提准备好了,开始备份

全量备份命令
 innobackupex --user=root --password=root123 --port=3306 --host=127.0.0.1 --socket=/tmp/mysqld.sock --datadir=/usr/local/mysql/data --stream=tar /home |gzip>/home/mysql.tar.gz

执行完这个命令,不出错得话,会出一堆堆日志,头疼,只要最后出现completed OK!,就证明备份成功了

Snipaste_2022-08-24_15-46-24.png

这个命令的参数:

 --user     #指定数据库备份用户
 –password  #指定数据库备份用户密码
 –port      #指定数据库端口,不填默认3306
 –host      #指定备份主机,不填默认127.0.0.0或者localhost
 –socket    #指定socket文件路径,docker容器里的mysql挂载目录data里,普通安装默认在/var/lib/mysql
 --datadir  #指定mysql datadir路径,docker容器里的mysql挂载目录data里,普通安装默认在/var/lib/mysql
 --stream   #指定流的格式做备份,–stream=tar,将备份文件归档
 --/home/mysql.tar.gz   #备份的数据存储的位置,可以更改

全量备份恢复(需要停止备库mysql)

1)修改备库my.cnf文件

在my.cnf文件中加入以下配置

 datadir=/usr/local/mysql/data    这个是你数据库数据存储的位置,备份恢复也会恢复到这里的数据

2)把之前你备份的数据包解压

 tar -zxvf  mysql.tar.gz

3)执行日志文件恢复

  innobackupex --detaults-file=/etc/my.cnf --apply-log /home/

其中/home/为备份文件存放位置,同样出现completed OK!,就证明恢复成功了。

Snipaste_2022-08-24_15-55-09.png

4)执行数据文件恢复

  innobackupex --defaults-file=/etc/my.cnf --copy-back /home/

此命令会将数据文件恢复至my.cnf文件中datadir目录下

Snipaste_2022-08-24_15-57-38.png

5)执行mysql用户授权

 chown -R mysql:mysql /usr/local/mysql/
 

6)启动mysql

 service mysqld start

至此备份全量恢复完毕

遇到的问题

当我在执行完用户授权后,启动MySQL的时候会出现

 Starting MySQL... ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid)

大概意思是权限不够无法启动mysql,网上给了很多解决方法,我也是一个一个试出来的😂,我解决的方法,既然权限不够就从权限入手;

对mysql的安装目录和数据目录分别进行授权
 chown -R mysql.mysql /usr/local/mysql
 chown -R mysql.mysql /usr/local/mysql/data/mysql
 #然后重启服务
 service mysqld start

结果还是出现这个问题,我试了试杀掉进程

 ps -ef|grep mysqld     查看进程
 kill -9 ‘进程号’

重启了一下试试,还真解决了问题

参考原文章:https://blog.csdn.net/weixin_43937315/article/details/126290130?spm=1001.2014.3001.5501