Mysql学习(2)——Mysql双机热备
参考博客《CentOS系统MySQL双机热备配置》。
参考官方文档https://dev.mysql.com/doc/refman/5.6/en/replication.html。
实现机制
对于一个MySQL服务器,一般有两个线程来负责复制和被复制。当开启复制之后:
主服务器Master,会把自己的每一次改动都记录到二进制日志 binlog 中。
从服务器Slave,会用master上的账号登陆到master上,读取master的binlog,写入到自己的中继日志 Relaylog,然后自己的SQL线程会负责读取这个中继日志,并执行一遍。
在考虑双机热备时,需要注意,一般意义上的双机热备都会有一个切换过程,这个切换过程可能是一分钟左右。在切换过程中,服务是有可能短时间中断的。但是,当切换完成后,服务将正常恢复。因此,双机热备不是无缝、不中断的,但它能够保证在出现系统故障时,能够很快恢复正常的服务,业务不致受到影响。
准备工作
类型 | 主机名 | IP | 操作系统 |
---|---|---|---|
Master | master | 192.168.121.182 | CentOS 7.3 |
slave | slave | 192.168.121.181 | CentOS 7.3 |
备份前保证两个数据库的数据一致。
mysql版本为5.6.39,不同版本的mysql,配置参数可能会有差别。
两个主机关闭防火墙
测试的时候为了方便起见,先关闭两台主机的防火墙。
# systemctl stop firewalld
# systemctl disable firewalld
Master服务器配置
- 进入MySQL命令行, 创建备份账号,即备份主机使用用户名backup,密码123456就可以连接到主服务器,进行备份
grant file,select,replication slave on *.* to aaa@qq.com192.168.121.181 identified by '123456';
这条命令的作用是在主服务器建立一个专门用于Replication的账户,@后面是账户用户所在的那台计算机的域名。
如果想要在Slave上有权限执行”LOAD TABLE FROM MASTER”或”LOAD DATA FROM MASTER”语句的话,必须授予全局的 FILE 和 SELECT 权限。
- 修改mysql的配置文件/etc/my.cnf,[mysqld]下添加:
server-id=1
log-bin=mysql-bin #打开日志开关,二进制日志文件
max_binlog_size=104857600
binlog_format=mixed #日志模式row level和statement level的结合
binlog-do-db=test #在test库进行的操作记录二进制日志文件
binlog-ignore-db=mysql #忽略对mysql库的操作,即不记录到日志中
- 重启mysql
# systemctl restart mysqld
- 查看mysql状态
记录二进制文件名(mysql-bin.000002)和位置(120)。
Slave服务器配置
- 暂停Mysql服务。
# systemctl stop mysql
- 修改mysql的配置文件/etc/my.cnf,添加如下配置:
server-id=2
replicate-do-db=test #同步master的test库
relay-log=relay-bin #设置I/O线程读master的binlog并写入本地的文件名,即为relay-log
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60
- 重启mysql:
# systemctl restart mysql
- 打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据即上文设置的同步账号密码,二进制文件的名称和位置)。
mysql> stop slave; #关闭Slave
mysql> change master to master_host='192.168.121.182',master_user='backup',master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=120;
mysql> start slave; #开启Slave
- 查看slave状态:
mysql> show slave status\G;
这里需要下图红框里的状态都是Yes。
测试
上面设置的,主从同步的数据库是test。
- 在主数据库test库中,新建一张表backup。
- 在从数据库中查看。