(七) Docker 部署 MySql8.0 一主一从 高可用集群
2024-10-19 13:18:49
参考并感谢
下载mysql镜像(不带tag标签则表示下载latest版本)
docker pull mysql/mysql-server
配置my.cnf 文件
my.cnf文件参考nginx的临时方案,从容器中拷贝出来
# 主库
[mysqld]
log-bin=mysql-bin # [必须]启用二进制日志
server-id=1 # [必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配
# 从库
[mysqld]
log-bin=mysql-bin # [必须]启用二进制日志
server-id=2 # [必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配
启动 mysql 主库
docker run -d \
-p 3306:3306 \
--privileged=true \
-e MYSQL_ROOT_PASSWORD="Mypwd@123456" \
--name mysql3306 \
--mount type=bind,source=/var/docker/configs/mysql/3306/my.cnf,target=/etc/my.cnf \
--mount type=bind,source=/var/docker/datas/mysql/3306,target=/var/lib/mysql \
--restart always \
mysql/mysql-server:latest
启动 mysql 从库
docker run -d \
-p 3307:3306 \
--privileged=true \
-e MYSQL_ROOT_PASSWORD="Mypwd@123456" \
--name mysql3307 \
--mount type=bind,source=/var/docker/configs/mysql/3307/my.cnf,target=/etc/my.cnf \
--mount type=bind,source=/var/docker/datas/mysql/3307,target=/var/lib/mysql \
--restart always \
mysql/mysql-server:latest
开放mysql端口并立即生效
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=3307/tcp --permanent
firewall-cmd --reload
登录主库
docker exec -it mysql3306 bash
mysql -u root -p
Mypwd@123456
# 主库创建同步用户
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Mypwd@123456';
# 主库给同步用户授权
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
# 主库创建用户并配置读写权限
CREATE USER 'madmars'@'%' IDENTIFIED WITH mysql_native_password BY 'Mypwd@123456';
GRANT ALL PRIVILEGES ON *.* TO 'madmars'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 查询主库状态,并记录 File 的值和 Position 的值
SHOW MASTER STATUS;
登录从库
docker exec -it mysql3307 bash
mysql -u root -p
Mypwd@123456
# 配置slave (master_log_file 和 master_log_pos 是主库的file和position值)
change master to
master_host='172.17.0.1',
master_user='repl',
master_log_file='mysql-bin.000003',
master_log_pos=1345,
master_port=3306,
master_password='Mypwd@123456';
# 启动salve
START SLAVE;
# 查看slave状态
SHOW SLAVE STATUS\G;
# 从库用户配置只读权限
CREATE USER 'madmarsreadonly'@'%' IDENTIFIED WITH mysql_native_password BY 'Mypwd@123456';
GRANT SELECT ON *.* TO 'madmarsreadonly'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
PS:
- 启动容器之前,需要创建好对应的宿主机的文件目录,宿主机缺少文件会导致容器启动失败
- docker环境部署,如果需要数据库持久化,必须要增加 privileged=true
《(七) Docker 部署 MySql8.0 一主一从 高可用集群》CSDN地址:https://blog.csdn.net/madmarszff/article/details/100904288
《(七) Docker 部署 MySql8.0 一主一从 高可用集群》博客园地址:https://www.cnblogs.com/godzff/p/11530713.html
《(七) Docker 部署 MySql8.0 一主一从 高可用集群》简书地址:
最新文章
- 还敢说你是程序员?一律师闲着没事写了个app,用户量600万
- 关于IOS浏览器:document,body的click事件触发规则
- Kafka与Logstash的数据采集对接 —— 看图说话,从运行机制到部署
- 【HDU 2160】母猪的故事
- jquery来跨域提交表单
- PictureBox控件鼠标进入的手形改变和提示
- mysql巡检脚本
- iOS实现文件上传功能模块
- php:根据中文裁减字符串函数方法
- 初探Lambda表达式/Java多核编程【4】Lambda变量捕获
- SpringMVC中重定向底层原理
- 解读 Vue 之 Reactive
- deeplearning.ai 人工智能行业大师访谈 林元庆 听课笔记
- html高度塌陷以及定位的理解
- editplus注册码生成
- Python如何判断字符串中是否有中文
- 在内部局域网内搭建HTTPs
- 微信小程序--消息推送配置Token令牌错误校验失败如何解决
- 三维凸包求凸包表面的个数(HDU3662)
- python基础-第十篇-10.2CSS基础
热门文章
- Android中如何动态添加碎片
- java.lang.Thread类的静态方法sleep()和yield()的比较
- [C++] 类的成员变量和成员方法
- SSM项目实战 之 Maven
- Proxy Server源码及分析(TCP Proxy源码 Socket实现端口映射)
- Oracle系列二 基本的SQL SELECT语句
- (转)matplotlib实战
- MySQL索引知识点及面试常问题
- linux:使用python脚本监控某个进程是否存在(不使用crontab)
- .Net - 线程本地变量(存储)的使用