• MySQL主从切换


    MySQL主从切换手册

    Master-Slave架构

     

     

    正常切换

    1. 检查slave同步状态

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

    flush tables with read lock

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

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

    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)

    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 statusG 的信息返回为空。

    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 statusG;

               异常切换

    主机故障或者宕机:

    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地址,测试应用连接是否正常。

     

     

    <完>

  • 相关阅读:
    Python-单例模式
    Django 内置模板标签和过滤器
    Python Built-in Function 学习笔记
    Django 中间件
    Django Form
    Ajax
    Django中cookie和session
    Django中的QuerySet
    Django模型和ORM
    wordpress添加子主题
  • 原文地址:https://www.cnblogs.com/xzlive/p/13158943.html
Copyright © 2020-2023  润新知