MySQL的双主互备

 参考:      Windows下mysql双主搭建icon-default.png?t=N7T8https://www.cnblogs.com/chenyixun/p/13810156.html

       MySQL的双机互备(又称为MySQL高可用)是一种数据库系统部署策略,可以实现在两台服务器之间实现高可用性和容错能力。

        具体而言,MySQL的双机互备将MySQL数据库部署在两台服务器上,其中一台作为主服务器(Master),另一台作为备用服务器(Slave)。主服务器负责处理所有的读写请求,而备用服务器则通过主服务器的日志复制机制实时复制主服务器上的所有操作。如果主服务器发生故障或失效,备用服务器就会自动接管主服务器的工作,成为新的主服务器,以确保数据的可用性和完整性。

        要实现MySQL的双机互备,需要使用专业的数据库复制技术和工具,如MySQL Replication、MySQL Cluster、Galera Cluster等。这些技术可以帮助管理员自动同步数据和状态信息,实现高可用性和容错能力。同时,还需要考虑服务器的硬件配置和网络环境,以确保双机互备系统的稳定性和性能。

        本文所讲的双主互备是指在两个MySQL主节点之间,实现互相备份和同步数据,使得当一个节点宕机时,另一个节点能够立即替代宕机节点继续提供服务,从而确保高可用性和数据安全性。

具体实现方式有两种,一种是基于MySQL内置的双主复制机制,另一种是使用第三方工具,如MHA(MySQL High Availability)或Galera Cluster。

        在双主互备中,两个主节点之间相互备份和同步数据,任何一个节点的数据发生变化,都会被另一个节点同步,确保数据的一致性。当一个节点宕机时,另一个节点能够立即接管服务,无需手动干预,从而实现高可用性。同时,这种架构也能够提高数据的可靠性和安全性,因为数据备份和同步经常进行,即使出现数据丢失或损坏的情况,备份数据也能够恢复。

        需要注意的是,双主互备的实现需要保证网络稳定和数据一致性,否则可能导致数据丢失或冲突。同时,双主互备也需要耗费更多的资源和带宽,因此需要根据具体情况进行权衡和选择。

 闲话休提,直接上干货。配置步骤如下:

1.修改my.cnf配置文件:

主机(192.168.0.2)

[mysqld]
log-bin=mysql-bin
relay_log=mysql-relay-bin
log-slave-updates=on //从表将同步数据写入自身bin文件
binlog_format=mixed //同时开启SBR和RBR两种记录模式(MBR模式)
auto-increment-offset=1 //双主建议开启,防止主键冲突
auto-increment-increment=2 //双主建议开启,防止主键冲突
server-id=1
basedir=C:\mysql-8.0.21-winx64\
datadir=C:\mysql-8.0.21-winx64\data\
port=3306

从机(192.168.0.3)

[mysqld]
log-bin=mysql-bin
relay_log=mysql-relay-bin
log-slave-updates=on
binlog_format=mixed
auto-increment-offset=2 //双主建议开启,防止主键冲突
auto-increment-increment=2 //双主建议开启,防止主键冲突
server-id=2
basedir=C:\mysql-8.0.21-winx64\
datadir=C:\mysql-8.0.21-winx64\data\
port=3306

2.创建用于同步的用户
create user 'slave'@'%' identified with mysql_native_password by 'slave'; //创建同步用户
*这里两台服务器可以分别创建各自的用户比如:第一台slave1,第二台slave2,因为下面赋权限时,如果是给所有数据库赋权限,则该用户也会被同步,则第一台创建好后在第二台服务在创建相同用户时,会报错。
grant replication slave on *.* to 'slave'@'%'; //给用户赋权限
*这里可以考虑只将特定库的所有表用于该用户同步:grant replication slave on mr_rcs.* to 'slave'@'%';
flush privileges; //刷新权限缓存


3.查看自身当前bin-log日志信息
flush tables with read lock; //锁表写权限,当前只读
show master status; //查看日志状态


4.指定同步规则
unlock tables; //解锁表写权限
stop slave; //停止同步服务

reset slave; //删除原先保存在主表和中继表中的数据slave_master_info ,slave_relay_log_info

假设当前是第二台服务器,
change master to master_host='192.168.0.2',master_user='slave1',master_password='slave',master_log_file='mysql-bin.000043',master_log_pos=10138; //第一台服务器IP地址为192.168.0.2'
,本地同步用户slave1,第一台服务器的日志文件,最新日志记录行数
//反之,如果当前是第一台服务器,则
change master to master_host='192.168.0.3',master_user='slave2',master_password='slave',master_log_file='mysql-bin.000045',master_log_pos=69142;

