美文网首页Dockerdockerdocker
docker-comops安装mysql集群->一主两从

docker-comops安装mysql集群->一主两从

作者: 怎么肥细 | 来源:发表于2023-01-28 15:06 被阅读0次

任意目录下新建一个文件夹

mkdir mysql

创建docker-compose文件

vim docker-compose.yml

version: '3'

networks:
  mysql-net:
    external: true

services:
 mysql1:
  image: mysql:8.0.31
  container_name: mysql-master
  environment:
    MYSQL_ROOT_PASSWORD: "66668888"
  ports:
    - "16306:3306"
  networks:
    - mysql-net
  volumes:
    - ./data/master:/var/lib/mysql
  command: --default-authentication-plugin=mysql_native_password
    --character-set-server=utf8mb4
    --collation-server=utf8mb4_general_ci
    --explicit_defaults_for_timestamp=true
    --lower_case_table_names=1
    --max_allowed_packet=128M
    # 做主从复制的话所有服务的server_id一定不能一样
    --server-id=1
    --log-bin=master
    --binlog_format=row
  restart: unless-stopped

 mysql2:
  image: mysql:8.0.31
  container_name: mysql-slave1
  environment:
    MYSQL_ROOT_PASSWORD: "66668888"
    server-id: 2
  ports:
    - "17306:3306"
  networks:
    - mysql-net
  volumes:
    - ./data/slave1:/var/lib/mysql
  command: --default-authentication-plugin=mysql_native_password
    --character-set-server=utf8mb4
    --collation-server=utf8mb4_general_ci
    --explicit_defaults_for_timestamp=true
    --lower_case_table_names=1
    --max_allowed_packet=128M
    --server-id=2
  restart: unless-stopped

 mysql3:
  image: mysql:8.0.31
  container_name: mysql-slave2
  environment:
    MYSQL_ROOT_PASSWORD: "66668888"
    server-id: 3
  ports:
    - "18306:3306"
  networks:
    - mysql-net
  volumes:
    - ./data/slave2:/var/lib/mysql
  command: --default-authentication-plugin=mysql_native_password
    --character-set-server=utf8mb4
    --collation-server=utf8mb4_general_ci
    --explicit_defaults_for_timestamp=true
    --lower_case_table_names=1
    --max_allowed_packet=128M
    --server-id=3
  restart: unless-stopped

创建挂载文件夹

mkdir data

进入data目录

cd data/

创建三个容器(一主两从)的挂载文件夹

mdkir master slave1 slave2

进入master容器

docker exec -it mysql-master /bin/bash
# 连接mysql服务
mysql -u root -p
# 输入docker-compose中设置的密码,我这里是66668888

连接成功后执行下面脚本

--创建主从复制得用户(slave是用户名,66668888是密码,改成自己的即可)
CREATE USER 'slave'@'%' IDENTIFIED BY '66668888';
GRANT REPLICATION slave, REPLICATION CLIENT ON *.* TO 'slave'@'%';
--查看主数据库的状态
show master status;

图片的的 file 和 position 是连接主从的关键,记录下来

image.png

依次进入slave1和slave2,分别执行

# 把容器名切换了
docker exec -it mysql-slave1 /bin/bash
# 连接mysql服务
mysql -u root -p
# 输入docker-compose中设置的密码,我这里是66668888
--从机连接master
--change master to master_host='master所在的ip地址', master_user='创建的用于同步数据的用户账户', master_password='主数据库创建得用户密码', master_port='master得运行端口', master_log_file='File参数', master_log_pos=Position参数', master_connect_retry='连接失败重试的时间间隔';
change master to master_host='192.168.31.114', master_user='slave', master_password='66668888', master_port=16306, master_log_file='mysql-bin.000005', master_log_pos=157, master_connect_retry=30;
--在从数据库中开启主从同步
start slave;
--查看从数据库状态
show slave status \G
image.png

当圈出来的这两个参数值为yes,就阔以了

PS:
当Slave_IO_Running: NO的时候,

--先停止主从同步
--两台从机都停止
stop slave;

-- 这下面是在master执行
-- 这下面是在master执行
--刷新日志,指定从数据库要复制日志得日志文件,通过查看主数据库得状态,File参数
--指定从那个位置开始复制数据,通过查看主数据库得状态Position参数,不要单引号
flush logs;
--查看主数据库的状态
show master status;
--刷新后file的参数值会加1

-- 这下面是在slave执行
-- 这下面是在slave执行
--填入从机连接master的命令重新执行即可
--只要变更master_log_file和aster_log_pos
change master to master_host='192.168.31.114', master_user='slave', master_password='66668888', master_port=16306, master_log_file='mysql-bin.000005', master_log_pos=157, master_connect_retry=30;
--在从数据库中开启主从同步
start slave;

相关文章

网友评论

    本文标题:docker-comops安装mysql集群->一主两从

    本文链接:https://www.haomeiwen.com/subject/qwnyhdtx.html