MySQL 复制-无数据环境搭建异步复制

文若2年前技术文章485


全新初始化(新环境,无数据)搭建 MySQL 异步复制 & GTID 复制标准文档。

一、前言

  • 环境说明:操作系统 CentOS 7  & 数据库版本 5.7.32

  • 参数要求:主库必须开启 binlog 日志,用于数据同步,相关参数👇

# 设置 server-id
server-id=1
# binlog 存储路径
log-bin=/var/log/binlogs/mysql-bin
# binlog 刷写策略,双一安全参数之一
sync-binlog=1
# binlog 刷写格式,row 为最安全和严谨的格式,当然也是存储内容较多的格式
binlog-format=row
# binlog 文件存储大小,存满 1G 后会自动置换下一个文件
max_binlog_size=1G
# binlog 自动清理,设置为 10 会自动清理 10 天前的 binlog 日志,避免日志占用空间较大
expire_logs_days=10

二、操作过程

  1. 单实例初始化安装:
    忽略

  2. 配置主从复制关系:

    1. 主从实例各自初始化时,会产生自己的二进制位置信息,建议全新环境搭建主从时,先清理各自的 binlog 日志:

-- 主从都需要执行
RESET MASTER;

    1. 主库上创建专用的复制用户:

-- 密码安装需求修改
grant replication slave on *.* to repl@'%' identified by 'YouPassword';

    1. 从库使用 change master to 语句将复制配置指向主库:

CHANGE MASTER TO
	MASTER_HOST='主库 id 地址',
	MASTER_USER='复制用户',
	MASTER_PASSWORD='password',
	MASTER_PORT=3306,
	MASTER_LOG_FILE='mysql-bin.000001',
	MASTER_LOG_POS=0,
 	MASTER_CONNECT_RETRY=10;

    1. 从库启动复制线程:

start slave;

    1. 检查复制线程状态:

show slave status\G


截屏2023-02-20 上午10.43.33.png

  1. 主库造些测试数据,在从库查询是否同步正常:

create database rep_test;
use rep_test;
create table rep_test_table(id int);
insert into rep_test_table values(1),(2),(3);

到此为止,全新环境下的 MySQL 异步复制已经搭建完成。

三、GTID 复制搭建

  1. 单实例初始化安装:
    安装两台 MySQL 可以参考:MySQL 自动化部署 快速完成 MySQL 搭建 👍

  2. GTID 复制相关参数:

# 在开启 binlog 基础上添加👇参数主从都需要配置
gtid_mode = on
enforce_gtid_consistency = 1
  1. 配置主从复制关系:

    1. 主从实例各自初始化时,会产生自己的二进制位置信息,建议全新环境搭建主从时,先清理各自的 binlog 日志:

-- 主从都需要执行
RESET MASTER;

    1. 主库上创建专用的复制用户:

-- 密码安装需求修改
grant replication slave on *.* to repl@'%' identified by 'YouPassword';
    1. 从库使用 change master to 语句将复制配置指向主库:

# 这个使用 MASTER_AUTO_POSITION 替代了 MASTER_LOG_FILE 和 MASTER_LOG_POS
CHANGE MASTER TO
	MASTER_HOST='主库 id 地址',
	MASTER_USER='复制用户',
	MASTER_PASSWORD='password',
	MASTER_PORT=3306,
	MASTER_AUTO_POSITION=1;

    1. 从库启动复制线程:

start slave;

    1. 检查复制线程状态:

show slave status\G


截屏2023-02-20 上午10.43.55.png

  1. 主库造些测试数据,在从库查询是否同步正常:

create database rep_test;
use rep_test;
create table rep_test_table(id int);
insert into rep_test_table values(1),(2),(3);

到此为止,全新环境下的 MySQL GTID 复制已经搭建完成。

四、注意事项

  1. 生产环境建议设置 expire_logs_days 参数,如果实例增删改频繁的话,它会在你不知不觉中消耗更多的磁盘空间。该参数 8.0 版本设置为 binlog_expire_logs_seconds 单位为 ;

  2. MySQL 8.0 中用户必须先创建再授权:

create user repl'%' identified by 'YouPassword';
grant replication slave on *.* to repl@'%';
  1. 该方案适合于数据库无任何业务数据的情况下,并且搭建过程中没有任何业务使用。


相关文章

网络策略NetworkPolicy

网络策略NetworkPolicy

目的:为了实现细粒度的容器间网络访问隔离策略。引用:1.3版本NetworkPolicy机制 -> 1.8版本networking.k8s.io/v1稳定版本功能:对pod、ns之间网络通信限制...

Kubernetes源码解读(五)--Reflector源码分析

Reflector 的任务就是向 apiserver watch 特定类型的资源,拿到变更通知后将其丢到 DeltaFIFO 队列中。1、Reflector的启动过程Reflector定义在k8s.i...

oracle设置归档路径和格式

1.归档文件格式设置说明:设置归档日志名称格式:alter system set log_archive_format='arch_%t_%s_%r.arc' scope=spfile sid='*'...

MySQL数据库复制延迟

【问题处理记录】1.查看资源情况,通过查找慢 SQL 发现,从 3:00 开始,存在较多 update 和 delete 操作。怀疑是表结构无主键,由于 RDS 日志模式默认采取的 row 模式,导致...

大数据组件--Impala概述

Apache Impala是一个适用于实时交互的sql软件,是基于hive的大数据分析查询引擎,hive和impala有不同的侧重面,通常是两个互相配合工作,可以先用hive进行一个数据的预处理清洗转...

MySQL性能优化(一)索引缺失引起的全表扫描

MySQL性能优化(一)索引缺失引起的全表扫描

索引缺失是引起数据库性能问题的第一大原因。一个例子这是一个非常简单的SQL,SELECT * FROM template WHERE templet_id ...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。