docker 部署mysql8 主備
阿新 • • 發佈:2022-03-18
一、環境準備
服務名 | 版本號 | 備註 |
---|---|---|
docker | >=18.04 | ---- |
mysql | >=8.0 | ---- |
centos | >=7.6 | ---- |
1、準備docker環境
- 聯網環境下,可以直接yum安裝,其他安裝方式,可以檢視其他文件。
yum install -y docker-ce
2、下載官網的docker倉庫中的mysql映象
- hub地址:https://hub.docker.com/_/mysql?tab=tags
docker pull mysql:latest
二、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、主庫建立資料庫testcreate schema test default character set utf8 collate utf8_general_ci;
2、檢視從庫show databases;
3、 驗證成功