背景:
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
####################################
- /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. 检查是否恢复正常