欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解如何利用docker快速構(gòu)建MySQL主從復(fù)制環(huán)境

 更新時間:2017年05月05日 11:56:44   作者:iVictor  
這篇文章主要介紹了詳解如何利用docker快速構(gòu)建MySQL主從復(fù)制環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在學(xué)習(xí)MySQL的過程中,常常會測試各種參數(shù)的作用。這時候,就需要快速構(gòu)建出MySQL實(shí)例,甚至主從。 

考慮如下場景:

譬如我想測試mysqldump在指定--single-transaction參數(shù)的情況下,對于myisam表的影響。

本來想在現(xiàn)成的測試環(huán)境中進(jìn)行,但測試環(huán)境中,有大量的數(shù)據(jù),執(zhí)行mysqldump進(jìn)行全備,產(chǎn)生的SQL文件,很難基于表進(jìn)行搜索。

這個時候,就特別渴望能有一套干凈的實(shí)例進(jìn)行測試。

此刻,快速構(gòu)建能力就顯得尤為必要,很多童鞋可能會問,通過腳本不就能實(shí)現(xiàn)么?為什么要用docker?

個人感覺:腳本太重,會涉及很多額外的工作,譬如創(chuàng)建用戶,相對較長的數(shù)據(jù)庫初始化過程,MySQL啟動過程,而我需要的是一種快速構(gòu)建,快速銷毀的能力。

而這,正是Docker的強(qiáng)項(xiàng)。

如下,是利用docker啟動一個實(shí)例的時間,不到1s,如果使用腳本來做的話,絕不會這么快。

# time docker run --name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v /var/lib/mysql/slave:/var/lib/mysql -p3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
6b7fe5da9e8c77529ee634e163add57db5cd15757e88261ce320a502ae01f853

real  0m0.986s
user  0m0.026s
sys  0m0.018s

于是基于docker寫了個腳本,可在30s左右新建一套MySQL主從復(fù)制環(huán)境

#!/bin/bash

MASTER_DIR=/var/lib/mysql/master
SLAVE_DIR=/var/lib/mysql/slave

## First we could rm the existed container
docker rm -f master
docker rm -f slave

## Rm the existed directory
rm -rf $MASTER_DIR
rm -rf $SLAVE_DIR

## Start instance
docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
docker run --name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v $SLAVE_DIR:/var/lib/mysql --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
## Creating a User for Replication
docker stop master slave
docker start master slave

sleep 3

docker exec -it master mysql -S /var/lib/mysql/mysql.sock -e "CREATE USER 'repl'@'127.0.0.1' IDENTIFIED BY 'repl';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'127.0.0.1';"

## Obtaining the Replication Master Binary Log Coordinates
master_status=`docker exec -it master mysql -S /var/lib/mysql/mysql.sock -e "show master status\G"`
master_log_file=`echo "$master_status" | awk 'NR==2{print substr($2,1,length($2)-1)}'`
master_log_pos=`echo "$master_status" | awk 'NR==3{print $2}'`
master_log_file="'""$master_log_file""'"

## Setting Up Replication Slaves 
docker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE=$master_log_file,MASTER_LOG_POS=$master_log_pos;"docker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e "start slave;"
docker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e "show slave status\G"

## Creates shortcuts
grep "alias master" /etc/profile
if [ $? -eq 1 ];then
  echo 'alias mysql="docker exec -it master mysql"' >> /etc/profile
  echo 'alias master="docker exec -it master mysql -h 127.0.0.1 -P3306"' >> /etc/profile
  echo 'alias slave="docker exec -it master mysql -h 127.0.0.1 -P3307"' >> /etc/profile
  source /etc/profile
fi

腳本本身沒有太多需要說明的地方,主從容器起來后,遵循的還是常見的主從復(fù)制建立流程。

主要是說說創(chuàng)建容器所涉及的選項(xiàng)。

復(fù)制代碼 代碼如下:

docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34

 -v /etc/master.cnf:/etc/mysql/my.cnf:將本地的配置文件映射成容器的配置文件,這樣,可通過修改本地配置文件,來達(dá)到修改容器配置文件的效果。

 -v $MASTER_DIR:/var/lib/mysql :將本地目錄映射成容器的數(shù)據(jù)目錄,這樣,方便查看數(shù)據(jù)目錄的內(nèi)容,不然的話,就默認(rèn)保存在/var/lib/docker/volumes目錄下,實(shí)在不方便查看。

 --net=host:共享宿主機(jī)的網(wǎng)絡(luò),大大降低容器之間的通信復(fù)雜度。

 注意

