前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Docker搭建MySQL的主从复制

基于Docker搭建MySQL的主从复制

作者头像
一行Java
发布2022-04-06 16:44:54
4860
发布2022-04-06 16:44:54
举报
文章被收录于专栏:用户9257747的专栏
Docker安装

docker安装请参考我之前的文章:https://lupf.cn/articles/2019/11/23/1574503815568.html 详细的教你如何在centos上安装docker

数据库安装
  • 主从基本信息
  • 创建工作目录
代码语言:javascript
复制
mkdir -p /usr/local/docker/mysql
cd /usr/local/docker/mysql
mkdir 3306 3307
  • 准备my.cnf

这里准备这个配置文件的主要目的是为了后续方便主从的配置;使用的就是5.7.13版本对应的my.cnf;是预先从容器的/etc/mysql目录中拷贝出来的;如果你使用的不同的mysql镜像版本,可以按以下方式去拷贝出一份对应版本的my.cnf

代码语言:javascript
复制
# 如果你使用的是其他的版本,可以将5.7.13更换为你所使用的版本
docker run --name mysql-test -p 6033:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13

# 查看镜像是否运行成功 下面指令如果可以找到对应的详细信息,说明成功
docker ps

# 将容器/etc/mysql/my.cnf文件拷贝到当前目录
docker cp mysql-test:/etc/mysql/my.cnf /usr/local/docker/mysql

# 查看是否拷贝成功
ll /usr/local/docker/mysql

# 将文件拷贝到各自的工作目录
cp /usr/local/docker/mysql/my.cnf /usr/local/docker/mysql/3306
cp /usr/local/docker/mysql/my.cnf /usr/local/docker/mysql/3307
  • 主库
代码语言:javascript
复制
# 进入3306的工作目录
cd /usr/local/docker/mysql/3306

docker run \
-p 3306:3306 \
--name mysql-master01-3306 \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/my.cnf:/etc/mysql/my.cnf \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.13
图片
图片
  • 从库
代码语言:javascript
复制
# 进入3307的工作目录
cd /usr/local/docker/mysql/3307

docker run \
-p 3307:3306 \
--name mysql-slave01-3307 \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/my.cnf:/etc/mysql/my.cnf \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.13
  • 配置说明
    • -p 用于映射端口,如上所示分别将宿主机的3306、3307分别映射到容器master01和slave01的3306端口上
    • --name 设置容器的名称
    • -v 设置映射,将宿主机的目录映射到容器的目录;主要用于持久化关键数据,如/data目录就是用来持久化数据库文件的,这样就算是容器被remove掉之后,数据库的持久化文件依然还在,下次使用这个持久化文件启动一个新的容器数据依然还在。
    • -e 设置参数;MYSQL_ROOT_PASSWORD为数据库的root密码;TZ用来设置时区
    • -d 以守护进程的方式运行
    • 运行后的效果
代码语言:javascript
复制
docker ps -a
  • navicat连接测试
图片
图片
配置主从
  • 主库配置
代码语言:javascript
复制
vim /usr/local/docker/mysql/3306/my.cnf

## 添加以下配置
# 集群唯一id
# 同个局域网内唯一 所以可以使用ip的最后一段用来作为id 如192.168.1.123,那就把id设置为123,方便查找为题
# 这里由于使用的docker,且在一台机器上面,所以就用1 2来表示,实际使用过程中,没有谁会将主从部署在同一台机器上的
server-id=1

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

# 设置要同步的数据库,这里的t_mall为测试同步到数据库名
# 如果不设置标识全部同步
# binlog-do-db=t_mall

# 设置屏蔽系统默认的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
  • 从库配置
代码语言:javascript
复制
vim /usr/local/docker/mysql/3307/my.cnf

# 集群唯一id
server-id=2

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

# 设置同步的库
#replicate_wild_do_table=t_mall.%

# 设置忽略的库
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
  • 重启数据库
代码语言:javascript
复制
docker restart mysql-master01-3306 mysql-slave01-3306
  • (主库)创建同步用户(建议使用Navicate客户端去连接并创建)
代码语言:javascript
复制
# 在默认的mysql数据库上创建

# 创建db_sync用户
GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%' IDENTIFIED BY 'db_sync';

# 查看用户
select * from user

# 刷新权限
FLUSH PRIVILEGES;

# 确认位点
SHOW master STATUS
  • 从库配置
代码语言:javascript
复制
# 关闭同步
STOP SLAVE;

# 配置同步
CHANGE MASTER TO
    master_host='192.168.1.220',
    master_port=3306,
    master_user='db_sync',
    master_password='db_sync',
    master_log_file='mysql-master01-bin.000003',
    master_log_pos=432;

# master_host 主库的地址
# master_port 主库的端口
# master_user 主库同步使用的用户名
# master_password 主库同步使用的密码
# master_log_file binlog的名称
# master_log_pos log的位点

# 开启同步
START SLAVE;

#查看同步状态
SHOW SLAVE STATUS;
图片
图片
  • 主从测试(主库操作)
代码语言:javascript
复制
# 创建数据库
create database test_db;

# 切换数据库
use test_db;

# 创建测试表
create table test_db(id int(3),name char(10));
图片
图片

到这里,MySQL的主从复制就已经搭建完成了,这里是基于Docker的搭建,基于操作系统的安装和使用Docker的本质是没有什么不同的;但是使用Docker对系统的污染较少,所以个人是比较推荐使用Docker搭建

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一行Java 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker安装
  • 数据库安装
  • 配置主从
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档