一、mysql简介
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
二、mysql复制
关于mysql复制,我是这样理解的:将某一台主机上的Mysql数据复制到其它主机(slaves)上,并重新执行一遍从而实现当前主机上的mysql数据与(master)主机上数据保持一致的过程我们可以称为复制。
复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
三、mysql复制能解决什么问题
1、数据的分布(Data Distribution)
2、负载均衡(Load balancing) | mysql读写分离
3、可以实现数据的备份(Backups),但是不能当真正意义上数据备份来用
4、高可用性和容错行(比如双主模型中的互为主从能实现高可用)
四、mysql的复制原理
1、工作原理图
从上图来看,Mysql的复制就三个步骤:
1)在Master服务器将改变的数据记录到二进制日志(binary log)中(这些记录叫做二进制日志事件)
2)Slave服务器将Master服务器上的二进制日志拷贝到自己的中继日志(relay-log)中
3)Slave服务器读取中继日志中的事件,然后将改变的数据写入到自己的数据库中
2、说明三步流程
第一步:是在Master服务器上记录二进制日志。在每个更新数据的事务完成之前,Master服务器都会将数据更改记录到二进制日志中。即使事务在执行期间是交错的,Mysql也会串行地将事务写入到二进制日志中。在把事件写入二进制日志之后,Master服务器告诉存储引擎可以提交事务了
第二步:是Slave服务器把主服务器的二进制日志拷贝到自己的硬盘上,进入所谓的“中继日志”中。首先,它启动一个工作线程,叫I/O线程,这个I/O线程开启一个普通的客户端连接,然后启动一个特殊的二进制日志转储进程(它没有相应的SQL命令)。这个转储进程Master服务器的二进制日志中读取数据。它不会对事件进行轮询。如果3跟上了Master服务器,就会进入休眠状态并等待有新的事件发生时Master服务器发出的信号。I/O线程把数据写入Slave服务器的中继日志中
第三步:SQL线程读取中继日志,并且重放其中的事件,然后更新Slave服务器的数据。由于这个线程能跟上I/O线程,中继日志通常在操作系统的缓存中,所以中继日志的开销很低。SQL线程执行事件也可以被写入Slave服务器自己的二进制日志中,它对于有些场景很实用
上图中显示了在Slave服务器有两个运行的线程,在Master服务器上也有一个运行的线程:和其他普通连接一样,由Slave服务器发起的连接,在Master服务器上同样拥有一个线程
3、配置注意事项
1、Master服务器必须开启二进制日志
2、Master和Slave的Server-id不能相同
3、同一个Master的多个Slave,Server-id也不能相同
4、Binlog_format最好相同
5、在Slave服务器上配置log-slave-updates=1时,也需要开启二进制日志;如果可以推荐使用read_only选项,该选项会阻止没有权限的线程修改数据
五、mysql主从异步复制
1、软件版本
系统版本:CentOS6.4 64bit
Mysql版本:mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz
2、拓扑图规划
3、准备工作
3.1 修改主机名
1
2
3
4
5
6
7
|
###MASTER执行
[root@localhost ~]
# sed -i 's@\(HOSTNAME=\).*@\1master.allentuns.com@g' /etc/sysconfig/network
[root@localhost ~]
# hostname master.allentuns
###SLAVE执行
[root@localhost ~]
# sed -i 's@\(HOSTNAME=\).*@\1slave.allentuns.com@g' /etc/sysconfig/network
[root@localhost ~]
# hostname slave.allentuns
|
3.2 配置主机名解析,这里修改hosts文件来实现
1
2
3
4
5
6
7
8
9
10
11
|
|