☰
MySQL 5.7主从同步功能
2026/9/30 10:59:42 网站建设 项目流程

目录

一、环境准备

二、主库配置

1. 修改配置文件

2. 创建复制用户

3. 查看主库状态

三、从库配置

1. 修改配置文件

2. 配置主从同步

四、验证同步状态

1. 查看从库状态

2. 测试数据同步

五、MySQL主从同步与Canal、Otter在功能上的区别

六、创建mysql用户并赋权(样例解析)

第一条语句:创建用户

第二条语句:授予数据库权限

第三条语句:授予全局复制权限

综合总结


以下是一个完整的MySQL 5.7主从同步实例,包含环境准备、配置步骤及验证过程:

一、环境准备

  • 主库(Master)
    • IP:192.168.1.100
    • 操作系统:CentOS 7
    • MySQL版本:5.7.44
  • 从库(Slave)
    • IP:192.168.1.101
    • 操作系统:CentOS 7
    • MySQL版本:5.7.44

二、主库配置

1. 修改配置文件

编辑/etc/my.cnf,添加以下内容:

[mysqld] server-id=1 # 主库唯一ID log-bin=mysql-bin # 开启二进制日志 binlog_format=ROW # 推荐使用ROW格式 binlog-do-db=test # 仅同步test库(可选) expire_logs_days=7 # 日志保留7天

重启MySQL:

systemctl restart mysqld

2. 创建复制用户

登录MySQL,执行:

CREATE USER 'repl'@'192.168.1.101' IDENTIFIED BY 'Repl@123456'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101'; FLUSH PRIVILEGES;

3. 查看主库状态

执行:

SHOW MASTER STATUS;

**记录输出中的File和Position**(如mysql-bin.000001、154),后续从库配置需使用。

三、从库配置

1. 修改配置文件

编辑/etc/my.cnf,添加以下内容:

[mysqld] server-id=2 # 从库唯一ID(不能与主库重复) relay-log=mysql-relay-bin # 开启中继日志 read_only=1 # 从库只读(生产环境建议开启)

重启MySQL:

systemctl restart mysqld

2. 配置主从同步

登录从库MySQL,执行:

CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_USER='repl', MASTER_PASSWORD='Repl@123456', MASTER_LOG_FILE='mysql-bin.000001', # 主库记录的File MASTER_LOG_POS=154; # 主库记录的Position START SLAVE; # 启动同步

四、验证同步状态

1. 查看从库状态

在从库执行:

SHOW SLAVE STATUS\G

关键字段说明:

  • Slave_IO_Running:Yes表示从库正在拉取主库日志。
  • Slave_SQL_Running:Yes表示从库正在执行日志中的SQL。
  • Seconds_Behind_Master:0表示无延迟(若为NULL,需检查网络或权限)。

2. 测试数据同步

在主库插入数据:

USE test; INSERT INTO users (name, age) VALUES ('Alice', 25), ('Bob', 30);

在从库查询数据:

USE test; SELECT * FROM users; # 应看到与主库一致的数据

五、MySQL主从同步与Canal、Otter在功能上的区别

  1. MySQL主从复制(通过binlog):

    • 是MySQL数据库内置的功能,通过复制binlog日志来实现数据的同步。

    • 支持异步、半同步和全同步复制。

    • 主要用于数据备份、读写分离、高可用性等场景。

  2. Canal:

    • 是阿里巴巴开源的基于MySQL binlog的增量日志订阅和消费组件。

    • 模拟MySQL slave的交互协议,伪装自己为MySQL slave,向MySQL master发送dump协议,获取binlog,解析并存储。

    • 常用于将MySQL的数据变更同步到其他数据存储(如Elasticsearch、Redis、HBase等)或用于缓存更新、消息通知等。

  3. Otter:

    • 也是阿里巴巴开源的分布式数据库同步系统,基于Canal。

    • 提供分布式、可靠、低延迟的数据同步解决方案,支持双向同步、冲突检测和解冲突等。

    • 主要用于跨机房、跨地域的数据同步,支持多源、多目标、双向同步等复杂场景。

六、创建mysql用户并赋权(样例解析)

