当前位置:首页 > linux运维 > 正文内容

Mysql8.0数据库搭建主备同步

14324472931个月前 (03-22)linux运维133

数据库主备同步的核心是确保主库(Master)的数据变更能实时同步到备库(Slave)。这通常通过二进制日志(binlog)实现。主库将SQL操作记录到binlog,备库通过IO线程读取这些日志,并用SQL线程重放以更新数据。

数据库同步还要考虑主备切换的场景,比如主库故障时如何提升备库为主库,以及原主库恢复后的重新加入。此外,高可用架构如MHA或MySQL Group Replication可能也是用户关心的点。

需要确保信息准确,避免过时的方法。MySQL 8.0的默认复制方式可能有所不同,是否使用基于GTID的复制,以及并行复制的配置等。同时,提醒用户注意版本兼容性,不同版本可能有不同的配置参数。

MySQL 主备同步(主从复制)是确保数据高可用的重要机制,其核心原理是通过 二进制日志(binlog) 将主库(Master)的数据变更实时同步到备库(Slave)。以下是关键实现步骤和注意事项:

一、主备同步核心原理
主库(Master)
将所有写操作(如 INSERT/UPDATE/DELETE)记录到 binlog。
通过 dump thread 将 binlog 事件发送给备库。
备库(Slave)
IO线程:连接主库,拉取 binlog 并写入本地 relay log。
SQL线程:读取 relay log 中的事件,重放为 SQL 操作更新数据。

二、主备同步配置步骤(以 GTID 模式为例)

  1. 主库配置
# my.cnf
[mysqld]
server-id = 1                  # 唯一标识
log-bin = mysql-bin            # 启用 binlog
gtid_mode = ON                 # 启用 GTID
enforce-gtid-consistency = ON  # 强制 GTID 一致性

2.备库配置

# my.cnf
[mysqld]
server-id = 2                  # 与主库不同
gtid_mode = ON
enforce-gtid-consistency = ON
read_only = ON                 # 设为只读(可选)

3.主库创建复制用户

-- 若备库使用旧版本客户端,改用 mysql_native_password 插件
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'YourPassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

4.备库启动复制

CHANGE MASTER TO
MASTER_AUTO_POSITION = 1,     -- GTID 模式自动定位
MASTER_HOST = '主库IP',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'password';

START SLAVE; --启动同步
SHOW SLAVE STATUS; --查看同步状态
SHOW MASTER STATUS; --查看主库状态
STOP SLAVE; --停止复制
RESET SLAVE ALL; --重置复制配置

5.测试数据库同步

-- 在主库执行
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE t1 (id INT);
INSERT INTO t1 VALUES (1);

-- 在备库查询
SELECT * FROM test_db.t1;  -- 应返回 id=1

三、常见错误场景与强制同步方法

1.SQL 线程报错(如主键冲突)
错误示例:Duplicate entry for key ‘PRIMARY’

-- 跳过当前导致错误的事件(通常跳过 1 个事件)
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;

2.IO 线程报错(如网络中断)
错误示例:Lost connection to master during query

-- 重新连接主库(确保网络正常)
STOP SLAVE;
CHANGE MASTER TO MASTER_LOG_FILE = 'binlog文件名', MASTER_LOG_POS = 位置;
--MASTER_LOG_POS和MASTER_LOG_FILE具体内容可通过 SHOW SLAVE STATUS; 命令获取
START SLAVE;

3.高级强制同步方法
如果错误无法跳过且需完全重建备库

STOP SLAVE;

RESET SLAVE ALL;

CHANGE MASTER TO
  MASTER_HOST = '主库IP',
  MASTER_USER = '复制用户',
  MASTER_PASSWORD = '密码',
  MASTER_LOG_FILE = '当前主库binlog文件名',
  MASTER_LOG_POS = 当前主库binlog位置;
  
  START SLAVE;

扫描二维码推送至手机访问。

版权声明:本文由爱开发博客发布,如需转载请注明出处。

本文链接:https://www.lovekf.cn/?id=40

分享给朋友:

“Mysql8.0数据库搭建主备同步” 的相关文章

Docker配置可视化Portainer(汉化版)

docker pull 6053537/portainer-ce使用docker拉取portainer汉化版,拉取其他版本自行百度拉取后利用以下命令查询拉取的镜像IDdocker images# --restart=alaways 指的是随docke...

自建dns服务器

自建dns服务器:项目来源:AdguardTeam/AdGuardHome: Network-wide ads & trackers blocking DNS server (github.com)我建立的DNS:1.15.64.27:53特点:本dns服务器主要解决的是DNS污染问题,顺便...

nas 里好用的docker 推荐

1.adguard/adguardhome 这是一个广告拦截项目,具备dns功能,特别适合在局域网部署,防止dns污染和用于做开发测试的时候对测试域名进行host。 --restart unless-stopped\ -v /my/own/workdir:/opt/adguar...

自建内网穿透服务器-基于Docker的FRP内网穿透部署

创建配置文件# 创建存放目录 sudo mkdir /etc/frp # 创建frps.ini文件 vim /etc/frp/frps.tomlfrps.toml文件配置内容[common] # 监听端口 bind_port&nb...

openvpn服务端一键搭建

需求: 搭建openvpn目的是安全访问内网和匿名访问其他网站,确保隐私信息不会泄露。 搭建方法: 1.复制以下脚本命名为“openvpn-install.sh”,在ssh中执行。 #!/bin/bash # shellcheck disable=SC1091,SC2164,SC2034,...

旁路由模式下(群晖或其他设备)docker无法访问hub.docker.com解决方案

旁路由模式下(群晖或其他设备)docker无法访问hub.docker.com解决方案

1.使用openwrt中的passwall插件,配置好其他相关数据后,在此处Socks配置中配置。 配置好后当状态为两个对号表示配置成功。 此时旁路由即开启了http端口,使用方式为:旁路由ip:3434 如果使用群晖,在群晖:控制面板-网络-常规中配置代理无服器即可...

发表评论

访客

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