docker實(shí)現(xiàn)MySQL的主從復(fù)制
什么是主從復(fù)制
MySQL 主從復(fù)制是指數(shù)據(jù)可以從一個(gè)MySQL數(shù)據(jù)庫(kù)服務(wù)器主節(jié)點(diǎn)復(fù)制到一個(gè)或多個(gè)從節(jié)點(diǎn)。MySQL 默認(rèn)采用異步復(fù)制方式,這樣從節(jié)點(diǎn)不用一直訪問(wèn)主服務(wù)器來(lái)更新自己的數(shù)據(jù),數(shù)據(jù)的更新可以在遠(yuǎn)程連接上進(jìn)行,從節(jié)點(diǎn)可以復(fù)制主數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)庫(kù)或者特定的數(shù)據(jù)庫(kù),或者特定的表。
為什么主從復(fù)制
- 在業(yè)務(wù)復(fù)雜的系統(tǒng)中,有這么一個(gè)情景,有一句sql語(yǔ)句需要鎖表,導(dǎo)致暫時(shí)不能使用讀的服務(wù),那么就很影響運(yùn)行中的業(yè)務(wù),使用主從復(fù)制,讓主庫(kù)負(fù)責(zé)寫(xiě),從庫(kù)負(fù)責(zé)讀,這樣,即使主庫(kù)出現(xiàn)了鎖表的情景,通過(guò)讀從庫(kù)也可以保證業(yè)務(wù)的正常運(yùn)行。
- 做數(shù)據(jù)的熱備,主庫(kù)宕機(jī)后能夠及時(shí)替換主庫(kù),保證業(yè)務(wù)可用性。
- 架構(gòu)的擴(kuò)展。業(yè)務(wù)量越來(lái)越大,I/O訪問(wèn)頻率過(guò)高,單機(jī)無(wú)法滿(mǎn)足,此時(shí)做多庫(kù)的存儲(chǔ),降低磁盤(pán)I/O訪問(wèn)的頻率,提高單個(gè)機(jī)器的I/O性能。
搭建步驟
1.拉取鏡像
docker pull mysql:5.7
2.運(yùn)行主從
docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

3.進(jìn)入/mydata/mysql-master/conf目錄下新建my.cnf
在主機(jī)下:
cd /mydata/mysql-master/conf vim my.cnf
[mysqld] ## 設(shè)置server_id,同一局域網(wǎng)中需要唯一 server_id=101 ## 指定不需要同步的數(shù)據(jù)庫(kù)名稱(chēng) binlog-ignore-db=mysql ## 開(kāi)啟二進(jìn)制日志功能 log-bin=mall-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ò)誤或指定類(lèi)型的錯(cuò)誤,避免slave端復(fù)制中斷。 ## 如:1062錯(cuò)誤是指一些主鍵重復(fù),1032錯(cuò)誤是因?yàn)橹鲝臄?shù)據(jù)庫(kù)數(shù)據(jù)不一致 slave_skip_errors=1062
4.修改完配置后重啟master實(shí)例
docker restart mysql-master
5.進(jìn)入mysql-master容器
docker exec -it mysql-master /bin/bash mysql -uroot -proot
6.master容器實(shí)例內(nèi)創(chuàng)建數(shù)據(jù)同步用戶(hù)
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
7.新建從服務(wù)器容器實(shí)例3308
docker run -p 3308:3306 --name mysql-slave -v /mydata/mysql-slave/log:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
8./mydata/mysql-slave/conf目錄下新建my.cnf
cd /mydata/mysql-slave/conf vim my.cnf
[mysqld] ## 設(shè)置server_id,同一局域網(wǎng)中需要唯一 server_id=102 ## 指定不需要同步的數(shù)據(jù)庫(kù)名稱(chēng) binlog-ignore-db=mysql ## 開(kāi)啟二進(jìn)制日志功能,以備Slave作為其它數(shù)據(jù)庫(kù)實(shí)例的Master時(shí)使用 log-bin=mall-mysql-slave1-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ò)誤或指定類(lèi)型的錯(cuò)誤,避免slave端復(fù)制中斷。 ## 如:1062錯(cuò)誤是指一些主鍵重復(fù),1032錯(cuò)誤是因?yàn)橹鲝臄?shù)據(jù)庫(kù)數(shù)據(jù)不一致 slave_skip_errors=1062 ## relay_log配置中繼日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave將復(fù)制事件寫(xiě)進(jìn)自己的二進(jìn)制日志 log_slave_updates=1 ## slave設(shè)置為只讀(具有super權(quán)限的用戶(hù)除外) read_only=1
9.修改完配置后重啟slave實(shí)例
docker restart mysql-slave
10.在主數(shù)據(jù)庫(kù)中查看主從同步狀態(tài)
show master status;
11.進(jìn)入mysql-slave容器
docker exec -it mysql-slave /bin/bash mysql -uroot -proot
12.在從數(shù)據(jù)庫(kù)中配置主從復(fù)制
change master to master_host='192.168.196.100', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
master_host:主數(shù)據(jù)庫(kù)的IP地址; master_port:主數(shù)據(jù)庫(kù)的運(yùn)行端口; master_user:在主數(shù)據(jù)庫(kù)創(chuàng)建的用于同步數(shù)據(jù)的用戶(hù)賬號(hào); master_password:在主數(shù)據(jù)庫(kù)創(chuàng)建的用于同步數(shù)據(jù)的用戶(hù)密碼; 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í)間間隔,單位為秒。
13.在從數(shù)據(jù)庫(kù)中查看主從同步狀態(tài)
show slave status \G;

