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

文若2年前技术文章809


全新初始化(新环境,无数据)搭建 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. 该方案适合于数据库无任何业务数据的情况下,并且搭建过程中没有任何业务使用。


相关文章

Spark对接ranger

Spark对接ranger

1、包如图所示https://dtstack-download.oss-cn-hangzhou.aliyuncs.com/insight/insight-4em/release/hadoop/spar...

MySQL性能优化(八)exists子查询优化一例

MySQL性能优化(八)exists子查询优化一例

一个例子SELECT u.id userId,       u.mobile,  &nbs...

StorageClass(NFS)

StorageClass(NFS)

一、什么是StorageClassKubernetes提供了一套可以自动创建PV的机制,即:Dynamic Provisioning.而这个机制的核心在于:StorageClass这个API对象.St...

Greenplum数据库建立外部表加载HDFS文件实践指导

Greenplum数据库建立外部表加载HDFS文件实践指导

环境概述(1)     Greenplum数据库版本号Greenplum Database 4.3.0.0POC3 build 45206(基于PostgreS...

mysql双主更改为主从架构分析

mysql双主更改为主从架构分析

客户需求客户业务运行的在mysql双主架构上,因为客户经常误操作触发双写,导致数据不一致,对业务的稳定运行造成加大的影响。客户现有数据库架构图解决方案基于客户业务和底层数据库架构实际情况,云掣科技提供...

Linux_ACL权限、mask值

acl权限在什么情况下使用:当要给一个用户与文件的属主、属组、其他人权限都不同的时候使用。也就是说,这个用户对应于这个文件不属于三个身份中的任何一种,是属于第四种身份,那么我们就需要使用acl权限去给...

发表评论    

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