docker-comops安裝mysql集群->一主兩從

任意目錄下新建一個文件夾

mkdir mysql

創(chuàng)建docker-compose文件

vim docker-compose.yml

version: '3'

networks:
  mysql-net:
    external: true

services:
 mysql1:
  image: mysql:8.0.31
  container_name: mysql-master
  environment:
    MYSQL_ROOT_PASSWORD: "66668888"
  ports:
    - "16306:3306"
  networks:
    - mysql-net
  volumes:
    - ./data/master:/var/lib/mysql
  command: --default-authentication-plugin=mysql_native_password
    --character-set-server=utf8mb4
    --collation-server=utf8mb4_general_ci
    --explicit_defaults_for_timestamp=true
    --lower_case_table_names=1
    --max_allowed_packet=128M
    # 做主從復制的話所有服務的server_id一定不能一樣
    --server-id=1
    --log-bin=master
    --binlog_format=row
  restart: unless-stopped

 mysql2:
  image: mysql:8.0.31
  container_name: mysql-slave1
  environment:
    MYSQL_ROOT_PASSWORD: "66668888"
    server-id: 2
  ports:
    - "17306:3306"
  networks:
    - mysql-net
  volumes:
    - ./data/slave1:/var/lib/mysql
  command: --default-authentication-plugin=mysql_native_password
    --character-set-server=utf8mb4
    --collation-server=utf8mb4_general_ci
    --explicit_defaults_for_timestamp=true
    --lower_case_table_names=1
    --max_allowed_packet=128M
    --server-id=2
  restart: unless-stopped

 mysql3:
  image: mysql:8.0.31
  container_name: mysql-slave2
  environment:
    MYSQL_ROOT_PASSWORD: "66668888"
    server-id: 3
  ports:
    - "18306:3306"
  networks:
    - mysql-net
  volumes:
    - ./data/slave2:/var/lib/mysql
  command: --default-authentication-plugin=mysql_native_password
    --character-set-server=utf8mb4
    --collation-server=utf8mb4_general_ci
    --explicit_defaults_for_timestamp=true
    --lower_case_table_names=1
    --max_allowed_packet=128M
    --server-id=3
  restart: unless-stopped

創(chuàng)建掛載文件夾

mkdir data

進入data目錄

cd data/

創(chuàng)建三個容器(一主兩從)的掛載文件夾

mdkir master slave1 slave2

進入master容器

docker exec -it mysql-master /bin/bash
# 連接mysql服務
mysql -u root -p
# 輸入docker-compose中設置的密碼,我這里是66668888

連接成功后執(zhí)行下面腳本

--創(chuàng)建主從復制得用戶(slave是用戶名,66668888是密碼,改成自己的即可)
CREATE USER 'slave'@'%' IDENTIFIED BY '66668888';
GRANT REPLICATION slave, REPLICATION CLIENT ON *.* TO 'slave'@'%';
--查看主數(shù)據(jù)庫的狀態(tài)
show master status;

圖片的的 file 和 position 是連接主從的關鍵,記錄下來

image.png

依次進入slave1和slave2,分別執(zhí)行

# 把容器名切換了
docker exec -it mysql-slave1 /bin/bash
# 連接mysql服務
mysql -u root -p
# 輸入docker-compose中設置的密碼,我這里是66668888
--從機連接master
--change master to master_host='master所在的ip地址', master_user='創(chuàng)建的用于同步數(shù)據(jù)的用戶賬戶', master_password='主數(shù)據(jù)庫創(chuàng)建得用戶密碼', master_port='master得運行端口', master_log_file='File參數(shù)', master_log_pos=Position參數(shù)', master_connect_retry='連接失敗重試的時間間隔';
change master to master_host='192.168.31.114', master_user='slave', master_password='66668888', master_port=16306, master_log_file='mysql-bin.000005', master_log_pos=157, master_connect_retry=30;
--在從數(shù)據(jù)庫中開啟主從同步
start slave;
--查看從數(shù)據(jù)庫狀態(tài)
show slave status \G
image.png

當圈出來的這兩個參數(shù)值為yes,就闊以了

PS:
當Slave_IO_Running: NO的時候,

--先停止主從同步
--兩臺從機都停止
stop slave;

-- 這下面是在master執(zhí)行
-- 這下面是在master執(zhí)行
--刷新日志,指定從數(shù)據(jù)庫要復制日志得日志文件,通過查看主數(shù)據(jù)庫得狀態(tài),File參數(shù)
--指定從那個位置開始復制數(shù)據(jù),通過查看主數(shù)據(jù)庫得狀態(tài)Position參數(shù),不要單引號
flush logs;
--查看主數(shù)據(jù)庫的狀態(tài)
show master status;
--刷新后file的參數(shù)值會加1

-- 這下面是在slave執(zhí)行
-- 這下面是在slave執(zhí)行
--填入從機連接master的命令重新執(zhí)行即可
--只要變更master_log_file和aster_log_pos
change master to master_host='192.168.31.114', master_user='slave', master_password='66668888', master_port=16306, master_log_file='mysql-bin.000005', master_log_pos=157, master_connect_retry=30;
--在從數(shù)據(jù)庫中開啟主從同步
start slave;
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容