詳解Docker方式實(shí)現(xiàn)MySql 主從復(fù)制(實(shí)踐篇)
本文實(shí)踐了用Docker方式來實(shí)現(xiàn)基于binlog的MySql主從復(fù)制。關(guān)于MySql主從復(fù)制的原理將在下一篇中進(jìn)行講解。
一些數(shù)據(jù)的本地存儲(chǔ)目錄結(jié)構(gòu)
mysql >tree -L 2 . ├── data │ ├── master01 │ └── slave01 ├── master01 │ └── master01.cnf └── slave01 └── slave01.cnf
master01.cnf配置
[mysqld] log-bin=mysql-master01-bin # 使用binary logging,mysql-master01-bin是log文件名的前綴 server-id=1 # 唯一服務(wù)器ID,非0整數(shù),不能和其他服務(wù)器的server-id重復(fù)
slave01.cnf配置
[mysqld] log-bin=mysql-slave01-bin server-id=2
創(chuàng)建master01容器
docker run -d --name master01 -v /Users/craneyuan/backup/docker/mysql/data/master01:/var/lib/mysql -v /Users/craneyuan/backup/docker/mysql/master01:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 mysql:5.7
注意:啟動(dòng)容器的時(shí)候不要立刻就去連接數(shù)據(jù)庫,會(huì)造成一些莫名奇妙的問題,比如連不上,可以將數(shù)據(jù)都刪掉然后restart容器。
創(chuàng)建slave01容器
docker run -d --name slave01 -v /Users/craneyuan/backup/docker/mysql/data/slave01:/var/lib/mysql -v /Users/craneyuan/backup/docker/mysql/slave01:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 mysql:5.7
在master01中添加復(fù)制用戶
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456'; show master status; # 查看master的狀態(tài)
在slave01中配置與master01相關(guān)的內(nèi)容
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
change master to master_host='192.168.10.223',master_port=3307,master_user='backup',master_password='123456',master_log_file='mysql-master01-bin.000003', master_log_pos=154; master_host是宿主機(jī)的IP(ifconfig查到的操作系統(tǒng)IP,不是容器的IP,一定不能搞錯(cuò)) master_port是主服務(wù)器的映射到3306的端口(默認(rèn)3306) master_user為創(chuàng)建的備份用戶 master_password備份用戶的密碼 master_log_file和master_log_pos則是show master status列表里面的兩個(gè)值,分別是mysql日志名和起始備份位置
啟動(dòng)slave(依然在slave01中操作)
start slave; show slave status; 或者show slave status\G;
如果是Waiting for master to send event則說明主從復(fù)制成功了,若是Connecting to master肯定是配置錯(cuò)誤,樓主就錯(cuò)了幾次,重刪除配置一下就行,這就是容器的好處,刪除的代價(jià)很小,短時(shí)間就可以恢復(fù)。如果是Waiting for master to send event,對主庫的增刪改查從庫都會(huì)同步修改。
擴(kuò)展問題
slave設(shè)置為只讀
在slave的配置文件中添加下面的選項(xiàng)
read-only=1 # 除非有SUPER權(quán)限,否則只讀 super-read-only=1 # SUPER權(quán)限也是只讀
其他
如果master已經(jīng)有數(shù)據(jù)了,怎么新增slave:可以先把master的數(shù)據(jù)導(dǎo)入到slave,再啟動(dòng)slave。具體可以參考這里。
如果已經(jīng)有主從復(fù)制了,怎么增加slave:思路同上,不過不需要使用master的數(shù)據(jù),直接用已有的slave數(shù)據(jù)就可以了。不需要停止master,新slave使用新的server-id。具體可以參考這里。
前面介紹的都是主從,如果需要slave也能同步到master就要設(shè)置主主復(fù)制:也就是說反過來再做一遍。
當(dāng)slave比較多得時(shí)候,master的負(fù)載可能會(huì)成為問題??梢杂弥鲝亩嗉墢?fù)制:以slave為master來再引入新的slave。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker容器/bin/bash?start.sh無法找到not?found問題解決
最近在學(xué)習(xí)聯(lián)系中遇到一個(gè)問題,百度后發(fā)現(xiàn)這個(gè)需求還是挺常見的,所以下面這篇文章主要給大家介紹了關(guān)于Docker容器/bin/bash?start.sh無法找到not?found問題的解決方法,需要的朋友可以參考下2022-08-08
centos搭建部署docker環(huán)境的詳細(xì)步驟
Docker 將程序與程序的運(yùn)行環(huán)境打包在一起,從而避免了復(fù)雜的環(huán)境配置,下面這篇文章主要給大家介紹了關(guān)于centos搭建部署docker環(huán)境的詳細(xì)步驟,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
Docker刪除某個(gè)鏡像的實(shí)現(xiàn)方法
在使用 Docker 時(shí),經(jīng)常需要?jiǎng)h除不再需要的鏡像、容器和卷,以釋放存儲(chǔ)空間,本文主要介紹了Docker刪除某個(gè)鏡像的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
docker環(huán)境下數(shù)據(jù)庫的備份(postgresql, mysql) 實(shí)例代碼
這篇文章主要介紹了docker環(huán)境下數(shù)據(jù)庫的備份(postgresql, mysql) ,需要的朋友可以參考下2019-05-05
Skywalking?Docker單機(jī)環(huán)境搭建過程
這篇文章主要介紹了Skywalking?Docker單機(jī)環(huán)境搭建,本次搭建是基于MySQL進(jìn)行持久化,因此需要提前準(zhǔn)備好一個(gè)MySQL容器,需要的朋友可以參考下2024-02-02
dockerfile echo指定文件多行文本的方法實(shí)現(xiàn)
這篇文章主要介紹了dockerfile echo指定文件多行文本的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Docker鏡像修改hosts及dockerfile修改hosts文件的實(shí)現(xiàn)方式
這篇文章主要介紹了Docker鏡像修改hosts及dockerfile修改hosts文件的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04

