一、概述:
MySQL内建的数据复制功能基于MySQL的大规模、高性能应用的基础,这类应用使用所谓的“水平扩展”的架构。我们可以通过为服务器配置一个或多个备库或主库(目前MySQL生产版本没有实现多源复制,但是可以实现主主复制)。MySQL目前支持两种复制方式:基于行的复制和基于语句的复制。
二、复制可以解决的问题:
1、数据分布
2、负载均衡
3、备份
4、高可用性和故障切换
5、MySQL升级测试
三、复制的实现原理:
1、主库把数据更改记录到二进制日志文件中(Binary Log)
2、备库将主库的日志复制到本地的中继日志当中(Relay Log)
3、备库读取中继日志当中的事件,并将其重放到备库数据库当中
实现图如下:
主主示意图
四、复制具体实现:
1、叙述:复制实验机器为192.168.3.75 和192.168.3.76,复制数据库为nmt _wt , nmt_u1wt , nmt_u2wt,两台机器互为主从。
2. 机器75的主要配置如下:
3.机器76mysql的主要配置:
五、复制实现结果显示:
75:
76:
六、实验结果描述:
从75和76,的master 和slave状态看来,首先,这两天机器的master和slave功能都开启来了。开启master功能主要是开启服务器的log_bin 日志,而开启slave功能主要是开启MySQL的relay_log 功能。第二 我们可以看到两台服务器的三个线程都跑起来了,他们分别是两台机器的连接和输入输出的I/O线程,主服务器上特有的binlog Dump线程 和slave 上面的SQL线程,这就说明基本是主主复制已经好了。最后,看见这三个线程的对应状态,可以得知主主复制已经正常运行了。也就是说在75和76的一台机器上修改记录在另一台服务器上的数据库也会做对应的更新。
七、主要线程的作用:
1.I/O线程:这个线程首先是由slave发起的,请求连接到master数据库,然后master也建立起对应的I/O线程与slave实现“通信”。
2.Binlog dump线程:这个线程是二进制转储线程,它会读取主库上二进制日志文件中的事件,并它转储给I/O线程接收。它不会对事件进行轮询,如果该线程追赶上了主库,它将进入睡眠状态,知道主库发送信号量通知其有新的事件产生时才会被唤醒,备库I/O线程将会接收到事件记录到中继日志当中。
3.SQL线程:这个线程是备库实现复制的最后面一步,它会从中继日志中读取事件,然后在备库中执行,从而实现备库中数据和主库数据同步。