1. 程式人生 > >從零開始,通過docker實現mysql 主從複製,圖文並茂,保證可以實現!

從零開始,通過docker實現mysql 主從複製,圖文並茂,保證可以實現!

   1.安裝映象

         第一次實現docker實現mysql 主從複製的時候,各種百度,各種熱折騰,用了業餘幾天時間才實現!!現在把實現的詳細過程,全部寫出來,希望參對大家有所幫助。首先,準備好環境,映象:CentOS-7-x86_64-DVD-1503-01.iso。用虛擬機器安裝,我的VMware Workstation14版本,安裝虛擬機器的過程,我不再這裡討論了。安裝好後,如下:

 通過ifconfig,不能查詢得ip地址,得用ip addr


2.安裝docker

很簡單,命令:
  1. yum install -y docker  


接下來,修改映象地址,編輯/etc/docker/daemon.json

vim 沒裝,其實vi 也可以用,但vim可以對關鍵字加亮,所以安裝vim ,命令:

  1. yum -y install vim  



退出儲存。

啟動docker:

  1. systemctl start docker //centos7及以後版本  

# service docker start   //centos6及之前的版本



檢視映象

  1. docker images  


此時沒有映象,抓取映象:

抓取映象

  1. docker pull registry.cn-hangzhou.aliyuncs.com/moensun/centos7  


再檢視映象,此時已經有映象了:


建立docker 容器(可以根據一個映象建立多個容器)

  1. docker run -tid 映象ID/usr/sbin/init  //centos7版本。使用/usr/sbin/init解決systemctl報錯不能使用的問題  

docker run -tid 映象ID/bin/bash     //非centos7


檢視容器列表

  1. docker ps -a  


進入容器

  1. docker exec -it 容器名稱 /bin/bash  


進入容器後,注意變化,之前是[email protected],現在變成[email protected]容器id,也就是容器ID,現在進入容器後,你可以理解成,一個全新的linux作業系統,就像我們wondow下安裝VMware Workstation後,成功通過映象安裝一臺linux的道理是樣的!你在容器的幹什麼,裝什麼不會影響到宿主,兩個作業系統是隔離的,獨立的。

退出容器的命令是:exit。

接下來,按照這樣步驟,再建立一臺docker 容器。就是有一臺宿主作業系統,然後通過docker,再建立兩個docker容器


3.兩個docker 容器,分別安裝mysql

安裝mysql就三個命令就裝好了:

  1. # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm  
  2. # rpm -ivh mysql-community-release-el7-5.noarch.rpm  
  3. # yum install mysql-community-server  

wget 沒有安裝,現在通過命令安裝wget
  1. yum -y install wget  

再次執行:




如下遇到下圖,直接輸入:y


安裝完成!linux  安裝mysql,就三條命令就可以了,前提條件是得有網路,在無網路情況下linux 安裝mysql很麻煩也挺困難的。

4.開始搭建主從複製

  現在架構如下:


啟動mysql

# systemctl start mysql

登陸mysql

mysql -uroot         //預設沒有密碼

設定mysql初始密碼:

mysql> set password = password(‘你的密碼’)

遠端登陸授權

  1. mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;  
  2. mysql> flush privileges;  


主從複製原理,是通過binlog實現的,如下圖


兩個docker容器的mysql都改

  1. 修改配置檔案:vim  /etc/my.cnf  
  1. [mysqld]  
  2. server-id                    = 2
  3. port                        = 3306
  4. datadir                      = /var/lib/mysql  
  5. socket                       = /var/lib/mysql/mysql.sock  
  6. default-storage-engine          = InnoDB
  7. log-bin                      = mysql-bin  
  8. log-bin-index                 = mysql-bin.index  
  9. relay-log                    = mysql-relay  
  10. relay-log-index               = mysql-relay.index  
  11. expire-logs-days              = 10
  12. max-binlog-size              = 100M
  13. max_binlog_cache_size        = 8M
  14. log-slave-updates             = 1
  15. binlog_cache_size            = 4M
  16. # use MIXED binlog  
  17. binlog_format               = MIXED
  18. #binlog_format              = ROW
  19. #replicate-do-db             = db%.%  
  20. #replicate-ignore-db          = mysql.%  
  21. # ignore tables  
  22. replicate-wild-ignore-table     = mysql.%  
  23. sync_binlog                 = 1
  24. relay_log_recovery           = 1
  25. log_slave_updates           = 1
  26. skip-name-resolve  
  27. sql_mode=STRICT_TRANS_TABLES
  28. [mysqldump]  
  29. quick  
  30. max_allowed_packet = 32M

server-id  這個千萬不能跟別的mysql的配置一樣,無論主機還是從機server-id不能相同

主要server-id = 2和log-bin = mysql-bin,一定要配置,其它的可以沒有

檢視容器IP:


我以mad_euclid為主機,distracted_wright為從機。

  1. 主從複製過程(在主機上操作):  
  2. 1.  建立同步複製的使用者  
  3.     mysql> create user 'hdg'@'172.17.0.%' identified by 'root';  
  4. 2.  給同步複製使用者賦權  
  5.     mysql> grant replication slave on *.* to 'hdg'@'172.17.0.%' identified by 'root';  
  6. mysql> flush privileges;  
  7. 3.  開啟binlog  
  8.     配置時候注意幾個坑:  
  9.     Replication-do-db的坑,如果多個庫則使用多行Replication-do-db進行配置  
  10. Replication-ignore-db的坑,如果忽略多個庫則使用多行Replication-ignore-db進行配置  
  11. 4.  重啟mysql  
  12. #sysctemctl restart mysql  

登陸主機mysql

這個時候就產生binlog了,離成功不遠了!


  1. 從機操作  
  2. 1. Stop slave;  
  3. 主從複製的最關鍵語句:  
  4. 2. Change master to  
  5.          Master_host=’172.17.0.3’,  //主機的IP地址  
  6.          Master_user=’hdg’,  
  7.          Master_password=’root’,  
  8.          Master_log_file=’mysql-bin.000001’,  
  9.          Master_log_pos=120;  
  10. 3. Start slave;  


檢視主機狀態:

  1. show master status;  


檢視從機狀態:

  1. show slave status\G;  


5.大功靠成

驗證,在主機上建立資料庫,然後建立表,進行增刪改查,會自動同步到從機上,從而實現主從複製!!哈哈,以後出去面試,可以吹牛逼了。現在網際網路專案,都是讀寫分離,高併發解決方案之一。

在主機上建立資料庫:

  1. create database hdg;  




至此,主從複製功能,全部實現!!!!!

主從複製實現了,主主複製也是一樣的,反過來就行可以。

6.排錯

   可能有些小夥伴沒有成功。這裡寫個檢查錯誤的方法: 在主庫,執行:
  1. show processlist;  
  1. [[email protected] mysql]# netstat -natp  


昨天截圖沒有提交成功,今天找圖補上,可能映象ID不一樣。