美文网首页
mysql主从架构-主从正常切换,主库宕机切换。

mysql主从架构-主从正常切换,主库宕机切换。

作者: 爱斯基摩白 | 来源:发表于2020-04-03 15:17 被阅读0次
    1. 检查slave同步状态

    在开始切换之前先对主库进行锁表:

    flush tables with read lock

    (在执行完成后生产环境必须等待所有语句执行完成)

    在flush tables with read lock成功获得锁之前,必须等待所有语句执行完成(包括SELECT)。所以如果有个慢查询在执行,或者一个打开的事务,或者其他进程拿着表锁,flush tables with read lock就会被阻塞,直到所有的锁被释放。请看下面的例子:

    [ 复制代码

    ](javascript:void(0); "复制代码")

    复制代码

    <pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">mysql> show processlist;
    +----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+
    | Id | User | Host | db | Command | Time | State | Info |
    +----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+
    | 4 | root | localhost | test | Query | 80 | Sending data | select count(*) from t t1 join t t2 join t t3 join t t4 where t1.b=0 |
    | 5 | root | localhost | test | Query | 62 | Flushing tables | flush tables with read lock |
    | 6 | root | localhost | test | Field List | 35 | Waiting for table | |
    | 7 | root | localhost | test | Query | 0 | NULL | show processlist |
    +----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+
    4 rows in set (0.00 sec)</pre>

    [ 复制代码

    ](javascript:void(0); "复制代码")

    flush data

    切换完成后可以释放锁

    unlock tables

    1)在master执行:show processlist;

    显示Master has sent all binlog to slave; waiting for binlog to be updated

    2)在slave执行:show processlist;

    显示Slave has read all relay log; waiting for the slave I/O thread to update it

    mysql> show slave status \G;

    检查IO及SQL线程是否正常,如果为NO表明同步不一致,需要重新将slave同步保持主从数据一致。

    3)停止slave io线程

    在slave执行:mysql> STOP SLAVE IO_THREAD

    mysql> SHOW PROCESSLIST;

    确保状态为:has read all relay log

    以上都执行完成后可以把slave提升为master:

    4)提升slave为master

    Stop slave;

    Reset master;

    Reset slave all; 在5.6.3版本之后

    Reset slave; 在5.6.3版本之前

    查看slave是否只读模式:show variables like 'read_only';

    只读模式需要修改my.cnf文件,注释read-only=1并重启mysql服务。

    或者不重启使用命令关闭只读,但下次重启后失效:set global read_only=off;

    mysql> show master status \G;

    备注:reset slave all 命令会删除从库的 replication 参数,之后 show slave status\G 的信息返回为空。

    5)将原来master变为slave

    在新的master上创建同步用户:

    grant replication slave on . repl@'IP of slave' identified by 'replpwd';

    在新的slave上重置binlog:

    Reset master;

    change master to master_host='192.168.0.104', //Master 服务器Ip

    master_port=3306,

    master_user='repl',

    master_password=’replpwd’,

    master_log_file='master-bin.000001',//Master服务器产生的日志

    master_log_pos=?;//master binlog pos

    以上最后两步可以在master执行:show master status

    启动slave:start slave; 并查看slave状态:show slave status\G;

           异常切换
    

    主机故障或者宕机:

    1. 在salve执行:

    stop slave;

    reset master;

    查看是否只读模式:show variables like 'read_only';

    只读模式需要修改my.cnf文件,注释read-only=1并重启mysql服务。

    或者不重启使用命令关闭只读,但下次重启后失效:set global read_only=off;

    查看show slave status \G;

    查看show master status \G;

    将从库IP地址改为主库IP地址,测试应用连接是否正常。

    相关文章

      网友评论

          本文标题:mysql主从架构-主从正常切换,主库宕机切换。

          本文链接:https://www.haomeiwen.com/subject/cmghphtx.html