一文教會(huì)你在Docker容器中實(shí)現(xiàn)Mysql主從復(fù)制
一 主從復(fù)制概念
在數(shù)據(jù)庫(kù)中主從復(fù)制``表示有一個(gè)主數(shù)據(jù)庫(kù),多個(gè)從數(shù)據(jù)庫(kù),即,主數(shù)據(jù)庫(kù)對(duì)外提供讀寫(xiě)功能,從數(shù)據(jù)庫(kù)對(duì)外提供讀的功能。
Mysql默認(rèn)采用異步復(fù)制方式,這樣從節(jié)點(diǎn)不用一直訪問(wèn)主服務(wù)器來(lái)更新自己的數(shù)據(jù),數(shù)據(jù)的更新可以實(shí)時(shí)在遠(yuǎn)端進(jìn)行。
二 主從復(fù)制的優(yōu)勢(shì)
- 高可用,可用于故障切換,如果主庫(kù)掛了,則可以切到從庫(kù)
- 讀寫(xiě)分離,減少主庫(kù)壓力,從而提高性能,主庫(kù)負(fù)責(zé)寫(xiě),從庫(kù)負(fù)責(zé)讀
- 可備份數(shù)據(jù),避免影響業(yè)務(wù)
三 Docker容器實(shí)現(xiàn)Mysql主從復(fù)制
下面開(kāi)始進(jìn)入實(shí)戰(zhàn)環(huán)節(jié),一步步的教大家如何搭建主從數(shù)據(jù)庫(kù),小伙伴趕快練習(xí)一下吧。
3.1 創(chuàng)建主服務(wù)器容器
主服務(wù)器端口號(hào)為3307
docker run -p 3307:3306 --name mysql-master \ -v /Users/zengzhaoxia/mydata/mysql-master/log:/var/log/mysql \ -v /Users/zengzhaoxia/mydata/mysql-master/data:/var/lib/mysql \ -v /Users/zengzhaoxia/mydata/mysql-master/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7

創(chuàng)建完成之后,別忘記再 docker ps一下,確保是否創(chuàng)建成功
補(bǔ)充:如果MYSQL_ROOT_PASSWORD的密碼設(shè)置為root,當(dāng)?shù)卿洈?shù)據(jù)庫(kù)時(shí)可能會(huì)報(bào)和權(quán)限相關(guān)的錯(cuò)誤,所以,不妨將密碼改為數(shù)字試試,比如123456。
3.2 新建主配置文件 my.cnf
進(jìn)入/mydata/mysql-master/conf目錄下新建my.cnf,my.cnf 內(nèi)容如下:
[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
切記切記,此處一定是 [mysqld],不要寫(xiě)成了[mysql]。
3.3 重啟master容器實(shí)例
因?yàn)榈诙叫薷牧伺渲梦募?,所以需要重啟docker容器
docker restart mysql-master docker ps
3.4 進(jìn)入mysql-master容器
進(jìn)入mysql-master容器,并登錄數(shù)據(jù)庫(kù),可以看到當(dāng)前有哪些默認(rèn)的數(shù)據(jù)庫(kù)。
docker exec -it mysql-master /bin/bash mysql -uroot -p show databases;
3.5 在主服務(wù)器中創(chuàng)建用戶并授權(quán)
##1. 建立用戶 mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; ##2. 授權(quán) mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';

3.6 創(chuàng)建從服務(wù)器容器
從服務(wù)器容器的端口號(hào)為:3308
docker run -p 3308:3306 --name mysql-slave \ -v /Users/zengzhaoxia/mydata/mysql-slave/log:/var/log/mysql \ -v /Users/zengzhaoxia/mydata/mysql-slave/data:/var/lib/mysql \ -v /Users/zengzhaoxia/mydata/mysql-slave/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7
創(chuàng)建完成之后,別忘記再 docker ps一下,確保是否創(chuàng)建成功
3.7 新建主配置文件 my.cnf
進(jìn)入/mydata/mysql-slave/conf目錄下新建my.cnf,my.cnf內(nèi)容如下:
[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-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)限的用戶除外) read_only=1
3.8 重啟slave容器實(shí)例
因?yàn)樾薷牧伺渲?,所以需要重?slave 實(shí)例
docker restart mysql-slave docker ps
3.9 在主數(shù)據(jù)庫(kù)中查看主從同步狀態(tài)
在主服務(wù)器中輸入如下命令:
mysql> show master status;

3.10 進(jìn)入mysql-slave容器
docker exec -it mysql-slave /bin/bash
3.11 在從數(shù)據(jù)庫(kù)中配置主從復(fù)制
change master to master_host='100.100.32.185',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin.000002',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à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í)間間隔,單位為秒 |
3.12 在從數(shù)據(jù)庫(kù)中查看主從同步狀態(tài)
mysql> show slave status \G; ## 加入 \G表示 豎排以鍵值對(duì)的形式顯示,主要觀察Slave_IO_Running和Slave_SQL_Running