mysql> CREATE USER 'maxwell'@'%' IDENTIFIED BY '123456'; mysql> GRANT ALL ON maxwell.* TO 'maxwell'@'%'; mysql> GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'maxwell'@'%';

这些SQL语句的总体目的是:创建一个名为 `maxwell`` 的数据库用户,并授予其特定的权限,通常是为了让这个用户能够作为MySQL的数据同步工具(如Maxwell、Canal等)连接并捕获数据库的变更。

第一条语句:创建用户

mysql> CREATE USER 'maxwell'@'%' IDENTIFIED BY '123456';

含义解释:

  • CREATE USER: 这是创建一个新用户的命令。
  • 'maxwell'@'%': 这是指定用户名和允许其连接的主机。
    • 'maxwell': 是新创建的用户名。
    • '@': 是分隔符。
    • '%': 是一个通配符,代表任意主机。这意味着,用户maxwell可以从任何IP地址或任何一台机器上连接到这个MySQL服务器。这在开发和测试环境中很方便,但在生产环境中存在安全风险,通常会限制为特定的IP地址(例如'maxwell'@'192.168.1.100')。
  • IDENTIFIED BY '123456': 这部分设置了用户的登录密码。用户maxwell的密码被设置为123456。

一句话总结:创建一个名为maxwell的用户,密码是123456,并允许他从任何地方连接到MySQL服务器。

第二条语句:授予数据库权限

mysql> GRANT ALL ON maxwell.* TO 'maxwell'@'%';

含义解释:

  • GRANT: 这是授予权限的命令。
  • ALL: 这是一个权限的简写,代表所有权限(如SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER等)。
  • ON maxwell.*: 这指定了权限应用的范围。
    • maxwell: 是数据库名。
    • .*: 是一个通配符,代表该数据库中的所有表。
    • 所以maxwell.*的意思是:在maxwell这个数据库里的所有表上。
  • TO 'maxwell'@'%': 指明将权限授予哪个用户。这里就是授予我们刚刚创建的maxwell用户。

一句话总结:授予用户maxwell对名为maxwell的数据库及其所有表拥有完全的增删改查和管理权限。这通常是为了让maxwell工具能自己创建和操作它所需要的状态表、配置表等。

第三条语句:授予全局复制权限

mysql> GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'maxwell'@'%';

含义解释:

  • GRANT: 授予权限的命令。
  • SELECT, REPLICATION CLIENT, REPLICATION SLAVE: 这是授予的三个核心权限,每个都非常重要:
    • SELECT: 允许用户从任何表中读取数据。对于数据同步工具来说,这是为了能读取表的元数据(如表结构)和初始数据。
    • REPLICATION CLIENT: 允许用户查询主服务器的二进制日志(binlog)文件和位置信息。执行SHOW MASTER STATUS;命令就需要这个权限。这是数据同步工具找到从哪里开始读取变更的关键。
    • REPLICATION SLAVE: 允许用户连接到主服务器并请求其binlog数据流。这是实现数据实时同步的核心权限。没有这个权限,工具就无法接收到数据库的增量变更。
  • ON *.*: 这指定了权限应用的范围。
    • 第一个*代表所有数据库。
    • 第二个*代表所有表。
    • 所以*.*的意思是:在整个MySQL服务器实例的所有数据库和所有表上。这使得这些权限成为全局权限。
  • TO 'maxwell'@'%': 再次指明将这些权限授予用户maxwell。

一句话总结:授予用户maxwell在整个MySQL服务器范围内的全局权限,使其能够读取任何数据、查询复制状态,以及作为“从库”一样拉取主库的二进制日志数据。

综合总结

这三条SQL语句组合在一起,完整地完成了为数据同步工具(如Maxwell)准备专用账户的工作:

  1. 创建账户:先建立一个叫maxwell的登录凭证。
  2. 配置工作空间:给这个账户一个专属的数据库(maxwell),让它在里面可以自由地读写和管理自己的配置信息,而不会干扰其他业务数据库。
  3. 授予核心能力:最后,授予它读取整个MySQL实例变更数据(binlog)的核心能力,这是实现实时数据同步的根本。

因此,执行完这些命令后,maxwell这个用户就具备了连接MySQL、监控并捕获所有数据库变更所需的最小(但必要)权限集合。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询