当前位置: 首页 > news >正文

mysql主从配置(2025)

一、配置主服务器

  1. 编辑主mysql配置文件my.cnf(vim /etc/my.cnf),在[mysqld]下添加
[mysqld]
# 配置主ID,必须在所有参与主从复制的数据库保证唯一
server-id=1 
# 打开二进制日志
log-bin=/var/lib/mysql/mysql-bin.log
# 只允许同步ente_database数据库(可选配置),不配置同步所有
binlog-do-db=tciot-db
# binlog 保留时间设置为 7 天 
expire_logs_days=7  
  1. 启动主数据库,并登陆mysql数据库
#docker进入mysql方法
docker exec -it mysql bash
#登陆
mysql -u root -p123456
  1. 锁定主数据库中所有表,防止配置从数据库时,数据变动
mysql> flush tables with read lock;
  1. 查询主数据库状态
SHOW BINARY LOG STATUS;

显示结果
在这里插入图片描述

记住file,position,稍后要用到

二、配置从数据库

ps:需要再启动一个从数据库

sudo docker run -d -p 3308:3306 \
--name mysql2 --privileged=true \
-v /opt/tciot/mysql2/data:/var/lib/mysql \
-v /opt/tciot/mysql2/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
registry.cn-hangzhou.aliyuncs.com/wst-srv/mysql:8
  1. 编辑从mysql配置文件my.cnf(vim /etc/my.cnf),在[mysqld]下添加
    从库-主从配置
# 唯一ID
server-id=2
relay_log=/var/lib/mysql/mysql-relay-bin.log
replicate-do-db=tciot-db
expire_logs_days=7 
  1. 从主数据库拷贝需要同步的表数据,必须保证数据一致
    使用Navicat 15 for MySQL连接2个数据库,把主数据库的数据同步到从数据库

  2. 执行同步SQL语句

#登陆
mysql -u root -p123456#设置主库信息
CHANGE REPLICATION SOURCE TOSOURCE_HOST = '192.168.44.128',SOURCE_PORT = 3307,SOURCE_USER = 'root',SOURCE_PASSWORD = '123456', SOURCE_LOG_FILE = 'mysql-bin.000001', #主服务器通过(SHOW BINARY LOG STATUS;)查询出来结果中的File值;SOURCE_LOG_POS = 158; # 主服务器通过(SHOW BINARY LOG STATUS;)查询出来结果中的Position值;
  1. 开始同步
START REPLICA;
  1. 查看从数据库状态
SHOW REPLICA STATUS\G;

显示结果
在这里插入图片描述

这2项显示Yes,表示配置成功

  1. 打开主数据库的表锁
mysql> UNLOCK TABLES;

三、异常情况

短暂断网:从库会自动恢复,需关注延迟。

  • 长时间断网:可能需手动重建复制或重新初始化从库。

其他方案

docker启动的方式配置MySQL配置文件
查看docker启动可选配置

 docker run -it --rm mysql:tag --verbose --help

查看是否有server-id、log-bin、binlog-do-db、replicate-do-db等参数

主库

sudo docker run -d -p 3309:3306 \
--name mysql3 --privileged=true \
-v /opt/tciot/mysql3/data:/var/lib/mysql \
-v /opt/tciot/mysql2/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
registry.cn-hangzhou.aliyuncs.com/wst-srv/mysql:8 --server-id=1 --log-bin=/var/lib/mysql/mysql-bin.log --binlog-do-db=tciot-db

从库

sudo docker run -d -p 3308:3306 \
--name mysql2 --privileged=true \
-v /opt/tciot/mysql2/data:/var/lib/mysql \
-v /opt/tciot/mysql2/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
registry.cn-hangzhou.aliyuncs.com/wst-srv/mysql:8  --server-id=2 --log-bin=/var/lib/mysql/mysql-relay-bin.log --replicate-do-db=tciot-db

其他操作和前面一致

备注
binlog清理策略默认设置30天,如果需要可手动设置

[mysqld]
expire_logs_days = 7

如果希望从库的库名和主库不一致
从库的配置文件binlog-do-db改成和主库不一致的

replicate-do-db=tciot-di

从库输入下面语句,将主库和从库映射起来

CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=((`tciot-db`, `tciot-di`));

再开始同步


http://www.mrgr.cn/news/91352.html

相关文章:

  • 2025年-G4--lc75--Best Time to Buy and Sell Stock(java版)
  • BitLocker技巧与经验
  • 用自己的数据训练yolov11目标检测
  • 国产FPGA开发板选择
  • 驱动开发、移植(最后的说法有误,以后会修正)
  • Go语言实现十大排序算法超细节图片讲解
  • 垃圾回收器
  • java连接redis
  • javacv将视频切分为m3u8视频并播放
  • 【分布式理论11】分布式协同之分布式事务(一个应用操作多个资源):从刚性事务到柔性事务的演进
  • 基于Python豆瓣电影数据可视化分析系统的设计与实现
  • DFS算法篇:理解递归,熟悉递归,成为递归
  • 【NLP 25、模型训练方式】
  • 用 Python 实现 DeepSeek R1 本地化部署
  • 中药细粒度图像分类
  • Spring Cloud Gateway中断言路由和过滤器的使用
  • 深入解析 iOS 视频录制(一):录制管理核心MWRecordingController 类的设计与实现
  • C++编程,#include <iostream>详解,以及using namespace std;作用
  • compose multiplatform写一个简单的阅读器
  • Ubuntu 22.04.5 LTS 安装企业微信,(2025-02-17安装可行)