因公司需求稚伍,需在Docker環(huán)境下配置Mysql主從服務器轧叽,但是在網(wǎng)上并沒有找到一篇完整的技術博客苗沧。所以自己研究了下,寫一篇博客給大家炭晒。此文檔本人原創(chuàng)待逞,轉載請注明作者和出處。
總體步驟:
一 ?搭建Docker環(huán)境网严,下載mysql鏡像识樱,本文以5.7.13為例。
二 ?使用Dockerfile構建自己的鏡像震束,因為主從服務器的my.cnf不同怜庸,所以建議構建兩個鏡像,構建鏡像的同時copy my.cnf文件到鏡像垢村。
三 ?通過build和run構建并運行主從鏡像割疾。
四 ?分別進入主從Mysql容器,修改配置嘉栓。
五 ?搞完收工宏榕。
1下載mysql鏡像源。
使用命令(二選一):
地址一:docker?pull?daocloud.io/library/mysql:5.7.13
地址二:docker?pull?daocloud.io/mysql(測試可用)
鏡像下載好之后侵佃,接下來需要使用Dockerfile通過copy my.cnf文件來構建符合自己要求的鏡像麻昼。因為主從服務器my.cnf配置略有不同,所以我們選擇構建兩個鏡像馋辈,分別命名為mysql-master和mysql-slave抚芦。
2使用Dockerfile構建鏡像并創(chuàng)建容器
創(chuàng)建兩個目錄,mkdir master和mkdir slave。然后分別cd到兩個目錄里面使用touch Dockerfile命令創(chuàng)建Dockerfile叉抡。將以下內容寫入Dockerfile:
FROM mysql
COPY my.cnf /etc/mysql/
EXPOSE 3306
CMD ["mysqld"]
備注:my.cnf文件可以先裝一個mysql的測試版本枢劝,然后切換到/etc/mysql目錄下,使用COPY my.cnf /etc/mysql/conf.d/my.cnf到當前目錄卜壕,這樣就得到了基礎的配置文件您旁。然后將得到的my.cnf文件分別copy到master和slave目錄下。并做以下修改:
master文件夾下的my.cnf文件
[mysqld]
log-bin=mysql-bin?? //[必須]啟用二進制日志
server-id=1//[必須]服務器唯一ID轴捎,默認是1鹤盒,一般取IP最后一段,這里看情況分配
slave文件夾下的my.cnf文件
[mysqld]
log-bin=mysql-bin?? //[必須]啟用二進制日志
server-id=2//[必須]服務器唯一ID侦副,默認是1侦锯,一般取IP最后一段,這里看情況分配
以上已經(jīng)完成了構建鏡像的準備工作秦驯,下面開始正式工作尺碰。
切換到master目錄下構建master/mysql鏡像
命令:docker build -t master/mysql .
(命令最后有個.,不要忘記译隘,代表當前目錄)
然后切換到master目錄下構建slave/mysql鏡像
命令:docker build -t slave/mysql .
(命令最后有個.亲桥,不要忘記,代表當前目錄)
鏡像構建成功固耘,下一步開始運行题篷。
docker run -p 3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=mysql -d master/mysql
語法:-p 3306是將3306端口映射出來,也可以使用*****:3306指定映射之后的端口厅目,mysql-master為容器的名稱番枚,mysql為指定密碼,master/mysql為鏡像源损敷,下同葫笼。
docker run -p 3306 --name slave-master -e MYSQL_ROOT_PASSWORD=mysql -d slave/mysql
從這里開始,建議打開兩個終端窗口拗馒,方便操作路星。
然后分別執(zhí)行docker exec -it mysql-master bash和docker exec -it slave-master bash命令進入到容器內部。然后分別執(zhí)行mysql -uroot -p輸入密碼mysql進入到mysql環(huán)境瘟忱,正式配置主從連接服務奥额。
3mysql配置
在主容器mysql中輸入以下命令:
mysql>GRANT REPLICATION SLAVE ON *.* TO 'user'@'192.168.99.100' IDENTIFIED BY 'mysql';(指定ip)或者
mysql>GRANT REPLICATION SLAVE ON *.* to 'user'@'%' identified by 'mysql';(所有ip)
然后查看主容器數(shù)據(jù)庫狀態(tài):
命令:mysql>show master status
記錄mysql-bin的值和pos的值。下面要用到访诱,到這里為止垫挨,主庫千萬不要再做任何操作,防止狀態(tài)改變触菜【爬疲可以關掉。
然后我們配置一下從庫
命令如下:
mysql>change master to
master_host='192.168.99.100',//要連接的主服務器的ip
master_user='user',//指定的用戶名,最好不要用root
master_log_file='mysql-bin.000003',//主庫記錄的值
master_log_pos=1201,//主庫的pos值
master_port=32771,//主庫3306映射的端口哲泊,如果不知道可以使用docker ps查看
master_password='mysql';//當然就是主庫要連接的用戶的密碼了
如果一切順利剩蟀,那么距離成功還有一步,輸入mysql>start slave啟動從服務器切威。
最后育特,檢驗一下我們的成果。
mysql>show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.222? //主服務器地址
Master_User: mysync ? //授權帳戶名先朦,盡量避免使用root
Master_Port: 3306 ? ?//數(shù)據(jù)庫端口缰冤,部分版本沒有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 600 ? ? //#同步讀取二進制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes ? ?//此狀態(tài)必須YES
Slave_SQL_Running: Yes ? ? //此狀態(tài)必須YES
注:Slave_IO及Slave_SQL進程必須正常運行喳魏,即YES狀態(tài)棉浸,否則都是錯誤的狀態(tài)(如:其中一個NO均屬錯誤)。
以上操作過程刺彩,主從服務器配置完成迷郑。