linux中mysql主从复制原理及配置

原理:

1、master服务器上的数据发生改变时,会将改变的数据记录到二进制binlog日志中。

2、当slave服务器发现master的binlog发生改变时,会开启一个I/O线程去请求连接master服务器,并请求从指定binlog日志文件的指定位置之后发送binlog日志内容。

3、当master服务器收到来自slave服务器的I/O线程请求后,master会开启一个dump线程,用来将指定binlog日志文件指定位置之后的内容返回给slave服务器。

4、当slave服务器的I/O线程获取到master的binlog日志内容后,会保存到slave本地的relay log(中继日志)文件(mysql-relay-bin.xxxxxx)中。

5、slave服务器的SQL线程会从relay log文件中读取日志信息,并解析成sql语句逐一执行,使其数据和master保持一致。应用完毕后的relaylog会被清理掉。

注意事项:

1、master一定要开启binlog日志功能(默认是关闭的),然后授予slave远程连接的权限。

2、mysql主从复制,至少需要两个mysql服务。并且master和slave服务器上的mysql版本最好相同(如果不一致,那么要保证slave版本不低于master版本)。

3、master和slave两节点间时间需同步。

 

主从复制安装配置

1、基础环境准备

#操作系统
centos 6.5
#mysql版本
5.7
#两台虚拟机:
node1:192.168.20.12 (主)
node2:192.168.20.14 (从)

2、安装mysql数据库,可参考linux环境安装mysql5.7

3、在两台数据库中分别创建数据库

create database mydb;

mysql默认情况下binlog是关闭的,如下:

4、在主(node1)服务器上,进行如下配置:

# 修改配置文件,执行以下命令打开mysql配置文件
vi /etc/my.cnf
# 在文件的最下面增加如下配置信息
log-bin=master-bin      #binlog二进制文件名称
binlog-format=ROW       #binlog二进制格式。有row、statement、mixed三种格式
server-id=1             #唯一标识,主从不一样就行
binlog-do-db=mydb       #同步的数据库名称

 5、在主(node1)服务器上,登录mysql服务,配置从库登录主库的账号并授权:

set global validate_password_policy=0;
set global validate_password_length=4;
grant replication slave on *.* to 'root'@'%' identified by '123456';
flush privileges;

6、查看master状态(之前配置过,所有下面的file是从000003开始,否则应该是000001)

 现有的master log信息(日志文件是在保存在/var/lib/mysql下)

 7、重启mysql服务,然后在从(node2)服务器上配置:

change master to 
master_host
='192.168.20.12', #主库地址 master_user='root', #授权账户 master_password='123456', #授权账户密码 master_port=3306, #主库端口 master_log_file='master-bin.000003', #下次同步的主库起始binlog文件 master_log_pos=154; #下次同步的主库起始位置

这里的配置,必须跟第6步中主服务器状态的值一一对应(特别是master_log_file和master_log_pos)

8、启动slave主从复制

start slave;

9、检查slave状态

show slave status\G

从上面可以看到主从复制的相关配置信息。如果Slave_IO_Running=Yes,Slave_SQL_Running=yes,则表示配置成功

在从服务器/var/lib/mysql目录下,可以看到多了几个relay-bin中继日志文件:

 10、此时可以在主服务器上进行相关的增删改操作,在从服务器上查看结果是否同步

 

posted @ 2020-11-20 15:43  仅此而已-远方  阅读(309)  评论(0编辑  收藏  举报