目錄
1.背景? ? ? ??
2.設(shè)備及軟件版本
3.開始搭建(這里不介紹安裝docker及mysql)
3.1創(chuàng)建主數(shù)據(jù)庫容器(master)
3.2查看容器是否創(chuàng)建成功
3.3進(jìn)入修改容器下的/etc/my.cnf文件
3.3.1先拷貝my.cnf到容器外修改完再覆蓋容器原來的my.cnf文件
3.4重啟mysql容器使配置文件生效
3.5查看是否啟動
3.6進(jìn)入容器
3.7進(jìn)入mysql
3.8創(chuàng)建一個新的賬戶test(用來下面從數(shù)據(jù)庫訪問主數(shù)據(jù)庫)
3.9查看當(dāng)前主數(shù)據(jù)庫binglog日志狀態(tài)?
4.創(chuàng)建從數(shù)據(jù)庫(slave)(下面類似命令就不解釋了)
4.1創(chuàng)建從數(shù)據(jù)庫
4.2修改/etc/my.cof文件(參考上面主數(shù)據(jù)庫的方式修改)
4.3重新啟動從數(shù)據(jù)庫容器
4.4進(jìn)入容器
4.5進(jìn)入mysql
4.6準(zhǔn)備從數(shù)據(jù)庫連接主數(shù)據(jù)庫內(nèi)容
4.6.1獲取主數(shù)據(jù)庫容器的ip地址
4.6.2用上面參數(shù)替換下面命令中的參數(shù)
4.7開啟主從復(fù)制
4.8查看是否開啟
5.完結(jié)撒花。
1.背景? ? ? ??
????????腦子抽風(fēng)想研究一下 Docker 容器 搭建mysql集群。
2.設(shè)備及軟件版本
- 電腦:Mac bookPro 2021 M1 14寸,系統(tǒng):MOS?13.0.1 (22A400)
- Docker:Docker version 20.10.17, build 100c701
- mysql:mysql 5.7
3.開始搭建(這里不介紹安裝docker及mysql)
3.1創(chuàng)建主數(shù)據(jù)庫容器(master)
創(chuàng)建容器代碼:?
docker run -id \
--name=mysql_master \
-p 3307:3306 \
-v $PWD/master/conf:/etc/mysql/conf.d \
-v $PWD/master/logs:/logs \
-v $PWD/master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
創(chuàng)建容器代碼介紹:
docker run -id \
--name=mysql_master \
-p 3307:3306 \
-v $PWD/master/conf:/etc/mysql/conf.d \
-v $PWD/master/logs:/logs \
-v $PWD/master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
介紹:
-id : 是 -i, -d 的組合寫法(也可以寫成:-di)
? -i:保持容器運行。通常與 -t 同時使用。加入it這兩個參數(shù)后,容器創(chuàng)建后自動進(jìn)入容器中,退出容器后,容器自動關(guān)閉。
? -t:為容器重新分配一個偽輸入終端,通常與 -i 同時使用。
? -d:以守護(hù)(后臺)模式運行容器。創(chuàng)建一個容器在后臺運行,需要使用docker exec 進(jìn)入容器。退出后,容器不會關(guān)閉。
? --name=mysql_master:容器的別名。
? -p 3307:3306**:將容器的 3306 端口映射到宿主機的 3307 端口。
? -v $PWD/conf:/etc/mysql/conf.d**:將主機當(dāng)前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。配置目錄。
? -v $PWD/logs:/logs**:將主機當(dāng)前目錄下的 logs 目錄掛載到容器的 /logs。日志目錄。
? -v $PWD/data:/var/lib/mysql** :將主機當(dāng)前目錄下的data目錄掛載到容器的 /var/lib/mysql 。數(shù)據(jù)目錄。
? -e MYSQL_ROOT_PASSWORD=123456:**初始化 root 用戶的密碼。
? 上面提到的“$PWD”是獲取當(dāng)前目錄下路徑
3.2查看容器是否創(chuàng)建成功
查看docker當(dāng)前運行容器代碼
docker ps
3.3進(jìn)入修改容器下的/etc/my.cnf文件
3.3.1先拷貝my.cnf到容器外修改完再覆蓋容器原來的my.cnf文件
?
?拷貝命令:
docker cp 0a70ced7b5e1:/etc/my.cnf /Users/hicheer/
注意事項:命令中的“0a70ced7b5e1”改為自己的容器id,“/Users/hicheer/”改為自己要拷貝的位置
原文件內(nèi)容:
修改后文件內(nèi)容:
添加的代碼:
log-bin=mysql-bin
server-id=1
注意事項:
- 一定要添加到 [mysqld] 下面?
- server-id=1(一定要唯一,如果有其他mysql容器配置了server-id=1,修改server-id為其他值)
將修改后的文件覆蓋回去:
命令:
docker cp /Users/hicheer/my.cnf 0a70ced7b5e1:/etc/
?注意事項:
- 這次是拷貝回去文件,記得把位置顛倒一下
3.4重啟mysql容器使配置文件生效
停止命名:
docker stop 0a70ced7b5e1
注意事項:命令中的“0a70ced7b5e1”改為自己的容器id
?啟動命令:
docker start 0a70ced7b5e1
3.5查看是否啟動
3.6進(jìn)入容器
?
進(jìn)入容器命令:
docker exec -it 0a70ced7b5e1 /bin/bash
?注意事項:代碼中間的“0a70ced7b5e1”改為自己的容器id
3.7進(jìn)入mysql
進(jìn)入mysql命令
mysql -uroot -p123456
注意:命令中"-u"后面的是賬戶,“-p”后面的是密碼
3.8創(chuàng)建一個新的賬戶test(用來下面從數(shù)據(jù)庫訪問主數(shù)據(jù)庫)
創(chuàng)建賬戶命令:
grant replication slave on *.* to 'test'@'%' identified by '123456'; flush privileges;
創(chuàng)建的賬戶信息:
賬戶:test,密碼:123456
3.9查看當(dāng)前主數(shù)據(jù)庫binglog日志狀態(tài)?
查看命令:
show master status;
?注意事項:
- 這里主要看看兩個參數(shù):“File” 與 “Position” 記住并復(fù)制到記事本上,等下要用。
- 其他參數(shù)有沒有值都無所謂
4.創(chuàng)建從數(shù)據(jù)庫(slave)(下面類似命令就不解釋了)
4.1創(chuàng)建從數(shù)據(jù)庫
創(chuàng)建命令:
docker run -id \
--name=mysql_slave \
-p 3308:3306 \
-v $PWD/slave/conf:/etc/mysql/conf.d \
-v $PWD/slave/logs:/logs \
-v $PWD/slave/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
?查看是否創(chuàng)建成功:
4.2修改/etc/my.cof文件(參考上面主數(shù)據(jù)庫的方式修改)
修改后的內(nèi)容:
?添加的代碼:
log-bin=mysql-bin
server-id=2
4.3重新啟動從數(shù)據(jù)庫容器
命令:
docker stop ba369b71c60f; docker start ba369b71c60f;
4.4進(jìn)入容器
?進(jìn)入命令:
docker exec -it ba369b71c60f /bin/bash
4.5進(jìn)入mysql
4.6準(zhǔn)備從數(shù)據(jù)庫連接主數(shù)據(jù)庫內(nèi)容
- 獲取主數(shù)據(jù)庫容器的ip地址,端口號(主意??:這里的端口好是默認(rèn)的3306,并不是主數(shù)據(jù)庫的3307)
- 剛才保存的兩個參數(shù):“File” 與 “Position”
- 剛才創(chuàng)建的賬戶:test,密碼:123456
4.6.1獲取主數(shù)據(jù)庫容器的ip地址
獲取端口命令:
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
4.6.2用上面參數(shù)替換下面命令中的參數(shù)
change master to master_host='你的IP', master_user='test賬戶名', master_password='test賬戶密碼', master_port=默認(rèn)端口號, master_log_file='你保存的File參數(shù)值', master_log_pos=你保存的Position參數(shù)值, master_connect_retry=30;
連接主數(shù)據(jù)實例:
4.7開啟主從復(fù)制
命令:
start slave;
?注意我這邊啟動報錯了!??!
先停掉主從復(fù)制,命令:
stop slave;
重新設(shè)置開啟主從復(fù)制,命令:
reset slave;
開啟主從復(fù)制,命令:
start slave;
4.8查看是否開啟
命令:
show slave status\G
?注意:只要這兩個參數(shù)不是YES(有些是TRUE),都是有問題的文章來源:http://www.zghlxwxcb.cn/news/detail-478091.html
5.完結(jié)撒花。
下面有mysql工具試一下吧,無論是寫命令,還是直接在表里面添加數(shù)據(jù)都是可以同步的。文章來源地址http://www.zghlxwxcb.cn/news/detail-478091.html
到了這里,關(guān)于Docker 容器搭建mysql 集群(主從數(shù)據(jù)庫)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!