使用docker-compose搭建mysql主從詳細(xì)過程
一、docker-compose和主從的簡介
1、docker-compose
Docker-Compose項(xiàng)目是Docker官方的開源項(xiàng)目,負(fù)責(zé)實(shí)現(xiàn)對(duì)Docker容器集群的快速編排 通過編寫docker-compose文件可對(duì)多個(gè)服務(wù)同時(shí)進(jìn)行啟動(dòng)/停止/更新(可定義依賴,按順序啟動(dòng)服務(wù))
2、mysql主從
以往創(chuàng)建的集群都是做同樣的事情,比如說創(chuàng)建了三臺(tái)服務(wù)器,那么客戶端發(fā)送了一條增加請求,那么就會(huì)隨機(jī)分配到三臺(tái)服務(wù)器其中一臺(tái),
那么mysql集群不一樣,首先呢我們不叫它mysql集群,我們叫mysql主從,那么就有主服務(wù)器和從服務(wù)器這樣兩種概念,主服務(wù)器負(fù)責(zé)寫的操作,也就是增刪改,從服務(wù)器負(fù)責(zé)讀的操作,也就是查詢,如果說客戶端發(fā)送了一條增加的請求,那么就會(huì)把這條增加的請求給到主服務(wù)器,再由主服務(wù)器把數(shù)據(jù)同步到從服務(wù)器
3、為什么要使用docke-compose?
微服務(wù)架構(gòu)的應(yīng)用系統(tǒng)一般包含若干個(gè)微服務(wù),每個(gè)微服務(wù)一般都會(huì)部署多 個(gè)實(shí)例,如果每個(gè)微服務(wù)都要手動(dòng)啟停, 那么效率之低,維護(hù)量之大可想而知.而使用 Docker Compose 可以輕松、高效的管理容器, 它是一個(gè)用于定義和運(yùn)行多容器 Docker 的應(yīng)用程序工具,可以用來一鍵啟動(dòng)所有服務(wù)器,一鍵關(guān)閉所有服務(wù)器,一鍵刪除所有服務(wù)器,非常方便。
二、部署mysql主從集群
1、mysql-master主庫
在宿主機(jī)中創(chuàng)建相關(guān)目錄,用于掛載容器的相關(guān)數(shù)據(jù)
mkdir -p /data/mysql-master/{conf,data}上傳主數(shù)據(jù)庫容器的配置文件my.cnf到/data/mysql-master/conf目錄下
cd /data/mysql-master/conf
rz 上傳

文章所需要的文件我會(huì)放到結(jié)尾
2、mysql-slave從庫
在宿主機(jī)中創(chuàng)建相關(guān)目錄,用于掛載容器的相關(guān)數(shù)據(jù)
mkdir -p /data/mysql-slave/{conf,data}上傳從數(shù)據(jù)庫容器的配置文件my.cnf到/data/mysql-slave/conf目錄下
cd /data/mysql-slave/conf
rz 上傳

這兩個(gè)文件里的內(nèi)容只有id是不一樣的
三、安裝docker-compose
1、上傳文件
安裝包剛下載過來是docker-compose-Linux-x86_64
需要將docker-compose-Linux-x86_64重命名為 docker-compose
將 docker-compose 文件上傳到虛擬機(jī) 的 /usr/local/bin/ 目錄下,這個(gè)目錄下的文件可以被全局使用到,
cd /usr/ocal/bin

2、添加可執(zhí)行權(quán)限
chmod +x /usr/local/bin/docker-compose
3、創(chuàng)建并編輯docker-compose.yml文件
可以使用默認(rèn)的名稱docker-compose.yml,因?yàn)橐鯩ySQL的主從所以我把名字改成了docker-composemysql.yml
我們編輯yml文件可以在外部的工具先編輯在上傳,比如idea

docker-composemysql.yml內(nèi)容如下:
# 版本號(hào)
version: '3'
# 定義服務(wù)
services:
# 服務(wù)名
mysql-master:
# 容器名稱
container_name: mysql-master
# 鏡像
image: mysql/mysql-server:5.7
# 重啟
restart: always
# 提供偽終端
tty: true
# root具備管理員權(quán)限
privileged: true
# 環(huán)境變量
environment:
MYSQL_ROOT_PASSWORD: 123456
# 數(shù)據(jù)卷(目錄映射)
volumes:
- /data/mysql-master/conf/my.cnf:/etc/my.cnf
- /data/mysql-master/data:/var/lib/mysql
# 網(wǎng)絡(luò)
networks:
mynetwork:
ipv4_address: 172.19.0.3
# 服務(wù)名
mysql-slave:
# 容器名稱
container_name: mysql-slave
# 鏡像
image: mysql/mysql-server:5.7
# 重啟
restart: always
# 提供偽終端
tty: true
# root具備管理員權(quán)限
privileged: true
# 環(huán)境變量
environment:
MYSQL_ROOT_PASSWORD: 123456
# 數(shù)據(jù)卷(目錄映射)
volumes:
- /data/mysql-slave/conf/my.cnf:/etc/my.cnf
- /data/mysql-slave/data:/var/lib/mysql
# 網(wǎng)絡(luò)
networks:
mynetwork:
ipv4_address: 172.19.0.4
# 定義所需要的網(wǎng)絡(luò)
networks:
mynetwork:
driver: bridge
ipam:
config:
- subnet: 172.19.0.0/16創(chuàng)建文件夾mysql把編輯號(hào)的yml文件上傳進(jìn)去
mkdir mysql
4、運(yùn)行docker-composeysql.yml
檢查
docker-compose -f docker-composemysql.yml config -q
檢查一下yml文件有沒有錯(cuò)誤的地方,沒報(bào)錯(cuò)就是沒有

