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 13 MySQL
MySQL数据库压缩版本安装与配置详细教程
May 21 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
详解MySQL中的主键与事务
May 27 MySQL
MySQL配置主从服务器(一主多从)
Aug 07 MySQL
Mysql binlog日志文件过大的解决
Oct 05 MySQL
MySQL窗口函数的具体使用
Nov 17 MySQL
Nebula Graph解决风控业务实践
Mar 31 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
Apr 26 MySQL
Mysql 文件配置解析介绍
May 06 MySQL
sql查询语句之平均分、最高最低分及排序语句
May 30 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
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
php中http_build_query 的一个问题
2012/03/25 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
总结JavaScript三种数据存储方式之间的区别
2016/05/03 Javascript
Augularjs-起步详解
2016/07/08 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
微信小程序开发探究
2016/12/27 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
bootstrap-table后端分页功能完整实例
2020/06/01 Javascript
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
通过cmd进入python的实例操作
2019/06/26 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
python requests.get带header
2020/05/05 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
工作骂脏话检讨书
2014/10/05 职场文书
毕业横幅标语
2014/10/08 职场文书