首页 > 数据库 > MySQL > 基于Linux的传统双主复制MySQL8.4搭建文档
无论是用于数据备份、负载均衡还是高可用性,双主复制都是一个非常重要的解决方案。本 文 以MySQL 8.4.28为例,详细讲解如何在Linux环境下搭建传统双主复制架构。
在开始之前,我们需要准备两台服务器。以下是本次搭建的环境参数:
|
主机名 |
物理IP |
操作系统版本 |
MySQL版本 |
|
Master1 |
192.168.186.11 |
Rhel6.4 |
MySQL 8.4.28 |
|
Master2 |
192.168.186.12 |
Rhel6.4 |
MySQL 8.4.28 |
注意:如果两台服务器都是全新的,没有数据,可以跳过备份和恢复步骤;如果主库1已有数据,需要按照以下步骤操作。
在搭建双主复制前,我们需要对两台服务器进行参数配置。
必须开启binlog;
server-id不能相同;
自增字段根据主机数量设置。
[mysqld] server_id=2 log-bin=mysql-bin binlog_format=ROW auto-increment-increment=2 auto-increment-offset=2 gtid_mode=on enforce_gtid_consistency=on
更多详细配置请参考历史发布文档,且根据时间环境修改。
如果Master1已有数据,需要先备份再恢复到Master2。
• 方法一:使用XtraBackup(推荐大数据量场景)
xtrabackup --defaults-file=/etc/my.cnf -uroot -pmysql -S /tmp/mysql.sock --slave-info --backup --target-dir=/xtar
• 方法二:使用mysqldump
mysqldump -uroot -pAbcd321# -S /tmp/mysql.sock --single-transaction -A -R -E --triggers --source-data=2 --flush-logs > full.sql
• 方法一:使用XtraBackup恢复
全量备份应用redo日志(前滚已提交的事务,回滚未提交的事务) xtrabackup --prepare --target-dir=/xtar 将备份数据从备份位置copy至datadir指定位置 xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/xtar 启动目标端MySQL服务 chown -R mysql:mysql /mysql/product/data service mysqld start
• 方法二:使用mysqldump恢复
启动目标端MySQL服务 service mysqld start 恢复数据 mysql -uroot -pAbcd321# < full.sql
在Master1和Master2上分别创建复制用户,用于数据同步。
CREATE USER 'backup'@'192.168.186.12' IDENTIFIED BY 'mcbackup'; GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.186.12'; FLUSH PRIVILEGES;
CREATE USER 'backup'@'192.168.186.11' IDENTIFIED BY 'mcbackup'; GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.186.11'; FLUSH PRIVILEGES;
目标端发起连接请求生产端 binlog 二进制数据
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.186.11', SOURCE_USER='backup', SOURCE_PASSWORD='mcbackup',SOURCE_PORT=3306,SOURCE_LOG_FILE='master-bin.000083',SOURCE_LOG_POS=120,GET_SOURCE_PUBLIC_KEY=1;
SOURCE_LOG_FILE和SOURCE_LOG_POS 两处根据 XtraBackup 软件备份生成 xtrabackup_binlog_info 文件进行修改 或者根据 mysqldump 备份生成的 sql 文件开头处进行修改。
START REPLICA; SHOW REPLICA STATUS\G …… Slave_IO_Running: Yes Slave_SQL_Running: Yes ……
确认 Slave_IO_Running 和 Slave_SQL_Running 均为 yes ,则复制正常。
mysql> show master status; +------------------+----------+--------------+------------------+-----------------------------------------------------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-----------------------------------------------------------------------------------------+ | mysql-bin.000021 | 3457 | | | 1ee78358-935c-11ea-b15e-fec9c355c78f:1-760, 2f7e1279-9350-11ea-86ca-ca543df890b3:1-5348 | +------------------+----------+--------------+------------------+-----------------------------------------------------------------------------------------+
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.186.12', SOURCE_USER='backup', SOURCE_PASSWORD='mcbackup',SOURCE_PORT=3306,SOURCE_LOG_FILE='mysql-bin.000021',SOURCE_LOG_POS=3457,GET_SOURCE_PUBLIC_KEY=1;
注意:SOURCE_LOG_FILE和SOURCE_LOG_POS需要根据master2 show master status 进行修改。
START REPLICA; SHOW REPLICA STATUS\G …… Slave_IO_Running: Yes Slave_SQL_Running: Yes ……
同样确认 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes 。
通过以下命令可以随时检查复制状态:
SQLSHOW REPLICA STATUS\G
如果一切正常,两台服务器将实现双向数据同步。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29956245/viewspace-3117201/ ,如需转载,请注明出处,否则将追究法律责任。