運(yùn)行
docker-compose -f docker-composemysql.yml up -d

四、配置mysql主從
1、進(jìn)入主庫容器配置遠(yuǎn)程連接
docker exec -it mysql-master /bin/sh

2、登錄mysql主服務(wù)器
mysql -u root -p
輸入mysql密碼:123456
3、查看主節(jié)點(diǎn)關(guān)鍵參數(shù)
記住 File 的值和 Position 的值(此值重啟后會(huì)變化),等會(huì)配置 slave 服務(wù)器的時(shí)候要用
show master status;

4、給用戶授權(quán)并更新
grant all privileges on *.* to root@'%' identified by '123456';
flush privileges;另外開一個(gè)窗口進(jìn)入從服務(wù)器
5、進(jìn)入從服務(wù)器
docker exec -it mysql-slave /bin/bash
6、登錄mysql從服務(wù)器
mysql -u root -p
輸入mysql密碼:123456

7、配置主從復(fù)制
CHANGE MASTER TO MASTER_HOST='172.19.0.3', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=154;

各參數(shù)說明:
master_host='172.19.0.3' // 這里填master主機(jī)ip,除了填寫住宿主機(jī)IP,還可以填寫bridge網(wǎng)絡(luò)中的IP master_log_file='mysql-bin.000005', // 這里填寫 File 的值就是前面我們show master status;命令的執(zhí)行結(jié)果 master_log_pos=154;// 這里填寫 Position 的值就是前面我們show master status;命令的執(zhí)行結(jié)果
8、開啟主從復(fù)制
start slave;

9、查看連接狀態(tài)
show slave status\G

注1:這里只要看到兩個(gè)參數(shù)Slave_IO_Running和Slave_SQL_Running都為true,則表示復(fù)制是正常進(jìn)行的,到這里我們的主從結(jié)構(gòu)也就搭建完成了
注2:集群成功后,在mysql-master容器重啟后雖然File的值和Position的值會(huì)變化,但在mysql-slave可以進(jìn)行跟蹤,所以不需要重新進(jìn)行配置
五、測試主從服務(wù)
1、在主服務(wù)器創(chuàng)建一個(gè)數(shù)據(jù)庫
create databse test;

在使用 show databases;查看一下所以庫

2、在從服務(wù)器查看數(shù)據(jù)庫
show databases;

ok,已經(jīng)完成了數(shù)據(jù)的同步
六、將crm項(xiàng)目的數(shù)據(jù)庫通過命令導(dǎo)入主庫
在主服務(wù)器執(zhí)行
1、創(chuàng)建數(shù)據(jù)庫crm
create database crm;
2、把sql腳本上傳到主服務(wù)器的的數(shù)據(jù)目錄
cd /data/mysql-master/data

文章所需要的文件我會(huì)放到結(jié)尾
3、選擇數(shù)據(jù)庫
use crm;

4、設(shè)置數(shù)據(jù)庫編碼(可選)
set names utf8;
5、導(dǎo)入數(shù)據(jù)(注意sql文件的路徑)
source /var/lib/mysql/crm.sql;
已提前將crm.sql文件上傳到了宿主機(jī)/data/mysql-master/data目錄

使用show tables;查看剛剛導(dǎo)入的數(shù)據(jù)

在從數(shù)據(jù)庫也查詢一下,也是有數(shù)據(jù)的,完成了數(shù)據(jù)同步

總結(jié)
到此這篇關(guān)于使用docker-compose搭建mysql主從的文章就介紹到這了,更多相關(guān)docker-compose搭建mysql主從內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
5分鐘教你實(shí)現(xiàn)用docker搭建Redis集群模式和哨兵模式
本文主要介紹了5分鐘實(shí)現(xiàn)用docker搭建Redis集群模式和哨兵模式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
云原生使用Docker部署Firefox瀏覽器詳細(xì)圖文教程
下面這篇文章主要給大家介紹了關(guān)于云原生使用Docker部署Firefox瀏覽器的相關(guān)資料,這對(duì)于一些特殊的測試場景非常有用,例如需要在不同版本的瀏覽器中進(jìn)行測試,需要的朋友可以參考下2024-04-04
docker部署nginx訪問宿主機(jī)服務(wù)并使用緩存的操作方法
這篇文章主要介紹了docker部署nginx訪問宿主機(jī)服務(wù)并使用緩存的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧2024-04-04
Docker 環(huán)境運(yùn)行 Mysql 和開啟 Binlog 配置主從同步的設(shè)置方法
今天給大家分享Docker 環(huán)境運(yùn)行 Mysql 和開啟 Binlog 配置主從同步的設(shè)置方法,利用docker模擬mysql設(shè)置的主從同步,通過兩種方式給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-06-06
Docker容器部署Elasticsearch并配置分詞器的方法實(shí)現(xiàn)
本文主要介紹了Docker容器部署Elasticsearch并配置分詞器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-04-04
Docker部署mysql遠(yuǎn)程連接 解決2003的問題
這篇文章主要介紹了Docker部署mysql遠(yuǎn)程連接 解決2003錯(cuò)誤的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
docker中設(shè)置環(huán)境變量的多種實(shí)現(xiàn)方式
這篇文章主要介紹了docker中設(shè)置環(huán)境變量的多種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-07-07
IDEA通過Docker插件部署SpringBoot項(xiàng)目的過程詳解
在idea中如何通過Docker插件部署SpringBoot項(xiàng)目呢?很多朋友在配置過程中走了很多誤區(qū),今天小編給大家分享一篇教程關(guān)于IDEA通過Docker插件部署SpringBoot項(xiàng)目的過程,感興趣的朋友一起看看吧2021-11-11

