TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:

TOP云总站云服务器:https://topyun.vip/server/buy.html

TOP云C站云服务器:https://c.topyun.vip/cart

在云服务器上配置 MySQL 主从复制(Master-Slave Replication)是一种常见的数据库高可用和负载均衡方案。通过主从复制,可以将主库(Master)上的数据变更同步到从库(Slave),从而实现数据备份、读写分离、故障切换等目的。

以下是基于 MySQL 5.7 / 8.0 的主从复制配置详细步骤,假设主从服务器均为 Linux 系统(如 CentOS、Ubuntu),并且你已经在云服务器上安装了 MySQL。


一、主从复制的基本原理

MySQL 主从复制是基于 二进制日志(Binary Log) 的复制机制:

  1. 主库(Master)

    • 记录所有数据变更操作到二进制日志(binlog)。

    • 提供读写服务。

  2. 从库(Slave)

    • 从主库获取二进制日志,并在本地重放(relay log)这些日志中的操作,从而实现数据同步。

    • 通常用于读操作或备份。


二、配置前的准备工作

1. 确保主从服务器网络互通

  • 主从服务器之间需要能够通过内网或公网互相访问 MySQL 的默认端口(3306)。

  • 如果是云服务器(如阿里云、腾讯云),需确保安全组规则放行 3306 端口。

2. 确保主从服务器时间同步

  • 使用 ntp 或云服务商提供的时钟同步服务,确保主从服务器系统时间一致。

3. 确保 MySQL 版本兼容

  • 主从服务器的 MySQL 版本建议一致或从库版本不低于主库版本。


三、主库(Master)配置

1. 修改主库的 MySQL 配置文件(通常是 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf)

[mysqld]
# 开启二进制日志
log-bin = mysql-bin

# 设置服务器唯一ID(主从服务器必须不同)
server-id = 1

# 可选:指定需要同步的数据库(如果不指定,则同步所有数据库)
# binlog-do-db = your_database_name

# 可选:排除不需要同步的数据库
# binlog-ignore-db = mysql
# binlog-ignore-db = information_schema
# binlog-ignore-db = performance_schema
# binlog-ignore-db = sys

# 设置二进制日志格式(推荐使用 ROW 模式)
binlog-format = ROW

# 可选:设置二进制日志过期时间(单位:天)
expire-logs-days = 7

注意

  • server-id 是主从服务器的唯一标识,主库和从库必须设置为不同的值。

  • log-bin 指定二进制日志文件的前缀名,MySQL 会自动生成如 mysql-bin.000001 的日志文件。

2. 重启 MySQL 服务使配置生效

# CentOS / RHEL
systemctl restart mysqld

# Ubuntu / Debian
systemctl restart mysql

3. 登录 MySQL,创建用于主从复制的用户

-- 登录 MySQL
mysql -u root -p

-- 创建复制专用用户(如 repl_user)
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password';

-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';

-- 刷新权限
FLUSH PRIVILEGES;

注意

  • 'repl_user'@'%' 中的 % 表示允许从任何主机连接。如果从库有固定 IP,可以替换为 'repl_user'@'从库IP',以提高安全性。

4. 查看主库状态,记录二进制日志文件名和位置

SHOW MASTER STATUS;

输出示例:

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

记录以下信息

  • File:当前二进制日志文件名(如 mysql-bin.000001)。

  • Position:当前二进制日志位置(如 154)。

这些信息在配置从库时会用到。


四、从库(Slave)配置

1. 修改从库的 MySQL 配置文件

[mysqld]
# 设置服务器唯一ID(与主库不同)
server-id = 2

# 可选:设置为只读模式(防止从库被误写入)
read-only = 1

# 可选:指定需要同步的数据库(与主库对应)
# replicate-do-db = your_database_name

# 可选:排除不需要同步的数据库
# replicate-ignore-db = mysql
# replicate-ignore-db = information_schema
# replicate-ignore-db = performance_schema
# replicate-ignore-db = sys

# 设置二进制日志格式(与主库保持一致)
binlog-format = ROW

注意

  • server-id 必须与主库不同,且在同一主从架构中唯一。

2. 重启 MySQL 服务使配置生效

# CentOS / RHEL
systemctl restart mysqld

# Ubuntu / Debian
systemctl restart mysql

3. 登录从库 MySQL,配置主从复制

-- 登录 MySQL
mysql -u root -p

-- 配置主从复制
CHANGE MASTER TO
    MASTER_HOST='主库IP地址',
    MASTER_USER='repl_user',
    MASTER_PASSWORD='your_password',
    MASTER_LOG_FILE='mysql-bin.000001',  -- 替换为主库的 File 值
    MASTER_LOG_POS=154;                 -- 替换为主库的 Position 值

注意

  • MASTER_HOST:主库的 IP 地址(如果是内网环境,使用内网 IP;如果是公网环境,使用公网 IP)。

  • MASTER_USER 和 MASTER_PASSWORD:主库上创建的复制用户及其密码。

  • MASTER_LOG_FILE 和 MASTER_LOG_POS:主库的 SHOW MASTER STATUS 输出结果。

4. 启动从库复制线程

-- 启动复制
START SLAVE;

-- 查看从库状态
SHOW SLAVE STATUS\G

重点关注以下两个字段

  • Slave_IO_Running:是否成功连接到主库并读取二进制日志。应为 Yes。

  • Slave_SQL_Running:是否成功重放二进制日志中的操作。应为 Yes。

如果这两个字段的值均为 Yes,说明主从复制已成功建立。


五、验证主从复制是否正常

1. 在主库上创建测试数据

-- 登录主库 MySQL
mysql -u root -p

-- 创建测试数据库
CREATE DATABASE test_db;

-- 使用测试数据库
USE test_db;

-- 创建测试表
CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50)
);

-- 插入测试数据
INSERT INTO test_table (name) VALUES ('MySQL Replication Test');

2. 在从库上查看是否同步

-- 登录从库 MySQL
mysql -u root -p

-- 使用测试数据库
USE test_db;

-- 查询测试表
SELECT * FROM test_table;

如果从库中能够看到主库插入的数据,说明主从复制正常。


六、常见问题与排查

1. Slave_IO_Running 或 Slave_SQL_Running 为 No

  • 可能原因

    • 主从网络不通。

    • 主库的 server-id 或从库的 server-id 配置错误。

    • 复制用户权限不足。

    • 主从日志文件或位置不匹配。

  • 解决方法

    • 检查网络连接。

    • 确认 server-id 配置正确且唯一。

    • 确认复制用户权限正确。

    • 使用 SHOW SLAVE STATUS\G 查看具体错误信息,并根据提示调整配置。

2. 数据不一致

  • 可能原因

    • 主从同步延迟。

    • 主库上有非事务性操作(如直接操作 MyISAM 表)。

  • 解决方法

    • 检查主从服务器负载,优化查询性能。

    • 确保所有表都使用 InnoDB 存储引擎。



不容错过
Powered By TOPYUN 云产品资讯