在腳本剛開始的時候,會刪除之前的容器,這包含兩步操作

1. 通過docker命令刪除容器

2. 通過操作系統(tǒng)命令刪除之前容器的數(shù)據(jù)目錄。

    如果不刪除的話,再次通過如下命令創(chuàng)建容器時,并不會清空之前的數(shù)據(jù)目錄,而是直接加載,相當(dāng)于新啟了一個mysqld進(jìn)程啟動之前的實(shí)例。

復(fù)制代碼 代碼如下:

docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34

這也給我們提供了一個思路,如果只是想測試參數(shù)的作用,并不想新建實(shí)例的話,只需通過docker命令刪除容器,修改配置文件,通過上述命令創(chuàng)建容器即可。

在啟動實(shí)例后,執(zhí)行了一個重啟實(shí)例的操作,因?yàn)樵跍y試的過程中,發(fā)現(xiàn)如果執(zhí)行docker exec -it master bash之類的操作,會導(dǎo)致容器down掉(具體down的原因還未分析),但是重啟實(shí)例后就沒問題。

docker stop master slave
docker start master slave

sleep 3

設(shè)置快捷鍵

mysql:mysql客戶端,可以通過該客戶端連接其它主機(jī)上的MySQL服務(wù)器。

master:執(zhí)行master即可登錄本機(jī)的master實(shí)例,省掉了指定主機(jī)名和端口的操作。

salve:執(zhí)行slave即可登錄本機(jī)的slave實(shí)例。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 批量刪除docker過期停止的容器的四種方法

    批量刪除docker過期停止的容器的四種方法

    過期的容器也是占用一部分的內(nèi)存空間,這時候如果對應(yīng)一個個刪除容器id,有些麻煩,有沒有方法對應(yīng)將其批量刪除呢,本文給大家介紹了批量刪除docker過期停止的容器的四種方法,需要的朋友可以參考下
    2024-02-02
  • Docker如何部署前端項(xiàng)目

    Docker如何部署前端項(xiàng)目

    這篇文章主要介紹了Docker如何部署前端項(xiàng)目問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • docker查看日志命令的實(shí)現(xiàn)步驟

    docker查看日志命令的實(shí)現(xiàn)步驟

    Docker可以使用?docker logs?命令來查看容器的日志,本文主要介紹了docker查看日志命令的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Docker 容器操作退出后進(jìn)入解決辦法

    Docker 容器操作退出后進(jìn)入解決辦法

    這篇文章主要介紹了Docker 容器操作退出后進(jìn)入解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Dockerfile如何使用alpine系統(tǒng)制作haproxy鏡像

    Dockerfile如何使用alpine系統(tǒng)制作haproxy鏡像

    這篇文章主要介紹了Dockerfile如何使用alpine系統(tǒng)制作haproxy鏡像問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Docker鏡像的commit操作示例及作用

    Docker鏡像的commit操作示例及作用

    這篇文章主要為大家介紹了Docker鏡像的commit操作示例及作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • docker+nextcloud搭建個人云存儲系統(tǒng)的實(shí)現(xiàn)

    docker+nextcloud搭建個人云存儲系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了docker+nextcloud搭建個人云存儲系統(tǒng)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • docker容器設(shè)置時區(qū)的幾種方式小結(jié)

    docker容器設(shè)置時區(qū)的幾種方式小結(jié)

    Docker的基礎(chǔ)鏡像設(shè)置大多是Etc/UTC,也就是標(biāo)準(zhǔn)的UTC 時間,所以要簡單的調(diào)整一下,本文主要介紹了docker容器設(shè)置時區(qū)的幾種方式小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • docker compose安裝etcd的詳細(xì)過程

    docker compose安裝etcd的詳細(xì)過程

    這篇文章主要介紹了docker compose安裝etcd的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • docker安裝nginx之后無法訪問的解決

    docker安裝nginx之后無法訪問的解決

    這篇文章主要介紹了docker安裝nginx之后無法訪問的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評論