mysql 主从同步

mysql 主从同步

Mysql 读写分离

MySQL的扩展

  • 读写分离
  • 复制:每个节点都有相同的数据集
    • 向外扩展
    • 二进制日志
    • 单向

复制的功用:

  • 数据分布
    
  • 负载均衡读
    
  • 备份
    
  • 高可用和故障切换
    
  • MySQL升级测试
    

读写分离应用:

mysql-proxy:Oracle
https://downloads.mysql.com/archives/proxy/
Atlas:Qihoo
https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md
dbproxy:美团
https://github.com/Meituan-Dianping/DBProxy
Cetus:网易乐得
https://github.com/Lede-Inc/cetus
Amoeba:
https://sourceforge.net/projects/amoeba/

Mysql 主从复制

Scale Up 纵向扩展:让服务器性能,尽可能的提高,买更好的硬盘,内存,CPU
Scale Out 横向扩展:读写分离 复制

横向扩展的本质:拆 ,不停的拆分 各个功能,把数据库的服务,把用户请求 分散在多台服务器上 分布式

复制 单向: 只允许主往从复制,不允许从往主复制。
主从复制有的时候延迟也会比较长,可能延迟1个小时。

需要一个调度器,来调度读写分离

实现:在主服务器上对数据进行增删改的同时,会生成事务日志和二进制日志。事务日志和二进制日志的组成,就可以知道当前对数据库执行的具体操作。这时候从主服务器开启一个线程,dump Thread
这个线程会把二进制中的数据,通过tcp 长连接,传递到从服务器的io thread ,从服务器收到后,存到relay log 中(relay log 是从服务器上自动生成的),然后从服务器把它通过sql thread 来应用到数据库中,这样从服务器也就获得了相同的数据。

mysql 垂直分区

将用户数据,按不同的类别,拆分开来。

水平分区

按照用户的UID,来拆分。比如1-10W,服务器1,10W-20W,服务器2 需要一个分片管理器

主从复制原理

主从复制线程:
主节点:
dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其
发送binary log events

从节点:
I/O Thread:向Master请求二进制日志事件,并保存于中继日志中
SQL Thread:从中继日志中读取日志事件,在本地完成重放

跟复制功能相关的文件:
master.info:用于保存slave连接至master时的相关信息,例如账号、密码、服务器地址等 (主服务器上需要一个只有复制权限的账户,用于从服务器使用。)
relay-log.info:保存在当前slave节点上已经复制的当前二进制日志和本地replay log日志的对应关系

主从复制特点

同步复制:表示主服务器接收到数据变更请求后,告知从服务器,从服务器全部更改完成后,再告诉主服务器,主服务器再接收下一次的请求,这种往往需要的时间太长,真实企业环境中不使用。

异步复制
表示主服务器只关注自己的数据变更,变更完成后即接收下一次的请求,每次变更数据都会发送请求给从服务器,不关注从服务器是否已经同步变更数据完成了。
主从数据不一致比较常见

主从复制中的几个模型

分别为:

一主一从

一台主服务器带一台从属服务器,最基本的配置要求。如果主服务器瘫痪,就只能使用该从服务器,并且就没有更多的备份了。

一主多从

一台主服务器配合多台从服务器,当主服务器宕机后,可以提升从服务器为主服务器。并存在数据冗余。

级联从属

主 --> 从 --> 从
如果想实现这样的架构,称为级联复制,那么要把二级从服务器的二进制日志开起来
有效降低主服务器配置多台从设备后所需要承担的压力

多主一从

别作死,数据会爆。
在从服务器上搭建多个mysql实例,每个实例作为不同的其他mysql的从服务器。

主主架构和环形架构完全不推荐真实企业环境使用。百度了解即可。

复制架构中注意的问题

复制架构中应该注意的问题:
1、限制从服务器为只读
在从服务器上设置read_only=ON (防止无关人员的误操作。)

set global read_only=ON;

注意:此限制对拥有SUPER权限的用户均无效,此限制对拥有SUPER权限的用户均无效,此限制对拥有SUPER权限的用户均无效 (root 用户是可以删的。)

