如何搭CentOS 7 MySQL 8.0版本主从复制
本文将介绍如何在CentOS 7操作系统上搭建MySQL 8.0版本的主从复制。MySQL主从复制是一种常见的数据库备份和灾难恢复方案,它允许将主数据库(Master)的数据自动同步到一个或多个从数据库(Slave)上。这种配置提供了冗余和高可用性,并且在主数据库发生故障时可以快速切换到从数据库。
步骤一:安装MySQL 8.0
首先,我们需要安装MySQL 8.0版本。在CentOS 7上,可以使用以下命令安装MySQL:
sudo yum install mysql-server
安装完成后,可以使用以下命令启动MySQL服务:
sudo systemctl start mysqld
步骤二:配置主数据库
接下来,我们需要配置主数据库。打开MySQL的配置文件/etc/my.cnf
,找到并编辑以下行:
# 绑定IP地址
bind-address = IP_ADDRESS
# 启用二进制日志
log-bin = /var/lib/mysql/mysql-bin.log
# 配置唯一的服务器ID
server-id = 1
将IP_ADDRESS
替换为主数据库的IP地址。配置完成后,保存并关闭文件。
重新启动MySQL服务以使更改生效:
sudo systemctl restart mysqld
步骤三:创建从数据库用户
在主数据库上,我们需要创建一个用于主从复制的专用用户。使用以下命令登录MySQL:
mysql -u root -p
然后执行以下SQL语句创建一个新用户并授予复制权限:
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
FLUSH PRIVILEGES;
将replication_user
替换为你自己的用户名,password
替换为你自己的密码。
步骤四:备份主数据库
在配置从数据库之前,我们需要在主数据库上创建一个备份并获取二进制日志的位置和文件名。登录到主数据库的MySQL控制台,执行以下SQL语句:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
执行完后,会显示主数据库的二进制日志的位置和文件名,如下所示:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107 | | |
+------------------+----------+--------------+------------------+
将这些信息记录下来,我们将在下一步配置从数据库时使用。
步骤五:配置从数据库
在从数据库上,我们需要编辑MySQL配置文件/etc/my.cnf
,添加以下行:
# 绑定IP地址
bind-address = IP_ADDRESS
# 配置唯一的服务器ID
server-id = 2
将IP_ADDRESS
替换为从数据库的IP地址。配置完成后,保存并关闭文件。
使用以下命令启动MySQL服务:
sudo systemctl start mysqld
然后登录到从数据库的MySQL控制台,执行以下SQL语句:
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='MASTER_IP', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
START SLAVE;
将MASTER_IP
替换为主数据库的IP地址,replication_user
替换为之前创建的复制用户,password
替换为该用户的密码,mysql-bin.000001
和107
替换为上一步中获取的主数据库二进制日志的位置和文件名。
步骤六:验证主从复制
要验证主从复制是否正常工作,可以在主数据库上执行一些插入/更新/删除操作,并在从数据库上查看是否同步。
在主数据库的MySQL控制台上执行以下SQL语句:
CREATE DATABASE test;
USE test;
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(10));
INSERT INTO test_table VALUES (1, 'John');
然后在从数据库的MySQL