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服务添加 iptables防火墙策略的方案
Apr 29 MySQL
MySQL创建高性能索引的全步骤
May 02 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
MySQL 数据类型选择原则
May 27 MySQL
如何自己动手写SQL执行引擎
Jun 02 MySQL
MySQL开启事务的方式
Jun 26 MySQL
mysql5.6主从搭建以及不同步问题详解
Dec 04 MySQL
MySql重置root密码 --skip-grant-tables
Apr 11 MySQL
pt-archiver 主键自增
Apr 26 MySQL
mysql中关键词exists的用法实例详解
Jun 10 MySQL
MySQL串行化隔离级别(间隙锁实现)
Jun 16 MySQL
浅谈MySql update会锁定哪些范围的数据
Jun 25 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启用zlib压缩文件的配置方法
2013/06/12 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
JavaScript 数组循环引起的思考
2010/01/01 Javascript
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
关于javascript事件响应的基础语法总结(必看篇)
2016/12/26 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
在Django的模板中使用认证数据的方法
2015/07/23 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
通过Pandas读取大文件的实例
2018/06/07 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
Python调用JavaScript代码的方法
2020/10/27 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
几个数据库方面的面试题
2016/07/01 面试题
学校门卫岗位职责
2014/03/16 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
门面房租房协议书
2014/12/01 职场文书
委托收款证明
2015/06/23 职场文书
windows安装python超详细图文教程
2021/05/21 Python
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
Github 使用python对copilot做些简单使用测试
2022/04/14 Python