正常切换

  1. 停止客户端应用(即停止客户端对主库的操作)。
  2. 确认所有从库同步完成,参考2
  3. 获取主库状态值,参考3
  4. 获取从库状态值,参考4
  5. 对比前面获取的主库状态值和从库状态值,确认从库是否完成所有relay log的回放,参考5
  6. 从库1升级为主库。

    1. 登录从库1。
      1
      /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock
      
    2. 从库1升级为主库。

      停止slave,删除slave的所有信息,查看slave状态。

      1
      2
      3
      stop slave;
      reset slave all;
      show slave status \G;
      

      查看master状态,记录File参数值(binlog日志文件)和Position参数值(binlog中最新操作的位置),8.4会用到这2个参数值。

      1
      show master status;
      

      如果主库想重置File(binlog日志文件)和Position(binlog中最新操作的位置),则执行:

      1
      2
      reset master;
      show master status;
      
    3. 确认新主库(从库1)的log_bin值为ON。
      1
      show variables like 'log_bin';
      

      若log_bin值为OFF,执行下面的操作:

      1. 打开配置文件。
        1
        vim /etc/my.cnf
        
      2. “i”进入编辑模式,修改以下内容。
        [mysqld]
        log-bin=mysql-bin
      3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
      4. 重启MySQL服务,如果成功则没问题。
        1
        service mysql restart
        

        或者

        1
        2
        /usr/local/mysql/bin/mysqladmin -uroot -p123456 shutdown -S /data/mysql/run/mysql.sock
        /usr/local/mysql/bin/mysqld  --defaults-file=/etc/my.cnf &
        

  7. 从库2指向新主库。

    1. 登录从库2。
      1
      /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock
      
    2. 停止slave,删除slave的所有信息,查看slave状态。
      1
      2
      3
      stop slave;
      reset slave all;
      show slave status \G;
      
    3. 配置同步方式,参考4
    4. 从库2指向新主库(根据3的同步方式选择)。
      • 传统方式(master_log_file和master_log_pos是6.b新主库查询到的,根据实际情况修改):
        1
        change master to master_host='192.168.220.72',master_port=3306,master_user='replicate',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=155;
        
      • GTID方式:
        1
        change master to master_host='192.168.220.72',master_port=3306,master_user='replicate',master_password='123456',master_auto_position=1;
        
    5. 启动从库。
      1
      start slave;
      
    6. 查看从库状态。
      1
      show slave status \G;
      

      下面两项值均为Yes,即表示设置从库成功。

      Slave_IO_Running: Yes

      Slave_SQL_Running: Yes

  8. 旧主库指向新主库。

    1. 登录旧主库(当前已经是从库)。
      1
      /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock
      
    2. 停止slave,删除slave的所有信息,查看slave状态。
      1
      2
      3
      stop slave;
      reset slave all;
      show slave status \G;
      
    3. 配置同步方式,参考4
    4. 旧主库指向新主库(根据3的同步方式选择)。
      • 传统模式(master_log_file和master_log_pos是6.b新主库查询到的,根据实际情况修改):
        1
        change master to master_host='192.168.220.72',master_port=3306,master_user='replicate',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=155;
        
      • GTID模式:
        1
        change master to master_host='192.168.220.72',master_port=3306,master_user='replicate',master_password='123456',master_auto_position=1;
        
    5. 启动从库。
      1
      start slave;
      
    6. 查看从库状态。
      1
      show slave status \G;
      

      下面两项值均为Yes,即表示设置从库成功。

      Slave_IO_Running: Yes

      Slave_SQL_Running: Yes