docker mysql 高可用_(七) Docker 部署 MySql8.0 一主一从 高可用集群

下载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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值