自学内容网 自学内容网

MySQL 主从复制、切换

MySQL 主从复制是一种常见的高可用性和数据冗余解决方案,通过将数据从主服务器(Master)同步到从服务器(Slave),可以实现数据备份和读写分离。

MySQL 主从复制配置

1. 配置主服务器(Master)
  1. 编辑配置文件
    打开 MySQL 配置文件(通常是 /etc/my.cnf/etc/mysql/my.cnf),添加或修改以下内容:

    [mysqld]
    server-id=1
    log-bin=mysql-bin
    binlog-do-db=your_database_name  # 可选,指定要同步的数据库
    
  2. 重启 MySQL 服务
    使配置生效。

    sudo systemctl restart mysql
    
  3. 创建复制用户
    登录到 MySQL 并创建一个用于复制的用户。

    CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
    FLUSH PRIVILEGES;
    
  4. 获取二进制日志文件和位置
    记录当前的二进制日志文件和位置,以便从服务器使用。

    FLUSH LOGS;
    SHOW MASTER STATUS;
    

    输出示例:

    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 | 12345    |              |                  |
    +------------------+----------+--------------+------------------+
    
2. 配置从服务器(Slave)
  1. 编辑配置文件
    打开 MySQL 配置文件,添加或修改以下内容:

    [mysqld]
    server-id=2
    relay-log=mysql-relay-bin
    
  2. 重启 MySQL 服务
    使配置生效。

    sudo systemctl restart mysql
    
  3. 配置从服务器连接主服务器
    登录到 MySQL 并配置从服务器连接到主服务器。

    CHANGE MASTER TO 
    MASTER_HOST='master_ip_address',
    MASTER_USER='replication_user',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=12345;
    
  4. 启动从服务器的复制
    开始从服务器的复制进程。

    START SLAVE;
    
  5. 验证复制状态
    检查从服务器的复制状态,确保没有错误。

    SHOW SLAVE STATUS\G;
    

    关键字段:

    • Slave_IO_Running: 应该为 Yes
    • Slave_SQL_Running: 应该为 Yes
    • Last_Error: 应该为空

MySQL 主从复制切换

1. 准备阶段
  1. 确认主从复制状态
    确保主从复制正常运行,从服务器已经完全同步了主服务器的数据。

    -- 在主服务器上查看状态
    SHOW MASTER STATUS;
    
    -- 在从服务器上查看状态
    SHOW SLAVE STATUS\G;
    
  2. 停止从服务器的复制
    停止从服务器上的复制进程,防止在切换过程中数据发生变化。

    STOP SLAVE;
    
2. 切换过程
  1. 将从服务器提升为主服务器
    将从服务器提升为主服务器,需要修改其配置文件,移除或注释掉 relay-log 相关的配置,添加 log-bin 配置。

    [mysqld]
    server-id=1
    log-bin=mysql-bin
    
  2. 重启从服务器
    重启从服务器,使其生效新的配置。

    sudo systemctl restart mysql
    
  3. 修改应用程序连接
    修改应用程序的数据库连接配置,将连接指向新的主服务器。

3. 恢复原主服务器
  1. 将原主服务器降级为从服务器
    在原主服务器上修改配置文件,将其配置为从服务器。

    [mysqld]
    server-id=2
    relay-log=mysql-relay-bin
    
  2. 启动原主服务器的复制
    启动原主服务器上的复制进程,使其从新的主服务器同步数据。

    -- 在原主服务器上执行
    CHANGE MASTER TO 
    MASTER_HOST='新主服务器的IP',
    MASTER_USER='replication_user',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=12345;
    
    START SLAVE;
    
4. 验证切换
  1. 验证数据一致性
    确保所有数据已经同步完成,可以在从服务器上执行一些查询,验证数据的一致性。

    SELECT * FROM your_table LIMIT 10;
    
  2. 监控复制状态
    持续监控从服务器的复制状态,确保没有错误。

    SHOW SLAVE STATUS\G;
    

注意事项

  1. 数据一致性:切换过程中要确保数据的一致性,避免数据丢失或损坏。
  2. 应用程序影响:切换过程中可能会对应用程序产生短暂的影响,因此最好选择在业务低峰期进行切换。
  3. 备份:在切换前做好数据备份,以防万一。
  4. 监控:切换后要持续监控系统的运行状态,确保一切正常。

原文地址:https://blog.csdn.net/qq_18296979/article/details/143415022

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!