🌸🌸 Linux/docker-compose/mysql8
互為主從 優雅部署 🌸🌸
-
記錄下兩臺
Linux
的mysql
需要熱備份,互為主從,后期加上keepalived
實現高可用切換 -
參考博客:答 案
🌸 一、準備文件
- 這里有個問題,新版mysql配置文件位置可能有變動,可以安裝下進入看下位置,確認下
- 我這里是
/etc/mysql/conf.d/my.cnf
,編寫docker-compose
時不要寫錯 - 注意
8.0.31
是my.cnf
,有些博主寫的mysql.conf
,mysql
讀取不了 - 后面啟動后查看是否配置成功,若沒有,則說明沒有成功
- 我這里是
master
(看下注釋,不要盲目復制,不然后面更改要重啟,麻煩)
[mysqld]
# 設置服務器唯一標識號
server-id=1
# 啟用二進制日志,后面是名稱,隨意更改
log-bin=master-bin
# 指定需要復制的數據庫 為空則所有數據庫都復制
# binlog-do-db=
# 指定需要忽略的數據庫
binlog-ignore-db=ttt
# 指定二進制日志的格式為行級別
binlog-format=row
# 啟用 GTID 模式
gtid-mode=ON
# 強制 GTID 一致性檢查
enforce-gtid-consistency=ON
slave
(看下注釋,不要盲目復制,不然后面更改要重啟,麻煩)
[mysqld]
# 設置服務器唯一標識號
server-id=2
# 啟用二進制日志,后面是名稱,隨意更改
log-bin=slave-bin
# 指定需要復制的數據庫 為空則所有數據庫都復制
# binlog-do-db=
# 指定需要復制的數據庫
binlog-ignore-db=ttt
# 指定二進制日志的格式為行級別
binlog-format=row
# 啟用 GTID 模式
gtid-mode=ON
# 強制 GTID 一致性檢查
enforce-gtid-consistency=ON
docker-compose
(注意這里不要用tab進行格式化,請使用空格)
master
version: '3'
services:mysql-master:image: mysql:8.0.31container_name: mysql-masterenvironment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123456 # MySQL root 用戶的密碼MYSQL_DATABASE: ttt # 要創建的數據庫名稱ports:- "3308:3306" # 映射到從服務器的端口volumes:- ./mysql-master/data:/var/lib/mysql # 掛載數據目錄- ./mysql-master/log:/var/log/mysql # 掛載日志目錄- ./mysql-master/config/:/etc/mysql/conf.d/ # 掛載從服務器的配置文件,注意版本,可能不同command:# 主服務器的命令參數,配置文件寫了,這里可以不寫,若配置文件沒有掛載成功,這里可以寫一下# --server-id=1 # --log-bin=master-bin # --binlog-ignore-db=ttt # --binlog-format=row # --gtid-mode=ON # --enforce-gtid-consistency=ON # 將mysql8.0默認密碼策略 修改為 原先 策略 (mysql8.0對其默認策略做了更改 會導致密碼無法匹配)--default-authentication-plugin=mysql_native_password--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1privileged: true
slave
version: '3'
services:mysql-slave:image: mysql:8.0.31container_name: mysql-slaveenvironment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123456 # MySQL root 用戶的密碼MYSQL_DATABASE: ttt # 要創建的數據庫名稱ports:- "3310:3306" # 映射到從服務器的端口volumes:- ./mysql-slave/data:/var/lib/mysql # 掛載數據目錄- ./mysql-slave/log:/var/log/mysql # 掛載日志目錄- ./mysql-slave/config/:/etc/mysql/conf.d/ # 掛載從服務器的配置文件,注意版本,可能不同command: # 主服務器的命令參數,配置文件寫了,這里可以不寫,若配置文件沒有掛載成功,這里可以寫一下# --server-id=3# --log-bin=slave-bin # --binlog-ignore-db=ttt # --binlog-format=row # --gtid-mode=ON # --enforce-gtid-consistency=ON # 將mysql8.0默認密碼策略 修改為 原先 策略 (mysql8.0對其默認策略做了更改 會導致密碼無法匹配)--default-authentication-plugin=mysql_native_password--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1privileged: true
🌸 二、啟動容器
- 在
mysql
文件夾下執行docker-compose up -d
- 也可指定運行哪一個
docker-compose up -d mysql-master mysql-slave
- 看下配置文件有沒有掛載成功,以下說明成功,若沒有掛載成功,可嘗試在
docker-compose
的command
加配置,一樣的效果,都是需要重啟的,command
是啟動時設置配置項,文件中已有注釋。
🌸 三、配置主從信息
- 主要兩步
- 進入主容器,獲取主服務器狀態信息
#進入容器內部
docker-compose exec mysql-master bash#輸入用戶密碼
mysql -u root -p#為了避免從服務復制出現權限不足的情況需要執行
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';# 查看狀態
SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+------------------------------------------+
| master-bin.000003 | 197 | | ttt | d732688d-197d-11ef-b514-0242ac120003:1-6 |
+-------------------+----------+--------------+------------------+------------------------------------------+
- 進入從容器,在服務下執行開始監聽復制
#進入容器
docker-compose exec mysql-slave bash#輸入用戶密碼
mysql -u root -p#配置從服務器復制
CHANGE MASTER TO MASTER_HOST='192.168.1.xxx', MASTER_USER='root', MASTER_PASSWORD='123456',MASTER_PORT=3310, MASTER_LOG_FILE='master-bin.000003', MASTER_LOG_POS=197;# 開啟復制
START SLAVE;#查看主從配置狀態
SHOW REPLICA STATUS\G;
- 以下為成功
🌸 四、配置互為主從
- 第三步反過來
- 進入從容器,獲取主服務器狀態信息
- 進入主容器,在服務下執行開始監聽復制