阻止所有用户, 包括主服务器复制的更新 (该方法企业实战中,不采用!!!除非出现重大事故问题。)
mysql> FLUSH TABLES WITH READ LOCK;

RESET SLAVE
在从服务器清除master.info ,relay-log.info, relay log ,开始新的relay
log ,注意:需要先STOP SLAVE
RESET SLAVE ALL 清除所有从服务器上设置的主服务器同步信息如:
PORT, HOST, USER和 PASSWORD 等

如何保证主从复制的事务安全
参看https://mariadb.com/kb/en/library/server-system-variables/

在master节点启用参数:
sync_binlog=1 每次写后立即同步二进制日志到磁盘,性能差 如果数据安全非常重要,可以开启,如果追求性能,就写0

如果用到的为InnoDB存储引擎:
innodb_flush_log_at_trx_commit=1 每次事务提交立即同步日志写磁盘
数据库主服务器的更改,正常情况下是并发的。然而binlog 往从服务器中复制数据,是串行的,而不是并行的。
他会把多个并行任务,变成一个串行任务。所以可能造成拥堵

可以根据 master.info中的信息,判断哪台从服务器的数据更新,未来如果要提升为主,可以用最新的来进行提升。

innodb_support_xa=ON 默认值,分布式事务MariaDB10.3.0废除
sync_master_info=# #次事件后master.info同步到磁盘

在slave节点启用服务器选项:
skip_slave_start=ON 不自动启动slave

在slave节点启用参数:
sync_relay_log=# #次写后同步relay log到磁盘
sync_relay_log_info=# #次事务后同步relay-log.info到磁盘

#从主服务器读到的日志文件位置
         Read_Master_Log_Pos: 3007782
        Relay_Log_File: localhost-relay-bin.000011
#中继日志位置
         Relay_Log_Pos: 3006933
        Relay_Master_Log_File: mysql-bin.000005
#已经执行到的日志文件位置
          Exec_Master_Log_Pos: 3007782
              Relay_Log_Space: 3007246


主从配置

配置主从服务器ID的时候,要注意保证每个服务器的ID不一致即可。
可以把grant账号再从服务器也创建一份,可能未来主服务器宕机的话,需要提升从服务器为主服务器。

主服务器配置

vim /etc/my.cnf

#启用主从复制,必须,开启二进制日志功能
log_bin=/data/binlog/
#指定实例id
server_id=1
log-basename=master

#授权一个拥有Mysql复制权限的账户
grant replication slave on *.* to repluser@'192.168.30.%' identified by 'slave';

从服务器配置

vim /etc/my.cnf
#为当前节点设置一个全局惟的ID号
server_id=2
#通常企业环境中,从服务器是只读的,用户只读取数据,除非要做级联复制,否则没必要开启二进制日志功能。
#启动中继日志,可开可不开
#relay log的文件路径,默认值hostname-relay-bin
relay_log=relay-log 
#默认值 hostname -relay-bin.index
relay_log_index=relay-log.index 

重启mysql服务器,进入交互界面,设置主服务器
CHANGE MASTER TO MASTER_HOST='192.168.30.17',          #(主服务器地址)
MASTER_USER='repluser',                                # (主服务器用于从复制的账户)
MASTER_PASSWORD='slave',                               #(密码)
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=245;                                    #(表示从主服务器的哪个二进制日志,哪个位置开始进行复制备份)

#查看从服务器状态
show slave status;

#开启从服务器
START SLAVE

Seconds_Behind_Master 主服务器和从服务器的时间差

假设从服务器重启了,这时候主服务器,又执行了大量的操作,新增了大量的数据,同时生成了大量的二进制日志文件,那么从服务器现在会发生什么操作?
从服务器启动会,会自动寻找主服务器,并且去同步未同步的数据。Slave_IO 与 Slave_SQL 这两个线程,只要开启后,未来只要Mysql服务启动,他就会自动启动。

主节点有大量数据时,配置slave节点

