Mysql双主配置的详细步骤
作者:shaunqing 发布时间:2024-01-28 14:21:49
前言
特点:在双主配置中,两台mysql互为主从节点。节点A是节点B的master,同时节点B也是节点A的master。
安装mysql步骤略过
一、mysql配置文件
(1)节点A配置
# 设置server-id,两节点必须不一样
server-id = 100
# 开启bin_log,模式为ROW,允许最大日志为1G
log_bin = mysql-bin
binlog_format = ROW
max_binlog_size = 1024M
# mysql5.7的版本不需要配置log-slave-updates=1
# log-slave-updates = 1
# 实现数据库宕机恢复后,自动同步缺少的数据
relay_log = mysql-relay-bin
# 设置自增ID初始值为2,每次自增量为2。即都是偶数2,4,6,8,...
auto_increment_offset = 2
auto_increment_increment = 2
# 开启gtid
gtid_mode = ON
enforce_gtid_consistency = 1
# 忽略不需要同步的schema
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = sys
(2)节点B配置
只列出了与节点A不同的配置
# 设置server-id,两节点必须不一样
server-id = 200
# 设置自增ID初始值为1,每次自增量为2。即都是奇数1,3,5,7,...
auto_increment_offset = 1
auto_increment_increment = 2
二、配置节点A为节点B的master(主从模式)
节点A为master,节点B为slave。
(1)登录节点A,创建slave(节点B)使用的账号。
# 在节点A上创建账号repl_user,允许从任意IP访问,密码为slave@100,
grant replication slave on *.* to 'repl_user'@'%' identified by 'slave@100';
flush privileges;
(2)查看节点A的master信息
如下图所属,节点A的bin_log日志为mysql-bin.000001,位置是154
# 清空master信息。初次配置可以使用,若已运行了同步,切记不要使用!
reset master;
# 查看master信息
show master status;
+------------------+----------+--------------+------------------+---------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+---------------------------------------------+
| mysql-bin.000001 | 154 | | | c2cf218e-2317-11ec-a36f-5cf9dd4fd6a8:1-5 |
+------------------+----------+--------------+------------------+---------------------------------------------+
(3)登录节点B,设置节点B的master为节点A
# 停止节点B上的slave
stop slave;
# 将节点B的master设为节点A,以下的配置信息均表示节点A
# MASTER_LOG_FILE和MASTER_LOG_POS,是在第(2)步中查看节点A的master信息
CHANGE MASTER TO
MASTER_HOST='127.0.0.1',
MASTER_PORT=3307,
MASTER_USER='repl_user',
MASTER_PASSWORD='slave@100',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
# 开启节点B上的slave
start slave;
(4)确认节点B的slave是否运行成功。当返回的结果中,Slave_IO_Running和Slave_SQL_Running都为YES时,表示成功。如果为NO或Connecting时,请在mysql的data目录中查看.err结尾的日志文件,找出[ERROR]级别的日志查看。初次配置时,一般都是my.ini配置问题,或同步账号创建问题导致的。
# 在节点B中查看slave状态
show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: repl_user
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 2207
Relay_Log_File: mysql-relay-bin.000002
Relay_Log_Pos: 1143
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
(5)若slave配置出现异常,可使用以下语句重置
reset slave all;
三、完成双主配置
此时,已成功配置了节点A与节点B的主从模式,即节点A是节点B的master。接下来重复步骤三的操作,但是节点A、B的操作要颠倒过来,即在节点B上创建同步账号,查看master信息,在节点A上设置节点B为master。配置完成后,同样查看节点A的slave状态,Slave_IO_Running和Slave_SQL_Running是否都为YES。
四、测试
在节点A添加、删除schema或表或数据,在节点B中查看是否有正确同步。
测试自增主键,分别在节点A、B上添加自增主键的数据,与配置文件是否对应。一个为奇数,一个为偶数。增加或删除数据,主键是否会出现冲突的情况。
五、控制同步的库或表
通过修改my.ini实现
(1)在master端控制
binlog-do-db binlog日志记录的数据库(多数据库用,隔开)
binlog-ignore-db binlog日志中忽略数据库(多数据库用,隔开)
只有在binlog中记录的表,才能同步给从库
# binlog中记录这两个表
binlog-do-db=db_1,db_2
# binlog中不记录这两个表
binlog-ignore-db=db_3,db_4
(2)在slave端控制
replicate-do-db 设定需要复制的数据库
replicate-ignore-db 设定需要忽略的复制数据库
replicate-do-table 设定需要复制的表
replicate-ignore-table 设定需要忽略的复制表
replicate-wild-do-table 同replication-do-table功能一样,可以通配符
replicate-wild-ignore-table 同replication-ignore-table功能一样,可以加通配符
注:忽略的配置里,在从库的relaylog中仍有信息,只是没有执行同步。
# 执行同步的库
replicate-do-db=db_1
replicate-do-db=db_2
# 忽略同步的库
replicate-ignore-db=db_3
# 执行同步的表
replicate-do-table=db_1.table_a
replicate-do-table=db_2.table_b
# 忽略同步的表
replicate-ignore-table=db_2.table_c
# 只复制哪个库的哪个表
replicate-wild-do-table=db_4.%
# 忽略哪个库的哪个表
replicate-wild-ignore-table=mysql.%
第五部分引用自CSDN博主「Mr. Sun_」的原创文章
原文链接:https://www.jb51.net/article/252656.htm
六、一个账号多个IP
当一台mysql作为主节点,N台作为从节点时,如果每个从节点都添加一个账号会非常繁琐。此时可以在主节点中,创建一个账号,给此账号设置多个IP,从而减少添加的账号个数。
具体做法是,将创建账号的语句执行多次,每次的IP不同即可。
# 创建一个账号名,为此账号设置多个ip
grant replication slave on *.* to 'repl_user'@'192.168.5.10' identified by 'slave@100';
grant replication slave on *.* to 'repl_user'@'192.168.5.20' identified by 'slave@100';
FLUSH PRIVILEGES
第六部分引用自CSDN博主「rucypli」的回答
mysql grant 多个ip-CSDN论坛
来源:https://blog.csdn.net/shaunqing/article/details/120610969
猜你喜欢
- 写在前面和小伙伴们分享一些Python 网络编程的一些笔记,博文为《Python Cookbook》读书后笔记整理博文涉及内容包括:TCP/
- 项目使用Pyqt作为UI框架,使用相机线程捕捉image,并在QGraphicsView中显示,遇到以下问题:1、采集的数据为nparray
- 表一、运算符与特殊字符 运算符描述/选择子元素,返回左侧元素的直接子元素;如果"/"位于最左侧表示选择根结点的直接子元素
- 前段时间写了一个百度图片下载器,结果发现有很多人需要使用。说实话之前写的那一款百度图片下载器比较LOW,今天刚好有时间就做了一下升级。更新了
- python中的os.mkdir和os.makedirs的使用区别以及如何查看某个模块中的某些字母开头的属性方法1 os.mkdir的使用o
- 在python中除了print函数之外,len函数和type函数应该算是使用最频繁的API了,操作都比较简单。一.len函数简介返回对象的长
- 购物车是电子商务网站中不可缺少的组成部分,但目前大多数购物车只能作为一个顾客选中商品的展示,客户端无法将购物车里的内容提取出来满足自己事务处
- 前言如果你学过操作系统,那么对于锁应该不陌生。锁的含义是线程锁,可以用来指定某一个逻辑或者是资源同一时刻只能有一个线程访问。这个很好理解,就
- 其实网上已经有很多这样的类了,不过出于练手的目的还是自己仿照着写了一个。下面的代码放在一个名为UploadFile.class.php文件内
- 一、 了解postman1. 什么是postman?------ 软件测试用来做接口测试的工具。2. 如何下载postman--
- 概述从今天开始我们将开启一段自然语言处理 (NLP) 的旅程. 自然语言处理可以让来处理, 理解, 以及运用人类的语言, 实现机器语言和人类
- #!/usr/bin/python import sys def left_child(node): return node * 2 + 1
- 1 文件'''文件存储文件主名.扩展名'''Python中常有的数据文件类型有文本文件、二进
- 快速排序(QuickSort)是对冒泡排序的一种改进:基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一
- Graphical User Interface,简称 GUI,又称图形化用户接口,所谓的GUI编程,指的是用户不需要输入代码指令,只通过图
- 前言版本:windows 10.0python 3.8多重继承在Python数字比较与类结构中有简略提到类,且在Python中类的mro与继
- 安装wxpypip install -U wxpy登录微信# 导入模块from wxpy import *# 初始化机器人,扫码登陆bot
- 要求:编写登陆接口输入用户名密码认证成功后显示欢迎信息输错三次后锁定针对此实例写了有二种类型的脚本,略有不同,具体如下:帐号文件accoun
- php遍历目录和文件的场景在很多时候都能用到,遍历目录方法的方法有好几种,那么应该使用
- 大致介绍Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,可以有效、高速的处理从很小到非常大的项目版本管理。