MySQL 8 主从复制

什么是主从复制?

主从复制是指将一个 MySQL 数据库服务器(主服务器)的数据同步到一个或多个其他 MySQL 数据库服务器(从服务器)的过程。主从复制是常见的数据库架构设计模式,用于提供数据冗余、增加读取性能和实现高可用性。

在主从复制中,主服务器持续地将数据变更记录到二进制日志(binary log)中,并将这些日志传输到从服务器。从服务器将这些日志应用到自己的数据库中,以保持与主服务器的数据一致性。

主从复制的优势

主从复制提供了以下优势:

  1. 数据冗余和可靠性:主从复制可以将数据复制到多个从服务器上,即使主服务器发生故障,从服务器仍然可以提供服务和数据。

  2. 读写分离:主服务器负责处理写操作,而从服务器负责处理读操作,从而分担了主服务器的负载,提高了整个数据库系统的性能。

  3. 数据备份:从服务器可以用作主服务器的实时备份,当主服务器出现故障时,可以快速切换到从服务器。

如何设置主从复制?

设置主从复制需要完成以下步骤:

  1. 配置主服务器

    在主服务器上进行如下配置:

    • 启用二进制日志(binary log):在 MySQL 配置文件中(通常是my.cnf),将log_bin设置为ON。这将启用主服务器的二进制日志功能。

    • 创建用于复制的用户:使用 MySQL 客户端连接到主服务器,并创建用于复制的用户,并赋予REPLICATION SLAVE权限。

    • 记下主服务器的二进制日志文件名和位置:使用SHOW MASTER STATUS命令,记录下FilePosition字段的值,以便在从服务器上配置复制。

  2. 配置从服务器

    在从服务器上进行如下配置:

    • 配置从服务器连接到主服务器:使用 MySQL 客户端连接到从服务器,并使用CHANGE MASTER TO命令配置从服务器连接到主服务器。指定主服务器的地址、用户名和密码,并提供主服务器的二进制日志文件名和位置。

    • 启动从服务器的复制进程:使用START SLAVE命令启动从服务器的复制进程。

  3. 验证复制是否正常工作

    • 使用SHOW SLAVE STATUS命令检查从服务器的状态。确保Slave_IO_RunningSlave_SQL_Running字段的值为YES,表示复制进程正在正常运行。

    • 在主服务器上进行一些数据变更操作,然后在从服务器上查询相同的数据,确保数据已经成功复制到从服务器上。

示例代码

下面是一个示例配置主从复制的代码:

### 配置主服务器

1. 打开`my.cnf`配置文件,并添加以下行:

   ```ini
   [mysqld]
   log-bin=mysql-bin
   server-id=1
  1. 重启主服务器以使配置生效。

  2. 使用 MySQL 客户端连接到主服务器,并执行以下命令:

    CREATE USER 'replication'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
    FLUSH PRIVILEGES;
    
  3. 使用以下命令记录下主服务器的二进制日志文件名和位置:

    SHOW MASTER STATUS;
    

配置从服务器

  1. 打开my.cnf配置文件,并添加以下行:

    [mysqld]
    server-id=2
    
  2. 重启从服务器以使配置生效。

  3. 使用 MySQL 客户端连接到从服务器,并执行以下命令:

    CHANGE MASTER TO MASTER_HOST='主服务器IP', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_LOG_FILE='主服务器的二进制日志文件名', MASTER_LOG_POS=主服务器的二进制日志位置;
    START SLAVE;
    
  4. 使用以下命令检查从服务器的状态:

    SHOW SLAVE STATUS;
    

验证