1. 程式人生 > 其它 >docker 部署mysql8 主備

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/:/data/mysqlM1/ -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、 驗證成功