主配置文件
bash
[mysqld]
character-set-server=utf8mb4
bind-address=0.0.0.0
port=3306
default-storage-engine=INNODB
# 基础主库配置(必选) 以下是主从复制操作
server-id = 1
# 开启log log会存储在data目录下
log-bin = mysql-bin
gtid_mode = ON
enforce_gtid_consistency = ON
# 核心:只记录需要同步的操作到binlog
binlog-do-db = jeecgai # 指定要同步的库(订单库)
# 可选:明确忽略其他库(比如商品库goods_db),因为上面已配置了,这里可以不写
binlog-ignore-db = mysql # 忽略系统库
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
read-only = 0 # 主库可写
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
# -- 创建复制账号(允许从本机访问)
# CREATE USER 'replmysql'@'localhost' IDENTIFIED BY 'repl@123456';
# -- 授予复制权限(仅同步需要的权限)
# GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost';
# -- 刷新权限,使配置生效
# FLUSH PRIVILEGES;
# 查看binlog位置
# SHOW MASTER STATUS;
# 初始化从库
# mysqld --defaults-file=D:\tool\mysql-8.0.23-winx64-slave\my.ini --initialize --console --datadir=D:\tool\mysql-8.0.23-winx64-slave\data --user=mysql
# 得到从库初始化密码: ptk-ySQhk0cY
# 注册从库服务(指定配置文件和服务名)
# mysqld --install mysql_slave --defaults-file=D:\tool\mysql-8.0.23-winx64-slave\my.ini
# 导出主库的订单库(3306端口)
# mysqldump -uroot -p -P 3306 --databases jeecgai --master-data=2 > D:\tool\backupmysql\jeecgai.sql
# 登录 net start mysql_slave
# mysql -u root -p -P 3307 -h 127.0.0.1
# 修改密码
# 重置root密码(替换为你想设置的新密码,比如root@root)
# ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
# -- 刷新权限(确保密码生效)
# FLUSH PRIVILEGES;
# -- 退出MySQL
# EXIT;
# 导入到从库(3307端口)
# mysql -uroot -p -P 3307 < D:\tool\backupmysql\jeecgai.sql
# 在从库创建同步,利用主库专用的的同步账号
# -- 先停止旧的同步(全新从库执行也不会报错)
# STOP SLAVE;
# -- 2. 重置复制配置(清空之前的MASTER信息和中继日志配置)
# RESET SLAVE ALL;
#
# -- 配置主库信息(关键:替换File和Position)
# CHANGE MASTER TO
# MASTER_HOST='localhost', -- 主库在本机
# MASTER_PORT=3306, -- 主库端口
# MASTER_USER='repl', -- 步骤4创建的复制账号
# MASTER_PASSWORD='Repl@123456', -- 复制账号密码
# MASTER_LOG_FILE='mysql-bin.000001', -- 步骤4记录的File值 SHOW MASTER STATUS;
# MASTER_LOG_POS=7320; -- 步骤4记录的Position值
# -- 启动同步
# START SLAVE;
# 如果主库需要恢复数据
# # 第一步:导出binlog到SQL文件
# "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqlbinlog.exe" --start-datetime="2025-12-23 09:00:00" --stop-datetime="2025-12-23 10:00:00" "C:\ProgramData\MySQL\MySQL Server 8.0\Data\mysql-bin.000001" > D:\restore_data.sql
# 第二步:检查SQL文件无误后,执行恢复
# "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -u root -p < D:\restore_data.sql
# 如果从库的log文件损坏了 ,主库 查看binlog的位置 show variables like '%log_bin%';
# -- 1. 加只读锁,阻止新写入(避免清理binlog时主库生成新日志)
# FLUSH TABLES WITH READ LOCK;
# -- 2. 查看所有binlog文件(确认要删除的文件)
# SHOW BINARY LOGS;
# -- 删除mysql-bin.000001及之前的所有binlog(只保留后续完整的)
# PURGE BINARY LOGS TO 'mysql-bin.000002';
# -- 3. 重置主库的binlog序列(可选,彻底清空旧日志)
# RESET MASTER;
# -- 解锁,恢复主库写入
# UNLOCK TABLES;
# -- 查看新的binlog起点(关键!记录File和Position)
# SHOW MASTER STATUS;
# -- 1. 停止所有复制线程
# STOP SLAVE;
# -- 2. 彻底重置(清空配置+中继日志)
# RESET SLAVE ALL;
# -- 3. 删除从库旧的订单库(避免数据冲突)
# DROP DATABASE IF EXISTS order_db;
# -- 从库执行,替换为步骤1记录的File和Position
# CHANGE MASTER TO
# MASTER_HOST='localhost',
# MASTER_PORT=3306,
# MASTER_USER='replmysql',
# MASTER_PASSWORD='repl@123456',
# MASTER_LOG_FILE='mysql-bin.000001', -- 步骤1记录的新File
# MASTER_LOG_POS=154; -- 步骤1记录的新Position
# -- 启动同步
# START SLAVE;
# -- 验证状态
# SHOW SLAVE STATUS\G;
# 删除从库
# 1. 先停止服务(如果服务已启动,没启动则跳过,提示"服务未启动"无需在意)
# net stop mysql_slave
# 2. 卸载错误注册的服务(指定服务名,和你之前注册的mysql_slave一致)
# mysqld --remove mysql_slave
从配置文件
bash
[mysqld]
# 从库唯一标识(必须≠主库,主库一般是1,这里设2)
server-id = 2
# 从库端口(避免和主库3306冲突,设3307)
port = 3307
# 从库数据目录(自定义路径)
datadir = D:/tool/mysql-8.0.23-winx64-slave/data
# 从库socket文件(Windows下可省略,系统自动处理)
# socket = D:/tool/mysql-8.0.23-winx64-slave
# 服务名(后续注册服务用,自定义为MySQL80_Slave) 这个没有用
# service-name = mysql_slave
# 主从复制核心配置
# 开启中继日志(从库必需)
relay-log = D:/tool/mysql-8.0.23-winx64-slave/logs/mysql-relay-bin
# 中继日志索引文件路径(显式指定,避免MySQL找不到)
relay-log-index = D:/tool/mysql-8.0.23-winx64-slave/logs/mysql-relay-bin.index
# 关闭从库二进制日志(仅做从库时关闭,若级联复制则开启)
# log-bin = D:/tool/mysql-8.0.23-winx64-slave/logs/mysql-relay-bin.index
# 只读(普通用户无法写入,root仍可操作)
read-only = 1
# GTID模式(8.0推荐开启,便于同步)
gtid_mode = ON
enforce_gtid_consistency = ON
# 基础配置(和主库保持一致即可)
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
default-time-zone = '+8:00'
explicit_defaults_for_timestamp = ON
# 配置从库只同步的表
replicate-do-db = jeecgai # 只执行订单库的同步指令
# 可选:明确忽略其他库(和主库对应)
replicate-ignore-db = mysql