服务网站备案,wordpress数据库字典,平面广告设计网站,深圳装修公司电话MySQL主从架构
MySQL REPLICATION 在实际生产环境中#xff0c;如果对数据库的读和写都在一个数据库服务器中操作。无论是在安全性、高可用性#xff0c;还是高并发等各个方面都是完全不能满足实际需求的#xff0c;因此#xff0c;一般来说都是通过主从复制#xff08;…MySQL主从架构
MySQL REPLICATION 在实际生产环境中如果对数据库的读和写都在一个数据库服务器中操作。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的因此一般来说都是通过主从复制master-slave的方式来同步数据再通过读写分离来提升数据库的并发负载能力这样的方案来进行部署与实施。
一、什么是MySQL REPLICATIONMySQL主从复制
1、主从复制是指当master(主)库的数据发生变化的时候变化会实时的同步到一个或多个slave(从)库。
2、默认情况下属于异步复制无需维持长连接。
3、通过配置可以复制所有的库或者几个库甚至库中的一些表。
4、replication是MySQL内建的本身自带。
二、MySQL REPLICATION的原理 简单的说就是master将数据库的更新操作写入二进制日志slave同步这些二进制日志中的数据更新事件并写入中继日志文件中然后读取relay日志把二进制的日志解析成SQL语句并执行这些SQL语句使其与master中的数据一致。 注
DML:SQL操作语句update, insertdelete等数据更新操作语句。
Relay log :中继日志
三、MySQL REPLICATION的作用
1、读写分离提供查询服务 使用主从复制让主库负责写从库负责读。这样即使主库进行数据更新操作出现了锁表的情景通过读从库也可以保证业务的正常运作。
2、实时灾备用于故障切换。 当系统中某个节点发生故障时可以方便的故障切换实现高可用HA。例如做数据的热备slave作为后备数据库主数据库服务器故障后可切换到从数据库继续工作避免数据丢失。
3、水平扩展数据库的负载能力 随着系统中业务访问量的增大如果是单机部署数据库就会导致I/O访问频率过高。有了主从复制增加多个数据存储节点将负载分布在多个从节点上降低单机磁盘I/O访问的频率提高单个机器的I/O性能。
四、MySQL REPLICATION支持的复制类型 Statement即基于语句的复制会将对数据库操作的sql语句写入到binlog中效率比较高。
row即基于行的复制会将每一条数据的变化写入到binlog中。 mixed即混合模型的复制statement与row的混合MySQL会根据执行的SQL语句选择日志保存方式。即交替使用行和语句、由MySQL服务器自行判断。
五、 MySQL REPLICATION如何工作
整体上来说复制的工作过程有3个步骤 (1) master将改变记录到二进制日志(binary log)中这些记录叫做二进制日志事件binary log events
(2) slave将master的binary log events拷贝到它的中继日志(relay log) (3) slave根据中继日志中的事件对salve数据库做相应的操作使其与master中的数据一致。
六、MySQL REPLICATION常见方案
1、 一主一从 2、 一主多从 一主一从和一主多从是最常见的主从架构实施起来简单并且有效不仅可以实现HA而且还能读写分离进而提升集群的并发能力。 一主多从Master负责写操作其他slave负责读这种架构最大问题I/O压力集中多台slave需要从master上同步数据影响master的IO性能。
3、 级联复制M-S-S 级联复制模式下部分slave的数据同步不连接主节点而是连接从节点。因为如果主节点有太多的从节点就会损耗一部分性能用于replication那么我们可以让3~5个从节点连接主节点其它从节点作为二级或者三级与从节点连接这样不仅可以缓解主节点的压力并且对数据一致性没有负面影响。 例如使用一台slave作为中继分担Master的压力slave中继需要开启bin-log,并配置log-slave-updates
4、 双主互备 (互为主从) 双主复制也就是互做主从复制每个master既是master又是另外一台服务器的slave。这样任何一方所做的变更都会通过复制应用到另外一方的数据库中。 很多人误以为这样可以做到MySQL负载均衡实际没什么好处每个服务器需要做同样的同步更新破坏了事物的隔离性和数据的一致性。
5、 多主一从从5.7开始支持 多主一从可以将多个MySQL数据库备份到一台存储性能比较好的服务器上。
七、 MySQL主从复制原理 MySQL主从复制涉及到三个线程一个运行在主节点binlog dump thread其余两个(I/O thread, SQL thread)运行在从节点如下图所示: l主节点 binary log dump 线程
当从节点连接主节点时主节点会创建一个binlog dump 线程用于发送bin-log的内容。在读取bin-log中的操作时此线程会对主节点上的bin-log加锁当读取完成在发送给从节点之前锁会被释放。
l从节点I/O线程 当从节点上执行START REPLICA; 命令之后从节点会创建一个I/O线程用来连接主节点请求主库中更新的bin-log。I/O线程接收到主节点binlog dump 线程发来的更新之后保存在本地relay-log中。
l从节点SQL线程 SQL线程负责读取relay log中的内容解析成具体的操作并执行最终保证主从数据的一致性。 注对于每一个主从连接都需要三个线程来完成。当主节点有多个从节点时主节点会为每一个当前连接的从节点建一个binary log dump 线程而每个从节点都有自己的I/O线程SQL线程。
主从复制的工作过程 步骤一主库上数据库的更新事件(update、insert、delete)被写到binlog 步骤二从库启动之后创建一个I/O线程从库发起连接连接到主库 步骤三此时主库创建一个binlog dump thread线程把binlog的内容发送到从库 步骤四从库的I/O线程读取主库传过来的binlog内容并写入到relay log. 步骤五从库还会创建一个SQL线程从relay log里面读取内容并执行读取到的更新事件将更新内容写入到slave的数据库。 注要实施复制首先必须打开Master 端的binary logbin-log功能否则无法实现。因为整个复制过程实际上就是Slave 从Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。
八、MySQL 主从复制模式
l异步模式MySQL async-mode MySQL主从复制默认是异步的模式异步模式如下图所示这种模式下master事务的提交不需要经过slave的确认slave是否接收到master的binlogmaster并不关心。slave接收到master binlog后先写relay log最后异步地去执行relay log中的sql应用到自身。这样就会有一个问题由于master的提交不需要确保slave relay log是否被正确接受当slave接受master binlog失败或者relay log应用失败master无法感知。 假设master发生宕机并且binlog还没来得及被slave接收而切换程序将slave提升为新的master就会出现数据不一致的情况另外在高并发的情况下传统的主从复制从节点可能会与主产生较大的延迟当然MySQL后续版本陆续做了优化推出了并行复制以此降低异步复制的延迟
l半同步模式(MySQL semi-sync) 基于传统异步存在的缺陷MySQL在5.5版本推出半同步复制。可以说半同步复制是传统异步复制的改进在master事务的commit之前必须确保一个slave收到relay log并且响应给master以后才能进行事务的commit。但是slave对于relay log的应用仍然是异步进行的原理如下图所示: 相对于异步复制半同步复制提高了数据的安全性同时它也造成了一定程度的延迟所以半同步复制最好在低延时的网络中使用。 半同步模式不是MySQL内置的从MySQL 5.5开始集成需要master 和slave 安装插件开启半同步模式。
l全同步模式 指当主库执行完一个事务所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回所以全同步复制的性能必然会收到严重的影响。
九、部署MySQL主从同步一主一从
1、 环境准备 主机名 IP 系统版本/MySQL版本 角色 localhost 192.168.30.11 RHEL9.4/8.4.0 Master Cong12 192.168.30.12 RHEL9.4/8.4.0 slave
2、 配置时间服务器
建立时间同步环境在主节点上搭建时间同步服务器。
配置好本地yum源略。
具体搭建过程参考《Centos9使用chrony服务同步时间》文档。
3、 配置主数据库服务器localhost
MySQL create database HA;
MySQL use HA;
MySQL create table T1(id int,name varchar(20));
MySQL insert into T1 values(1,Tom1);
(1)、 创建主从复制的授权用户
MySQL create user slave192.168.30.12 identified by 123456;
MySQL grant replication client,replication slave on *.* to slave192.168.30.12;
MySQL flush privileges;
(2) 配置my.cnf:
[rootlocalhost ~]# vim /etc/my.cnf 添加一下内容
[MySQLd]
………….. //省略部分内容
log-bin/data/MySQL/log/MySQL-bin #启用二进制日志
server-id1 #数据库服务器ID标识
binlog-do-dbHA #可以被从服务器复制的库, 即二进制需要同步的数据库名
(3) 重启MySQL
[rootlocalhost ~]# systemctl restart MySQLd
4 查看master状态信息
MySQLSHOW BINARY LOG STATUS; //显示主服务器的当前binlog文件及事件位置 5 查看二进制日志 6 导出数据库
复制前要保证同步的数据库一致
[rootlocalhost ~]# MySQLdump -uroot -pAbcd1234 HA HA.sql #可以导出数据库
将导出的数据库传给从服务器
[rootlocalhost ~]# scp HA.sql root192.168.30.12:~
4、 配置从数据库服务器cong12
1两台数据库服务器MySQL版本要一致
MySQL show variables like %version%; 2测试连接到主服务器是否成功
[rootcong12 ~]# MySQL -uslave -pAbcd1234 -h 192.168.30.11
MySQL show databases; #只有复制的权限, 是看不到其他库的。正常 3导入数据库和主数据库服务器保持一致
[rootcong12 ~]# MySQL -uroot -pAbcd1234 -e create database HA;
[rootcong12 ~]# MySQL -uroot -pAbcd1234 HAHA.sql
4修改从服务器配置文件
从服务器没必要开启bin-log日志
5关闭MySQL
[rootcong12 ~]# systemctl stop MySQLd
6修改my.cnf配置文件
[rootcong12 ~]# vim /etc/my.cnf server-id 2 #从服务器ID号不要和主ID相同 如果设置多个从服务器每个从服务器必须有一个唯一的server-id值必须与主服务器的以及其它从服务器的不相同。这些ID值能唯一识别复制服务器群集中的每个服务器实例
relay-log/data/MySQL/log/relay-log-bin //中继日志文件的路径名称
relay-log-index/data/MySQL/log/slave-relay-bin.index //中继日志索引文件的路径名称
7重启服务
[rootcong12 ~]# systemctl start MySQLd
8MySQL数据库里从配置
[rootcong12 ~]# MySQL -uroot -pAbcd1234
MySQL START REPLICA; #停止slave
MySQLCHANGE REPLICATION SOURCE TO
SOURCE_HOST192.168.30.11,
SOURCE_USERslave,
SOURCE_PASSWORD123456,
SOURCE_PORT3306,
GET_SOURCE_PUBLIC_KEY1,
SOURCE_LOG_FILEMySQL-bin.000001,
SOURCE_LOG_POS909;
MySQL START REPLICA; #启动slave
MySQL SHOW REPLICA STATUS\G; //查看slave的状态 Slave_IO_Running 该线程连接到master机器master机器上的binlog dump线程会将binlog的内容发送给该I/O线程。该I/O线程接收到binlog内容后再将内容写入到本地的relay log。
Slave_SQL_Running该线程读取I/O线程写入的relay log。并且根据relay log的内容对slave数据库做相应的操作。
看到2个yes说明设置成功
如何在master、slave上查看上述的线程
在主服务器上查看binlog dump线程
[rootlocalhost ~]# MySQL -uroot -pAbcd1234
MySQL show processlist \G; 在从服务器上查看I/O线程和SQL线程 5、 主服务器插入数据测试同步
MySQL use HA;
MySQL insert into T1 values(1,tom2);
MySQL select * from T1;
------------
| id | name |
------------
| 1 | Tom1 |
| 1 | tom2 |
------------
2 rows in set (0.00 sec)
在从服务器查看数据是否同步
MySQL use HA;
MySQL select * from T1;
------------
| id | name |
------------
| 1 | Tom1 |
| 1 | tom2 |
------------
2 rows in set (0.00 sec)
从上面的结果可以看到数据同步成功。
配置小结
lMaster端
1、同步Master端的原始数据到所有Slave端
2、开启binlog日志保持server-id唯一
3、配置Slave验证授权用户权限replication slave
Slave端
1、开启relay日志保持server-id唯一
2、执行change master语句生成master.info文件
3、启动Slave复制START REPLICA;
Master端全备数据库同步到Slave端 在开始做主从复制之前START REPLICA; 前需要把Master原有的数据都先同步到所有的Slave否则在做同步复制之时因为原有数据不一致导致同步失败。注意如果使用原来备份时间点比如昨天凌晨的全备数据同步所有Slave数据时还需要把当前时间点之前的所有binlog增量备份同步使在主从复制时间点时Master和所有Slave的数据保持一致
6、 排错记一次MySQL主从数据库不同步的排查
如果遇到MySQL的主从数据库没有同步
先上Master库
MySQLshow processlist; 查看下进程是否Sleep太多。发现很正常。
MySQLSHOW BINARY LOG STATUS; 也正常。
再到Slave上查看
MySQL SHOW REPLICA STATUS\G;
Slave_IO_Running: Yes
Slave_SQL_Running: No
可见是Slave不同步
下面介绍两种解决方法
方法一忽略错误后继续同步
该方法适用于主从库数据相差不大或者要求数据可以不完全统一的情况数据要求不严格的情况
解决
MySQL stop REPLICA;
#表示跳过一步错误后面的数字可变
MySQL set global sql_slave_skip_counter 1;
MySQL start REPLICA;
之后再用MySQL SHOW REPLICA STATUS\G; 查看
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
ok现在主从同步状态正常了。。。
方式二重新做主从完全同步
该方法适用于主从库数据相差较大或者要求数据完全统一的情况
解决步骤如下
1.先进入主库进行锁表防止数据写入
使用命令
MySQL flush tables with read lock;
注意该处是锁定为只读状态语句不区分大小写
2.进行数据备份
#把数据备份到MySQL.bak.sql文件
[rootcong1 ~]#MySQLdump -uroot -p dbname MySQL.bak.sql
这里注意一点数据库备份一定要定期进行可以用shell脚本或者python脚本都比较方便确保数据万无一失
查看master 状态
MySQLSHOW BINARY LOG STATUS; //记下当前binlog文件和position
4.把MySQL备份文件传到从库机器进行数据恢复
#使用scp命令
[rootlocalhost ~]# scp MySQL.bak.sql root192.168.30.12:/tmp/
5.停止从库的状态
MySQL STOP REPLICA;
6.然后到从库执行MySQL命令导入数据备份
MySQL source /tmp/MySQL.bak.sql
7.设置从库同步注意该处的同步点就是主库SHOW BINARY LOG STATUS信息里的| File| Position两项
MySQL CHANGE REPLICATION SOURCE TO SOURCE_HOST192.168.30.11,
SOURCE_USERslave,SOURCE_PASSWORD123456,SOURCE_PORT3306,
GET_SOURCE_PUBLIC_KEY1,SOURCE_LOG_FILEMySQL-bin.000001,
SOURCE_LOG_POS909;
8.重新开启从同步
MySQL START REPLICA;
9.查看同步状态
MySQL SHOW REPLICA STATUS\G; 查看
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
好了同步完成啦。
主库解除锁表操作
MySQLunlock tables;
1 I/O线程出错
1、网络连通问题
2、防火前没有放开端口
3、对应的主机 IP地址写错了
2SQL线程出错
主从服务器数据库结构不统一
6、 部署MySQL主主双向主从复制 M-M可选
1、 实验环境
通过MySQL主主复制进行MySQL 双向同步数据库HA的配置 主机名 IP 系统版本/MySQL版本 角色 localhost 192.168.30.11 RHEL9.4/8.4.0 Master/slave Cong12 192.168.30.12 RHEL9.4/8.4.0 Slave/master
在上面主从的基础上进行配置
2、 配置cong12为主服务器
它有两种身份
身份1 localhost的从。 身份2 localhost的主
1 配置my.cnf
[rootcong12 ~]# vim /etc/my.cnf
………. //省略部分内容
server-id 2
log-bin/data/MySQL/log/MySQL-bin
binlog-do-dbHA
2创建主从复制的授权用户
MySQL create user slave192.168.30.% identified by 123456;
MySQL grant replication client,replication slave on *.* to slave192.168.30.%;
MySQL flush privileges; #记得刷新授权表
3重启MySQL
[rootcong12 ~]# systemctl restart MySQLd
MySQLSHOW BINARY LOG STATUS; 注关闭防火墙或创建允许数据库连接规则
[rootcong12 ~]# systemctl stop firewalld
[rootcong12 ~]# systemctl disable firewalld
3、 配置localhost为cong12的从服务器
1测试从帐号登陆
[rootlocalhost ~]# MySQL -uslave -pAbcd1234 -h 192.168.30.12
2修改my.cnf
[rootlocalhost ~]# vim /etc/my.cnf
………. //省略部分内容
relay-log/data/MySQL/log/relay-log-bin
relay-log-index/data/MySQL/log/slave-relay-bin.index
3重启服务器
[rootlocalhost ~]# systemctl restart MySQLd
4MySQL数据库里从配置
MySQL STOP REPLICA;
MySQL CHANGE REPLICATION SOURCE TO SOURCE_HOST192.168.100.10, SOURCE_USERslave,SOURCE_PASSWORD123456,SOURCE_PORT3306,GET_SOURCE_PUBLIC_KEY1,SOURCE_LOG_FILEMySQL-bin.000001,SOURCE_LOG_POS154;
MySQL START REPLICA;
MySQL SHOW REPLICA STATUS\G; 4、 插入数据测试
1在localhost上插入数据cong12上查看
MySQL use HA;
MySQL insert into T1 values(4,li4);
[rootcong12 ~]# MySQL -uroot -pAbcd1234
MySQL use HA;
MySQL select * from T1; #在cong12查看数据OK 2在cong12上插入数据localhost上查看
MySQL insert into T1 values(5,li5);
MySQL select * from T1; #在localhost上查看数据OK 7、 部署M-S-S联级复制可选
1实验环境
恢复实验快照 主机 IP 系统版本 角色 localhost 192.168.30.11 RHEL9.4/8.4.0 Master/NTP Cong12 192.168.30.12 RHEL9.4/8.4.0 Slave中继 Cong13 192.168.30.13 RHEL9.4/8.4.0 Slave
2 部署MASTER localhost
注确保三台服务器时间一致关闭防火墙。
3在主服务上授权用户
[rootlocalhost ~]# MySQL -uroot -pAbcd1234
MySQL create user repl192.168.30.% identified by 123456;
MySQL grant replication client,replication slave on *.* to repl192.168.30.% ;
MySQL flush privileges;
4创建数据库
MySQL create database HA;
MySQL use HA;
MySQL create table T1(id int,name varchar(20));
MySQL insert into T1 values(1,tom1);
5修改配置文件
[rootlocalhost ~]# vim /etc/my.cnf
[MySQLd]
………省略部分内容
server-id1
binlog-do-dbHA
log-bin/data/MySQL/log/MySQL-bin-master
sync-binlog1
binlog-formatrow
参数说明
sync-binlog此参数表示每写缓冲多少次就同步到磁盘sync_binlog1表示同步写缓冲和磁盘二进制日志文件不使用文件系统缓存在使用innodb事务引擎时在复制环境中为了保证最大的可用性都设置为“1”但会对影响io的性能。
6重启服务
[rootlocalhost ~]# systemctl restart MySQLd
7 查看master状态信息
MySQLSHOW BINARY LOG STATUS; //显示主服务器的当前binlog文件及事件位置 8导出主服务器HA库完整备份 拷贝到 中继服务器 和slave服务器
[rootlocalhost ~]# MySQLdump -uroot -pAbcd1234 -B HAha.sql
[rootlocalhost ~]# scp ha.sql root192.168.30.12:~
[rootlocalhost ~]# scp ha.sql root192.168.30.13:~
9部署SLAVE中继 cong12
10导入数据库ha.sql
[rootcong12 ~]# MySQL -uroot -pAbcd1234 ha.sql
11配置my.cnf
修改主配置文件也要开启bin-log
[rootcong12 ~]# vim /etc/my.cnf#修改主配置文件也要开启bin-log
………… //省略部分内容
server-id2
log-slave-updates1 //此参数控制slave数据库是否把从master接受到的binlog并在本slave执行的内容记录到slave的二进制日志中在级联复制环境中这个参数是必须的
log-bin/data/MySQL/log/MySQL-bin-slave1
relay-log/data/MySQL/log/relay-log-bin
relay-log-index/data/MySQL/log/slave-relay-bin.index
#把它从relay-log当中读取出来的二进制日志并且这本机上执行的操作也记录这自己的二进制日志里面这样才能使第三台slave通过中继slave读取到相应数据变化
12重启MySQL
[rootcong12 ~]# systemctl restart MySQLd
13配置从服务器
将cong12配置为localhost的从服务器
[rootcong12 ~]# MySQL -uroot -pAbcd1234
MySQL STOP REPLICA;
MySQLCHANGE REPLICATION SOURCE TO SOURCE_HOST192.168.100.10, SOURCE_USERrepl,SOURCE_PASSWORD123456,SOURCE_PORT3306,GET_SOURCE_PUBLIC_KEY1,SOURCE_LOG_FILEMySQL-bin-master.000001,SOURCE_LOG_POS154;
MySQL START REPLICA;
14查看中继服务的状态
MySQL SHOW REPLICA STATUS\G;
15再授权一个用户给slave(cong13):
MySQL create user repl192.168.30.% identified by 123456;
MySQL grant replication client,replication slave on *.* to repl192.168.30.% ;
MySQL flush privileges;
MySQLSHOW BINARY LOG STATUS; //显示slave中继服务器的当前binlog文件及事件位置 16部署SLAVE cong13
17导入数据库ha.sql
[rootcong13 ~]# MySQL -uroot -pAbcd1234 ha.sql
18配置my.cnf
[rootcong13 ~]# vim /etc/my.cnf
[MySQLd]
………省略部分内容
server-id 3
relay-log/data/MySQL/log/relay-log-bin
relay-log-index/data/MySQL/log/slave-relay-bin.index
19重启MySQL
[rootcong13 ~]# systemctl restart MySQLd
20指定cong12中继服务作为cong13的主
[rootcong13 ~]# MySQL -uroot -pAbcd1234
MySQL STOP REPLICA;
MySQLCHANGE REPLICATION SOURCE TO SOURCE_HOST192.168.30.12, SOURCE_USERrepl,SOURCE_PASSWORD123456,SOURCE_PORT3306,GET_SOURCE_PUBLIC_KEY1,SOURCE_LOG_FILEMySQL-bin-slave1.000001,SOURCE_LOG_POS448;
MySQL START REPLICA; ;
21查看从服务的状态
MySQL SHOW REPLICA STATUS\G; 22在MASTER上插入数据测试
23master插入数据
MySQL insert into T1 values(2,tom2);
MySQL insert into T1 values(3,tom3);
24 然后分别在slave中继与slave上查看
Cong12中继查看
MySQL select * from HA.T1; Cong13 slave查看
MySQL select * from HA.T1; 8、 排错
1、 模拟故障1
1.1、 问题场景 由于历史遗留问题MySQL主从库的表结构不一致主库的某个表tableA比从库表tableA少了一个字段 当尝试在主库上更改表结构时这行alter语句会随着binlog同步到从库如果从库执行这行语句时出错主从同步线程就会自动停止那样只能人为手动处理错误然后再启动slave上的主从同步线程。场景大概是下面这个样子
1.2、 先在cong13从库添加这个字段
MySQL alter table T1 add age int default 0 after name;
1.3、 再在localhost主库添加这个字段
MySQL alter table T1 add age int default 0 after name;
修改主库上的表结构添加一个字段
从库会同步主库的但是从库已经存在了这个字段
1.4、 查看slave状态
MySQL SHOW REPLICA STATUS\G; 1.5、 解决方法1
跳过错误的事物
Cong13从库上执行
MySQL STOP REPLICA;
MySQL set global sql_slave_skip_counter1;
MySQL START REPLICA; ;
MySQL SHOW REPLICA STATUS\G; #恢复正常 1.6、 解决方法2
slave比较少的时候还可以但是当从库有几十台时逐台去处理既费时又容易出错怎样在主库这一侧一劳永逸地避免呢
那很简单我们不要让主库将alter语句记录到binlog中就行
我们直接这主库中关闭binlog记录
MySQL set sql_log_binoff;
然后我们再执行alter语句
MySQL alter table T1 add age int default 0 after name;
再开启bin-log
MySQL set sql_log_binon;
2、 错误2
主从的binlog日志文件对不上
2.1、 查看从的状态
MySQL SHOW REPLICA STATUS\G; 2.2、 到它的主上查看状态 Slave上不对应
2.3、 Slave上操作
MySQL STOP REPLICA;
MySQLCHANGE REPLICATION SOURCE TO SOURCE_HOST192.168.30.12, SOURCE_USERrepl,SOURCE_PASSWORD123456,SOURCE_PORT3306,GET_SOURCE_PUBLIC_KEY1,SOURCE_LOG_FILEMySQL-bin-slave1.000002,SOURCE_LOG_POS415;
MySQL START REPLICA;
查看slave的binlog
MySQL SHOW REPLICA STATUS\G; 附加知识点
MySQL主从复制存在的问题
l主库宕机后数据可能丢失
l从库只有一个sql Thread主库写压力大复制很可能延时
解决方法
l半同步复制—解决数据丢失的问题
l并行复制—解决从库复制延迟的问题
MySQL并行复制
设置:
set global slave_parallel_workers10; //设置sql线程数为10