云计算百科
云计算领域专业知识百科平台

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

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

下面是纯标准 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 创建从库配置

vi /etc/my_slave.cnf

2.2 完整配置(逐行解释)

[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 强制超级权限只读,生产环境必备

三、从库初始化与启动

# 创建数据目录
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 密码

/www/server/mysql/bin/mysql -uroot -S /tmp/mysql_slave.sock -P3307

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
exit;


四、主库(3306)配置

4.1 主库配置检查

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

server-id=1
log-bin=mysql-bin

修改后重启:

systemctl restart mysqld

4.2 创建同步账号

/www/server/mysql/bin/mysql -uroot -p'e800ffb698b8e2e2'

CREATE USER 'repl'@'localhost' IDENTIFIED BY 'Repl@123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost';
FLUSH PRIVILEGES;

4.3 查看主库 binlog 位置

SHOW MASTER STATUS;

记录:

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

五、配置从库连接主库

/www/server/mysql/bin/mysql -uroot -p123456 -S /tmp/mysql_slave.sock -P3307

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;

查看同步状态

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)

  • 原因:主库未启动 / 网络不通
  • 解决:systemctl start mysqld
    systemctl stop firewalld

错误 2:Access denied for user ‘repl’@‘localhost’

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

错误 3:Unknown database ‘ry-glass’

  • 原因:从库缺少业务库
  • 解决: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

  • 原因:主库删除不存在用户
  • 解决: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

七、同步测试

主库执行

USE ry–glass;
CREATE TABLE test(id INT);
INSERT INTO test VALUES(666);

从库查询

USE ry–glass;
SELECT * FROM test;

能查到数据即同步正常。


八、生产安全规范

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

  • 九、开机自启

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


    十、常用运维命令

    — 查看主从状态
    SHOW SLAVE STATUS\\G;

    — 重启同步
    STOP SLAVE;
    START SLAVE;

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

    — 重置主从配置
    RESET SLAVE ALL;


    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 单服务器 MySQL 主从同步部署教程(宝塔 + MySQL 8.0)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!