docker always_Docker部署MySQL主从

3caa57c093414460b042989da1275e98

Docker启动MySQL主、从

创建相关目录

mkdir -p ~/docker-mysql/master/{conf,logs,data}
mkdir -p ~/docker-mysql/slave/{conf,logs,data}

conf 配置文件
logs 日志文件
data 数据文件

启动主库

docker run --name master --restart=always -d -p 3306:3306 -v ~/docker-mysql/master/conf:/etc/mysql/conf.d -v ~/docker-mysql/master/logs:/logs -v ~/docker-mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7.31

启动从库

docker run --name slave --restart=always --link master:master-db -d -p 3307:3306 -v ~/docker-mysql/slave/conf:/etc/mysql/conf.d -v ~/docker-mysql/slave/logs:/logs -v ~/docker-mysql/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7.31

--link master:master-db
link到主库容器,这样从库可以使用master-db域名对主库进行访问解决宿主机IP更换导致从库无法访问主库问题。

MySQL主从配置

主库配置

增加MySQL配置文件开启binlog

vi ~/docker-mysql/master/conf/my.cnf
增加配置

[mysqld]
server-id=1
log-bin=mysql-bin
配置说明

说明server-id设置主服务器的ID(不能和别的服务器重复,建议使用ip的最后一段)log-binbinlog日志文件名

重启docker使配置文件生效

docker restart master

增加从库同步账号

docker exec -it master mysql -uroot -proot

进入后执行下面命令增加用户并赋予同步权限
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave';

查看主库状态

mysql> show master status;+------------------+----------+--------------+-------------------------------------------------+-------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |+------------------+----------+--------------+-------------------------------------------------+-------------------+| mysql-bin.000001 |      154 |              | mysql,information_schema,performance_schema,sys |                   |+------------------+----------+--------------+-------------------------------------------------+-------------------+1 row in set (0.00 sec)mysql>

从库配置

增加MySQL配置文件开启binlog

vi ~/docker-mysql/slave/conf/my.cnf
增加配置

[mysqld]
server-id=2
log-bin=mysql-bin

重启docker使配置文件生效

docker restart slave

启动主从同步

docker exec -it slave mysql -uroot -proot

stop slave;

change master to master_host='master-db', master_user='slave' ,master_password='slave', master_log_file='mysql-bin.000001' ,master_log_pos=154;

start slave;

mysql> stop slave;Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> change master to master_host='master-db', master_user='slave' ,master_password='slave', master_log_file='mysql-bin.000001' ,master_log_pos=154;Query OK, 0 rows affected, 2 warnings (0.01 sec)mysql> start slave;Query OK, 0 rows affected (0.00 sec)mysql> show slave status G;*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: master-db                  Master_User: slave                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000001          Read_Master_Log_Pos: 154               Relay_Log_File: business-mysql-slave-relay-bin.000002                Relay_Log_Pos: 320        Relay_Master_Log_File: mysql-bin.000001             Slave_IO_Running: Yes            Slave_SQL_Running: Yes              Replicate_Do_DB:          Replicate_Ignore_DB: mysql,information_schema,performance_schema,sys

尾巴

以上部署方式可以在开发环境快速搭建出MySQL主从环境,生产环境中多机集群部署的时候可以使用swarm或者k8s使用overlay网络等解决从库容器到主库容器的的互通问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值