MySQL8.0.18配置多主一从


Posted in MySQL onJune 21, 2021

1. 现实背景

现有 4 台主机,均能够自动地采集数据,并存入其 MySQL 数据库中,另有 1 台专门用于处理数据的高配置主服务器。这 5 台机器经常不在同一个网段下,但希望,一旦处于同一个网段下时,4 台用于采集数据的主机能够自动地向主服务器汇集数据,为此配置环境。

2. 约定

  • slave,主服务器
  • master1, 用于采集数据的某一台主机
  • master2, 用于采集数据的某一台主机
  • master3, 用于采集数据的某一台主机
  • master4, 用于采集数据的某一台主机

3. 配置 master

3.1. 配置启动参数

多台 master 只需确保 server-id 不一致即可,其他根据自身需求配置。

[mysqld]
# 服务器标识符, 确保每台服务器标识符都不一样
server-id = 1000

# master 机必须开启 log_bin
# mysql-bin 为自定义名字,会生成诸如 mysql-bin.index、mysql-bin.000001 等文件
log_bin=mysql-bin

# 二进制日志过期时间(单位:天),默认值为 0,即不过期
expire_logs_days = 0

# 错误日志
log-error=/var/lib/mysql/mysql-error.log

# 单个 log_bin 文件最大值,达到最大值之后新建文件后缀自增,如 mysql-bin.000002
max_binlog_size = 100M

# mysql 安装路径
basedir=/var/lib/mysql

# mysql 数据路径
datadir=/var/lib/mysql

# master 记录操作的数据库
binlog_do_db=replication

# master 忽略的数据库
binlog_ignore_db=information_schema
binlog_ignore_db=performance_schema
binlog_ignore_db=sys
binlog_ignore_db=mysql

# 二进制日志保存模式
binlog_format=MIXED

# blob 类型的最大存储值(单位:字节、B)
# 1048576 B = 1MB
max_allowed_packet=1048576


# 密码复杂度配置,需要插件
# 密码长度至少为 0
# validate_password_length=8

# 大小写同时存在的最少数目
# validate_password_mixed_case_count=1

# 密码至少存在的数字数目
# validate_password_number_count=1

# 密码至少存在的特殊字符数目
# validate_password_special_char_count=1

innodb_flush_log_at_trx_commit=0

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4

3.2. 重启服务使参数生效

3.3. 以 root 身份登录,创建用户,赋予密码,授权,刷新权限

创建用户 replication,同时赋予密码:

create user 'replication'@'%' identified with mysql_native_password by 'JINGhuaSHUIyue123,.';

如果创建用户失败,可能已经存在用户,不紧要的话可以删除该用户:

drop user 'replication'@'%';

如果不希望删除重建用户,只希望修改密码:

alter user 'replication'@'%' identified with mysql_native_password by 'JINGhuaSHUIyue123,.';

赋予用户 replication slave 权限:

grant replication slave on *.* to 'replication'@'%';

保证 replication slave 权限立即生效,刷新权限:

flush privileges;

4. 配置 slave 服务器

4.1. 配置启动参数

[mysqld]
# 服务器标识符, 确保每台服务器标识符都不一样
server-id = 2000

# mysql 安装路径
basedir=D:\mysql

# mysql 数据路径
datadir=D:\mysql\data

# slave 复制的数据库
replicate_do_db=test

# slave 忽略的数据库
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
replicate_ignore_db=mysql
replicate_ignore_db=sys

# slave 网络超时重连间隔(单位:秒)
slave_net_timeout=60

[mysql]

default-character-set=utf8

[client]

default-character-set=utf8

4.2. 重启服务使参数生效

5. 配置多主一从

5.1. 查看 master 状态

以 root 身份登陆 master1,需要留意其中的 file、position:

show master status;
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-bin.000006 |      155 | test         | information_schema,performance_schema,sys,mysql |                   |
+------------------+----------+--------------+-------------------------------------------------+-------------------+

以 root 身份登陆 master1,需要留意其中的 file、position:

show master status;
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-bin.000005 |      155 | test         | information_schema,performance_schema,sys,mysql |                   |
+------------------+----------+--------------+-------------------------------------------------+-------------------+

说明:启动 MySQL 会强制生成新的 log-bin,因此位置均为 155。

5.2. 配置 slave 与 master 的关联

查看是否有其他残余的配置:

show slave status\G;

停止 slave,清除残余配置:

stop slave;
reset slave all;

根据 master1 的 file,position 配置 replication 通道“master1”

change master to
master_host = '112.124.1.100',
master_user = 'replication',
master_port = 3306,
master_password = 'replication',
master_log_file = 'mysql-bin.000006',
master_log_pos = 155,
master_connect_retry = 15,
master_retry_count = 0
for channel 'master1';

根据 master2 的 file,position 配置 replication 通道“master2”

change master to
master_host = '192.168.1.139',
master_user = 'replication',
master_port = 3306,
master_password = 'JINGhuaSHUIyue123,.',
master_log_file = 'mysql-bin.000005',
master_log_pos = 155,
master_connect_retry = 15,
master_retry_count = 0
for channel 'master2';
  • master_connect_retry:连接失败,重试间隔(单位:秒)
  • master_retry_count:连接失败重试次数,0 为无限次

5.3. 准备表

启动前,在三台机器的数据库中使用 DDL 语句定义好表结构,且表结构保持一致,确保主从复制前的一致性,否则会出错!

5.4. 启动 slave,查看 slave 状态

start slave for channel 'master1';
start slave for channel 'master2';
show slave status\G;

注意 Slave_IO_Running 和 Slave_Slave_Running 需要均显示为 Yes,才表示成功,否则留意错误提示。

到此这篇关于MySQL8.0.18配置多主一从 的文章就介绍到这了,更多相关MySQL 多主一从 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL的join buffer原理
Apr 29 MySQL
mysql主从复制的实现步骤
Oct 24 MySQL
基于MySql验证的vsftpd虚拟用户
Nov 07 MySQL
Mysql Innodb存储引擎之索引与算法
Feb 15 MySQL
Mysql事务索引知识汇总
Mar 17 MySQL
解决MySQL Varchar 类型尾部空格的问题
Apr 06 MySQL
mysql中如何用命令创建联合唯一索引
Apr 20 MySQL
MySQL 条件查询的常用操作
Apr 28 MySQL
MySQL数据库Innodb 引擎实现mvcc锁
May 06 MySQL
一文解答什么是MySQL的回表
Aug 05 MySQL
MySQL远程无法连接的一些常见原因总结
Sep 23 MySQL
Mysql的Table doesn't exist问题及解决
Dec 24 MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 #MySQL
分析mysql中一条SQL查询语句是如何执行的
MySQL如何使用使用Xtrabackup进行备份和恢复
Jun 21 #MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 #MySQL
Mysql数据库值的添加、修改、删除及清空操作实例
You might like
基于mysql的论坛(6)
2006/10/09 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
php实现的ping端口函数实例
2014/11/12 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
input 输入框内的输入事件详细分析
2010/03/17 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
Python中内置的日志模块logging用法详解
2016/07/12 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
详解Python中的正则表达式
2018/07/08 Python
python爬取微信公众号文章
2018/08/31 Python
Python装饰器简单用法实例小结
2018/12/03 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
2019/10/24 Python
python小项目之五子棋游戏
2019/12/26 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
四年大学生活的自我评价范文
2014/02/07 职场文书
库房管理员岗位职责
2014/03/09 职场文书
2014年党支部学习材料
2014/05/19 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
我的生日感言
2015/08/03 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书