docker部署MySQL主從服務集群方式
更新時間:2025年11月08日 14:25:49 作者:hello_zzw
文章介紹了如何創(chuàng)建目錄、配置文件和搭建MySQL集群,包括設置主庫和兩個從庫的配置,并詳細說明了如何創(chuàng)建復制用戶和連接主庫
創(chuàng)建目錄
mkdir -p ~/mysql/mysql8-cluster/{master,slave1,slave2}/{conf,data,logs}
創(chuàng)建網(wǎng)絡
docker network create mysql-cluster-net # 查看網(wǎng)絡:docker network ls
配置文件
主庫
~/mysql/mysql8-cluster/master/conf/my.cnf
[mysqld] # 唯一標識(主從必須不同) server-id=1 # 開啟binlog,指定日志文件名前綴 log_bin=mysql-bin # 二進制日志格式(row格式支持更精準的同步) binlog_format=ROW # 開啟GTID(全局事務標識,自動跟蹤binlog位置) gtid_mode=ON enforce_gtid_consistency=ON # 忽略系統(tǒng)庫同步(可選) binlog-ignore-db=mysql binlog-ignore-db=information_schema # 字符集配置 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4
從庫1
~/mysql/mysql8-cluster/slave1/conf/my.cnf
[mysqld] # 唯一標識(與主庫不同) server-id=2 # 從庫也可開啟binlog(可選,用于級聯(lián)復制) log_bin=mysql-slave-bin # 開啟GTID(與主庫保持一致) gtid_mode=ON enforce_gtid_consistency=ON # 中繼日志(從庫用于暫存主庫binlog) relay_log=mysql-relay-bin # 從庫只讀(避免誤寫,可選) read_only=ON # 字符集配置 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4
從庫2
~/mysql/mysql8-cluster/slave2/conf/my.cnf
[mysqld] # 唯一標識(與主庫不同) server-id=3 # 從庫也可開啟binlog(可選,用于級聯(lián)復制) log_bin=mysql-slave-bin # 開啟GTID(與主庫保持一致) gtid_mode=ON enforce_gtid_consistency=ON # 中繼日志(從庫用于暫存主庫binlog) relay_log=mysql-relay-bin # 從庫只讀(避免誤寫,可選) read_only=ON # 字符集配置 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4
搭建MySQL服務
-- 主服務 docker run -d --name mysql8-master --network mysql-cluster-net -p 3316:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/mysql/mysql8-cluster/master/logs:/var/log/mysql -v ~/mysql/mysql8-cluster/master/conf:/etc/mysql/conf.d -v ~/mysql/mysql8-cluster/master/data:/var/lib/mysql mysql:8.0 -- 從服務器1 docker run -d --name mysql8-slave1 --network mysql-cluster-net -p 3317:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/mysql/mysql8-cluster/slave1/logs:/var/log/mysql -v ~/mysql/mysql8-cluster/slave1/conf:/etc/mysql/conf.d -v ~/mysql/mysql8-cluster/slave1/data:/var/lib/mysql mysql:8.0 -- 從服務器2 docker run -d --name mysql8-slave2 --network mysql-cluster-net -p 3318:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/mysql/mysql8-cluster/slave2/logs:/var/log/mysql -v ~/mysql/mysql8-cluster/slave2/conf:/etc/mysql/conf.d -v ~/mysql/mysql8-cluster/slave2/data:/var/lib/mysql mysql:8.0
主庫創(chuàng)建復制用戶
# 進入主庫容器 docker exec -it mysql-master bash # 登錄MySQL(輸入上述ROOT密碼) mysql -u root -p # 創(chuàng)建復制用戶(允許從庫連接,用戶名:repl,密碼:Repl@123) CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Repl@123'; # 授權復制權限 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; # 刷新權限 FLUSH PRIVILEGES; # 查看主庫狀態(tài)(記錄binlog文件和位置,備用) SHOW MASTER STATUS;
配置從庫連接主庫
# 進入從庫容器 docker exec -it mysql-slave1 bash # 登錄MySQL mysql -u root -p # 配置主庫連接信息(使用GTID簡化配置) CHANGE MASTER TO MASTER_HOST='mysql8-master', # 主庫容器名(同網(wǎng)絡內可直接訪問)或IP地址 MASTER_USER='repl', # 主庫創(chuàng)建的復制用戶 MASTER_PASSWORD='Repl@123', # 復制用戶密碼 MASTER_PORT=3306, # 主庫容器內端口(默認3306) MASTER_AUTO_POSITION=1; # 啟用GTID自動定位binlog(無需手動填File和Position) # 啟動從庫同步進程 START SLAVE;
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Docker部署php運行環(huán)境(php-fpm+nginx)
Docker?是一種流行的容器化平臺,可以幫助開發(fā)人員快速創(chuàng)建、部署和管理容器化應用程序,本文將介紹如何使用?Docker?搭建?PHP?開發(fā)環(huán)境服務器,讓您能夠輕松地開始?PHP?開發(fā)工作,感興趣的可以了解一下2023-11-11
Docker多階段鏡像構建與緩存利用性能優(yōu)化實踐指南
這篇文章將從原理層面深入解析 Docker 多階段構建與緩存機制,結合實際項目示例,說明如何有效利用構建緩存,組織鏡像層次,最大化提升構建速度并減少鏡像體積,感興趣的小伙伴可以了解下2025-09-09
Docker容器間通訊直接路由方式實現(xiàn)網(wǎng)絡通訊
今天小編就為大家分享一篇關于Docker容器間通訊直接路由方式實現(xiàn)網(wǎng)絡通訊,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02

