一 应用背景
MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。下图就描述了一个多个数据库间主从复制与读写分离的模型。web服务器(tomcat,apache,iis,weblogic等)从多个slave数据库进行读操作,从master数据库进行写操作,如图:
在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化,业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各从服务器上进行。
二 主从复制原理
Mysql主从复制的实现原理如下图所示:
MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
三 主从复制的实现
实验环境:centos6.5 32位,mysql5.6.16
master节点设定:主机名->tai2 ip->169.254.130.11
slave节点设定:主机名->tai1 ip->169.254.130.10
slave节点设定:主机名->tai3 ip->169.254.130.12
1. master节点上的操作
1.1 开启二进制日志
修改/usr/my.cnf 文件,加入如下配置
# vi /usr/my.cnf
参数解释:log-bin=mysql-bin //将mysql二进制日志取名为mysql-bin
binlog-ignore-db //表示不同步什么数据库
binlog-do-db //表示只同步什么数据库,除此之外,其它不同步(如果这个参数配置了,上面那个参数可以不配置)
1.2 配置唯一的server-id
# service mysql restart
1.3 获得master二进制日志文件名及位置(Position)
执行完之后记录下这两值(File,Position),然后在配置完从服务器之前不要对主服务器进行任何操作,因为每次操作数据库时这两值会发生改变
1.4 创建一个用于slave和master通信的用户账号
GRANT replication slave ON *.* TO 'wx123'@'%' IDENTIFIED BY '1234';
参数解释如下图:
然后执行命令
mysql> flush privileges
刷新MySQL的系统权限相关表,以避免出现拒绝访问的情况
2. slave节点上的配置
2.1 配置唯一的server-id
和master的配置类似,如下图
#service mysql restart
2.2 使用master分配的用户账号读取master二进制日志
登录mysql,先关闭slave,
关闭slave(如果你以前配置过主从的话,一定要先关闭)
命令:stop slave;
再执行命令
change master to
master_host="169.254.130.11",
master_user="wx123",
master_password="123456",
master_log_file="mysql-bin.000028",
master_log_pos=455;
参数解释:MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)
2.4 启用slave服务
# start slave;
查看是否配置成功:
命令: show slave status;
(可以在sqlyog里面执行,会看得很清楚)
另外一台从库的操作方式类似,好了,主从复制就此ok!
注意事项:如果主库里面有初始化数据,那么在主从复制前需要把数据先导入到从库以保证初始一致性!