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的话 记得开放一下所需要的端口