MySQL8.0 docker容器化部署配置主从复制
一.创建docker-compose文件
没有安装docker-compose的同学,请行查找安装方法非常简单。
创建docker-compose.yml文件将以下内容复制到文件中。
version: "3.4"
services:
mysql-mastar:
image: mysql:8.0.30
container_name: mysql-master
environment:
- 'MYSQL_ROOT_PASSWORD=123456'
- 'LANG=C.UTF-8'
- 'MYSQL_INITDB_SKIP_TZINFO=Asia/Shanghai'
volumes:
- '/soft/config/mysql-master/my.cnf:/etc/my.cnf'
- '/soft/config/mysql-master/data:/var/lib/mysql'
ports:
- '3301:3306'
restart: unless-stopped
command: '--default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --lower_case_table_names=1'
mysql-slave:
image: mysql:8.0.30
container_name: mysql-slave
environment:
- 'MYSQL_ROOT_PASSWORD=123456'
- 'LANG=C.UTF-8'
- 'MYSQL_INITDB_SKIP_TZINFO=Asia/Shanghai'
volumes:
- '/soft/config/mysql-slave/my.cnf:/etc/my.cnf'
- '/soft/config/mysql-slave/data:/var/lib/mysql'
ports:
- '3302:3306'
restart: unless-stopped
command: '--default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --lower_case_table_names=1'
注意映射外部端口号,反之端口冲突,设置与主机不一样即可。
!!!先不要着急安装。
二. 创建配置文件
1.主机配置文件创建
在映射到主机的文件夹下创建my.cnf文件
这里我映射的文件路径是/soft/config/mysql-master/
所以我在mysql-master文件夹下创建配置文件
ps:为了拿到初始的配置文件,这里我提前创建了容器从里面拿到了该文件
[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
以下是修改后的文件
[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
# 设置时区
default-time-zone = '+8:00'
# 同一局域网内唯一
server-id=100
# 开启二进制日志功能
log-bin=mysql-master-bin
# 二级制日志格式,有三种 row,statement,mixed
binlog-format=ROW
# 同步的数据库名称,如果不配置,表示同步所有的库
# binlog-do-db=数据库名
[client]
socket=/var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
2.从机配置文件创建
[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
# 修改时区
default-time-zone = '+8:00'
# 设置server_id,注意要唯一
server-id=101
# 开启二进制日志
log-bin=mysql-slave-bin
# relay_log配置中继日志
relay_log=mysql-relay-bin
# 设置为只读,若不设置,表示slave可读写
read_only=1
[client]
socket=/var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
三.运行docker-compose.yml文件,创建容器
这里我的docker-compose.yml文件目录在/soft下
# 切换到文件所在目录
cd /soft
# 执行那个创建命令
docker-compose up -d
等待容器启动
四.查看运行状况
- 设置主库的连接信息,进入主库容器
docker exec -it mysql-master bash
- 登录到mysql
[root@iZ2zeijiz5yh3g7q29eq0bZ data]# docker exec -it mysql-slave bash
bash-4.4# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.30 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
- 查看主库的信息
mysql>show master status\G;
*************************** 1. row ***************************
File: mysql-master-bin.000003
Position: 1409
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
记住这里的Position: 1409
- 按照主库的方式从库,输入一下信息,其中Position: 1409对应到master_log_pos=1409
mysql>change master to master_host='<自己的ip>', master_user='root', master_password='123456', master_port=3301, master_log_file='mysql-master-bin.000001', master_log_pos=1409, master_connect_retry=30;
- 查看从机的状态
SHOW SLAVE STATUS\G;
这里显示yes表示配置成功。
使用navicat连接主从库,试着修改下主库的一条数据,在从库就可以显示了。