mysql HA异常最新恢复方案

背景:

120 是对的主

121 是错的备

mysql重新HA

1、两库 stop slave;

2、主库备份:

导出所有数据库

mysqldump -uroot -pXXX --all-databases>all100.sql

导出db1、db2两个数据库的所有数据

mysqldump -h XXX.120 -P 16603 -uroot -pXXX

--set-gtid-purged=OFF

--source-data=2

--databases big_data_etl_old bigdata_etl

--triggers --routines --events > dpallnew.sql

修改/etc/my.conf(需重启mysql)systemctl restart mysqld

#需要复制的数据库,如果有多个数据库,需要重复设置此参数,每个数据库一行

replicate-do-db=big_data_etl_old

replicate-do-db=bigdata_debug

replicate-do-db=bigdata_etl

replicate-do-db=doris_manager

#不需要复制的数据库,如果有多个数据库,需要重复设置此参数,每个数据库一行

replicate-ignore-db=mysql

replicate-ignore-db=sys

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

3、查看备份的点位

head -n 50 dpall.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000141', MASTER_LOG_POS=187980344;

4、导入备库:

导入:source /data01/dpall.sql;

5、备库同步主库

change master to

master_host = 'XXX.120',

MASTER_PORT = 16603,

master_user = 'replication',

master_password = 'XXX',

master_log_file = 'mysql-bin.000141',

master_log_pos = 187980344;

start slave;

6、查看同步情况

SHOW SLAVE STATUS\G

7、备库锁表 flush tables with read lock; 锁定为只读状态

8、查看备库master状态 (MySQL服务器二进制文件名与位置)

mysql> show master status;

±-----------------±---------±-------------------±--------------------------------------------±------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

±-----------------±---------±-------------------±--------------------------------------------±------------------+

| mysql-bin.000002 | 3087 | ambari,hive,ranger | mysql,information_schema,performance_schema | |

±-----------------±---------±-------------------±--------------------------------------------±------------------+

9、主库同步备库

change master to

master_host = 'XXX.121',

MASTER_PORT = 16603,

master_user = 'replication',

master_password = 'XXX',

master_log_file = 'mysql-bin.000025',

master_log_pos = 157;

start slave;

10、查看同步情况

SHOW SLAVE STATUS\G

11、备库解锁 unlock tables;

12、Keepalived重新配置

121配置:#vi /etc/keepalived/keepalived.conf

global_defs {

notification_email {

}

}

复制代码
vrrp_instance PX_MYSQL {
    state MASTER
    interface team0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass password123
    }
    virtual_ipaddress {
        XXX.119
    }
}

virtual_server XXX.119 16603 {
    delay_loop 3
    lb_algo wrr
    lb_kind DR
    persistence_timeout 9600
    protocol TCP

    real_server XXX.121 16603 {
        notify_down /usr/sbin/stop_keepalived.sh
        weight 1
        TCP_CHECK {
          connect_timeout 10
          connect_port    16603
        }
    }
}

120配置:#vi /etc/keepalived/keepalived.conf

global_defs {

notification_email {

}

}

复制代码
vrrp_instance PX_MYSQL {
    state MASTER
    interface team0
    virtual_router_id 50
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass password123
    }
    virtual_ipaddress {
        XXX.119
    }
}

virtual_server XXX.119 16603 {
    delay_loop 3
    lb_algo wrr
    lb_kind DR
    persistence_timeout 9600
    protocol TCP

    real_server XXX.120 16603 {
        notify_down /usr/sbin/stop_keepalived.sh
        weight 1
        TCP_CHECK {
          connect_timeout 10
          connect_port    16603
        }
    }
}

keepalived自监控

####################################

crontab -e

##start keepalived if mysqld started.

          • /usr/sbin/start_keepalived.sh &>/dev/null
            ####################################

cat /usr/sbin/start_keepalived.sh (service | systemctl命令监控mysql状态)

#!/bin/sh

#start keepalived if mysqld started.

#* * * * * /usr/sbin/start_keepalived.sh &>/dev/null

if $(systemctl status mysqld\|grep -c "active (running)") -eq 1 ;

then

if $(systemctl status keepalived.service\|grep -c "active (running)") -eq 0 ;

then

systemctl start keepalived

fi

fi

####################################

cat /usr/sbin/stop_keepalived.sh

#!/bin/sh

systemctl stop keepalived

####################################

-- 在从库上执行

STOP SLAVE; -- 1. 停止复制线程

SET GLOBAL sql_slave_skip_counter = 1000; -- 2. 设置跳过下1000个事务(或事件)

START SLAVE; -- 3. 重新启动复制

SHOW SLAVE STATUS\G; -- 4. 检查是否恢复正常

相关推荐
李兆龙的博客43 分钟前
问津集 #26:Lakebase——Postgres 的版本化页面存储、数据库分支与计算弹性
数据库
倔强的石头_3 小时前
聊聊金仓KFS:一款把数据同步软件做扎实的产品
数据库
闲云野鹤在人间3 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
禾小西3 小时前
Redis:从两大维度和三大主线建立知识体系
数据库·redis·缓存
禾小西4 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
数据库小学妹4 小时前
数据共享交换平台选型:交换方式对比与避坑指南
数据库·信创·数据同步·数据交换平台·政务数据共享·数据共享交换平台·数据库底座
要开心吖ZSH5 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
loong_XL6 小时前
决策模型做内容安全检测:从踩坑到上线
数据库·安全·jev·决策模型
这个DBA有点耶6 小时前
数据库双轨并行实战:全量并行策略、增量延迟控制、双向回切与一致性校验
数据库·架构·dba
Gl�ria6 小时前
MySQL 单机版 vs 高可用版:宕机排查 + 故障处理
mysql·adb·架构