特点:读写分离,应用于读取压力大的场景,将要求实时性不高的请求分发到多个从库,降低主库的压力
如何解决:优化网络环境,MySQL5.5~5.6使用半同步复制,MySQL5.7使用增强半同步复制
解决了主库I/O和网络压力大的问题,多级复制可以减小主库的压力,主库只需要向另一个主库发送binlog日志
适用主从切换的场景,通过双主复制架构避免了重复搭建从库的麻烦
主库Master1和Master互为主从,所有WebClient的写请求都访问主库Master1或Master2
多源(Multi-Source)复制架构适用于复杂的业务需求,既可以支撑OLTP(联机事务处理),也可以满足OLAP(联机分析处理)
mysql支持两种复制方式,一是基于行的复制,二是基于语句的复制通过主库记录的二进制日志并在从库进行异步复制,可能会产出延时
MySQL默认的复制操作是异步的,主库在客户端提交的事务会立即返回结果给客户端,不关心从库是否已经被接收并处理,若主库crash,从库也无法收到提交的事务,强行切换导致数据不完整
主库将事务写入binlog后通知dump线程发送到从库,主库继续处理其他事务,不能保证binlog完全送达所有从库
环境搭建
1)相关主库与从库的配置文件
[mysqld]?----------------------------------[mysqld]???------------------------------------
2)开启master与slave的实例
开启mysql数据库实例mysqld_safe--defaults-file=/home/mysql/etc/my.cnf查看进程ps-ef|grepmysqld
mysql>createuser'repl'@'192.169.43.%'identifiedby'123456';#createuser'repl'@'%'identifiedby'123456';mysql>grantREPLICATIONSLAVEon*.*to'repl'@'192.169.43.%';mysql>flushprivileges;
#--master-data值为2会注释changemaster,值为1或者没有提供值时,这些语句是直接激活的。同时,--master-data会锁定所有表(如果同时使用了--single-transaction,则不是锁所有表mysqldump-uroot-p--all-databases--master-data=2>master.sql
5)从master.sql中获取到binlog的坐标
grep-i-m1'changemasterto'master.sql
6)在从库执行导出的master.sql
mysql-uroot-p-h127.1-e'sourcemaster.sql'
mysql>changemasterto?master_host='192.168.43.42',master_port=3306,master_user='repl',master_password='Password',master_log_file='master-bin.000002',master_log_pos=771;
分开执行startslaveio_thread;startslavesql_thread;
mysql>showslavestatus\GMaster_Log_File:IO线程正在读取的masterbinlogRead_Master_Log_Pos:IO线程已经读取到masterbinlog的哪个位置Relay_Log_File:SQL线程正在读取和执行的relaylogRelay_Log_Pos:SQL线程已经读取和执行到relaylog的哪个位置Relay_Master_Log_File:SQL线程最近执行的操作对应的是哪个masterbinlogExec_Master_Log_Pos:SQL线程最近执行的操作对应的是masterbinlog的哪个位置