主节点已经运行了一段时间,且有大量数据时,如何配置并启动slave节点
1.通过备份恢复数据至从服务器
2.复制起始位置为备份时,二进制日志文件及其POS

主服务器

vim /etc/my.cnf
log_bin
#为当前节点设置一个全局惟的ID号
server_id=1 
innode_file_per_table 独立表空间

#授权一个拥有Mysql复制权限的账户
grant replication slave on *.* to repluser@'192.168.30.%' identified by 'slave';

systemctl restart mariadb

mysqldump -A -F --single-transaction --master-data=1 >all.sql
scp all.sql 192.168.30.27:/data/backup/

从服务器

vim /etc/my.cnf
#为当前节点设置一个全局惟的ID号
server_id=2

#修改收到的all.sql
找到CHANGE MASTER TO 这一行,进行修改
CHANGE MASTER TO MASTER_HOST='192.168.30.17',          #(主服务器地址)
MASTER_USER='repluser',                                # (主服务器用于从复制的账户)
MASTER_PASSWORD='slave',                               #(密码)
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=245;                                    # 这两项就用all.sql里面默认的

#修改完成后导入该sql 到mysql 中
mysql < all.sql

#重启服务
systemctl restart mariadb

#查看从服务器状态
show slave status;

#开启同步服务
start slave;

主从级联复制

主 --> 从 --> 从 从 从
拓扑图
406a04e36b0ba9f1b36d2a126724b720.png

级联复制至少需要三台服务器
默认从服务器,不记录主服务器的二进制文件内容,只会直接把内容转换为数据记录在数据库内。
我们需要通过设置, 把从服务器 从主服务器获取到的二进制日志内容,可以保持在从服务器中,并且把他分发到他自身下级的从服务器中去。
如果要启用级联复制,需要在从服务器启用以下配置

vim /etc/my.cnf

[mysqld]
log_bin
log_slave_updates

建立主服务器 192.168.30.17

vim /etc/my.cnf
[mysqld]
server_id=1
login_bin
log-basename=master
innodb_file_per_table

grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';


建立级联服务器 192.168.30.27

由于该服务器虽然属于主服务器的从属设备,但是这是级联,他相当于他下级的主服务器,所以必须开启二进制功能和级联配置

vim /etc/my.cnf
[mysqld]
server_id=2
login_bin
log-basename=master-slave
log_slave_updates
read-only

#重启mysql服务器,
systemctl restart mariadb

#丛服务器在复制主数据时,最好先刷新一次二进制日志
flush logs

#进入交互界面,设置主服务器
CHANGE MASTER TO MASTER_HOST='192.168.30.17',          #(主服务器地址)
MASTER_USER='repluser',                                # (主服务器用于从复制的账户)
MASTER_PASSWORD='centos',                               #(密码)
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=400;                                    #(表示从主服务器的哪个二进制日志,哪个位置开始进行复制备份)

#建立一个账户,供级联从使用
grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';

#看看级联的日志位置
show master logs;

#开启从服务器服务
start slave;

停止从复制

stop slave;

清空slave 把从主服务器开始复制的二进制位置等信息清空,但是主服务器的设备信息还会保留

reset slave;

清空所有的slave 复制信息 (CHANGE MASTER 中所有信息) ,当需要重新开始复制的时候使用。

reset slave all;

重启开始从服务器复制

