從零開始,通過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不一樣。 如果覺得我的文章或者程式碼對您有幫助,可以請我喝杯咖啡
您的支援將鼓勵我繼續創作!謝謝!