欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > MySQL 主从同步配置及操作步骤

MySQL 主从同步配置及操作步骤

2025/2/28 10:16:32 来源:https://blog.csdn.net/u010398650/article/details/145903323  浏览:    关键词:MySQL 主从同步配置及操作步骤

主从同步是一种常见的数据复制技术,它通过将主库的数据同步到一个或多个从数据库中来保证数据的一致性。从库通过读取主库的 binlog 文件来获取更新并进行同步。

主从复制的方式有三种:

  1. 异步复制:不需要从库确认,主库提交数据后立即返回。
  2. 同步复制:所有从库都必须确认接收到数据后,主库才能提交事务。
  3. 半同步复制:至少一个从库确认接收到数据后,主库才能提交事务,MySQL5.7 之后才能启用。

当主库提交事务时,它会将变更记录写入 binlog 文件。一个 dump 线程负责监听这些 binlog 文件的变更,当文件发生更新时,dump 线程会推送更新事件给从库。从库接收到这些更新事件后,通过 I/O 线程将其写入中继日志(relay log),然后通过 SQL 线程执行这些更新操作。

配置主从同步步骤

主库配置步骤

  1. 启用 binlog 日志
    在主库的配置文件中设置以下参数,开启 binlog:

    server-id = 1  # 主库的唯一 ID
    log-bin = mysql-bin  # 启用二进制日志
    
  2. 创建复制用户
    在主库上创建一个专用于复制的用户,并授予 REPLICATION SLAVE 权限:

    CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
    FLUSH PRIVILEGES;
    
  3. 记录主库状态
    获取主库的 binlog 文件名和位置。这些信息会在配置从库时使用:

    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000003 |      843 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    

从库配置步骤

  1. 配置从库
    在从库的配置文件中启用中继日志,并设置从库为只读:

    server-id = 2  # 从库的唯一 ID,必须与主库不同
    relay-log = mysql-relay-bin  # 启用中继日志
    log-bin = mysql-bin  # 启用二进制日志(可选,若从库也需要提供复制)
    read-only = 1  # 设置为只读
    
  2. 配置从库信息
    进入从库并设置主库的信息,启动复制进程:

    mysql> CHANGE MASTER TO MASTER_HOST = '主库的IP', MASTER_PORT=主库的端口, MASTER_USER = 'replica_user', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000003', MASTER_LOG_POS = 843;
    Query OK, 0 rows affected, 9 warnings (0.05 sec)mysql> START SLAVE;
    Query OK, 0 rows affected, 1 warning (0.02 sec)l
    
  3. 检查状态
    使用以下命令检查从库的同步状态。若 Slave_IO_RunningSlave_SQL_Running 都显示为 Yes,表示复制配置正常:

    mysql> SHOW SLAVE STATUS\G
    *************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 主库IPMaster_User: replica_userMaster_Port: 主库端口Connect_Retry: 60Master_Log_File: mysql-bin.000003Read_Master_Log_Pos: 843Relay_Log_File: mysql-relay-bin.000002Relay_Log_Pos: 326Relay_Master_Log_File: mysql-bin.000003Slave_IO_Running: YesSlave_SQL_Running: Yes......
    

    通过以上这些配置步骤,主从复制就完成了。

  4. 验证同步是否成功
    可以在主库插入一些数据,看看从库中是否正常复制数据。

dump线程和从库线程

使用 show processlist 命令查看主库和从库的线程信息

主库信息

mysql> show processlist;
+----+-----------------+------------------+-------+-------------+------+-----------------------------------------------------------------+------------------+
| Id | User            | Host             | db    | Command     | Time | State                                                           | Info             |
+----+-----------------+------------------+-------+-------------+------+-----------------------------------------------------------------+------------------+
|  5 | event_scheduler | localhost        | NULL  | Daemon      | 1034 | Waiting on empty queue                                          | NULL             |
|  8 | root            | localhost        | test1 | Query       |    0 | init                                                            | show processlist |
|  9 | replica_user    | 172.25.0.1:62302 | NULL  | Binlog Dump |  619 | Source has sent all binlog to replica; waiting for more updates | NULL             |
| 10 | replica_user    | 172.25.0.1:62306 | NULL  | Binlog Dump |   61 | Source has sent all binlog to replica; waiting for more updates | NULL             |
+----+-----------------+------------------+-------+-------------+------+-----------------------------------------------------------------+------------------+
4 rows in set (0.00 sec)

从库信息

mysql> show processlist;
+----+-----------------+-----------------+-------+---------+------+----------------------------------------------------------+------------------+
| Id | User            | Host            | db    | Command | Time | State                                                    | Info             |
+----+-----------------+-----------------+-------+---------+------+----------------------------------------------------------+------------------+
|  5 | event_scheduler | localhost       | NULL  | Daemon  | 2337 | Waiting on empty queue                                   | NULL             |
|  8 | root            | localhost       | test1 | Query   |    0 | init                                                     | show processlist |
|  9 | system user     | connecting host | NULL  | Connect | 2144 | Waiting for source to send event                         | NULL             |
| 10 | system user     |                 | NULL  | Query   | 1529 | Replica has read all relay log; waiting for more updates | NULL             |
| 11 | system user     |                 | NULL  | Query   | 1529 | Waiting for an event from Coordinator                    | NULL             |
| 12 | system user     |                 | NULL  | Connect | 2144 | Waiting for an event from Coordinator                    | NULL             |
| 13 | system user     |                 | NULL  | Connect | 2144 | Waiting for an event from Coordinator                    | NULL             |
| 14 | system user     |                 | NULL  | Connect | 2144 | Waiting for an event from Coordinator                    | NULL             |
+----+-----------------+-----------------+-------+---------+------+----------------------------------------------------------+------------------+
8 rows in set (0.00 sec)

dump 线程 是在从库执行 START SLAVE 命令后,成功与主库建立通信并开始拉取 binlog 数据的线程。
从库中 system user 线程就是拉取到 binlog 信息,然后执行 SQL 的线程。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词