MySql 主从热备份工作原理
简单的说:就是主服务器上执行过的sql语句会保存在binLog里面,别的从服务器把他同步过来,然后重复执行一遍,那么它们就能一直同步啦。
我们进一步详细介绍原理的细节, 这有一张图:
以上是一个主-从复制(热备)的例子。
整体上来说,复制有3
个步骤:
- 作为主服务器的Master,会把自己的每一次改动(每条sql语句)都记录到二进制日志Binarylog中。
- 作为从服务器Slave, 会用master上的账号登陆到 master上,读取master的Binarylog,写入到自己的中继日志 Relaylog。
- 然后从服务器自己的sql线程会负责读取这个中继日志,并执行一遍。
到这里主服务器上的更改就同步到从服务器上了,这种复制和重复都是mysql自动实现的,我们只需要配置即可。
整个过程,MySQL使用3个线程来执行复制同步功能,其中两个线程(Sql线程和IO线程)在从服务器,另外一个线程(IO线程)在主服务器。
主-主
互相复制实际只是把上面的例子反过来再做一遍。
所以我们以这个例子介绍原理。
实际操作
实际操作是
主服务器, 配置要记录在binLog里面的数据库,同时设置一个给从服务器登录的账号。
从服务器, 配置relayLog,配置主服务器的地址和端口,还有主服务器给的登录账号。
在主服务器上设置给从服务器登录用的账号
rant replication slave on *.* to 'relay_user1'@'192.168.1.168' identified by 'pass123456';
注意:
从服务器地址为:192.168.1.168,换成你的从机器的IP地址,这样就只允许从服务器登录,相对安全些。
用户名为: relay_user1
密码为: pass123456,自己按需要修改。修改MySQL配置文件
如果有Workbench,可以在左边的Navigator栏找到Options File,然后进行配置,如果想直接修改配置文件,文件的位置请看结尾的后记3.主服务器的my.cnf配置
log-bin=master-a-bin binlog-format=ROW //二进制日志的格式,有row、statement和mixed三种类型 server-id=1//要求各个服务器的这个id必须不一样 binlog-do-db=test //我们想让主服务器记录下操作的数据库。好让从服务器去复制的。 auto_increment_offset = 1 //设置AUTO_INCREMENT起点,关于这个看后记4 auto_increment_increment = 10 //设置AUTO_INCREMENT增量 //下面是一些别的配置,你可以跳过不看的 // gtid-mode=on //启用GTID,可看结尾的后记2说明 enforce-gtid-consistency=true //启用GTID master-info-repository=TABLE//默认是file,选择table方式保存 relay-log</