前提是主库的MySQL开启了Binlog,不然需要修改配置,然后重启MySQL
1.主库配置
[mysqld]
max_allowed_packet=1024M
server-id=1
log-bin=mysql-bin
binlog_format=row
# 必须为FULL,MySQL-5.7后才有该参数
binlog_row_image = FULL
expire_logs_days = 15
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
2.从库配置
[mysqld]
max_allowed_packet=1024M
server-id=2
log-bin=mysql-bin
binlog_format=row
# 必须为FULL,MySQL-5.7后才有该参数
binlog_row_image = FULL
expire_logs_days = 15
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
3.xtrabackup安装
3.1 Xtrabackup介绍
Xtrabackup中主要包含两个工具:
xtrabackup:是用于热备innodb,xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。
#常用选项:
--host 指定主机
--user 指定用户名
--password 指定密码
--port 指定端口
--databases 指定数据库
--incremental 创建增量备份
--incremental-basedir 指定包含完全备份的目录
--incremental-dir 指定包含增量备份的目录
--apply-log 对备份进行预处理操作
--defaults-file=/etc/my.cnf 指定的备份数据的配置文件
# 一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
--redo-only 不回滚未提交事务
--copy-back 恢复备份目录
3.2 下载地址
MySQL版本不同,对应的xtrabackup版本也不同,可以自己选择下载,注意选择Percona XtraBackup
https://www.percona.com/downloads/
3.3 安装
方式一:通过yum安装,yum安装支持的版本是MySQL5.6.24,不知道是否支持5.7.
yum install xtrabackup
xtrabackup -v #查看版本
注意安装的版本,如下提示即支持5.6
xtrabackup version 2.3.6 based on MySQL server 5.6.24 Linux (x86_64) (revision id: )
方式二:通过自己下载rpm包安装。
由于我使用的MySQL是5.7版本的,所以使用该安装包。
下载地址:
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
yum -y install rsync perl l perl-Digest-MD5 #需要先安装依赖
yum install perl-DBD-MySQL # 视情况安装
yum install libev # 视情况安装
rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
4. 全量备份以及配置
#全量备份主库
innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --user=root --password='root' --parallel=4 /root/mysql_back/
#copy备份文件到从库主机
scp -r mysql_back root@hadoop201:/root/mysql_back/
#进入从库所在主机,停止从库,移除data目录
systemctl stop mysqld
cd /root/mysql_back/
mv /var/lib/mysql /var/lib/mysql_old
#应用日志
innobackupex --use-memory=1G --apply-log /root/mysql_back/2022-09-22_00-18-44/
#恢复数据到从库
innobackupex --defaults-file=/etc/my.cnf --move-back /root/mysql_back/2022-09-22_00-18-44/
#修改从库data目录属主,启动从库
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld
如果启动systemctl start mysqld报错,查看日志信息:InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
请检查vi /etc/selinux/config
将SELINUX=enforcing 改为 SELINUX=disabled,设置后需要重启才能生效。
临时生效办法:setenforce 0 #临时关闭,重启后又会打开。
5. 主从配置
#主库创建slave账号
mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'rep_user'@'%' IDENTIFIED BY 'rep_user';
flush privileges;
#从库操作,查看binlog位置,启动从库slave进程
cat /root/mysql_back/2022-09-22_00-18-44/xtrabackup_binlog_info
#启动从库slave进程
mysql -u root -p
CHANGE MASTER TO MASTER_HOST='192.168.80.200',MASTER_PORT=3306, MASTER_USER='rep_user',MASTER_PASSWORD='rep_user',MASTER_LOG_FILE='mysql-bin.000013',MASTER_LOG_POS=924757;
start slave;
show slave status\G;
6. 测试
略