docker-compose 安装mysql 主从 (多台服务器)
发表于:2022-10-08 |
1.准备两台服务器192.168.0.11(主)  192.168.0.12(从) 
配置mysql主机

目录结构



 

 

192.168.0.11(主)安装mysql  创建mysql 的docker-compose.yml文件

version: '3'
services:
  mysql:
    image: mysql
    restart: always
    container_name: mysql_master
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    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;
    ports:
      - 13306:3306
    volumes:
      - /root/docker-compose-service/mysql/data:/var/lib/mysql
      - /root/docker-compose-service/mysql/conf.d:/etc/mysql/conf.d
      - /etc/localtime:/etc/localtime:ro
创建conf.d文件夹下面的mysql.cnf文件

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

启动mysql容器docker-compose up -d

查看容器 docker ps 



 

说明容器启动完毕,进入容器查看master节点状态

# 进入容器
docker exec -it mysql_master /bin/bash
# 链接mysql
mysql -uroot -p
#输入密码
# 指定ip
mysql>GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.0.11' IDENTIFIED BY '123456';
# 所有ip
mysql>GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by '123456';
 然后查看主容器数据库状态

mysql> show master status;


记录一下这里的File和Position,在后面配置从机的时候需要用到

 

配置mysql从机  目录结构与主机一样 

从mysql 的docker-compose.yml  与mysql.cnf不一样

docker-compose.yml

version: '3'
services:
  mysql:
    image: mysql
    restart: always
    container_name: mysql_slave
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    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;
    ports:
      - 13306:3306
    volumes:
      - /root/docker-compose-service/mysql/data:/var/lib/mysql
      - /root/docker-compose-service/mysql/conf.d:/etc/mysql/conf.d
      - /etc/localtime:/etc/localtime:ro
mysql.cnf

[mysqld]
log-bin = mysql-bin
server-id = 1
启动mysql容器docker-compose up -d

查看容器 docker ps

进入到从机容器中  

docker exec -it mysql_slave /bin/bash
 
# 链接mysql
mysql -uroot -p
#输入密码
# 配置链接的主机参数
mysql> change master to
    -> master_host='192.168.0.11',
    -> master_user='root',
    -> master_log_file='mysql-bin.000002',
    -> master_log_pos=156,
    -> master_port=13306,
    -> master_password='123456';
# master_host:主机的ip
# master_user:主机用户名
# master_log_file:记录的File地址
# master_log_pos:记录的postion地址
# master_port:主机的端口
# master_password:主机的登录密码
mysql> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
mysql> reset slave;
Query OK, 0 rows affected (0.10 sec)
 
mysql> start slave;
Query OK, 0 rows affected (0.10 sec)
 
# 查看主从链接状态
mysql> show slave status;
启动从库mysql  docker-compose up -d

navicat连接主库 和从库

在从库运行sql 出现两个yes 就是ok了  



在主库里面添加一个数据库 插入一条记录 看从库里面有没有数据  有的话一切ok了

所有的内部ip连接我使用的是内网  你要保证所有的内网相互都能访问到 (可以使用命令ping ip)如果是外网ip的话  记得开放一下所需要的端口
上一篇:
CUDA11.1在线安装
下一篇:
docker启动失败(can't create unix socket /var/run/docker.sock: is a directory)