1.首先拉取docker鏡像利职,版本5.7.13的mysql
docker pull mysql:5.7.13
2.因為搭建的是mysql主從汛蝙,所以需要啟動兩個mysql:5.7.13 容器故俐,為了方便辨認胁澳,在啟動容器是分別給他重命名 Master:(mastermysql),Slave:(slavemysql)
Master(主)
docker run -d --name mastermysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD='root@123' mysql:5.7.13
Slave(從)
docker run -d --name slavemysql -p 3309:3306 -e MYSQL_ROOT_PASSWORD='root@123' mysql:5.7.13
- Master對外映射的端口是3308,Slave對外映射的端口是3309
使用docker ps命令查看正在運行的容器:
mysql.png
3.配置master ( docker exec -it 容器id或容器名 /bin/bash 進入容器)欲低。
【1】docker exec -it d65cd7bf5efe /bin/bash 進入容器后 辕宏,再cd /etc/mysql切換到/etc/mysql目錄下,然后vi my.cnf對my.cnf進行編輯砾莱。此時會報出bash: vi: command not found瑞筐,需要我們在docker容器內(nèi)部自行安裝vim。這里我先用yum -y install vim,但會提示沒yum 這個命令腊瑟,這時換一種方式安裝VIM 聚假,使用apt-get install vim命令安裝vim
,這時也會報錯扫步,報錯如下:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package vim
執(zhí)行apt-get update魔策,然后再次執(zhí)行apt-get install vim即可成功安裝vim
【2】安裝完VIM 后,就可以對mysql的配置文件my.cnf 進行編輯
- 對my.cnf 加入下列
## 同一局域網(wǎng)內(nèi)注意要唯一
server-id=1
## 開啟二進制日志功能河胎,可以隨便却程弧(關(guān)鍵)
log-bin=mysql-bin
- 修改完配置后需要在容器內(nèi)重啟mysql 服務(wù),重啟mysql服務(wù)會導(dǎo)致mysql容器退出,到時也需要重新啟動下mastermysql這個容器游岳。
service mysql restart
docker start mastermysql(容器id或容器名)
4.在Master數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)同步用戶政敢,授予用戶 slave REPLICATION SLAVE權(quán)限和REPLICATION CLIENT權(quán)限,用于在主從庫之間同步數(shù)據(jù)胚迫。
create user 'slave'@'%' identified by'root@234';
grant replication slave ,replication client on *.* to 'slave'@'%';
5.對Slave進行配置
和配置master(主)一樣喷户,在Slave配置文件my.cnf中添加如下配置:
## 設(shè)置server_id,注意要唯一
server-id=2
# 開啟二進制日志功能,以備Slave作為其它Slave的Master時使用
log-bin=mysql-slave-bin
# relay_log配置中繼日志
relay_log=edu-mysql-relay-bin
配置完成后也需要重啟mysql服務(wù)和docker容器访锻,操作和配置master(主)一致.
6.進入mysql的后臺(master與slave都要)
master 進入mysql后,執(zhí)行如下
show master status;
image.png
File和Position字段的值后面將會用到褪尝,在后面的操作完成之前,需要保證Master庫不能做任何操作期犬,否則將會引起狀態(tài)變化河哑,F(xiàn)ile和Position字段的值變化
7.slave 進入mysql 后需進行以下操作
change master to master_host='172.17.0.6', master_user='slave', master_password='root@234', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 154, master_connect_retry=30;
其中需要注意的是master_host 是指主容器獨立的iP,master的地址,,可以通過docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱|容器id查詢?nèi)萜鞯膇p
image.png
對slave執(zhí)行的命令說明下:
master_host :master的地址
master_port:Master的端口號龟虎,指的是容器的端口號
master_user:用于數(shù)據(jù)同步的用戶
master_password:用于同步的用戶的密碼
master_log_file:指定 Slave 從哪個日志文件開始復(fù)制數(shù)據(jù)璃谨,即上文中提到的 File 字段的值
master_log_pos:從哪個 Position 開始讀,即上文中提到的 Position 字段的值
master_connect_retry:如果連接失敗鲤妥,重試的時間間隔佳吞,單位是秒,默認是60秒
8.在Slave 中的mysql終端執(zhí)行show slave status \G;用于查看主從同步狀態(tài)
正常情況下棉安,SlaveIORunning 和 SlaveSQLRunning 都是No底扳,因為我們還沒有開啟主從復(fù)制過程。使用start slave開啟主從復(fù)制過程贡耽,然后再次查詢主從同步狀態(tài)show slave status \G;花盐。
- SlaveIORunning 和 SlaveSQLRunning 都是Yes羡滑,說明主從復(fù)制已經(jīng)開啟。此時可以測試數(shù)據(jù)同步是否成功
9.在master mysql終端創(chuàng)建一個新的test庫算芯,看是否同步成功
master:image.png
slave:
image.png
- 從庫有test 說明主從同步成公。