双机热备份,即能够把主数据库中所有的数据同时写到备份的数据库中,从而实现MySQL数据库的热备份。
MySQL Replication是MySQL提供的一种主从备份的机制,并且整个复制备份过程是异步进行的,其高效的性能设计,也让复制的延时非常小。
MySQL复制功能在实际的应用场景中被广泛的应用于保证数据系统数据的安全性和扩展设计中。
一、MySQL Replication设计原理
MySQL的复制(replication)是一个异步的复制,从一个MySQLinstance(称为Master)复制到另一个MySQLinstance(称为Slave)。
整个复制操作主要由三个进程完成,其中两个进程在Slave(Sql进程和IO进程),另外一个进程在Master(IO进程)上。
要实施复制,首先必须打开Master端的binarylog(bin-log)功能,否则无法实现。整个复制过程就是Slave从Master端获取该日志后再在自己身上完全顺序的执行日志中所记录的各种操作。
复制的基本过程如下:
1、Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2、Master接收到来自Slave的IO进程请求后,通过负责复制的IO进程根据请求信息读取指定日志指定位置之后的日志信息,返回给Slave的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回信息已经到Master端的bin-log文件的名称以及bin-log的位置。
3、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的某个位置开始往后的日志内容,请发给我”。
4、Slave的Sql进程监测到relay-log中新增加了内容后,会马上解析relay-log的内容成为Master端真实执行时候的那些可执行的内容,并在自身执行。
二、 具体操作
假设同步guoya_teach这个库
设置主服务器Master配置
进入mysql : docker exec -it mysql mysql -uroot -p密吗
新建一个连接账户 授予权限
grant replication slave on *.* to 'replicate'@'%' identified by '123456';
设置mysql配置文件
wait_timeout=172800
interactive_timeout=172800
max_connections=800
server-id = 1 # 集群id
log_bin = /var/log/mysql/mysql-bin # 日志地址,记得给读写权限
binlog_do_db = guoya_teach # 要收集日志的库
binlog_ignore_db = mysql # 不收集日志的库
image.png
设置成功后重启 mysql
进入mysql Show master status\G
记住file 和 Position
image.png设置从服务器slave配置
设置数据库配置文件
wait_timeout=172800
interactive_timeout=172800
max_connections=800
server-id = 2 # id不能与master相同
log_bin = /var/log/mysql/mysql-bin
binlog_do_db = guoya_teach # 需要复制的库
binlog_ignore_db = mysql # 不需要复制的库
image.png
重启mysql
进入mysql : docker exec -it mysql mysql -uroot -p密吗
为从机设置主机配置
change master to master_host='103.XX.41.XX',master_user='replicate',master_password='XXXX..',master_log_file='mysql-bin.000001',master_log_pos=154;
设置完成后 启动 slave
start slave;
查看从机状态
show slave status\G
image.png
网友评论