docker技術(shù)已經(jīng)很成熟了,近期有系統(tǒng)學(xué)習(xí)docker的計(jì)劃,現(xiàn)在學(xué)習(xí)的docker知識比較混亂,都是想到什么去百度搜一下并沒有系統(tǒng)的學(xué)習(xí)過,前幾天看了個(gè)mysql主從搭建的視頻,本人用docker做了下mysql的主從復(fù)制。故在此記錄下
注:MASTER 代表主數(shù)據(jù)庫
SLAVE 代表從數(shù)據(jù)庫
一、準(zhǔn)備:一臺linux服務(wù)器(centos,debain都可以,個(gè)人推薦deabin)
二、安裝docker,這里不詳細(xì)說了
三、拉取mysql鏡像,這里用的版本為mysql5.7
使用鏡像加速:docker pull registry.docker-cn.com/library/mysql:5.7
四、創(chuàng)建文件夾
(1)、MASTER數(shù)據(jù)庫使用:mkdir -p /usr/local/docker/mysql-master/conf /usr/local/docker/mysql-master/data
SLAVE數(shù)據(jù)庫使用:mkdir -p /usr/local/docker/mysql-slave-01/conf /usr/local/docker/mysql-slave-01/data
五、新建mysql的配置文件my.cnf
MASTER: vim /usr/local/docker/mysql-master/conf/my.cnf
寫入配置:
[mysqld]
server-id=1 ## 同一局域網(wǎng)內(nèi)注意要唯一
log-bin=master-bin ## 開啟二進(jìn)制日志功能,可以隨便?。P(guān)鍵)
log-bin-index=master-bin.index ##同上
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
SLAVE: vim /usr/local/docker/mysql-slave-01/conf/my.cnf
寫入配置:
[mysqld]
server-id=2 ## 同一局域網(wǎng)內(nèi)注意要唯一
log-bin=slave01-bin ## 開啟二進(jìn)制日志功能,以備SLAVE作為其它SLAVE的Master時(shí)使用
log-bin-index=slave01-bin.index ## 同上
relay-log=slave-relay-bin ## SLAVE配置
relay-log-index=relay-bin.index
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
六、啟動數(shù)據(jù)庫,掛載外部數(shù)據(jù)
MASTER:
docker run -d --privileged=true --name mysql5.7-master -p 23306:3306 -v /usr/local/docker/mysql-master/data:/var/lib/mysql -v /usr/local/docker/mysql-master/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
SLAVE:
docker run -d --privileged=true --name mysql5.7-slave-01 -p 23307:3306 -v /usr/local/docker/mysql-slave-01/data:/var/lib/mysql -v /usr/local/docker/mysql-slave-01/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 registry.docker-cn.com/library/mysql:5.7
七、配置MASTER
可以進(jìn)入docker內(nèi)部登錄上msql執(zhí)行,也可用工具,本人使用navicate
MASTER需要新建用戶,讓SLAVE使用
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
其中的%可以換成從數(shù)據(jù)庫的ip地址
執(zhí)行查看MASTER狀態(tài)的sql:SHOW MASTER STATUS;

記下:File:master-bin.000003和Position:609
至此,MASTER完畢
八、配置SLAVE
change master to master_host='192.168.56.101',master_port=23306, master_user='slave', master_password='123456',master_log_file='master-bin.000003', master_log_pos= 609, master_connect_retry=30;
命令說明:
master_host :Master的地址,指的是容器的獨(dú)立ip,可以通過docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱|容器id查詢?nèi)萜鞯膇p
master_port:Master的端口號,指的是容器的端口號
master_user:用于數(shù)據(jù)同步的用戶
master_password:用于同步的用戶的密碼
master_log_file:指定 Slave 從哪個(gè)日志文件開始復(fù)制數(shù)據(jù),即上文中提到的 File 字段的值
master_log_pos:從哪個(gè) Position 開始讀,即上文中提到的 Position 字段的值
master_connect_retry:如果連接失敗,重試的時(shí)間間隔,單位是秒,默認(rèn)是60秒
執(zhí)行:start slave;開啟主從同步
執(zhí)行sql:show slave status;查看SLAVE狀態(tài)

SlaveIORunning 和 SlaveSQLRunning 都是Yes,說明主從復(fù)制已經(jīng)開啟。此時(shí)可以測試數(shù)據(jù)同步是否成功。
如果SlaveIORunning一直是Connecting,則說明主從復(fù)制一直處于連接狀態(tài),我們可以根據(jù) Last_IO_Error查看錯誤原因。
現(xiàn)在在主數(shù)據(jù)庫添加點(diǎn)東西看下從庫是否可以正常復(fù)制了。
完畢,希望能幫到大家?。?!