一文教會(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)不用一直訪(fǎng)問(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)建用戶(hù)并授權(quán)
##1. 建立用戶(hù) 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)限的用戶(hù)除外) 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ù)賬號(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í)間間隔,單位為秒 |
3.12 在從數(shù)據(jù)庫(kù)中查看主從同步狀態(tài)
mysql> show slave status \G; ## 加入 \G表示 豎排以鍵值對(duì)的形式顯示,主要觀(guān)察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安裝ElasticSearch和Kibana的問(wèn)題及處理方法
這篇文章主要介紹了Docker安裝ElasticSearch和Kibana的問(wèn)題及遇到問(wèn)題解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Docker tomcat的設(shè)置內(nèi)存大小配置方式
這篇文章主要介紹了Docker tomcat的設(shè)置內(nèi)存大小配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
Docker設(shè)置獲取環(huán)境變量的方法實(shí)現(xiàn)
本文主要介紹了Docker設(shè)置獲取環(huán)境變量的方法實(shí)現(xiàn),包含設(shè)置環(huán)境變量到使用獲取,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
用docker搭建selenium grid分布式環(huán)境實(shí)踐之路
這篇文章主要介紹了用docker搭建selenium grid分布式環(huán)境實(shí)踐之路,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

