欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【MySQL 一】MySQL主从同步探寻

程序员文章站 2022-04-09 20:38:05
...

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 一】MySQL主从同步探寻

注意:因为基于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