基于 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
**的依赖包,
下载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
安装perl(DBD::mysql)
yum install perl-DBD-MySQL
安装perl(Digest::MD5)
yum -y install rsync perl l perl-Digest-MD5
这些依赖安装完毕之后就可以安装xtrabackup了。
安装XtraBackup
rpm -ivh percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm
前提准备好了,开始备份
全量备份命令
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!,就证明备份成功了
这个命令的参数:
--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!,就证明恢复成功了。
4)执行数据文件恢复
innobackupex --defaults-file=/etc/my.cnf --copy-back /home/
此命令会将数据文件恢复至my.cnf文件中datadir目录下
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
-
java