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

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


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

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



檢視容器列表

docker ps -a

刪除映象

# docker rmi 映象ID

# docker rmi c862fd4c865c

刪除容器

# docker rm 容器名稱

# docker rm 

Docker檔案拷貝(容器<=>docker)

# docker cp 原路徑 docker容器路徑(系統=》docker)

# docker cpMySQL-server-5.6.38-1.el7.x86_64.rpm mysql_master2:/root/

# docker cp docker容器路徑 原路徑(docker=》系統)

退出容器

# exit



進入容器

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


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

退出容器的命令是:exit。

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


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

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

# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

# rpm -ivh mysql-community-release-el7-5.noarch.rpm

# yum install mysql-community-server


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

再次執行:




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


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

4.開始搭建主從複製

  現在架構如下:


啟動mysql

# systemctl start mysql

登陸mysql

mysql -uroot         //預設沒有密碼

設定mysql初始密碼:

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

遠端登陸授權

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


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


兩個docker容器的mysql都改

修改配置檔案:vim  /etc/my.cnf
[mysqld]
server-id                    = 2
port                        = 3306
datadir                      = /var/lib/mysql
socket                       = /var/lib/mysql/mysql.sock
default-storage-engine          = InnoDB
log-bin                      = mysql-bin
log-bin-index                 = mysql-bin.index
relay-log                    = mysql-relay
relay-log-index               = mysql-relay.index
expire-logs-days              = 10
max-binlog-size              = 100M
max_binlog_cache_size        = 8M
log-slave-updates             = 1
binlog_cache_size            = 4M

# use MIXED binlog
binlog_format               = MIXED
#binlog_format              = ROW

#replicate-do-db             = db%.%
#replicate-ignore-db          = mysql.%

# ignore tables
replicate-wild-ignore-table     = mysql.%
sync_binlog                 = 1
relay_log_recovery           = 1
log_slave_updates           = 1
skip-name-resolve

sql_mode=STRICT_TRANS_TABLES

[mysqldump]
quick
max_allowed_packet = 32M

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

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

檢視容器IP:


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

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

登陸主機mysql

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


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


檢視主機狀態:

show master status;


檢視從機狀態:

show slave status\G;


5.主從複製成功實現

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

在主機上建立資料庫:

create database hdg;




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

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

6.主主複製

   在之前的從機上操作:

在之前的主機主機上操作:
這樣就實現主主複製了。挺簡單的

7.排錯

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


昨天截圖沒有提交成功,今天找圖補上,可能映象ID不一樣。 如果覺得我的文章或者程式碼對您有幫助,可以請我喝杯咖啡
您的支援將鼓勵我繼續創作!謝謝!