# #1.为什么需要复制MySQL主从机
1 .数据热备盘在复杂的业务场景中,一个sql可能会导致锁定表,从而影响正常业务运营。 在复杂的业务场景中,可以复制mysql主从机、写入主库和从库中读取主库。 这样,即使主库中发生了锁定表的场景,从库中的读取也能确保其正常工作。
架构扩展。 如果业务访问增加,I/o访问频率过高,无法满足单个设备的需求,则可以通过创建多库存储降低单个磁盘I/o访问频率来提高单个I/o的性能
2 .主从复制是指将数据从mysql主节点复制到一个或多个从节点。 缺省情况下,mysql是异步复制方法,从节点可以复制主节点中的所有数据,也可以复制指定的库或表。
3 .主从复制原理主库打开jmdqqlog,将数据和表结构的更改记录在二进制文件jmdqlog中
slave将检测master的二进制文件是否在固定的时间间隔内发生了更改,如果发生了更改,则打开io Thread并请求master的jmdqqlog
master还为每个io thread打开dump Thread,传输二进制文件(jmdqqlog ),并将其存储在slave的中继日志中。
slave启动sql Thread,从中继日志中读取二进制数据并在本地播放,以确保slave和master数据匹配。 最后,slave的io Thread和sql Thread进入休眠状态,等待再次唤醒。
也就是说, 1. master的dump Thread根据slave的请求,用events将本地的jmdqqlog发送到IO Thread 2. slave IO Thread,接收jmdqqlog events并中继日志(relled qlog 3. slave sql Thread获取并重新发送中继日志的内容,并将应用的记录记录在relay-log.info中。 默认情况下,应用的relay会自动清理
注意: 1. master必须在jmdqq log中记录操作语句,并将slave节点的时间与允许远程访问的权限.2. master同步
4. mysql主从复制的具体操作步骤备有两台mysql,可以在同一台机上,也可以在不同的机上。
打开主节点的jmdqqlog,并将以下内容添加到/etc/my.cnf文件的mysqld下
打开BinLog日志
log-jmdqq=mysql-jmdqq
#服务器的唯一id,默认值为1,通常位于ip的最后一段
服务器- id=13修改从节点的/etc/my.cnf文件
打开BinLog日志。 您可以从节点打开或不打开jmdqqlog日志。 这里是开放的。
log-jmdqq=mysql-jmdqq
#服务器的唯一id,默认值为1,通常位于ip的最后一段
重新启动服务器- id=14 master和slave
登录到主节点并运行show master status命令以显示jmdqqlog日志文件和偏移。
登录并使用change master to语句从库中连接到master。
CHANGE MASTER TO MASTER_HOST='ip或域名',MASTER_USER='用户名',MASTER_PASSWORD='密码',MASTER_PORT=
开始Slave是show slave status G; 得到以下结果是启动成功
5. Mysql主从同步延迟分析Mysql主从同步均为单线程。 master的所有DDL和DML都将写入jmdqqlog。 由于jmdqqlog是顺序读写,所以效率很高。 slave的sql Thread在slave中重新发送主DDL和所有DML操作事件。 DDL和DML的IO操作是随机的,不是顺序的,因此成本相当高。 另一方面,由于sql Thread也是单线程的,因此在master并发性较高的情况下,生成的DML数量将超过SlaveSQL
解决方案: 1.业务持久化层的实现采用分库架构,可以平行扩展mysql服务器,分散压力2 .单个主库、多个主库、主写3 .服务的输入
4 .将不同业务的mysql放在不同的物理机上,分散压力。 5 .使用更好的硬件设备。 6 .在6. mysql5.7之后,使用MTS并发复制技术永久解决复制延迟问题