赞
踩
参考: Windows下mysql双主搭建https://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=33062.创建用于同步的用户
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; //查看用户进程状态
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。