Linux下Mysql双机(主--主)热备方案

本文介绍了在Linux系统中实现MySQL双机主-主热备的方案,详细讲解了配置过程,包括环境准备、配置文件修改、数据库备份、用户授权以及启动和测试主从同步,以确保在一台服务器宕机时能迅速切换至另一台,保障系统正常运行。

背景原来的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

创建授权用户

  1. 两台服务器互为主服务器,都要创建操作数据库的授权用户。

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连接数据库,增删改数据进行测试,两台服务器都试试。

至此,主从服务器热备搭建完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值