3.13 在從數(shù)據(jù)庫(kù)中開(kāi)啟主從同步
在從數(shù)據(jù)庫(kù)中操作,表示從數(shù)據(jù)庫(kù)同意接收數(shù)據(jù)
start slave;

3.14 查看從數(shù)據(jù)庫(kù)狀態(tài)是否同步
show slave status \G;

3.15 主從復(fù)制測(cè)試
驗(yàn)證主要分為兩步,第一步在主數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù),第二步在從數(shù)據(jù)庫(kù)中查看數(shù)據(jù)。
1. 在主數(shù)據(jù)庫(kù)中新建數(shù)據(jù)庫(kù)db01,并在db01中新建表t1,并插入數(shù)據(jù) create database db01; use db01; create table t1(id int,name varchar(20)); insert into t1 values(1,'zeng'); 2. 在從數(shù)據(jù)庫(kù)中查詢(xún) show databases;//會(huì)看到db01數(shù)據(jù)庫(kù) use db01; select * from t1;
總結(jié)
到此這篇關(guān)于在Docker容器中實(shí)現(xiàn)Mysql主從復(fù)制的文章就介紹到這了,更多相關(guān)Docker容器實(shí)現(xiàn)Mysql主從復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Docker安裝mysql主從復(fù)制的實(shí)現(xiàn)步驟
- docker實(shí)現(xiàn)MySQL的主從復(fù)制
- Docker部署MySQL主從復(fù)制的實(shí)現(xiàn)
- Docker上部署mysql8主從復(fù)制的實(shí)現(xiàn)
- Docker搭建MySQL5.7主從復(fù)制的實(shí)現(xiàn)
- docker實(shí)現(xiàn)mysql主從復(fù)制的示例代碼
- 基于Docker的MySQL主從復(fù)制環(huán)境搭建的實(shí)現(xiàn)步驟
- 基于Docker如何實(shí)現(xiàn)MySQL主從復(fù)制詳解
- 詳解Docker方式實(shí)現(xiàn)MySql 主從復(fù)制(實(shí)踐篇)
- 詳解如何利用docker快速構(gòu)建MySQL主從復(fù)制環(huán)境
- 使用Docker容器搭建MySql主從復(fù)制
- Docker部署Mysql8.0.20并配置主從復(fù)制的實(shí)現(xiàn)步驟
相關(guān)文章
解決Docker Image鏡像無(wú)法刪除問(wèn)題的方法
這篇文章主要給大家介紹了關(guān)于如何解決Docker Image鏡像無(wú)法刪除問(wèn)題的方法,文中通過(guò)示例代碼將解決的方法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
docker自建rustdesk-server遠(yuǎn)程桌面的解決方案
RustDesk 是一款可以平替 TeamViewer 的開(kāi)源軟件,旨在提供安全便捷的自建方案,這篇文章主要介紹了docker自建rustdesk-server遠(yuǎn)程桌面的解決方案,需要的朋友可以參考下2024-07-07
Docker中Harbor企業(yè)級(jí)鏡像倉(cāng)庫(kù)的搭建與使用
本文介紹了Harbor企業(yè)級(jí)鏡像倉(cāng)庫(kù)的搭建與使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
Docker執(zhí)行DockerFile構(gòu)建過(guò)程指令解析
這篇文章主要為大家介紹了Docker執(zhí)行DockerFile構(gòu)建過(guò)程及DockerFile的指令解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪<BR>2022-04-04
詳解docker國(guó)內(nèi)鏡像拉取和鏡像加速registry-mirrors配置修改
由于國(guó)內(nèi)訪問(wèn)直接訪問(wèn)Docker hub網(wǎng)速比較慢,拉取鏡像的時(shí)間就會(huì)比較長(zhǎng)。一般我們會(huì)使用鏡像加速或者直接從國(guó)內(nèi)的一些平臺(tái)鏡像倉(cāng)庫(kù)上拉取2017-05-05
docker啟動(dòng)rabbitmq以及使用方式詳解
RabbitMQ是一個(gè)由erlang開(kāi)發(fā)的消息隊(duì)列,下面這篇文章主要給大家介紹了關(guān)于docker啟動(dòng)rabbitmq以及使用的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
docker測(cè)試時(shí)候命令無(wú)法補(bǔ)全的解決方法
因?yàn)樽罱趯W(xué)習(xí)使用Docker,所以出現(xiàn)了好多的問(wèn)題,昨天遇到的一個(gè)問(wèn)題是在docker測(cè)試時(shí)候發(fā)現(xiàn)命令無(wú)法補(bǔ)全,通過(guò)查找資料最后解決了,現(xiàn)在將方法分享給有需要的人,大家可以參考學(xué)習(xí)。2016-11-11

