一、概念
1、热备份和备份的区别
热备份指的是:High Available(HA)即高可用,而备份指的是Backup,数据备份的一种。这是两种不同的概念,应对的产品也是两种功能上完全不同的产品。热备份主要保障业务的连续性,实现的方法是故障点的转移。而备份,主要目的是为了防止数据丢失,而做的一份拷贝,所以备份强调的是数据恢复而不是应用的故障转移。
2、什么是双机热备?
双机热备从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务。当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务。
从狭义上讲,双机热备就是使用互为备份的两台服务器共同执行同一服务,其中一台主机为工作机(Primary Server),另一台主机为备份主机(Standby Server)。在系统正常情况下,工作机为应用系统提供服务,备份机监视工作机的运行情况(一般是通过心跳诊断,工作机同时也在检测备份机是否正常),当工作机出现异常,不能支持应用系统运营时,备份机主动接管工作机的工作,继续支持关键应用服务,保证系统不间断的运行。双机热备针对的是IT核心服务器、存储、网络路由交换的故障的高可用性解决方案。
二、环境描述
1、master
系统:MacOS 10.15.7
数据库:mysql5.7.16
ip:172.16.10.124
2、slave
系统:windows 10
数据库:mysql5.7.37
ip:172.16.10.67
(注:主服务器的版本不能高于从服务器版本 ,两台服务器须处于同一局域网)
三、主从热备实现
1、账户准备
①在master服务器上为从服务器建立一个连接帐户,该帐户必须授予REPLICATION SLAVE权限。进入mysql操作界面,输入以下SQL:
grant replication slave on *.* to 'replicate'@'172.16.10.67' identified by '123456';
flush privileges;
②验证连接账户
在从服务器(slave)上用replicat帐户对主服务器(master)数据库进行访问,看是否可以连接成功。
在从服务器打开命令提示符,输入以下命令:
mysql -h172.16.10.124 -ureplicate -p123456
出现 mysql> 命令行 表示成功。
2、master配置
①修改mysql配置文件。找到my.ini配置文件打开后,在[mysqld]下修改即可:
[mysqld]
server-id = 1 #主ID,与从ID不能相同
log-bin=mysql-bin # 设定生成log文件名
binlog-do-db = test_db #设置同步数据库名
replicate-do-db=test_db # 从服务器同步数据库名
binlog-ignore-db = mysql #避免同步mysql用户配置
②重启mysql服务
打开命令提示符,输入以下两条命令完成重启(windows系统命令):
net stop mysql
net start mysql
③查看master服务器状态
show master status;
④锁表
目的是为了产生环境中不让进新的数据,好让从服务器定位同步位置,初次同步完成后,记得解锁
flush tables with read lock;
3、slave配置
①修改my.ini配置文件 (同步数据库的名字一定要一直,大小写敏感)
log-bin=mysql-bin #设定生成log文件名
server-id=2 # 从ID,与主ID不能相同
binlog-do-db=test_db #设置同步数据库名
binlog-ignore-db=mysql #避免同步mysql用户配置
replicate-do-db=test_db # 从服务器同步数据库名
replicate-ignore-db = mysql,information_schema,performance_schema
②重启mysql服务
③用change mster 语句指定同步位置
进入mysql操作界面后,输入如下指令:
stop slave;
reset slave;
change master to master_host='172.16.10.124',master_user='replicate',master_password='123456',master_log_file='mysql-bin.000124',master_log_pos=107;
注:这里的master_log_file、master_log_pos必须和前面show master status查询结果保持一致
4、解锁master表
unlock tables;
至此,主从热备实现完成,可进行测试操作。
后记:
文章基本是摘录的,流程是自己跑了一遍,结果是成功的。
自己遇到了几个小问题:
1.stop slave;命令报错,网上有解决办法。
2.macos系统没有my.ini文件,因为Mac系统和linux系统差不多,是my.cnf文件。/usr/local/mysql/mysql-support/default-my.cnf 把这文件复制一份到 /etc 改下名字为my.cnf 重启mysql,就ok了。
3.中间遇到个Slave_IO_Running: No 问题,我的解决办法是把主的数据库清理一下(或者把主从提前同步好),把之前的mysql-bin.00000x文件用mysql命令 reset master; (提醒,这个命令就把主数据库的binlog日志都删了,最好是测试环境先自己搞明白了,再搞生产环境)
4.强烈提醒,my.ini或my.cnf中的备份数据库名字,大小写要一致。
5.Got fatal error 1236 from master when reading data from binary log: 'Could nxxxx 报错,采用的第三步解决的。