resetslave会删除master.info/relay-log.info和relaylog,然后新生成一个relaylog。但是changemasterto设置的连接参数还在内存中保留着,所以此时可以直接startslave,并根据内存中的changemasterto连接参数复制日志。
resetslaveall除了删除resetslave删除的东西,还删除内存中的changemasterto设置的连接信息
resetmaster会删除master上所有的二进制日志,并新建一个日志。在正常运行的主从复制环境中,执行resetmaster很可能导致异常状况。所以建议使用purge来删除某个时间点之前的日志(应该保证只删除那些已经复制完成的日志),生产环境慎用
主库执行完事务,会等待所有事务分发给从库并执行完才返回客户端,因此会带来性能影响
主库提交事务后,所有的从库必须收到并提交事务,主库线程收到返回才继续工作,缺点是主库完成事务是时间变长,性能降低
额外的,全同步是主从同步的增强。
因为主从同步虽可以实现一主多从,但它的局限在于只有在主数据库上写的时候从数据库才会做数据备份,而在从数据库做出改变时,主数据库不会记录相应的改变。
全同步出现了,它可以是只要在一个数据库做出改变,所以其它在同组的数据库也会改变,同组的数据库没有等级之分。可以理解为“同组数据库之间数据相等”
Master节点设置
1)配置Master节点my.cnf配置文件
[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socksymbolic-links=0log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pidlog-bin=slave-binbinlog_checksum=NONEsync-binlog=1启用SQL线程回放之后将二进制写入自身的binlog中,在组复制中,依赖于每个成员持久化的binlog来实现一些数据自动平衡>的特性log_slave_updates=ON启用双TABLE,使用InnoDB引擎表来保存IO和SQL线程的位置信息(复制元数据),以增强复制状态的安全性master_info_repository=TABLErelay_log_info_repository=TABLEplugin_load_add='group_replication.so'transaction_write_set_extraction=XXHASH64本机ip,此处各节点需单独配置loose-group_replication_local_address="192.168.43.43:33061"白名单loose-group_replication_ip_whitelist="127.0.0.1,192.168.43.0/24"loose-group_replication_enforce_update_everywhere_checks=ONloose-group_replication_single_primary_mode=OFF
#创建用户,需暂时关闭同步,避免同步问题SETSQL_LOG_BIN=0;CREATEUSERrepl@'%'IDENTIFIEDBY'123456';GRANTREPLICATIONSLAVEON*.*TOrepl@'%';FLUSHPRIVILEGES;SETSQL_LOG_BIN=1;
#设置同步MasterCHANGEMASTERTOMASTER_USER='repl',MASTER_PASSWORD='123456'FORCHANNEL'group_replication_recovery';
#vi/etc/hosts按实际情况填写ip主机名192.168.43.43master192.168.43.42slave
mysql>SETGLOBALgroup_replication_bootstrap_group=ON;mysql>STARTGROUP_REPLICATION;mysql>SETGLOBALgroup_replication_bootstrap_group=OFF;
注意:引导只能由单个服务器完成,即启动组的服务器并且只执行一次。这就是为什么group_replication_bootstrap_group选项的值没有存储在实例的选项文件中的原因。如果它保存在选项文件中,则在重新启动服务器时会自动引导第二个具有相同名称的组。这将导致两个不同的组具有相同的名称
mysql>select*fromperformance_schema.replication_group_members;
+---------------------------+------------------+------+------+-------+|CHANNEL_NAME???|MEMBER_ID|HOST|PORT|STATE|+---------------------------+------------------+------+------+-------+|group_replication_applier|688532-0c296515c|master|3306|ONLINE|+---------------------------+------------------+------+------+-------+
Slave节点设置
1)配置Master节点my.cnf配置文件
[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socksymbolic-links=0log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pidlog-bin=slave-binbinlog_checksum=NONEsync-binlog=1启用SQL线程回放之后将二进制写入自身的binlog中,在组复制中,依赖于每个成员持久化的binlog来实现一些数据自动平衡>的特性log_slave_updates=ON启用双TABLE,使用InnoDB引擎表来保存IO和SQL线程的位置信息(复制元数据),以增强复制状态的安全性master_info_repository=TABLErelay_log_info_repository=TABLEplugin_load_add='group_replication.so'transaction_write_set_extraction=XXHASH64本机ip,此处各节点需单独配置loose-group_replication_local_address="192.168.43.42:33061"白名单loose-group_replication_ip_whitelist="127.0.0.1,192.168.43.0/24"loose-group_replication_enforce_update_everywhere_checks=ONloose-group_replication_single_primary_mode=OFF
#创建用户,需暂时关闭同步,避免同步问题SETSQL_LOG_BIN=0;CREATEUSERrepl@'%'IDENTIFIEDBY'123456';GRANTREPLICATIONSLAVEON*.*TOrepl@'%';FLUSHPRIVILEGES;SETSQL_LOG_BIN=1;
#设置同步MasterCHANGEMASTERTOMASTER_USER='repl',MASTER_PASSWORD='123456'FORCHANNEL'group_replication_recovery';
#vi/etc/hosts按实际情况填写ip主机名192.168.43.43master192.168.43.42slave
本文来源:国外服务器--MySQL主从复制(MySQL主从复制成熟方案)
本文地址:https://www.idcbaba.com/guowai/6201.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。