reset slave all;
rm -rf /var/lib/mysql/*
systemctl restart mariadb

#进入交互界面,设置主服务器
CHANGE MASTER TO MASTER_HOST='192.168.30.17',          #(主服务器地址)
MASTER_USER='repluser',                                # (主服务器用于从复制的账户)
MASTER_PASSWORD='centos',                               #(密码)
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=400;                                    #(表示从主服务器的哪个二进制日志,哪个位置开始进行复制备份)

#开启从服务器服务
start slave;

建立多个从服务器 192.168.30.37/ 192.168.30.47 /192.168.30.57

vim /etc/my.cnf

server_id=3
read-only

systemctl start mariadb

#进入交互界面,设置主服务器
CHANGE MASTER TO MASTER_HOST='192.168.30.27',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=245;

#查看信息是否正确
show slave stauts\G;

start slave;

级联服务器做的操作,会同步到他的从服务器中,但是不会同步到主服务器中。搭建了主从,所有的修改都应该在主服务器上,不应该在任意的从服务器上。

编辑主从的CHANGE MASTER TO MASTER_HOST的时候,所有参数都给我看看清楚!!!IP地址,对方机器上的二进制日志文件名!!对方机器上的二进制日志文件名!!对方机器上的二进制日志文件名!! 要先查看一下上级设备的二进制文件名是否正确!!!

从服务器更改目标主服务器

从服务器上执行命令

stop slave;

reset slave all;

#查看要更改目标的主服务器的二进制日志位置
show master logs;

#修改从服务器的从属
CHANGE MASTER TO MASTER_HOST='192.168.30.17',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=28478364;

#开启服务
start slave;

主服务器断电 上电后,从服务器无法继续同步主服务器内容

修复解决

主服务器操作

#全备一次
mysqldump -F -A --single-transaction --master-data=1 > all.sql

#复制到远程从服务器
scp all.sql 192.168.30.27

#确保修复完成后,可以删除不需要的二进制日志
purge binary logs to 'mysql-bin.000003'

从服务器操作

stop slave;

reset slave all;

#修改all.sql
CHANGE MASTER TO MASTER_HOST='192.168.30.17',          #(主服务器地址)
MASTER_USER='repluser',                                # (主服务器用于从复制的账户)
MASTER_PASSWORD='centos',                               #(密码)
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=245;                                    #(表示从主服务器的哪个二进制日志,哪个位置开始进行复制备份,这两个字段的值用all.sql中默认的,因为他就表示现在主服务器未来二进制日志开始的位置)

#导入恢复
mysql < all.sql

#重新启动
start slave;

主主复制模型 (生产中不要使用,会导致数据混乱,一致性差)

主主复制:互为主从
容易产生的问题:数据不一致;因此慎用
考虑要点:自动增长id

配置一个节点使用奇数id
auto_increment_offset=1 开始点
auto_increment_increment=2 增长幅度

另一个节点使用偶数id
auto_increment_offset=2
auto_increment_increment=2

主主复制的配置步骤:
(1) 各节点使用一个惟一server_id
(2) 都启动binary log和relay log
(3) 创建拥有复制权限的用户账号
(4) 定义自动增长id字段的数值范围各为奇偶
(5) 均把对方指定为主节点,并启动复制线程

主主搭建实战,主要需要注意,设置主服务器的时候,要查看对方的二进制文件的起始点,防止设置的起点错误。

主服务器A

vim /etc/my.cnf

log_bin
server_id=1
auto_increment_offset=1
auto_increment_increment=2
这样这台设备的主键增长就是1,3,5,7

#建立一个账户,供对方使用
grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';

#互相设置对方为主
CHANGE MASTER TO MASTER_HOST='192.168.30.27',          #(主服务器地址)
MASTER_USER='repluser',                                # (主服务器用于从复制的账户)
MASTER_PASSWORD='centos',                               #(密码)
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=245;

#开始同步
start slave;

主服务器B

vim /etc/my.cnf

log_bin
server_id=1
auto_increment_offset=2
auto_increment_increment=2
这样这台设备的主键增长就是2,4,6,8

#互相设置对方为主
CHANGE MASTER TO MASTER_HOST='192.168.30.17',          #(主服务器地址)
MASTER_USER='repluser',                                # (主服务器用于从复制的账户)
MASTER_PASSWORD='centos',                               #(密码)
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=245;

#开始同步
start slave;

搭建完主主后,要在两个数据库中插入有自增表的数据,观察ID。
如果不指定自增ID,他会按照配置文件中的自增规则来递增,也可以强制指定ID。如果两边同时插入同ID的数据,就会出现数据不同步的情况。

半同步复制

介于完全同步与异步之间

半同步机制:找一台同服务器,让他与主服务器,始终保持同步。也就是说,当主服务器更改过一次数据,那么他会通知这台从服务器,只有这台从服务器也修改成功了,从服务器才会通知主服务器修改成功,主服务器才会通知用户更改成功,用户才能进行其他操作。而其他的从服务器就可以异步来进行同步,不需要这样

完成半同步复制需要在主服务器和从服务器都安装一个小软件。

配置半同步复制

安装完成后查看

show plugins;

查看相关变量

show global variables like '%semi%';

查看相关状态变量

show status like '%semi%';

默认so路径:
/usr/lib64/mysql/plugin/semisync_master.so; 主服务器半同步插件
/usr/lib64/mysql/plugin/semisync_slave.so; 从服务器半同步插件

主服务器配置

#安装该插件
INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so';

#启动插件
set global rpl_semi_sync_master_enabled=1;

从服务器配置

#安装该插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so';

#启动插件
SET global rpl_semi_sync_slave_enabled=1;

如果之前从服务启动的话,需要重启一下从服务
stop slave;
start slave;

要注意,如果有多个从服务器的话,都要安装该插件。这样,只要有一个从服务器的数据同步了,就会通知主服务器同步成功。主服务器就可以接收新的请求。

复制过滤器

通过配置复制过滤器,让我们的从服务器,只复制主服务器上指定的db数据库数据,而忽略一些不需要复制的数据。

两种实现方式:
(1) 服务器选项:主服务器仅向二进制日志中记录与特定数据库相关的事件 ,也就是比如主服务器有A,B,C三个数据库,那么只记录,A,C两个数据库的二进制日志,而不记录B的,非常不推荐!!!这样未来B发生更改的时候就没有二进制日志了!!!损坏可能无法恢复到最新的数据!!
注意:此项和binlog_format相关
参看:https://mariadb.com/kb/en/library/mysqld-options/#-binlog-ignore-db

binlog-do-db = 数据库白名单列表,多个数据库需多行实现
binlog-ignore-db = 数据库黑名单列表
注:bin-do-db,bin-ignore-db 为互斥关系,只需设置其中一项即可

vim /etc/my.cnf

#黑名单案例 
binlog-ignore-db=db1
binlog-ignore-db=db2
binlog-ignore-db=db3

问题:基于二进制还原将无法实现;不建议使用

(2) 从服务器SQL_THREAD在replay中继日志中的事件时,仅读取与特定数据库(特定表)相关的事件并应用于本地
问题:会造成网络及磁盘IO浪费,但是相比第一种,可靠性大大提升

从服务器上的复制过滤器相关变量

查看过滤器相关变量

show variables like 'replicate%';

set global replicate_ignore_db=db1;

下面填写的参数变量均为要操作的:主服务器的数据库

replicate-do-db=            指定复制库的白名单
replicate-ignore-db=        指定复制库黑名单,处于黑名单中的数据库,从服务器不会对二进制日志进行复制转换为数据
replicate-do-table=         指定复制表的白名单
replicate-ignore-table=      指定复制表的黑名单
replicate-wild-do-table=       foo%.bar% 支持通配符
replicate-wild-ignore-table=

**注意:
该功能存在一个坑,如果是在主服务器设置二进制过滤,如果不使用use 针对特定的数据库,跨数据库操作,或者二进制日志的模式不是行模式,那么即使设置了黑名单,从服务器还是会同步主服务器的记录过去。·

生产环境中建议使用从服务器指定库的黑名单,不要去主服务器设置忽略库的二进制日志。

mysql 复制加密

如果主从服务器物理间隔很远,异地传输,那么就需要使用加密传输。保证数据安全性。

需要用到证书 所以需要先搭建一个CA

基于SSL复制:
在默认的主从复制过程或远程连接到MySQL/MariaDB所有的链接通信中的数据都是明文的,外网里访问数据或则复制,存在安全隐患。通过SSL/TLS加密的方式进行复制的方法,来进一步提高数据的安全性。

CA 服务器

mkdir /etc/my.cnf.d/ssl/

cd /etc/my.cnf.d/ssl/

#生成私钥
openssl genrsa 2048 > cakey.pem

#生成自签名证书
openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650 

#生成私钥 + 请求文件一起 直接生成请求证书
openssl req -newkey rsa:2048 -days 365 -nodes -keyout master.key > master.csr

#直接给该证书颁发认证 并指定我们刚才生成的CA文件和CA私钥 ,否则命令会从/etc/pki/CA中去找
openssl x509 -req -in master.csr -CA cacert.pem -CAkey cakey.pem -set-serial 01 > master.crt

#创建一个从服务器用的证书
openssl req -newkey rsa:2048 -days 365 -nodes -keyout slave.key > slave.csr
openssl x509 -req -in slave.csr -CA cacert.pem -CAkey cakey.pem -set-serial 02 > slave.crt

#验证证书合法性
openssl verify -CAfile cacert.pem master.crt
openssl verify -CAfile cacert master.crt slave.crt

把文件复制到远程主服务器和从服务器上,这里直接全部扔过去了,不筛选了
scp -r /etc/my.cnf.d/ssl/ 192.168.30.17:/etc/my.cnf.d/
scp -r /etc/my.cnf.d/ssl/ 192.168.30.27:/etc/my.cnf.d/

#主服务需要保留 也就是CA的证书,master的证书和私钥
cacert.pem 
master.crt
master.key

#从服务器保留
cacert.pem 
slave.crt
slave.key



主服务器设置

vim /etc/my.cnf

logbin
server_id=1
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/master.crt
ssl-key=/etc/my.cnf.d/ssl/master.key

grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos' require ssl; (require ssl 一定要加,表示这个用户连接复制的时候,只允许通过ssl加密的方式,不加密是不允许连接复制的。)

远程服务器设置
可以通过change master 来改,也可以通过配置文件来更改


#使用加密的方式连接主机进行操作
mysql -uroot -pcentos -h192.168.30.17 --ssl-ca=cacert.pem --ssl-cert=slave.crt --ssl-key=slave.key

#第一种方式 把证书信息放到change master 中去
vim /etc/my.cnf
sserver_id=2
ssl

CHANGE MASTER TO
MASTER_HOST='192.168.30.17',
MASTER_USER='rep',
MASTER_PASSWORD='centos',
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=245,
MASTER_SSL=1,
MASTER_SSL_CA = '/etc/my.cnf.d/ssl/cacert.pem',
MASTER_SSL_CERT = '/etc/my.cnf.d/ssl/slave.crt',
MASTER_SSL_KEY = '/etc/my.cnf.d/ssl/slave.key';    //这四行是从服务器所需要用的证书信息

#设置完成后查看一下状态,能看到证书信息说明成功
show slave status

start slave;

#第二种方式,把证书信息放到 my.cnf 配置文件中去
vim /etc/my.cnf
sserver_id=2
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/slave.crt
ssl-key=/etc/my.cnf.d/ssl/slave.key

#change master 中就不需要ssl信息了
CHANGE MASTER TO
MASTER_HOST='192.168.30.17',
MASTER_USER='rep',
MASTER_PASSWORD='centos',
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=245,
MASTER_SSL=1;

#看看状态
show slave status;

#启动从服务器
start slave;

复制的监控和维护

清理日志
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE
datetime_expr }
RESET MASTER 清理所有二进制日志
RESET SLAVE 清理同步信息

复制监控
SHOW MASTER STATUS
SHOW BINLOG EVENTS
SHOW BINARY LOGS
SHOW SLAVE STATUS
SHOW PROCESSLIST

(3) 从服务器是否落后于主服务
Seconds_Behind_Master: 0
(4) 如何确定主从节点数据是否一致
percona-tools
(5) 数据不一致如何修复
删除从数据库,重新复制

主从复制优缺点

主服务器压力稍大
一旦主服务器坏了,我们只能手动找最新的从服务器,然后把他提升为主,还要找二进制日志位置。

posted @ 2024-04-03 14:50  DreamDZhu  阅读(20)  评论(0编辑  收藏  举报