分布式 |mysql|docker 配置 mysql 主从模式

本贴最后更新于 1586 天前,其中的信息可能已经时移世易

javaDEMO

本网站记录了最全的各种 JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring 的, Mybatis 的等等各种,助力你从菜鸟到大牛,记得收藏哦~~
https://www.javastudy.cloud

docker 配置 mysql 主从模式

参考文档:
https://dev.mysql.com/doc/refman/8.0/en/replication.html
docker 配置 mysql 主从模式可大致分为以下几步

  1. 准备好配置文件
  2. 建立 docker 挂载目录
  3. 分别启动 docker 容器
  4. 在 mysql 上进行主从配置
  5. 验证主从的复制

配置文件的准备

可以在官方的 my.cnf 基础上更改,主要是添加 server_id
主库新增的 master.cnf 配置如下:

[mysqld]
# 这里的server_id 一般取机器ip的最后一位
server_id = 1
log_bin = mysql-bin

从库新增的 slave.cnf 配置如下:

[mysqld]
server_id = 2
log_bin = mysql-bin
relay_log = /var/lib/mysql/mysql-relay-bin
log_slave_updates = 1
read_only = 1

建立 docker 挂载目录

通常来说,需要挂载两个目录, 一个是配置目录, 一个是数据目录
如图所示目录结构
image.png
slave1 的目录结构也和 master 是一样的

分别启动 master 和 slave 的 docker 容器

启动 master 的 docker 容器

docker run -d \
               --name mysql-master\
               -p 33309:3306 \
           --restart always \
           --privileged=true \
           -e MYSQL_ROOT_PASSWORD=javastudy\
           -v /Users/lixiang/soft/mount/mysql/master/conf:/etc/mysql/conf.d\
           -v /Users/lixiang/soft/mount/mysql/master/data:/var/lib/mysql \
           mysql

启动 slave1 的 docker 容器

docker run -d \
               --name mysql-slave1 \
               -p 33308:3306 \
           --restart always \
           --privileged=true \
           -e MYSQL_ROOT_PASSWORD=javastudy\
           -v /Users/lixiang/soft/mount/mysql/slave1/conf:/etc/mysql/conf.d\
           -v /Users/lixiang/soft/mount/mysql/slave1/data:/var/lib/mysql \
           mysql

docker ps 可看到如下所示:
image.png

在 mysql 在进行主从配置

参考文档:
https://dev.mysql.com/doc/refman/8.0/en/replication-howto-repuser.html
先用可视化工具/任一客户端连接已建立好的 mysql master 和 slave1 服务器
image.png

在 master 创建用于复制的用户

注意以下命令是在 master 中执行

# 这里面的ip只限制于docker内容器访问
CREATE USER 'repl'@'172.17.0.%' IDENTIFIED WITH mysql_native_password BY 'studyrepl';

进行授权, 注意 mysql 8.X 和 5.X 的授权语法不一致, 在网上查资料时一定要注意这点

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.17.0.%';

在 slave1 中配置连接信息

在 slave1 的控制台中执行:

Change Master To MASTER_HOST ='172.17.0.5',
    MASTER_USER = 'repl',
    MASTER_PASSWORD ='studyrepl',
    MASTER_LOG_FILE = 'binlog.000001',
    MASTER_LOG_POS = 0;

可看到以下输出:
image.png

开始复制

在 slave 的控制台中执行:

start slave 

然后 show slave status 可看到
image.png

验证主从复制

我们在 master 里面建个库,建张表,然后输入点数据.
其实从建库的时候就可以看到, 下面的 slave 也同步出现了相应的库和表
image.png

DEMO 总评

数据库主从/读写分离是数据库常用的一种扩展方案,掌握数据库主从的搭建是学习读写分离的关键,本 DEMO 是 master/slave 都是从开始就搭建好了,小伙伴们可以思考下如果 master 是已有的服务器,要搭配一个 slave 要怎么操作呢?

DEMO 下载

mysqlconfig.zip

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    673 引用 • 535 回帖
  • 分布式
    78 引用 • 149 回帖 • 4 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    472 引用 • 892 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...