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(中继日志) 文件(msql-relay-bin.xxxxxx)中。
5、salve服务器的 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、此时可以在主服务器上进行相关的增删改操作,在从服务器上查看结果是否同步
linux中mysql主从复制原理及配置
标签:jin inf 清理 form 上进 l数据库 orm 成功 uri
查看更多关于linux中mysql主从复制原理及配置的详细内容...