基于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)

相关推荐
android_xc1 天前
Android Studio适配butterknife遇到的坑
android·ide·android studio·butterknife
2501_915918411 天前
uni-app 项目 iOS 上架效率优化 从工具选择到流程改进的实战经验
android·ios·小程序·uni-app·cocoa·iphone·webview
00后程序员张1 天前
如何在不同 iOS 设备上测试和上架 uni-app 应用 实战全流程解析
android·ios·小程序·https·uni-app·iphone·webview
米豆同学1 天前
SufraceFlinger图像合成原理(3)-SurfaceFlinger中Layer的创建和销毁
android
米豆同学1 天前
SufraceFlinger图像合成原理(2)-SurfaceFlinger与应用进程间的通信
android
用户2018792831671 天前
uses-library:系统应用报NoClassDefFoundError问题
android
叽哥1 天前
Kotlin学习第 4 课:Kotlin 函数:从基础定义到高阶应用
android·java·kotlin
mg6681 天前
安卓玩机工具----安卓“搞机工具箱”最新版 控制手机的玩机工具
android·智能手机
诺诺Okami1 天前
Android Framework- Activity启动2
android
米豆同学1 天前
SystemUI plugin 开发
android