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基础之常见函数
Apr 22 MySQL
MySQL主从搭建(多主一从)的实现思路与步骤
May 13 MySQL
MySQL 8.0 之不可见列的基本操作
May 20 MySQL
MySQL8.0无法启动3534的解决方法
Jun 03 MySQL
mysql配置SSL证书登录的实现
Sep 04 MySQL
MySQL分库分表详情
Sep 25 MySQL
Mysql中一千万条数据怎么快速查询
Dec 06 MySQL
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 MySQL
MySQL数据库如何给表设置约束详解
Mar 13 MySQL
mysql使用 not int 子查询隐含陷阱
Apr 12 MySQL
mysql 乱码 字符集latin1转UTF8
Apr 19 MySQL
MySql数据库 查询时间序列间隔
May 11 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
让PHP以ROOT权限执行系统命令的方法
2011/02/10 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
JavaScript知识点整理
2015/12/09 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
详解从买域名到使用pm2部署node.js项目全过程
2018/03/07 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
python实现接口并发测试脚本
2019/06/25 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
委托公证书
2014/04/08 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
自强自立美德少年事迹材料
2014/08/16 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
支行行长竞聘报告
2014/11/06 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
物业保洁员管理制度
2015/08/05 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
spring cloud 配置中心native配置方式
2021/09/25 Java/Android
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS