单服务器 MySQL 主从同步部署教程(宝塔 + MySQL 8.0)

下面是纯标准 Markdown 格式 完整文档,你可以直接复制保存为 MySQL主从部署教程.md 使用:


单服务器 MySQL 主从同步部署教程(宝塔 + MySQL 8.0)

包含:配置详解 + 完整步骤 + 所有报错解决方案 + 真实环境可直接复用

一、环境说明

  • 系统:CentOS 7
  • 面板:宝塔 BT-Panel
  • MySQL 版本:8.0.x
  • 部署模式:单服务器双实例
    • 主库(Master):3306 端口
    • 从库(Slave):3307 端口

账号信息

  • 主库 root 密码:e800ffb698b8e2e2
  • 从库 root 密码:123456
  • 主从同步账号:repl / Repl@123456
  • 业务库:ry-glass,业务账号:root-glass / root-glass

二、从库(3307)配置文件及说明

2.1 创建从库配置

bash 复制代码
vi /etc/my_slave.cnf

2.2 完整配置(逐行解释)

ini 复制代码
[mysqld]
# 从库端口,不能与主库 3306 重复
port=3307

# 从库数据目录,必须独立
datadir=/www/server/data_slave

# 从库本地连接用 socket
socket=/tmp/mysql_slave.sock

# 服务器唯一 ID,主库必须为 1,从库不能相同
server-id=2

# 开启二进制日志
log-bin=mysql-bin

# 从库中继日志,用于接收主库日志
relay-log=relay-bin

# 从库设为只读(普通用户无法写入)
read_only=1

# 超级管理员也强制只读(生产必开)
super_read_only=1

symbolic-links=0

# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 错误日志
log-error=/www/server/data_slave/error.log

# PID 进程文件
pid-file=/www/server/data_slave/mysql.pid

2.3 关键配置说明

配置项 作用
port 从库端口,必须与主库不同
server-id 全局唯一,主库=1,从库必须不同
log-bin 开启 binlog,主从同步必须开启
relay-log 从库专用,接收并回放主库日志
read_only 从库只读,防止误写入
super_read_only 强制超级权限只读,生产环境必备

三、从库初始化与启动

bash 复制代码
# 创建数据目录
mkdir -p /www/server/data_slave

# 授权
chown -R mysql:mysql /www/server/data_slave
chmod 700 /www/server/data_slave

# 初始化(无密码)
/www/server/mysql/bin/mysqld --defaults-file=/etc/my_slave.cnf --initialize-insecure --user=mysql

# 启动从库
/www/server/mysql/bin/mysqld_safe --defaults-file=/etc/my_slave.cnf --user=mysql &

设置从库 root 密码

bash 复制代码
/www/server/mysql/bin/mysql -uroot -S /tmp/mysql_slave.sock -P3307
sql 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
exit;

四、主库(3306)配置

4.1 主库配置检查

主库 /etc/my.cnf 必须包含:

ini 复制代码
server-id=1
log-bin=mysql-bin

修改后重启:

bash 复制代码
systemctl restart mysqld

4.2 创建同步账号

bash 复制代码
/www/server/mysql/bin/mysql -uroot -p'e800ffb698b8e2e2'
sql 复制代码
CREATE USER 'repl'@'localhost' IDENTIFIED BY 'Repl@123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost';
FLUSH PRIVILEGES;

4.3 查看主库 binlog 位置

sql 复制代码
SHOW MASTER STATUS;

记录:

  • File: mysql-bin.000007
  • Position: 156

五、配置从库连接主库

bash 复制代码
/www/server/mysql/bin/mysql -uroot -p123456 -S /tmp/mysql_slave.sock -P3307
sql 复制代码
STOP SLAVE;
RESET SLAVE ALL;

CHANGE MASTER TO
MASTER_HOST='127.0.0.1',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000007',
MASTER_LOG_POS=156;

START SLAVE;

查看同步状态

sql 复制代码
SHOW SLAVE STATUS\G

成功标志

复制代码
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

六、所有常见报错及解决方案(真实环境全覆盖)

错误 1:Can't connect to MySQL server on '127.0.0.1:3306' (111)

  • 原因:主库未启动 / 网络不通

  • 解决:

    bash 复制代码
    systemctl start mysqld
    systemctl stop firewalld

错误 2:Access denied for user 'repl'@'localhost'

  • 原因:同步账号或密码错误
  • 解决:重新创建 repl 账号

错误 3:Unknown database 'ry-glass'

  • 原因:从库缺少业务库

  • 解决:

    sql 复制代码
    CREATE DATABASE IF NOT EXISTS `ry-glass`;
    CREATE USER 'root-glass'@'%' IDENTIFIED BY 'root-glass';
    GRANT ALL ON `ry-glass`.* TO 'root-glass'@'%';

错误 4:Table 'ry-glass.device_glass' doesn't exist

  • 原因:从库有库无表
  • 解决:重新配置主从,从最新 binlog 开始同步

错误 5:Slave_SQL_Running: No,Operation DROP USER failed

  • 原因:主库删除不存在用户

  • 解决:

    sql 复制代码
    STOP SLAVE;
    SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    START SLAVE;

错误 6:ERROR 2002:Can't connect to socket

  • 原因:未指定从库 socket
  • 解决:登录必须加 -S /tmp/mysql_slave.sock

错误 7:GTID_MODE = OFF 无法使用 AUTO_POSITION

  • 原因:未开启 GTID
  • 解决:改用 MASTER_LOG_FILE + POS 模式

错误 8:The server is not configured as slave

  • 原因:未执行 CHANGE MASTER TO
  • 解决:先配置主从信息再启动 slave

七、同步测试

主库执行

sql 复制代码
USE ry-glass;
CREATE TABLE test(id INT);
INSERT INTO test VALUES(666);

从库查询

sql 复制代码
USE ry-glass;
SELECT * FROM test;

能查到数据即同步正常。


八、生产安全规范

  1. 从库必须开启 read_only=1
  2. 从库不提供写入业务
  3. 禁止在从库手动建表
  4. 主库定期全量备份
  5. 同步账号权限最小化

九、开机自启

bash 复制代码
echo "/www/server/mysql/bin/mysqld_safe --defaults-file=/etc/my_slave.cnf --user=mysql &" >> /etc/rc.local
chmod +x /etc/rc.local

十、常用运维命令

sql 复制代码
-- 查看主从状态
SHOW SLAVE STATUS\G;

-- 重启同步
STOP SLAVE;
START SLAVE;

-- 跳过一条错误 SQL
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;

-- 重置主从配置
RESET SLAVE ALL;

相关推荐
城管不管2 小时前
mysql与pgsql
数据库·mysql·pgsql
当战神遇到编程2 小时前
MySQL 函数与分组篇(聚合函数 + GROUP BY + 常用函数)
数据库·mysql
阿丰资源2 小时前
基于SpringBoot+MySQL的时装购物系统(附源码)
java·spring boot·mysql
gjc5922 小时前
MySQL运维避坑:你的MySQL总是关机慢、启动卡?
运维·数据库·mysql
橙子也要努力变强2 小时前
信号捕捉的底层机制-内核态和用户态初识
linux·服务器·c++
j_xxx404_2 小时前
Linux C 语言编译链接全解析:静态库与动态库从原理到实战
linux·运维·服务器·c语言·编辑器
wanhengidc2 小时前
云手机 云端运行托管
运维·服务器·网络·安全·web安全·智能手机
橙子也要努力变强2 小时前
信号捕捉底层机制-进程与OS
linux·服务器·c++
oLLI PILO2 小时前
在linux(Centos)中Mysql的端口修改保姆级教程
linux·mysql·centos