背景在GreatSQL主从复制环境中,有时候可能会出现一些误操作,将本应该写入到主库的数据写入到了从库,导致主从数据不一致,影响数据同步。是否可以将写入从库的数据同步写入主库呢?测试环境角色IP地址数据库开放端口版本主库192.168.137.1793308GreatSQL8.0.32从库192.168.137.1803308GreatSQL8.0.32复制链路:greatsql>showslavestatus\G;***************************1.row***************************Slave_IO_State:Waitingforsource
背景在GreatSQL主从复制环境中,有时候可能会出现一些误操作,将本应该写入到主库的数据写入到了从库,导致主从数据不一致,影响数据同步。是否可以将写入从库的数据同步写入主库呢?测试环境角色IP地址数据库开放端口版本主库192.168.137.1793308GreatSQL8.0.32从库192.168.137.1803308GreatSQL8.0.32复制链路:greatsql>showslavestatus\G;***************************1.row***************************Slave_IO_State:Waitingforsource
我们了解到在主从库集群模式下,如果从库发生故障,客户端可以继续向主库或其他从库发送请求,执行相应的操作。然而,当主库发生故障时,会直接影响从库的同步,因为此时从库失去了可用的主库进行数据复制。而且,如果客户端发送的都是读操作请求,那还可以由从库继续提供服务,这在纯读的业务场景下还能被接受。但是,一旦有写操作请求了,按照主从库模式下的读写分离要求,需要由主库来完成写操作。此时,也没有实例可以来服务客户端的写操作请求了,如下图所示:图片主库故障后,导致从库无法提供写操作的服务,这种情况是不可接受的。因此,在主库发生故障时,我们需要启动一个新的主库,通常是将一个从库升级为主库并将其作为新的主库。然而
例如在交易中,STARTTRANSACTION;SELECTcount(*)ascountFROM`order`WHEREuser_id=25286LOCKINSHAREMODE;INSERTINTO`order`(`id`,`user_id`,`product_id`)VALUES(NULL,'25286','36296');我们执行SELECTLOCKINSHAREMODE;SELECT查询将在从数据库上执行并锁定一行。SELECTLOCKINSHAREMODE是否也在master数据库上创建行锁定,以便INSERT查询不会在master数据库上运行?