背景:原来的MySQL数据库放在单台服务器上,一旦服务器出现宕机,从排查问题到解决问题,可能需要几个小时甚至更久,这样会严重影响前台系统的使用。为了解决这个问题,我们可以再部署一台服务器,安装mysql,使两台机器能够互相备份数据库。这样,即使一台服务器出现宕机,我们可以迅速切换到另一台服务器上,保证了系统可以继续正常使用。
原理:1.主服务器会把数据库的操作记录(增、删、改)到二进制日志文件(bin.log)中;
2.备服务器会登录主服务器,读取主服务器的二进制日志文件,并写入到自己的中继日志中(relay.log);
3.备服务器再读取自己中继日志中的内容,并执行,这样就能实现热备。
环境准备:
1.两台机器都要关闭防火墙:chkconfig iptables off;
2.都要关闭selinux:vim /etc/selinux/config,将SELINUX = enforcing更改为SELINUX = disabled;
3.修改主机名:/etc/sysconfig/network,修改HOSTNAME=master,另外一台修改为slave;
4.修改hosts配置文件:vim /etc/hosts,添加两台机器的ip和对应主机名,
192.168.4.58 master
192.168.4.89 slave
reboot重启服务器。
5.服务器B执行命令:crontab -e,输入 */30 * * * * ? /usr/sbin/ntpdate -u 192.168.4.58; /sbin/hwclock -w,表示每30分钟会从主服务器A同步一次时间,并写入到硬件时钟。
修改配置文件:
服务器A:
server-id=1
log_bin=mysql-bin
binlog-do-db=xview_sc201905006
binlog-do-db=xview_msc
log-slave-updates
sync_binlog=1
auto_increment_offset=1 #起始值,一般填第N台主机,此时为第一台主机
auto_increment_increment=2 #步进值,有几台主机就填几
replicate-do-db=xview_sc201905006 #需要复制的数据库名,如果需要复制多个数据库,重复写这个属性就行了
replicate-do-db=xview_msc
服务器B:
server-id=2
log_bin=mysql-bin
relay-log=relay.log
binlog-do-db=xview_sc201905006
binlog-do-db=xview_msc
log-slave-updates
sync_binlog=1
auto_increment_offset=2
auto_increment_increment=2
replicate-do-db=xview_sc201905006
replicate-do-db=xview_msc
数据库备份:
主服务器A停止数据库:
[root@master ~]# service mysqld stop
物理级别备份:
[root@master ~]# cd /usr/local/mysql/data
[root@master data]# tar -zcvf xview_sc201905006.tar.gz xview_sc201905006
[root@master data]# tar -zcvf xview_msc.tar.gz xview_msc
#xview_sc201905006.tar.gz是打包后的压缩文件名,xview_sc201905006是需要打包的文件名
[root@master data]# scp xview_sc201905006.tar.gz xview_msc.tar.gz ibdata1 192.168.4.89:/usr/local/mysql/data
#mysql表类型分myisam和innodb,myisam的复制过去就可以使用,innodb的复制过去还需要把ibdata文件一起传输过去
此时的ibdata1文件的属主和属组都是root,需要改成mysql:
[root@slave data]# chown mysql ibdata1 #改变属主
[root@slave data]# chown :mysql ibdata1 #改变属组
slave端进行数据恢复
[root@slave ~]# cd /usr/local/mysql/data
[root@slave data]# tar -xf xview_sc201905006.tar.gz -C .
[root@slave data]# tar -xf xview_msc.tar.gz -C
启MySQL
[root@slave data]# service mysqld start
- 两台服务器互为主服务器,都要创建操作数据库的授权用户。
mysql> grant replication slave on *.* to 'slave'@'192.168.4.89' identified by 'CIB@xview2019';
mysql> flush privileges;
服务器B:
mysql> grant replication slave on *.* to 'slave'@'192.168.4.58' identified by 'CIB@xview2019';
mysql> flush privileges;
停止两台服务器上的从机线程
mysql> stop slave;
分别查看服务器A和服务器B作为主服务器的状态
服务器A:

服务器B:

分别在服务器A和服务器B上用change master to指定同步位置
服务器A:
mysql> change master to master_host='192.168.4.89', master_user='slave', master_password='CIB@xview2019',master_port=3306, master_log_file='mysql-bin.000011', master_log_pos=497;
【注释】master_host是相对于本机而言的主服务器ip,那么对于服务器A而言,它的主服务器是服务器B;master_user是上面在服务器A上创建的授权用户名;master_log_file是主服务器上的二进制日志文件;master_log_pos是主服务器上二进制日志文件的位置。即,这段sql,A应该对应B上的内容,B上的应该对应A上的内容。
服务器B:
mysql> change master to master_host='192.168.4.58', master_user='slave', master_password='CIB@xview2019',master_port=3306, master_log_file='mysql-bin.000016', master_log_pos=515;
启用slave线程:
mysql> start slave;
查看slave状态:
mysql> show slave status \G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
上面这两行属性都为YES,说明能进行同步了。用navicat连接数据库,增删改数据进行测试,两台服务器都试试。
至此,主从服务器热备搭建完成!
本文介绍了在Linux系统中实现MySQL双机主-主热备的方案,详细讲解了配置过程,包括环境准备、配置文件修改、数据库备份、用户授权以及启动和测试主从同步,以确保在一台服务器宕机时能迅速切换至另一台,保障系统正常运行。

1594

被折叠的 条评论
为什么被折叠?



