zoukankan      html  css  js  c++  java
  • Mysql运维管理-一主多从宕机从库切换主库继续和从库同步过程16

    1.主库master 宕机

    登录从库show processlistG

    看两个线程的更新状态

    mysql> show processlistG
    *************************** 1. row ***************************
     Id: 1
       User: system user
       Host: 
     db: NULL
    Command: Connect
       Time: 22997
      State: Waiting for master to send event
       Info: NULL
    *************************** 2. row ***************************
     Id: 2
       User: system user
       Host: 
     db: NULL
    Command: Connect
       Time: 21500
      State: Slave has read all relay log; waiting for the slave I/O thread to update it
       Info: NULL
    *************************** 3. row ***************************
     Id: 6
       User: root
       Host: localhost
     db: NULL
    Command: Query
       Time: 0
      State: NULL
       Info: show processlist
    3 rows in set (0.00 sec)

    登录从库分别查看master.info

    cat /data/3307/data/master.info
    cat /data/3308/data/master.info

    确保更新完毕,看两个从库哪个库的binlog位置最靠前更新最快,经过测试没有延迟的情况POS差距很小,甚至是一致的。

    [root@mysql ~]# sed -n "2,3p" /data/3307/data/master.info 
    mysql-bin.000010
    633

    选更新最快,POS最大作为主库

    或利用同步的功能直接选择做了实时同步的这个从库。

    授权同步用户和主库一样

    如果只是主库宕机,服务器还能起来还需要把主库的binlog拉下来,在从库补全把差距补回来。然后把这个从库作为主库。

    步骤:

    (1)确保所有relay log全部更新完毕

    在每个从库上执行stop slave io_thread;show processlist
    直到看到Slave has read all relay log 表示从库更新都执行完毕。

    (2)登录从库

    mysql –uroot –p123456 –S /data/3307/mysql.sock -e "Stop slave;Retset masterQuit"
    
    Stop slave :停止同步
    Retset master :删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件
    Quit

    (3)进到从库数据库数据根目录 删除master.info relay-log.info

    cd /data/3307/data/
    rm –f master.info relay-log.info

    检查授权表,read-only等参数,如果配置了这些参数要清理一下

    (4)3307提升从库为主库

    vim /data/3307/mysql-bin

    开启:

    log-bin = /data/3307/mysql-bin

    如果存在log-slave-updates read-only等一定注释掉
    重启mysql服务/data/3307/mysql restart
    到此为止。提升主库完毕

    (5)如果主库服务器没宕机需要去主库拉取binlog补全提升主库的从库

    (6)其他从库的操作

    已检查(同步user rep局存在)

    登录从库更改主库master_host参数

    Stop slave;
    Change master to master_host =’192.168.1.115’;如果不同步就指定位置点
    Start slave;
    Show slave statusG

    如果不同步分析新生成的主库的binlog接着往下同步。

    (7)修改程序配置文件从主数据库指定从数据库

    如果访问数据库用域名,直接可以修改hosts解析。

    (8)修理损坏的主库完成作为从库使用或者切换

    提示更多恢复信息参考mysql手册第六章的FAQ。

    2.主库以外宕机,例如:我们有计划切换,怎么做呢 ?

    a.主库锁表 ,设置同步参数change master

    b.登录所有的库查看同步状态,是否完成。

    3.Mysql5.5支持半同步

    一个插件

    一主多从主库宕机如何恢复,通过master.info确定新主库。

    半同步下的一主多从恢复直接对设置半同步的从库确定为主库。
    让某一个稳定从库和主库完全一致,即主库和这个从库都更新数据完毕,在返回给用户更新成功。

    优点:

    确保至少一个从库和主库数据一致

    缺点:

    主从之间网络延迟或者从库有问题时候,用户体验很差当然可以设置超时时间10秒。

    4.从库slave宕机

    恢复方法:重做slave

    a.导入数据

    mysql –uroot –p123456 –S /data/3307/mysql.sock < test.sql &

    b.配置从库同步参数Change master

    mysql> CHANGE MASTER TO
     -> MASTER_HOST='192.168.1.115',   主库的IP
     -> MASTER_PORT=3306, 主库的端口,从库端口可以和主库不同
     -> MASTER_USER='rep',主库上建立的用于复制的用户rep
     -> MASTER_PASSWORD='123456', 这里是rep的密码
     -> MASTER_LOG_FILE='mysql-bin.000036',这里是show master status;查看到的二进制日志文件名称注意不能有空格。
     -> MASTER_LOG_POS=335;这里也是show master status时看到的二进制日志偏移量注意不能多空格。

    c. 开启从库同步开关,查看同步状态

    start slave;
    show slave statusG
  • 相关阅读:
    理解k8s资源限制系列(二):cpu time
    计算机网络 第五章:传输层
    SYN 攻击原理及解决方法
    Lua中 pairs和ipairs的区别
    nginx里的变量,实现简单过滤。
    LVS负载均衡(LVS简介、三种工作模式、十种调度算法)
    Lua中的loadfile、dofile、require详解
    NGINX 上的限流
    shell 输出json格式的内容
    xilinx资源
  • 原文地址:https://www.cnblogs.com/zywu-king/p/8563504.html
Copyright © 2011-2022 走看看