当前位置:网站首页>Docker practical experience: Deploy mysql8 master-slave replication on Docker
Docker practical experience: Deploy mysql8 master-slave replication on Docker
2022-07-31 11:17:00 【m0_67392811】
文章目录
环境准备
需要一个 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 上部署的,现有资料较少.
要靠经验.
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在.深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小.自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前.因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担.添加下方名片,即可获取全套学习资料哦
边栏推荐
- R 语言data.frame 中的另一行中减去一行
- IBM SPSS Statistics 28软件安装包下载及安装教程
- Initial JDBC programming
- AWS亚马逊云账号注册,免费申请12个月亚马逊云服务器详细教程
- 502 bad gateway causes and solutions
- Windows安装mysql详细步骤(通俗易懂,简单上手)
- windows平台下的mysql启动等基本操作
- Insertion and deletion of doubly linked list
- unity computeshader的可读写buffer
- 3.网页信息解析方法:Xpath与BeautifulSoup
猜你喜欢
In PLC communication error or timeout or download the prompt solution of the model
PyQt5快速开发与实战 9.5 PyQtGraph在PyQt中的应用 && 9.6 Plotly在PyQt中的应用
众多mock工具,这一次我选对了
IDEA 配置方法注释自动参数
一文带你了解redux的工作流程——actionreducerstore
ApiPost 真香真强大,是时候丢掉 Postman、Swagger 了
"JUC Concurrent Programming - Advanced" 06 - Immutability of Shared Models (Design of Immutable Classes | Use of Immutable Classes | Flyweight Pattern)
Windows安装mysql详细步骤(通俗易懂,简单上手)
Docker实践经验:Docker 上部署 mysql8 主从复制
Redis缓存面临的缓存穿透问题
随机推荐
ApiPost 真香真强大,是时候丢掉 Postman、Swagger 了
《云原生的本手、妙手和俗手》——2022全国新高考I卷作文
Android studio connects to MySQL and completes simple login and registration functions
SQLSERVER merges subquery data into one field
生命不息,刷题不止,简单题学习知识点
Hospital management system database, course design, SQLserver, pure code design
[Part 1 of Cloud Native Monitoring Series] A detailed explanation of Prometheus monitoring system
mpu9150(driverack pa简明教程)
musl Reference Manual
Cloudera Manager —— 端到端的企业数据中心管理工具
Use jOOQ to write vendor-agnostic SQL with JPA's native query or @Formula.
5 open source Rust web development frameworks, which one do you choose?
7 天找个 Go 工作,Gopher 要学的条件语句,循环语句 ,第3篇
基于Multisim的函数信号发生器–方波、三角波、正弦波[通俗易懂]
v-model的原理
IDEA configure method annotation automatic parameters
2022/7/30
Detailed tutorial on distributed transaction Seata
How SQL intercepts specified characters from strings (three functions of LEFT, MID, RIGHT)
7 days to learn Go, Go structure + Go range to learn