docker 部署mysql8 主备

一、环境准备

服务名 版本号 备注
docker >=18.04 ----
mysql >=8.0 ----
centos >=7.6 ----

1、准备docker环境

  • 联网环境下,可以直接yum安装,其他安装方式,可以查看其他文档。
    yum install -y docker-ce

2、下载官网的docker仓库中的mysql镜像

二、docker部署主备mysql8

主环境准备

1、准备目录

  • 数据存放目录
    mkdir -p /data/mysqlM1/data
  • 配置文件目录
    mkdir -p /data/mysqlM1/conf
    chmod 777 -R /data/mysqlM1
    2、主配置文件准备
  • 创建文件vi /data/mysqlM1/conf/my.cnf
[client]
port = 3306
default-character-set=utf8mb4
socket = /data/mysqlM1/mysql.sock

[mysqld]
# 数据存储路径
datadir = /data/mysqlM1/data/
#basedir = 
tmpdir = /tmp 
socket = /data/mysqlM1/mysql.sock
pid-file = /data/mysqlM1/mysql.pid
secure_file_priv=/var/lib/mysql/
skip-external-locking = 1
skip-name-resolve = 1
port = 3306
# 设置server_id,一般设置为IP,注意要唯一
server_id = 1										
default_authentication_plugin=mysql_native_password
default-storage-engine = InnoDB
character-set-server = utf8mb4
default_password_lifetime=0

# 忽略的库表
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

# mysql的最大连接数
max_connections = 60000

#### log ####
log_timestamps=system
log_bin = /data/mysqlM1/mysql-bin
log_bin_index = /data/mysqlM1/mysql-bin.index
binlog_format = row
expire_logs_days = 180            # binlog过期清理时间
max_binlog_size = 100m             # binlog每个日志文件大小
binlog_cache_size = 4m                        # binlog缓存大小
max_binlog_cache_size = 512m                     # 最大binlog缓存大小
relay_log_recovery=ON
relay_log=/data/mysqlM1/mysql-relay-bin
relay_log_index=/data/mysqlM1/mysql-relay-bin.index
log_error = /data/mysqlM1/mysql-error.log

#### semi sync replication settings #####
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000

3、启动主容器
此处密码自定义:MYSQL_ROOT_PASSWORD=****
docker run -d --name mysqlM1 --restart always --net=host -v /data/mysqlM1/conf/my.cnf:/etc/mysql/my.cnf -v /etc/localtime:/etc/localtime --privileged=true -e MYSQL_ROOT_PASSWORD=**** -e TZ=Asia/Shanghai mysql:latest
4、进入主容器,创建用于主备的账户

  • 进入容器
    docker exec -it mysqlM1 bash
  • 登录mysql
    mysql -uroot -p
  • 创建用户
    CREATE USER 'backup'@'%' IDENTIFIED BY '123456';
    或者
    CREATE USER 'backup'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
  • 授权
    GRANT REPLICATION SLAVE ON *.* to 'backup'@'%';
  • 查看主库状态
    show master status;
    红框中的内容是需要在从库中配置的

备库环境准备

1、准备目录

  • 数据存放目录
    mkdir -p /data/mysqlS1/data
  • 配置文件目录
    mkdir -p /data/mysqlS1/conf
    chmod 777 -R /data/mysqlS1
    2、主配置文件准备
  • 创建文件vi /data/mysqlS1/conf/my.cnf
[client]
port = 3310
default-character-set=utf8mb4
socket = /data/mysqlS1/mysql.sock

[mysqld]		  
datadir = /data/mysqlS1/data/  # 数据存储路径
#basedir = /usr/local/mysql57  # 设置mysql的安装目录
tmpdir = /tmp
socket = /data/mysqlS1/mysql.sock
pid-file = /data/mysqlS1/mysql.pid
secure_file_priv=/var/lib/mysql/  # 参数用来限制数据导入和导出操作的效果
skip-external-locking = 1   # 禁止外部锁表
skip-name-resolve = 1        # 禁止域名解析的
port = 3310
server_id = 2                # 设置server_id,一般设置为IP,注意要唯一
read_only=1                  # 只读模式,不会影响slave同步复制的功能
default_authentication_plugin=mysql_native_password   # 默认使用“mysql_native_password”插件认证
default-storage-engine = InnoDB   # 创建新表时将使用的默认存储引擎
character-set-server = utf8mb4   # 服务端使用的字符集默认为UTF8
default_password_lifetime=0      # 密码永不过期

# 忽略的库表
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
# mysql的最大连接数
max_connections = 60000
#### log ####
log_timestamps=system       # 日志时间设置为系统时间
log_bin = /data/mysqlS1/mysql-bin   # binlog日志文件,主备的关键
log_bin_index = /data/mysqlS1/mysql-bin.index
binlog_format = row               # binlog日志格式
expire_logs_days = 180            # binlog过期清理时间
max_binlog_size = 100m             # binlog每个日志文件大小
binlog_cache_size = 4m                        # binlog缓存大小
max_binlog_cache_size = 512m                     # 最大binlog缓存大小
relay_log_recovery=ON
relay_log=/data/mysqlS1/mysql-relay-bin
relay_log_index=/data/mysqlS1/mysql-relay-bin.index
log_error = /data/mysqlS1/mysql-error.log

#### semi sync replication settings (半同步复制设置) #####
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000    # 切换复制的timeout

3、启动副容器
此处密码自定义:MYSQL_ROOT_PASSWORD=****
``
docker run -d --name mysqlS1 --restart always --net=host -v /data/mysqlS1/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysqlS1/:/data/mysqlS1/ --privileged=true -e MYSQL_ROOT_PASSWORD=****** -e TZ=Asia/Shanghai mysql:latest
4、进入从容器,设置用于同步的账户

  • 进入容器
    docker exec -it mysqlS1 bash
  • 登录mysql
    mysql -uroot -p
  • 配置备环境
    此处参数值需要根据实际情况修改
change master to master_host='127.0.0.1', 
    master_port=3306, 
    master_user='backup', 
    master_password='123456', 
    master_log_file='mysql-bin.000004', 
    master_log_pos=886;

  • 开启slave
    start slave;
  • 查看slave状态
    show slave status\G;

三、验证

1、主库创建数据库test
create schema test default character set utf8 collate utf8_general_ci;

2、查看从库
show databases;

3、 验证成功

posted @ 2022-03-18 12:13  菜鸟成长历程  阅读(448)  评论(0编辑  收藏  举报