基于gtids的主从复制搭建

slave服务器不小心写入数据的解决方案

如果数据⽐较少,可以通过跳过当前语句的⽅式解决,但是如果从服务器写⼊的数据⽐较多,架构必须重新搭建

可通过变量sql_slave_skip_counter临时跳过事务进⾏处理

mysql> set GLOBAL sql_slave_skip_counter=N # n代表跳过的n个事务

mysql> stop slave;

mysql> start slave;

跳过事务应该在slave上运⾏

传统的ab复制⽅式可以使⽤,基于GTIDs的⽅式不⽀持

基于gtids的主从复制搭建

GTIDs是完全基于事务的,因此不⽀持MYISAM存储引擎

gtids的限制条件:

  1. 不⽀持⾮事务引擎(MyISAM)因为可以回导致多个gtid分布给同⼀个事务

  2. create table select语句不⽀持(主库语法报错)

  3. create、drop temprary table语法不⽀持

  4. 必须使⽤enforce-gtid-consistency参数

  5. sql-slave-skip-counter不⽀持

  6. gtid复制环境中必须统⼀开启gtid或者关闭gtid

  7. 在5.7之前使⽤mysql upgrade命令也会出现问题

步骤:

replication是基于传统的⽅式部署,并且已经在运⾏,利⽤已经存在的环境升级⾄基于GTIDs的replication

  1. 修改配置⽂件,⽀持GTIDs(主从)

主服务器:

gtid-mode=on

log-slave-updates=1

enforce-gtid-consistency

从服务器:

log-bin=/usr/local/mysql/data/binlog

gtid-mode=on

log-slave-updates=1

enforce-gtid-consistency

skip-slave-start

  1. 重启数据库(主从)

service mysql8 restart

  1. 为了保证数据⼀直,master和slave都设置为只读

mysql> set @@global.read_only=ON;

Query OK, 0 rows affected (0.01 sec)

  1. 从服务器上重新配置同步

即slave重新配置change master to

mysql> stop slave;

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> reset slave;

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> change master to

-> master_host='192.168.118.20',

-> master_user='slave',

-> master_password='slave',

-> master_port=3306,

-> master_auto_position=1;

Query OK, 0 rows affected, 8 warnings (0.01 sec)

mysql> start slave;

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for source to send event

Master_Host: 192.168.118.20

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: binlog.000015

Read_Master_Log_Pos: 157

Relay_Log_File: relaylog.000002

Relay_Log_Pos: 367

Relay_Master_Log_File: binlog.000015

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

5.关闭主从服务器的只读模式

mysql> set @@global.read_only=OFF;

Query OK, 0 rows affected (0.00 sec)

相关推荐
Lstone736420 分钟前
Bitmap深入分析(一)
android
一起搞IT吧1 小时前
Android功耗系列专题理论之十四:Sensor功耗问题分析方法
android·c++·智能手机·性能优化
ByNotD0g2 小时前
Doris 学习笔记
android·笔记·学习
修炼者2 小时前
【Android进阶】 RenderEffect的底层实现
android
bropro2 小时前
MySQL不使用子查询的原因
android·数据库·mysql
执笔论英雄3 小时前
【cuda】 pinpaged
android·java·数据库
gp3210263 小时前
开放自己本机的mysql允许别人连接
数据库·mysql·adb
新青年.3 小时前
Android(Compose)使用 LibVLC 播放 RTSP 视频流
android
一见4 小时前
WorkBuddy安装Skill的方法
android·java·javascript