【MySQL 一】MySQL主从同步探寻

版权声明: https://blog.csdn.net/QingShuRuNinDeWan/article/details/80140622

MySQL Replication

配置MySQL主从主要原因:

  • 热备份,即使备份数据,相对于定期备份数据安全性更高
  • 读写分离以及均衡负载的基础,减轻数据库的负载,提升并发和吞吐 (接下来的篇章会讲到)

其实MySQL自身已经带了这个功能,MySQL Replication。
MySQL Replication官方介绍:MySQL Replication是一个MySQL内置的可以立即使用的杰出功能。此功能可让你将改变的数据从一个系统复制到另一个系统。

MySQL主从原理

MySQL Replication 是基于二进制日志系统(binlog)的,通过互相发送二进制日志来达到同步的效果。所以Master须开启binlog。过程大致有3个步骤
1. binlog会记录Master的相关操作记录
2. Slave会接收到Master发过来的binlog
3. Slave根据relaylog里面的sql语句按顺序执行
4. 原理图

注意:因为基于MySQL Replication的原理,是通过网络发送binlog文件,那么网络的延迟是最容易造成数据库不同步的因素,其次还有负载不一致,max_allowed_packet不一致,自增主键步长不一致,mysql自带bug等…

主从配置流程:

注意:为了防止其他因素对本次测试的干扰,我们尽量使用两台相同的服务器并且版本相同,关闭防火墙等(项目实际使用的时候可以自己加白名单放行)。

1.环境:

CentOS7.1 + MySQL 5.5.56

2.操作流程
主服务器

1.配置my.cnf(找不到的怎么找)

log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id 不能重复
binlog-do-db = test     #日志记录test库(只同步test库)

2.重启MySQL服务

service mysql restart

3.创建Slave同步使用的账号

#创建用户1  (原则上每台slave一个账户,ip请填写你对应的地址)
mysql> CREATE USER 'slave1'@'111.111.111.111' IDENTIFIED BY 'slave1';
#创建用户2
mysql> CREATE USER 'slave2'@'222.222.222.222' IDENTIFIED BY 'slave2';
#分配权限
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'111.111.111.111';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave2'@'222.222.222.222';
#刷新权限
mysql>flush privileges;  
#新建需要同步的库
mysql>create databases test;

3.获得当前二进制文件名以及位置并记录:

mysql > SHOW MASTER STATUS;
File Position Binlog_Do_DB Binlog_Ignore_DB
mysql-bin.000013 1285 test
从服务器

1.配置my.cnf

log-bin=mysql-bin #开启二进制日志
server-id=2 #设置server-id 不能重复

2.重启mysql 连接主数据库

service mysql restart
mysql>CHANGE MASTER TO
     >MASTER_HOST='111.111.111.111',
     >MASTER_USER='slave1',
     >MASTER_PASSWORD=’slave1’,
     >MASTER_LOG_FILE=’mysql-bin.000013’,
     >MASTER_LOG_POS=1285;
     #新建需要同步的库
     >create databases test;

4.启动slave同步进程:

start slave;

5.查看slave状态:

show slave status\G;

***************** 1. row *****************

         Slave_IO_Running: Yes     **此处必须为yes**
        Slave_SQL_Running: Yes       **此处必须为yes**

slave2同理

3.效果测试

1.进入Master执行

CREATE TABLE `test`.`test` (
    `id` int NOT NULL AUTO_INCREMENT,
    `str` varchar(255),
    PRIMARY KEY (`id`)
) COMMENT='';

2.插入shuju

insert into `test`.`test` ( `test`) values ( '2333')

3.Slave1和Slave2中,同时发现test表 以及一条数据。 主从同步成功

主从同步是读写分离和负载的基础,接下来将继续写如何配置读写分离,均衡负载等,还将会涉及到数据库中间件

参考资料

MySQL官网 https://dev.mysql.com/doc/refman/5.7/en/replication.html

猜你喜欢

转载自blog.csdn.net/QingShuRuNinDeWan/article/details/80140622