鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

MySQL主从切换

主从切换就是MySQL写节点出现宕机后,会自动切到备用节点。Mycat使用show slave status命令,检查主库和备库之前的心跳,Mycat心跳机制通过检测show slave status中的“Seconds_Behind_Master”、“Slave_IO_Running”、“Slave_SQL_Running”三个字段来确定当前主从同步的状态及Seconds_Behind_Master主从复制时延,当Seconds_Behind_Master>slaveThreshold时,读写分离筛选器会过滤掉此Slave机器,防止读到很久以前的旧数据,当主节点宕机后,切换逻辑会检查Slave上的Seconds_Behind_Master是否为0,为0时则表示主仅同步,可安全切换,否则不会切换。

  1. 配置Mycat schema.xml文件。
    1. 打开文件。
      1
      vim /usr/local/mycat/conf/schema.xml
      
    2. “i”进入编辑模式,添加如下内容。
      1
      <writeHost host="hosts" url="localhost:3313" user="root" password="123456" />
      

    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    4. 启动Mycat并查询状态。
      1
      2
      3
      mycat stop
      mycat start
      mycat status
      

      Mycat主从切换通过switchType进行配置,本文采用默认值。

      • -1表示不自动切换。
      • 1表示默认值,自动切换。
      • 2基于MySQL主从同步的状态决定是否切换。
  2. 执行连接测试。
    1. 打开文件。
      1
      vim /home/write.sh
      
    2. “i”进入编辑模式,替换为如下内容。
      1
      2
      3
      4
      5
      #!/bin/bash
      for i in {20001..22000}
      do
      /usr/local/mysql/bin/mysql -uroot -p1234567 -P8066 -h127.0.0.1 --default_auth=mysql_native_password -Dsysbench -e "insert into test1(id,report_hostname) values($i,@@report_host)"
      done
      
    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    4. 执行脚本。
      1
      sh /home/write.sh
      
  3. 确认测试数据。
    1
    /usr/local/mysql/bin/mysql -uroot -p1234567 -P8066 -h127.0.0.1 --default_auth=mysql_native_password -Dsysbench -e "select * from test1"
    

  4. 连接MySQL数据库并关闭主库。
    1
    2
    /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysqlm.sock
    shutdown;
    
  5. 执行连接测试。
    1. 打开文件。
      1
      vim /home/write.sh
      
    2. “i”进入编辑模式,修改插入的记录数从22001到24000。
      1
      2
      3
      4
      5
      #!/bin/bash
      for i in {22001..24000} 
      do
      /usr/local/mysql/bin/mysql -uroot -p1234567 -P8066 -h127.0.0.1 --default_auth=mysql_native_password -Dsysbench -e "insert into test1(id,report_hostname) values($i,@@report_host)"
      done
      
    3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    4. 执行脚本。
      1
      sh /home/write.sh
      
  6. 再次确认数据。
    1
    /usr/local/mysql/bin/mysql -uroot -p1234567 -P8066 -h127.0.0.1 --default_auth=mysql_native_password -Dsysbench -e "select * from test1"
    

    原来的备库切换为主库,所有写操作都路由到新的主库上执行。