Docker部署mysql并实现主从同步


创建应用目录

mkdir -p /opt/docker

创建docker-compose.yml文件

services:
  mysql:
    image: mysql:8.0.42
    container_name: mysql
    restart: always
    environment:
      TZ: Asia/Shanghai # 时区
      MYSQL_ROOT_PASSWORD: root # 数据库root密码
    ports:
      - "3306:3306"
    command:
      --default-authentication-plugin=mysql_native_password # 可以使用简单密码
      --lower_case_table_names=1 # 忽略大小写
      --character-set-server=utf8mb4 # 编码utf8mb4
      --collation-server=utf8mb4_general_ci #排序utf8mb4_general_ci
    volumes:
      - /etc/localtime:/etc/localtime
      - /data/mysql/data/:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf
      - /data/mysql/logs:/var/log/mysql
      - /data/mysql/mysql-files:/var/lib/mysql-files
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

创建my.cnf文件,主从机器的server-id不能重复

[mysqld]
user=mysql
# 表示允许任何主机登陆MySQL
bind-address = 0.0.0.0
# 端口
port=3306
# 数据存储位置
default-storage-engine=INNODB

# 启用日志
log-bin=mysql-bin
# mysql服务id,主从同步时不能重复
server-id=110
# 日志保留天数
expire_logs_days = 10

#character-set-server=utf8
# 忽略字符集设置
character-set-client-handshake=FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
secure-file-priv=
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

启动docker-compose

docker-compose up -d

检查主机110机器的日志名称和行数

show master status;

从机111创建同步任务

# CHANGE MASTER TO master_host=<主机ip>, master_user=<用户名>,master_password=<密码>,master_log_file=<查到的110日志名称> master_log_pos=<查到的111日志行数>;,
CHANGE MASTER TO master_host='192.168.122.111', master_user='root',master_password='root',master_log_file='mysql-bin.000003' master_log_pos=157;,

启动同步任务

start slave;

查看同步状态

# 需要看到两个Yes
show slave status;

从机再按照上边的步骤创建同步任务


文章作者: 花舞流觞
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 花舞流觞 !
  目录