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