Docker安裝MySQL集群全過(guò)程(主從復(fù)制)
為確保生產(chǎn)環(huán)境中的數(shù)據(jù)安全與可靠性,數(shù)據(jù)庫(kù)普遍采用主從集群架構(gòu)(一主一從)進(jìn)行部署。
本文將系統(tǒng)闡述如何利用Docker鏡像實(shí)現(xiàn)數(shù)據(jù)庫(kù)集群的容器化部署,并完整記錄各配置環(huán)節(jié)的具體實(shí)現(xiàn)步驟。
一、主服務(wù)實(shí)例創(chuàng)建(可以先創(chuàng)建docker網(wǎng)絡(luò))
1、首先通過(guò)下面的命令將主服務(wù)器實(shí)例創(chuàng)建完成
docker run -d -p 3306:3306 --privileged=true \ -v /appData/mysql/master/log:/var/log/mysql \ -v /appData/mysql/master/data:/var/lib/mysql \ -v /appData/mysql/master/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=123456 \ --name mysql-master mysql:5.7
主服務(wù)器運(yùn)行成功。下面來(lái)修改一下對(duì)應(yīng)的my.cnf配置。
2、添加主服務(wù)器對(duì)應(yīng)配置文件,進(jìn)入到 /appData/mysql/master/conf 目錄下,此目錄已掛載到容器內(nèi)部,新建 my.cnf 文件,并添加如下內(nèi)容:
## 設(shè)置編碼字符集 [client] default_character_set=utf8 [mysql] default_character_set=utf8 [mysqld] character_set_server=utf8 ## 設(shè)置server_id,同一局域網(wǎng)中需要唯一 server_id=101 ## 指定不需要同步的數(shù)據(jù)庫(kù)名稱 binlog-ignore-db=mysql ## 開(kāi)啟二進(jìn)制日志功能 log-bin=master-mysql-bin ## 設(shè)置二進(jìn)制日志使用內(nèi)存大小(事務(wù)) binlog_cache_size=1M ## 設(shè)置使用的二進(jìn)制日志格式(mixed,statement,row) binlog_format=mixed ## 二進(jìn)制日志過(guò)期清理時(shí)間。默認(rèn)值為0;表示不自動(dòng)清理. expire_logs_days=7 ## 跳過(guò)主從復(fù)制中遇到的所有錯(cuò)誤或指定類型的錯(cuò)誤,避免slave端復(fù)制中斷 ## 如:1062錯(cuò)誤是指一些主鍵重復(fù),1032錯(cuò)誤是因?yàn)橹鲝臄?shù)據(jù)庫(kù)數(shù)據(jù)不一致 slave_skip_errors=1062
進(jìn)入到容器,檢查一下配置文件是否掛載成功。
3、配置文件添加完畢后,重啟主服務(wù)器
docker restart mysql-master
查看編碼字符集是否修改成功:
docker exec -it mysql-master /bin/bash mysql -u root -p show variables like '%character%';
已經(jīng)修改生效,說(shuō)明剛剛修改的配置文件沒(méi)問(wèn)題,進(jìn)行下一步。
4、進(jìn)入到主服務(wù)器的容器中,創(chuàng)建slave用戶并授權(quán),用來(lái)同步數(shù)據(jù)使用
# 交互式模式進(jìn)入容器內(nèi)部 docker exec -it mysql-master /bin/bash # 使用root 用戶登錄mysql服務(wù)器 mysql -uroot -p # 創(chuàng)建slave用戶并授權(quán) CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
二、從服務(wù)器實(shí)例創(chuàng)建
1、和主服務(wù)器創(chuàng)建的命令一樣,個(gè)別掛載地址需要調(diào)整一下,如果是在不同的服務(wù)器上,可直接執(zhí)行;
docker run -d -p 3307:3306 --privileged=true \ -v /appData/mysql/slave/log:/var/log/mysql \ -v /appData/mysql/slave/data:/var/lib/mysql \ -v /appData/mysql/slave/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=123456 \ --name mysql-slave mysql:5.7
2、添加從服務(wù)器對(duì)應(yīng)配置文件,進(jìn)入到 /appData/mysql/slave/conf 目錄下,此目錄已掛載到容器內(nèi)部,新建 my.cnf 文件,并添加如下內(nèi)容:
## 設(shè)置編碼字符集 [client] default_character_set=utf8 [mysql] default_character_set=utf8 [mysqld] character_set_server=utf8 ## 設(shè)置server_id,同一局域網(wǎng)中需要唯一 server_id=102 ## 指定不需要同步的數(shù)據(jù)庫(kù)名稱 binlog-ignore-db=mysql ## 開(kāi)啟二進(jìn)制日志功能,以備slave作為其他數(shù)據(jù)庫(kù)實(shí)例的master時(shí)使用 log-bin=slave-mysql-bin ## 設(shè)置二進(jìn)制日志使用內(nèi)存大小(事務(wù)) binlog_cache_size=1M ## 設(shè)置使用的二進(jìn)制日志格式(mixed,statement,row) binlog_format=mixed ## 二進(jìn)制日志過(guò)期清理時(shí)間。默認(rèn)值為0;表示不自動(dòng)清理. expire_logs_days=7 ## 跳過(guò)主從復(fù)制中遇到的所有錯(cuò)誤或指定類型的錯(cuò)誤,避免slave端復(fù)制中斷 ## 如:1062錯(cuò)誤是指一些主鍵重復(fù),1032錯(cuò)誤是因?yàn)橹鲝臄?shù)據(jù)庫(kù)數(shù)據(jù)不一致 slave_skip_errors=1062 ## relay_log 配置中繼日志 relay_log=slave-mysql-relay-bin ## log_slave_updates 表示slave將復(fù)制事件寫進(jìn)自己的二進(jìn)制日志 log_slave_updates=1 ## slave 設(shè)置為制度(具有super權(quán)限的用戶除外) read_only=1
3、重啟從服務(wù)器實(shí)例
docker restart mysql-slave
4、和主服務(wù)器一樣,登入mysql,使用命令行查看配置文件是否生效。
三、主從搭建
1、在主服務(wù)器中,查看當(dāng)前主服務(wù)器情況,如下:
show master status;
這里的信息很重要,主要作用是告訴從機(jī)同步的位置。
2、在從數(shù)據(jù)庫(kù)中配置主從復(fù)制,在從機(jī)的mysql命令行中,執(zhí)行以下命令:
change master to master_host='192.168.152.128', master_user='slave', master_password='123456',master_port=3306,master_log_file='master-mysql-bin.000001',master_log_pos=617,master_connect_retry=30;
參數(shù)說(shuō)明:
master_host
:主數(shù)據(jù)庫(kù)的|P地址;master_port
:主數(shù)據(jù)庫(kù)的運(yùn)行端口:master_user
:在主數(shù)據(jù)庫(kù)創(chuàng)建的用于同步數(shù)據(jù)的用戶賬號(hào);master_password
:在主數(shù)據(jù)庫(kù)創(chuàng)建的用于同步數(shù)據(jù)的用戶密碼;master_log_file
:指定從數(shù)據(jù)庫(kù)要復(fù)制數(shù)據(jù)的日志文件,通過(guò)査看主數(shù)據(jù)的狀態(tài),獲取File參數(shù);master_log_pos
:指定從數(shù)據(jù)庫(kù)從哪個(gè)位置開(kāi)始復(fù)制數(shù)據(jù),通過(guò)査看主數(shù)據(jù)的狀態(tài),獲Position參數(shù);master_connect_retry
:連接失敗重試的時(shí)間間隔,單位為秒。
執(zhí)行完畢以后,查看一下從機(jī)的主從同步狀態(tài):
show slave status \G;
這里命令的結(jié)尾使用了 “\G” 的形式,則是以下面這種類似于json的格式展示出來(lái)的,因?yàn)閮?nèi)容較多,如果以表格的形式展現(xiàn),不易于閱讀。
從圖中可以看到,兩個(gè)狀態(tài)值:
Slave_IO_Running: No Slave_SQL_Running: No
這兩個(gè)值均為No,說(shuō)明主從復(fù)制還未開(kāi)始。
下面,繼續(xù)進(jìn)行后續(xù)操作。
3、在從數(shù)據(jù)庫(kù)中開(kāi)啟主從同步,執(zhí)行下面的命令:
start slave;
4、從數(shù)據(jù)庫(kù)開(kāi)啟主從配置后,查看一下?tīng)顟B(tài),看看是否啟用主從同步功能;
這里遇到了一個(gè)小坑,具體解決方案可參考:我這里主要是因?yàn)榉阑饓Φ膯?wèn)題導(dǎo)致。
如果經(jīng)過(guò)多次調(diào)整,仍不生效,記得使用《重啟大法》,通常情況下,可以給你意外驚喜。
最終效果如下如:
四、主從復(fù)制測(cè)試
1、在主數(shù)據(jù)庫(kù)中,新建數(shù)據(jù)庫(kù)、表以及插入信息;
2、從庫(kù)中查看是否同步;
發(fā)現(xiàn),數(shù)據(jù)已經(jīng)完美同步。
3、使用客戶端再次進(jìn)行測(cè)試;
查詢從庫(kù):
至此,安裝完畢!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker搭建PHP運(yùn)行環(huán)境完整步驟(圖文教程)
PHP是一種廣泛使用的編程語(yǔ)言,被用于Web開(kāi)發(fā)和服務(wù)器管理等各種用途,而Docker則是一種非常流行的容器化平臺(tái),可以方便地管理應(yīng)用程序和環(huán)境,這篇文章主要給大家介紹了關(guān)于Docker搭建PHP運(yùn)行環(huán)境的完整步驟,需要的朋友可以參考下2023-09-09解決docker訪問(wèn)外部https數(shù)字證書問(wèn)題
這篇文章主要介紹了docker訪問(wèn)外部https數(shù)字證書問(wèn)題,為了解決證書驗(yàn)證的問(wèn)題,我們需要在構(gòu)建 docker 鏡像的時(shí)候?qū)?nbsp;ca-certificates 根證書裝上,需要的朋友可以參考下2022-09-09Docker compose安裝部署創(chuàng)建自定義網(wǎng)絡(luò)使用舉例
這篇文章主要為大家介紹了Docker compose安裝部署創(chuàng)建自定義網(wǎng)絡(luò)使用舉例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09docker實(shí)現(xiàn)搭建emqx服務(wù)
這篇文章主要介紹了docker實(shí)現(xiàn)搭建emqx服務(wù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06詳解docker進(jìn)行數(shù)據(jù)掛載的三種模式
Docker?提供了三種方式將數(shù)據(jù)從宿主機(jī)掛載到?Docker容器中:?volumes、bind?mounts、tmpfs?,這篇文章主要介紹了docker進(jìn)行數(shù)據(jù)掛載的三種模式,需要的朋友可以參考下2022-05-05通過(guò)Docker創(chuàng)建CentOS容器的實(shí)現(xiàn)步驟
本文主要介紹了Docker創(chuàng)建CentOS容器,使用文內(nèi)的腳本可以快速創(chuàng)建CentOS 7.8虛擬系統(tǒng)集群,并通過(guò)SSH(Secure Shell)遠(yuǎn)程工具連接,感興趣的可以了解一下2021-11-11