14,在從數(shù)據(jù)庫(kù)中開(kāi)啟主從同步
mysql>start slave;
15,查看從數(shù)據(jù)庫(kù)狀態(tài)發(fā)現(xiàn)已經(jīng)同步
show slave status \G; show master status \G;
16.主從復(fù)制測(cè)試
主機(jī)新建庫(kù)-使用庫(kù)-新建表-插入數(shù)據(jù)
從機(jī)使用庫(kù)-查看記錄
-- 創(chuàng)建數(shù)據(jù)庫(kù)
CREATE DATABASE test;
-- 切換到 test 數(shù)據(jù)庫(kù)
USE test;
-- 創(chuàng)建表 test_table
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
age INT
);
-- 插入數(shù)據(jù)
INSERT INTO test_table (name, age) VALUES
('John Doe', 25),
('Jane Smith', 30),
('Bob Johnson', 22);
-- 查詢(xún)插入的數(shù)據(jù)
SELECT * FROM test_table;到此這篇關(guān)于docker實(shí)現(xiàn)MySQL的主從復(fù)制的文章就介紹到這了,更多相關(guān)docker MySQL主從復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- docker搭建mysql主從同步的全過(guò)程
- Docker安裝mysql主從復(fù)制的實(shí)現(xiàn)步驟
- Docker部署MySQL主從復(fù)制的實(shí)現(xiàn)
- 使用Docker搭建MySQL主從數(shù)據(jù)庫(kù)的方法步驟
- Docker上部署mysql8主從復(fù)制的實(shí)現(xiàn)
- docker-compose啟動(dòng)mysql雙機(jī)熱備互為主從的方法實(shí)現(xiàn)
- docker實(shí)現(xiàn)MySQL主從雙備的示例代碼
- 兩臺(tái)互通的服務(wù)器使用Docker部署一主兩從MySQL8.0.35的方法
相關(guān)文章
Docker?Buildx實(shí)現(xiàn)掛載緩存卷的3種高階應(yīng)用場(chǎng)景
本文主要介紹了緩存卷掛載的3種高階應(yīng)用場(chǎng)景,涵蓋多階段構(gòu)建、跨平臺(tái)編譯與CI/CD流水線中的實(shí)戰(zhàn)技巧,提升鏡像構(gòu)建效率與資源利用率,顯著縮短構(gòu)建時(shí)間,感興趣的可以了解一下2026-05-05
docker run啟動(dòng)的容器掛掉了數(shù)據(jù)怎么辦
這篇文章主要介紹了docker run啟動(dòng)的容器掛掉了,數(shù)據(jù)怎么辦,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
Docker部署Gitea服務(wù)的實(shí)現(xiàn)
本文主要介紹了Docker部署Gitea服務(wù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2026-03-03
Docker安裝redis并且設(shè)置密碼,以及進(jìn)入容器修改密碼方式
這篇文章主要介紹了Docker安裝redis并且設(shè)置密碼,以及進(jìn)入容器修改密碼方式,2024-01-01
Docker安裝Redis并使用Another?Redis?Desktop?Manager連接的方法
Redis?是一個(gè)使用C語(yǔ)言編寫(xiě)的、開(kāi)源的(遵守?BSD?協(xié)議)、高性能的、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value的NoSQL數(shù)據(jù)庫(kù),這篇文章主要介紹了Docker安裝Redis并使用Another?Redis?Desktop?Manager連接,需要的朋友可以參考下2022-09-09
Docker自定義JDK鏡像并拉取至阿里云鏡像倉(cāng)庫(kù)超詳細(xì)攻略
Docker倉(cāng)庫(kù)是集中存放鏡像的地方,分為公共倉(cāng)庫(kù)和私有倉(cāng)庫(kù),這篇文章主要給大家介紹了關(guān)于Docker自定義JDK鏡像并拉取至阿里云鏡像倉(cāng)庫(kù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08

