一、原理简介
主从复制原理: Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。
双机热备概念: 指要保持两个数据库的状态自动同步。对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致。 这样做的好处多。 1. 可以做灾备,其中一个坏了可以切换到另一个。 2. 可以做负载均衡,可以将请求分摊到其中任何一台上,提高网站吞吐量。
主从复制的原理图:
执行主从复制三步:
①master将改变记录到二进制日志(Binary log)
②Slave访问Master将Master的Bibary log 记录拷贝到Slave的中继日志(Relay log)
③Slave的SQL thread线程执行Relay log的事件,将改变执行一遍,同步到Slave的数据库中
二、Mysql搭建单向的一主一从
1.服务器准备:准备两台服务器或者两个虚拟机
2.参考上篇博文<<linux环境安装mysql>>,在这两台服务器上分别安装好Mysql,两台服务器上mysql的用户名和密码都是root
3.我们以下的配置统一称呼,MasterA和SlaveB
①在MasterA服务器上给SlaveB授权
使用命令连接mysql:
mysql -uroot -proot
grant replication slave on *.* to 'root'@'SlaveB的ip ' identified by 'root';
参数说明:
用户名:root
密码:root
这样配置意思是:允许SlaveB使用用户名为root,密码为root访问MasterA的Binary log日志
②开启MasterA服务器的binary log
vi /etc/my.cnf
参数说明:
datadir:数据的存放路径
socket:mysql有两种连接方式socket和TCP/IP
server-id:搭建主从复制时不能重复
log-bin:binary log的名称
expire_logs_days:binlog日志的过期时间,达到设置的时间后会自动清理
binlog-do-db:设置哪些库的操作日志记录到binary log中
4.创建数据库
如果MasterA和SlaveB上需要创建全新的库,则直接在两个mysql上创建数据库就可以了,如果要做主从复制的数据库正在使用中,我们需要先将数据库锁住,待操作完之后再解锁使用,为的是避免两个数据库数据不是一个初态,如果两台服务器上要做主从复制的数据库的初态不是一样的那就没有意义了。
FLUSH TABLES WITH READ LOCK;
将数据库从MasterA上导出,将导出的数据库导入到SlaveB的mysql上
查看MasterA数据库的binary位置,用于配置SlaveB:
参数说明:
File:日志名称
Position:日志偏移量
Binlog_Do_DB:记录日志的库
将刚才锁定的数据库解锁:UNLOCK TABLES;
5.配置SlaveB的mysql
使用命令vi /etc/my.cnf编辑配置文件,添加以下配置:
6.开启SlaveB的slave
7.查看SlaveB的slave线程是否开启
Slave_IO_Running为读取master的binaryLog的线程
Slave_SQL_Running为执行SQL的线程
这两个线程必须都为YES才可以实现主从复制。
三、Mycat+Mysql单向主从结果验证
1.使用navicat连接上两个mysql
2.在MasterA的mysql的库中添加一条数据,查看SlaveB的mysql库中是否同步过来,结果是同步了
3.在MasterA这台服务器上安装一个mycat,我们配置一下mycat的schema和server两个配置文件
schema:
server.xml添加以下配置:
<user name="root">
<property name="password">root</property>
<property name="schemas">itoo</property>
</user>
4.通过mycat连接schema
mysql -uroot -proot -h127.0.0.1 -P8066
5.插入一条数据,结果验证是两个库中的数据会同步
6.将Master的mysql停掉,依旧通过mycat插入一条数据,数据会插入到Slave的mysql中,将Master的mysql启动,通过mycat插入一条数据到数据库,发现两个数据库之间不会同步.
四、配置两个mysql互为主从
在以上配置的基础上,将Master机器作为slave,slave的机器作为master.
1.在Slave(相对的Master)机器上连接mysql,为Master(相对的Slave)授权
grant replication slave on *.* to 'root'@'192.168.22.xxx' identified by 'root';
其中192.168.22.xxx是Master机的ip
2.查看Slave机的binarylog
3.开启Master的同步
如果出现上图的错误就先将slave停掉,再操作一遍,使用命令:STOP SLAVE,(此处命令必须为大写)开启完同步之后需要打开slave,使用命令:START SLAVE(此处命令必须为大写)。
4.在Master上查看slave的状态
五、验证互为主从搭建结果
1.navicat连接mysql之后,在数据库中直接添加一条数据,分别在两个数据库中添加一条数据,发现数据在两个数据库中同步。
2.mycat的配置不用修改,用mycat连接mysql,命令为:mysql -uroot -proot -h127.0.0.1 -P8066
3.插入一条数据,发现数据库也能同步
4.将其中一个数据库停掉,在启动着的数据库中添加一条数据,然后启动刚才停掉的数据库,发现数据同样同步到了数据库中。
六、总结
通过一步步的实践,让系统更加的稳定,之后数据量大了之后还要研究分库分表,下一篇博客,小编将会写一下mycat-web的可视化监控界面,实时监测mycat的性能。