MySQL 不停机主从同步配置

Percona XtraBackup 工具提供了 MySQL 数据热备份的方法。 XtraBackup 是一个适用于 MySQL 的免费的、开源的、完整的数据库备份解决方案。XtraBackup 在事务系统上执行非阻塞、紧密压缩、高度安全的完全备份,因此在备份维护期间,应用程序仍然完全可用。

[TOC]

安装 XtraBackup

获取仓库源包

apt update && apt install -y lsb-core wget &&
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb

安装仓库包

dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb

国内加速

sed -i "s|repo.percona.com|mirrors.tuna.tsinghua.edu.cn|g" /etc/apt/sources.list.d/percona-original-release.list

安装

percona-xtrabackup-24 版本支持 MySQL 5.7 版本,percona-xtrabackup-80 版本支持 MySQL 8.0 之后版本。

apt update && apt install percona-xtrabackup-24

MySQL 配置

Master 配置

修改配置文件

配置my.cnf内的mysqld部分,设置server-idlog-bin参数:

log-bin     = /var/log/mysql/mysql-bin.log
server-id   = 1

重启 mysql

systemctl restart mysql.service

检查

进入 mysql 命令行,执行:

show variables like "log_bin";

如果看到下图,则配置成功:

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

创建同步用户

GRANT REPLICATION SLAVE ON *.* to REPL_USER@'SLAVE_IP' IDENTIFIED BY 'REPL_PASSWORD';
flush privileges;

Slave 配置

停止 MySQL

systemctl stop mysql.service

修改配置文件

配置my.cnf内的mysqld部分,设置server-idread-only参数:

server-id = 2
read-only=1

移除旧数据

mv /var/lib/mysql ~/backup/mysql-old-bak

XtraBackup 导入导出数据

Master 端

全量备份

mkdir ~/backup
sudo xtrabackup --backup --user=root --password='YOUR_PASSWORD' --target-dir=~/backup
sudo xtrabackup --prepare --user=root --password='YOUR_PASSWORD' --target-dir=~/backup

复制数据到 slave

rsync -avzP ~/backup "SLAVE_IP":/backup

Slave 端

还原数据

## 选择一种方式
# 复制
xtrabackup --copy-back --target-dir=/backup
# 移动
xtrabackup --move-back --target-dir=/backup

设置权限

chown -R mysql:mysql /var/lib/mysql

启动 mysql

systemctl start mysql.service

查看当前 Master 的 bin-log 信息

cat /var/lib/mysql/xtrabackup_binlog_info

显示如下信息:

# MASTER_LOG_FILE MASTER_LOG_POS
mysql-bin.000001   50

配置同步信息

CHANGE MASTER TO MASTER_HOST='MASTER_IP',
    MASTER_USER='REPL_USER',
    MASTER_PASSWORD='REPL_PASSWORD',
    MASTER_LOG_FILE='MASTER_LOG_FILE',
    MASTER_LOG_POS=MASTER_LOG_POS;

开始同步

start slave;

检查是否同步

show slave status\G;

如下显示则为正在同步:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

XtraBackup 远程备份

Master

生成密钥

ssh-keygen -t rsa

将公钥添加到远程主机

ssh-copy-id root@{Slave-IP}

备份到 Slave

innobackupex --user root --password 'YOUR_PASSWORD' --stream=tar ./ | ssh root@{Slave-IP} "gzip - > /data/mydata/mysql.tar.gz"

Slave

解压文件

tar zxvf /data/mydata/mysql.tar.gz

移除旧数据

mv /var/lib/mysql ~/backup/mysql-old-bak

还原数据

innobackupex  --apply-log   /data/mydata
innobackupex  --move-back   /data/mydata

修改权限

chown mysql:mysql /var/lib/mysql

Installing Percona XtraBackup on Debian and Ubuntu

The Backup Cycle - Full Backups Creating a backup

MySQL Backup--Xtrabackup远程备份和限速备份

Last updated

Was this helpful?