当前位置:网站首页>Docker实践经验:Docker 上部署 mysql8 主从复制
Docker实践经验:Docker 上部署 mysql8 主从复制
2022-07-27 13:12:00 【m0_67394006】

文章目录
环境准备
需要一个 MySQL8 版本的 MySQL,因为我个人没有用过 mysql5,不知道二者是否会有一些特性上的偏差。
默认你与我的环境是一样的。
简易版本安装
先仅仅安装一个 MySQL,一上来就主从的话很多细节都会杂糅在一起。
docker run -d -p 3306:3306 --privileged=true -v /mysql/log:/var/log/mysql -v /mysql/data:/var/lib/mysql -v /mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql
这里的参数介绍一下:
-p:指定内外端口映射,虚拟机为外,docker 容器为内,写在前面的为外部端口,写在后面的为内部端口。因为 MySQL 本身端口为 3306,为了不使你们混淆,我外部端口不设置为 3306。
-v:指定内外存储卷映射,Docker 实践经验(三)讲的就是这个。
-e:往容器内部传参,最后会由 MySQL 来接收。关于这个 -e 其实我也还没研究它的一个走势。
这样一个简易的 MySQL 就能动了。
设置密码
没有设置密码的话,不确定第二次要登录的时候是否还能进得去了。
不确定的意思就是可能进得去,可能进不去。
所以我们自行设置一个密码比较保险。
mysql> use mysql
mysql> update user set authentication_string='123456' where user='root' and host='localhost';
mysql> flush privileges;
不用注释吧。
现在这个 MySQL 能动了吧,可以考虑删掉了,咱开始做主从复制。
如果想留着用的:
修改 my.cnf,通过数据卷同步给MySQL:
cd /mysql/conf
vim my.cnf
插入以下内容:
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
重启MySQL:
docker restart mysql
docker exec -it mysql bash
配置 MySQL 主从复制
创建 bridge 网络并指定 IP 区间
docker network create --driver bridge mysql-master-slave
mysql连接数默认不够
set global max_connections=500;
set global mysqlx_max_connections=500;
创建数据和配置存放目录
# 创建主库数据存放目录
mkdir -p /home/docker/mysql/master/data
# 创建主库配置存放目录
mkdir -p /home/docker/mysql/master/conf
# 创建从库1数据存放目录
mkdir -p /home/docker/mysql/slave1/data
# 创建从库1配置存放目录
mkdir -p /home/docker/mysql/slave1/conf
准备配置文件
主数据库
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# 服务器唯一ID,默认是1
server-id=10
# 启用二进制日志
log-bin=mysql-bin
# 最大连接数
max_connections=10000
# 设置默认时区
default-time_zone='+8:00'
# 0:区分大小写
# 1:不区分大小写
lower_case_table_names=1
!includedir /etc/mysql/conf.d/
从数据库
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# 服务器唯一ID,默认是1
server-id=11
# 启用二进制日志
log-bin=mysql-bin
# 最大连接数
max_connections=10000
# 设置默认时区
default-time_zone='+8:00'
# 0:区分大小写
# 1:不区分大小写
lower_case_table_names=1
!includedir /etc/mysql/conf.d/
启动数据库
启动主数据库
如果上面完全按照我的步骤来,这里的命令也不用改参数。
docker run -d -p 3316:3306 --name mysql_master --restart=always --network mysql-master-slave -v /home/docker/mysql/master/data:/var/lib/mysql -v /home/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql
启动从数据库
docker run -d -p 3326:3306 --name mysql_slave1 --restart=always --network mysql-master-slave -v /home/docker/mysql/slave1/data:/var/lib/mysql -v /home/docker/mysql/slave1/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql
远程访问配置(主从)
# 在容器 mysql_master 中开启一个交互模式的终端
docker exec -it mysql_master /bin/bash
# 在容器 mysql_slave1 中开启一个交互模式的终端
docker exec -it mysql_slave1 /bin/bash
# mysql 登录
mysql -u root -p
# 给予远程用户所有表所有权限
GRANT ALL ON *.* TO 'root'@'%';
# 更改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
# 远程访问
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新权限
flush privileges;
主库创建复制用户
CREATE USER 'woniu'@'%' IDENTIFIED WITH mysql_native_password BY 'woniu123456';
GRANT REPLICATION SLAVE ON *.* TO 'woniu'@'%';
flush privileges;
查看 master 机器的状态
SHOW MASTER STATUS;

从库设置 master 的信息
如果前面完全按我的步骤来,这里需要填写你们自己宿主机上的 ip、还有上图中显示的那两个数据。
change master to master_host='192.168.190.133', master_user='woniu', master_password='woniu123456', master_port=3316, master_log_file='mysql-bin.000003', master_log_pos=2838, master_connect_retry=30;
参数释义:
master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。
开启主从复制
# 开始同步
start slave;
# 同步状态
show slave status ;

如果成功,圈出来的地方要都是 yes、
如果失败,会显示日志:
可自行百度,不过百度出来的不一定就适用于咱,毕竟咱是在 docker 上部署的,现有资料较少。
要靠经验。
边栏推荐
- 面向流行性疾病科普的用户问题理解与答案内容组织
- 平板模切机
- Navicate报错access violation at address 00000000
- Vscode -- create template file
- Group division and characteristic analysis of depression patients based on online consultation records
- Chapter 3 business function development (add clues and remarks, and automatically refresh the added content)
- Unity3D学习笔记10——纹理数组
- printf函数缓冲区问题
- Various ways to use new
- codeforces 1708E - DFS Trees
猜你喜欢

Mining enterprise association based on Enterprise Knowledge Map

平板模切机

Cognition -- classic of the road to success of hardware engineers

What are the benefits of taking NPDP

递归方法实现最大公约数

Arduino+ze08-ch2o formaldehyde module, output formaldehyde content

Flat die cutting machine

Schematic diagram of C measuring tool

592. Fraction addition and subtraction

In the "meta cosmic space", utonmos will open the digital world of the combination of virtual and real
随机推荐
递归方法实现最大公约数
A Keypoint-based Global Association Network for Lane Detection
HDU4565 So Easy! [matrix multiplication] [derivation]
基于预训练模型的多标签专利分类研究
[training day4] sequence transformation [thinking]
文献翻译__基于自适应全变差L1正则化的椒盐图像去噪
592. Fraction addition and subtraction
Lesson 3: reverse word order
2022 Niuke multi School II_ E I
基于企业知识图谱的企业关联关系挖掘
windows10 安装Sql Server 2019
printf函数缓冲区问题
NFT 的 10 种实际用途
Lighting 5g in the lighthouse factory, Ningde era is the first to explore the way made in China
Navicate报错access violation at address 00000000
记账软件如何查看收入支出
log4j2 jdbc appender
平板模切机
文献翻译__tvreg v2:用于去噪、反卷积、修复和分割的变分成像方法(部分)
【多线程的相关内容】