*这里的master_log_file和master_log_pos值通过

show master status;

获取到主人数据库的信息。也就是说要到另外一台服务器上执行这个命令拿到信息。


5.开启同步
start slave IO_THREAD; //开启读写线程
start slave SQL_THREAD; //开启sql同步线程
stop slave;
set global sql_slave_skip_counter=1;
start slave;
show slave status \G; //查看同步状态
*上述所有操作完成后查看同步状态有几个重要指标,如果状态正确则表示同步建立成功,并且状态已经同步
Slave_IO_Running:Yes
Slave_SQL_Running:Yes //如果是No,一般是在该台服务器上执行了写操作或者机器重起(mysql服务重启),事务回滚造造成
Seconds_Behind_Master:0
如果状态不对:
可重复执行第4、5两步骤

6.
show processlist; //查看用户进程状态

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会回答你的问题,以下是mysql5.7双主互备、高可用、读写分离+keepalived实战部署步骤与命令和架构图: 1. 架构图 ``` +----------+ | Node 1 | |(Master) | +----------+ |(VIP) | +-----------+-----------+ | | | VIRTUAL IP | | | +-----------+-----------+ | |(VIP) | +----------+ | Node 2 | | (Slave) | +----------+ ``` 注解:Node1与Node2都有mysql服务器,Node1为主节点,Node2为节点,VIP为虚拟IP,通过keepalived实现主切换。 2. 部署步骤与命令 2.1 安装MySQL 在Node1和Node2上安装MySQL,可以使用yum或者apt-get安装。 2.2 配置MySQL双主互备 在Node1上执行以下命令: ``` vi /etc/my.cnf # 添加如下内容 [mysqld] server-id=1 log-bin=mysql-bin binlog-format=ROW auto_increment_increment=2 auto_increment_offset=1 ``` 在Node2上执行以下命令: ``` vi /etc/my.cnf # 添加如下内容 [mysqld] server-id=2 log-bin=mysql-bin binlog-format=ROW auto_increment_increment=2 auto_increment_offset=2 ``` 2.3 配置MySQL读写分离 在Node1上执行以下命令: ``` mysql -u root -p # 创建用于复制的用户 create user 'repl'@'%' identified by 'password'; # 授权 grant replication slave on *.* to 'repl'@'%'; # 查看master状态 show master status; ``` 记录下File和Position的值。 在Node2上执行以下命令: ``` mysql -u root -p # 停止slave stop slave; # 删除所有slave信息 reset slave all; # 配置slave change master to master_host='Node1_IP', master_user='repl', master_password='password', master_log_file='File', master_log_pos=Position; # 开启slave start slave; # 查看slave状态 show slave status\G; ``` 2.4 配置keepalived 在Node1和Node2上都要安装keepalived。 在Node1上执行以下命令: ``` vi /etc/keepalived/keepalived.conf # 添加如下内容 ! Configuration File for keepalived global_defs { router_id MySQL_HA } vrrp_script chk_mysql { script "/usr/local/sbin/chk_mysql.sh" interval 2 weight -2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 virtual_ipaddress { 192.168.0.100/24 dev eth0 label eth0:0 } track_script { chk_mysql } } ``` 在Node2上执行以下命令: ``` vi /etc/keepalived/keepalived.conf # 添加如下内容 ! Configuration File for keepalived global_defs { router_id MySQL_HA } vrrp_script chk_mysql { script "/usr/local/sbin/chk_mysql.sh" interval 2 weight -2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 100 virtual_ipaddress { 192.168.0.100/24 dev eth0 label eth0:0 } track_script { chk_mysql } } ``` 2.5 配置chk_mysql.sh 在Node1和Node2上都要创建chk_mysql.sh文件,并赋予执行权限。 在Node1上执行以下命令: ``` vi /usr/local/sbin/chk_mysql.sh # 添加如下内容 #!/bin/bash if [ $(ps -ef | grep -v grep | grep mysqld | wc -l) -eq 0 ]; then service keepalived stop fi # 赋予执行权限 chmod +x /usr/local/sbin/chk_mysql.sh ``` 在Node2上执行以下命令: ``` vi /usr/local/sbin/chk_mysql.sh # 添加如下内容 #!/bin/bash if [ $(ps -ef | grep -v grep | grep mysqld | wc -l) -eq 0 ]; then service keepalived stop fi # 赋予执行权限 chmod +x /usr/local/sbin/chk_mysql.sh ``` 3. 总结 以上就是MySQL5.7双主互备、高可用、读写分离+keepalived实战部署步骤与命令和架构图。通过以上部署,可以实现MySQL的高可用、负载均衡、读写分离等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值