基于Docker的Mysql主从复制搭建_mysql5.7.x
文章目錄
- 為什么基于Docker搭建?
- 一、拉取鏡像創(chuàng)建容器
- 1. 拉取mysql:5.7鏡像
- 2. 創(chuàng)建master容器
- 3. 創(chuàng)建slave容器
- 4. 查看正在運(yùn)行的容器
- 5. 此時(shí)可以使用Navicat等工具測(cè)試連接mysql
- 二、搭建Master(主)服務(wù)器
- 2.1. 進(jìn)入到Master容器內(nèi)部
- 2.2. my.cnf編輯
- 2.2. 重啟mysql服務(wù)使配置生效
- 2.3. 重啟master容器
- 2.4. 進(jìn)入master容器
- 2.5. 登陸mysql
- 2.6. 創(chuàng)建建數(shù)據(jù)同步用戶和賦予權(quán)限
- 2.7. 查看二進(jìn)制文件位置
- 三、搭建slave(從)服務(wù)器
- 3.1. 進(jìn)入到slave容器內(nèi)部
- 3.2. my.cnf編輯
- 3.3. 重啟mysql服務(wù)使配置生效
- 3.4. 重啟slave容器
- 3.5. 進(jìn)入slave容器
- 3.6. 登陸mysql
- 3.7. slave配置主從復(fù)制
- 3.8. 查看主從同步狀態(tài)
- 3.9. 開(kāi)啟主從復(fù)制
- 3.10. 查看主從同步狀態(tài)
- 四、mysql主從復(fù)制排錯(cuò)
- 五、 測(cè)試主從復(fù)制
- 5.1. 測(cè)試庫(kù)是否同步
- 5.2. 測(cè)試表是否同步
- 5.3. 測(cè)試數(shù)據(jù)是否同步
為什么基于Docker搭建?
- 資源有限
- 虛擬機(jī)搭建對(duì)機(jī)器配置有要求,并且安裝mysql步驟繁瑣
- 一臺(tái)機(jī)器上可以運(yùn)行多個(gè)Docker容器
- Docker容器之間相互獨(dú)立,有獨(dú)立ip,互不沖突
- Docker使用步驟簡(jiǎn)便,啟動(dòng)容器在秒級(jí)別
一、拉取鏡像創(chuàng)建容器
搭建Master(主)mysql服務(wù)器
首先拉取docker鏡像,我們這里使用5.7版本的mysql:
1. 拉取mysql:5.7鏡像
docker pull mysql:5.72. 創(chuàng)建master容器
運(yùn)行mysql:5.7鏡像即可創(chuàng)建master容器
docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.73. 創(chuàng)建slave容器
運(yùn)行mysql:5.7鏡像即可創(chuàng)建master容器
docker run -p 3339:3306 --name slave-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7Master對(duì)外映射的端口是3339,Slave對(duì)外映射的端口是3340。因?yàn)閐ocker容器是相互獨(dú)立的,每個(gè)容器有其獨(dú)立的ip,所以不同容器使用相同的端口并不會(huì)沖突。這里我們應(yīng)該盡量使用mysql默認(rèn)的3306端口,否則可能會(huì)出現(xiàn)無(wú)法通過(guò)ip連接docker容器內(nèi)mysql的問(wèn)題。
4. 查看正在運(yùn)行的容器
docker ps5. 此時(shí)可以使用Navicat等工具測(cè)試連接mysql
二、搭建Master(主)服務(wù)器
2.1. 進(jìn)入到Master容器內(nèi)部
docker exec -it 3622fce721ea /bin/bash 或者 docker exec -it master /bin/bash2.2. my.cnf編輯
vim /etc/mysql/my.cnf添加內(nèi)容如下:
[mysqld] ## 同一局域網(wǎng)內(nèi)注意要唯一 server-id=100 ## 開(kāi)啟二進(jìn)制日志功能,可以隨便取(關(guān)鍵) log-bin=mysql-bin如果出現(xiàn)bash: vim: command not found請(qǐng)進(jìn)入傳送門(mén)
https://blog.csdn.net/weixin_40816738/article/details/113935878
2.2. 重啟mysql服務(wù)使配置生效
配置完成之后,需要重啟mysql服務(wù)使配置生效。使用service mysql restart完成重啟。重啟mysql服務(wù)時(shí)會(huì)使得docker容器停止,我們還需要docker start mysql-master啟動(dòng)容器。
service mysql restart2.3. 重啟master容器
重啟啟動(dòng)master(mysql)容器 docker start master 或者 docker start 3622fce721ea2.4. 進(jìn)入master容器
docker exec -it 3622fce721ea /bin/bash2.5. 登陸mysql
mysql -uroot -p注:密碼1234562.6. 創(chuàng)建建數(shù)據(jù)同步用戶和賦予權(quán)限
下一步在Master數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)同步用戶,授予用戶 slave REPLICATION SLAVE權(quán)限和REPLICATION CLIENT權(quán)限,用于在主從庫(kù)之間同步數(shù)據(jù)。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';2.7. 查看二進(jìn)制文件位置
show master status;File和Position字段的值后面將會(huì)用到,在后面的操作完成之前,需要保證Master庫(kù)不能做任何操作,否則將會(huì)引起狀態(tài)變化,File和Position字段的值變化。
三、搭建slave(從)服務(wù)器
和配置Master(主)一樣,在Slave配置文件my.cnf中添加如下配置:
3.1. 進(jìn)入到slave容器內(nèi)部
docker exec -it 6762357a463d/bin/bash 或者 docker exec -it slave /bin/bash3.2. my.cnf編輯
vim /etc/mysql/my.cnf添加內(nèi)容如下:
[mysqld] ## 設(shè)置server_id,注意要唯一 server-id=101 ## 開(kāi)啟二進(jìn)制日志功能,以備Slave作為其它Slave的Master時(shí)使用 log-bin=mysql-slave-bin ## relay_log配置中繼日志 relay_log=edu-mysql-relay-bin如果出現(xiàn)bash: vim: command not found請(qǐng)進(jìn)入傳送門(mén)
https://blog.csdn.net/weixin_40816738/article/details/113935878
3.3. 重啟mysql服務(wù)使配置生效
配置完成之后,需要重啟mysql服務(wù)使配置生效。使用service mysql restart完成重啟。重啟mysql服務(wù)時(shí)會(huì)使得docker容器停止,我們還需要docker start mysql-master啟動(dòng)容器。
service mysql restart3.4. 重啟slave容器
重啟啟動(dòng)slave(mysql)容器 docker start slave 或者 docker start 6762357a463d3.5. 進(jìn)入slave容器
docker exec -it 6762357a463d /bin/bash3.6. 登陸mysql
mysql -uroot -p注:密碼1234563.7. slave配置主從復(fù)制
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 834, master_connect_retry=30;| master_host | Master的地址,指的是容器的獨(dú)立ip,可以通過(guò)docker inspect --format=’{{.NetworkSettings.IPAddress}}’ 容器名稱 |
| master_port | Master的端口號(hào),指的是容器的端口號(hào) |
| master_user | 用于數(shù)據(jù)同步的用戶 |
| master_password | 用于同步的用戶的密碼 |
| master_log_file | 指定 Slave 從哪個(gè)日志文件開(kāi)始復(fù)制數(shù)據(jù),即上文中提到的 File 字段的值 |
| master_log_pos | 從哪個(gè) Position 開(kāi)始讀,即上文中提到的 Position 字段的值 |
| master_connect_retry | 如果連接失敗,重試的時(shí)間間隔,單位是秒,默認(rèn)是60秒 |
3.8. 查看主從同步狀態(tài)
在Slave 中的mysql終端執(zhí)行show slave status \G用于查看主從同步狀態(tài)。
show slave status \G注意不要有分好;號(hào)
3.9. 開(kāi)啟主從復(fù)制
正常情況下,SlaveIORunning 和 SlaveSQLRunning 都是No,因?yàn)槲覀冞€沒(méi)有開(kāi)啟主從復(fù)制過(guò)程。使用start slave開(kāi)啟主從復(fù)制過(guò)程,然后再次查詢主從同步狀態(tài)show slave status \G;。
start slave;3.10. 查看主從同步狀態(tài)
在Slave 中的mysql終端執(zhí)行show slave status \G用于查看主從同步狀態(tài)。
show slave status \G# 注意不要有分好;號(hào)
聲明:SlaveIORunning 和 SlaveSQLRunning 都是Yes,說(shuō)明主從復(fù)制已經(jīng)開(kāi)啟。此時(shí)可以測(cè)試數(shù)據(jù)同步是否成功。
四、mysql主從復(fù)制排錯(cuò)
https://gblfy.blog.csdn.net/article/details/114025927
五、 測(cè)試主從復(fù)制
測(cè)試主從復(fù)制方式就十分多了,最簡(jiǎn)單的是在Master創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),然后檢查Slave是否存在此數(shù)據(jù)庫(kù)。
5.1. 測(cè)試庫(kù)是否同步
在master 主mysql創(chuàng)建數(shù)據(jù)庫(kù),查看slave從庫(kù)是否同步
5.2. 測(cè)試表是否同步
在master 主mysql的ds0數(shù)據(jù)庫(kù)創(chuàng)建test表,查看slave從庫(kù)新創(chuàng)建test表是否同步
5.3. 測(cè)試數(shù)據(jù)是否同步
在master 主mysql的ds0數(shù)據(jù)庫(kù)的test表中添加數(shù)據(jù),查看slave從庫(kù)新增數(shù)據(jù)是否同步
總結(jié)
以上是生活随笔為你收集整理的基于Docker的Mysql主从复制搭建_mysql5.7.x的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: plsql连接 oracle insta
- 下一篇: 在生产环境中使用 Sentinel