国产chinesehd精品酒店,邱淑贞aa极毛片,国产在线色视频,玖玖爱zh综合伊人久久

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

更新時間:2023-11-25 00:10:41作者:未知

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

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

考慮如下場景:

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

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

這個時候,就特別渴望能有一套干凈的實例進行測試。

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

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

而這,正是Docker的強項。

如下,是利用docker啟動一個實例的時間,不到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)建容器所涉及的選項。

復(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:將本地的配置文件映射成容器的配置文件,這樣,可通過修改本地配置文件,來達到修改容器配置文件的效果。

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

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

注意

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

1. 通過docker命令刪除容器

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

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

復(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ù)的作用,并不想新建實例的話,只需通過docker命令刪除容器,修改配置文件,通過上述命令創(chuàng)建容器即可。

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

  docker stop master slave  docker start master slave    sleep 3

設(shè)置快捷鍵

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

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

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

本文標(biāo)簽: 容器  實例  主從  

為您推薦

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

如何利用docker快速構(gòu)建MySQL主從復(fù)制環(huán)境 在學(xué)習(xí)MySQL的過程中,常常會測試各種參數(shù)的作用.這時候,就需要快速構(gòu)建出MySQL實例,甚至主從. 考慮

2023-11-25 00:10

Mysql服務(wù) mysql服務(wù)無法啟動

Mysql服務(wù) 1067 錯誤如何解決 今天遇到mysql服務(wù)1067錯誤的問題,設(shè)置使用系統(tǒng)賬戶也無法啟動mysql,后面認證看了系統(tǒng)的配置信息,發(fā)現(xiàn)啟動文件

2023-11-25 00:09

Windows Server 2012 搭建PHP+MySQL環(huán)境安裝DedeCMS系統(tǒng)

Windows Server 2012 搭建PHP+MySQL環(huán)境安裝DedeCMS系統(tǒng) 隨著Windows 8的發(fā)布,其服務(wù)器版本W(wǎng)indows Server

2023-11-25 00:09

vivoz3的導(dǎo)航鍵怎么調(diào)(vivoz1導(dǎo)航鍵在哪里)

vivoz3的導(dǎo)航鍵怎么調(diào),vivoz3的導(dǎo)航鍵設(shè)置的方法:1、首先進入vivoz3手機桌面,點擊設(shè)置;2、點擊系統(tǒng)導(dǎo)航;3、將導(dǎo)航手勢改為導(dǎo)航鍵即可。

2023-11-25 00:08

皮皮蝦上怎樣關(guān)注通訊錄好友(皮皮蝦能不能關(guān)注通訊錄好友)

皮皮蝦上怎樣關(guān)注通訊錄好友,皮皮蝦上關(guān)注通訊錄好友的方法如下:1、首先打開皮皮蝦,進入個人主頁;2、點擊右上角的設(shè)置,進入設(shè)置界面;3、在設(shè)置中找到好友,點擊通訊錄好友即可關(guān)注。

2023-11-25 00:08

MySql中啟用InnoDB數(shù)據(jù)引擎的方法(mysql數(shù)據(jù)庫引擎設(shè)置)

MySql中啟用InnoDB數(shù)據(jù)引擎的方法 1、存儲引擎是什么? Mysql中的數(shù)據(jù)用各種不同的技術(shù)存儲在文件(或者內(nèi)存)中。這些技術(shù)中的每一種技術(shù)都使用不同的

2023-11-25 00:08