使用docker-compose搭建mysql主從詳細(xì)過程
一、docker-compose和主從的簡介
1、docker-compose
Docker-Compose項目是Docker官方的開源項目,負(fù)責(zé)實現(xiàn)對Docker容器集群的快速編排 通過編寫docker-compose文件可對多個服務(wù)同時進(jìn)行啟動/停止/更新(可定義依賴,按順序啟動服務(wù))
2、mysql主從
以往創(chuàng)建的集群都是做同樣的事情,比如說創(chuàng)建了三臺服務(wù)器,那么客戶端發(fā)送了一條增加請求,那么就會隨機(jī)分配到三臺服務(wù)器其中一臺,
那么mysql集群不一樣,首先呢我們不叫它mysql集群,我們叫mysql主從,那么就有主服務(wù)器和從服務(wù)器這樣兩種概念,主服務(wù)器負(fù)責(zé)寫的操作,也就是增刪改,從服務(wù)器負(fù)責(zé)讀的操作,也就是查詢,如果說客戶端發(fā)送了一條增加的請求,那么就會把這條增加的請求給到主服務(wù)器,再由主服務(wù)器把數(shù)據(jù)同步到從服務(wù)器
3、為什么要使用docke-compose?
微服務(wù)架構(gòu)的應(yīng)用系統(tǒng)一般包含若干個微服務(wù),每個微服務(wù)一般都會部署多 個實例,如果每個微服務(wù)都要手動啟停, 那么效率之低,維護(hù)量之大可想而知.而使用 Docker Compose 可以輕松、高效的管理容器, 它是一個用于定義和運(yùn)行多容器 Docker 的應(yī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 上傳
文章所需要的文件我會放到結(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 上傳
這兩個文件里的內(nèi)容只有id是不一樣的
三、安裝docker-compose
1、上傳文件
安裝包剛下載過來是docker-compose-Linux-x86_64
需要將docker-compose-Linux-x86_64重命名為 docker-compose
將 docker-compose 文件上傳到虛擬機(jī) 的 /usr/local/bin/ 目錄下,這個目錄下的文件可以被全局使用到,
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,因為要做MySQL的主從所以我把名字改成了docker-composemysql.yml
我們編輯yml文件可以在外部的工具先編輯在上傳,比如idea
docker-composemysql.yml內(nèi)容如下:
# 版本號 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把編輯號的yml文件上傳進(jìn)去
mkdir mysql
4、運(yùn)行docker-composeysql.yml
檢查
docker-compose -f docker-composemysql.yml config -q
檢查一下yml文件有沒有錯誤的地方,沒報錯就是沒有
運(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 的值(此值重啟后會變化),等會配置 slave 服務(wù)器的時候要用
show master status;
4、給用戶授權(quán)并更新
grant all privileges on *.* to root@'%' identified by '123456'; flush privileges;
另外開一個窗口進(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:這里只要看到兩個參數(shù)Slave_IO_Running和Slave_SQL_Running都為true,則表示復(fù)制是正常進(jìn)行的,到這里我們的主從結(jié)構(gòu)也就搭建完成了
注2:集群成功后,在mysql-master容器重啟后雖然File的值和Position的值會變化,但在mysql-slave可以進(jìn)行跟蹤,所以不需要重新進(jìn)行配置
五、測試主從服務(wù)
1、在主服務(wù)器創(chuàng)建一個數(shù)據(jù)庫
create databse test;
在使用 show databases;查看一下所以庫
2、在從服務(wù)器查看數(shù)據(jù)庫
show databases;
ok,已經(jīng)完成了數(shù)據(jù)的同步
六、將crm項目的數(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
文章所需要的文件我會放到結(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)文章
借助Docker搭建JMeter+Grafana+Influxdb監(jiān)控平臺的詳細(xì)教程
這篇文章主要介紹了借助Docker搭建JMeter+Grafana+Influxdb監(jiān)控平臺,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01