从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • 计算机简史

  • 数字电路

  • 计算机组成原理

  • 操作系统

  • Linux

    • Linux 命令学习

    • 文本处理三剑客

    • Linux安全

    • Docker

      • 尚硅谷Docker实战教程

        • 教程简介
        • Docker 简介
        • Docker 安装
        • Docker 配置国内镜像源
        • Docker 常用命令
        • 镜像的分层概念
        • 发布镜像
        • Docker 私有库
        • 容器数据卷
        • Docker 常用软件安装
        • MySQL 主从复制
          • 新建主服务器实例 3307
          • 新建从服务器 3308
          • 配置主从复制
          • 主从复制测试
        • 分布式存储之哈希取余算法
        • 3 主 3 从Redis集群搭建与扩缩容
        • Dockerfile
        • 虚悬镜像
        • Docker 微服务实战
        • Docker 网络
        • Docker-compose 容器编排
        • Portainer
        • Docker 重量级监控
        • Docker 系列完结
        • 记一次启动容器失败
  • 计算机网络

  • 数据库

  • 编程工具

  • 装机

  • 计算机基础
  • Linux
  • Docker
  • 尚硅谷Docker实战教程
2023-09-18
目录

MySQL 主从复制

# 90.MySQL 主从复制

接下来就是高级篇的内容了。在学习高级篇之前,请务必完成基础篇的内容,我们先从 MySQL 主从搭建开始。

‍

由于这是高级篇的内容,默认同学们都了解过主从复制,如果不会的同学可以参考下 MyCat 教程中关于主从复制 (opens new window)搭建的博客

我们将 3307 端口用作主服务器,3308 作为从服务器。

如果是云服务器,注意开启防火墙。 ‍

# 新建主服务器实例 3307

命令:

docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
1
2
3
4
5
6

启动后用 ps 检查下是否正常,并且也最后进入容器内看看能否登录 MySQL。

新建 /mydata/mysql-master/conf/my.cnf​,内容如下:

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101

## 指定不需要同步的数据库名称
binlog-ignore-db=mysql

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

## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M

## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed

## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

重启 MySQL:

docker restart mysql-master
1

创建 MySQL 同步用户并授权:

$ docker exec -it mysql-master /bin/bash

$ mysql -uroot -proot

mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
1
2
3
4
5
6
7

# 新建从服务器 3308

‍ 命令:

docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
1
2
3
4
5
6

同理,启动后用 ps 检查下是否正常,并且也最后进入容器内看看能否登录 MySQL。 ‍ 新增配置文件 /mydata/mysql-slave/conf/my.cnf​:

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102

## 指定不需要同步的数据库名称
binlog-ignore-db=mysql

## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin

## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M

## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed

## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

## relay_log配置中继日志
relay_log=mall-mysql-relay-bin

## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1

## slave设置为只读(具有super权限的用户除外)
read_only=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

修改完配置后重启 slave 实例:

docker restart mysql-slave
1

# 配置主从复制

‍ 在主数据库中查看主从同步状态(注意,每个人的结果可能都不一样,以自己的为准,后续不再重复这一点):

show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File                  | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mall-mysql-bin.000001 |      617 |              | mysql            |                   |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7

在从数据库配置主从复制(注意,宿主机 IP 等信息请更换为自己的):

change master to master_host='192.168.2.242', \
master_user='slave', \
master_password='123456', \
master_port=3307, \
master_log_file='mall-mysql-bin.000001', \
master_log_pos=617, \
master_connect_retry=30;
1
2
3
4
5
6
7

主从复制命令参数说明

  • master_host:主数据库的 IP 地址;
  • master_port:主数据库的运行端口;
  • master_user:在主数据库创建的用于同步数据的用户账号;
  • master_password:在主数据库创建的用于同步数据的用户密码;
  • master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取 File 参数;
  • master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取 Position 参数;
  • master_connect_retry:连接失败重试的时间间隔,单位为秒。 ‍ 在从数据库中,开启并查看主从同步状态:
mysql> start slave;


mysql> show slave status \G;
........
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
.......
1
2
3
4
5
6
7
8

如果上述两个字段的值是 Yes,则说明主从复制成功 ‍ 如果失败了,则观察下 Last_IO_Errot 的字段,会显示为什么主从复制失败,然后重新配置:

mysql> stop slave;
mysql> reset slave;
mysql> change master.........
1
2
3

‍

# 主从复制测试

主机插入数据:

mysql> create database db01;
mysql> use db01;
mysql> create table t1(id int, name varchar(20));
mysql> insert into t1 values(1, 'z3');
mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    1 | z3   |
+------+------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11

从机查看数据:

mysql> use db01;
mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
|    1 | z3   |
+------+------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7
8

‍ 可以看到从数据库能查出数据,主从复制配置成功。

(完)。

上次更新: 2025/6/3 17:50:46
Docker 常用软件安装
分布式存储之哈希取余算法

← Docker 常用软件安装 分布式存储之哈希取余算法→

最近更新
01
新闻合订本 2025-10
10-31
02
2025 年 10 月记
10-30
03
用 AI 批量优化思源笔记排版
10-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式