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数据库命令大全
May 26 MySQL
Mysql中存储引擎的区别及比较
Jun 04 MySQL
MySQL快速插入一亿测试数据
Jun 23 MySQL
一次MySQL启动导致的事故实战记录
Sep 15 MySQL
SQL基础的查询语句
Nov 11 MySQL
全面盘点MySQL中的那些重要日志文件
Nov 27 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
Mysql分库分表之后主键处理的几种方法
Feb 15 MySQL
一条慢SQL语句引发的改造之路
Mar 16 MySQL
mysql 8.0.27 绿色解压版安装教程及配置方法
Apr 20 MySQL
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
Apr 20 MySQL
MySQL下载安装配置详细教程 附下载资源
Sep 23 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+mysql)
2007/11/23 PHP
php 无限级缓存的类的扩展
2009/03/16 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
PhpStorm配置Xdebug调试的方法步骤
2019/02/02 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
Python交换变量
2008/09/06 Python
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
Python3获取cookie常用三种方案
2020/10/05 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
医学毕业生自我鉴定
2013/10/30 职场文书
销售队伍口号
2014/06/11 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
校园安全广播稿范文
2014/09/25 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
管理失职检讨书
2015/05/05 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