基于docker搭建mysql主從同步
版本: mysql8.0.16
1. 首先拉取mysql鏡像
docker pull mysql
使用此鏡像分別啟動(dòng)主從容器
Master
docker run -p 3339:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
Slave
docker run -p 3340:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker每個(gè)容器都是獨(dú)立的ip,所以不同容器使用相同的端口并不會(huì)沖突察净。但對(duì)外開放的端口要不一樣根资。
2. 配置主從
docker ps查看docker 運(yùn)行的容器
此時(shí)可以使用Navicat等工具測(cè)試連接mysql
因?yàn)槭褂玫膍ysql 版本是8.0以上默認(rèn)加密方式可能為報(bào)2059錯(cuò)誤。
解決方法:進(jìn)入myql容器中鏈接上mysql命令行
執(zhí)行
alter user root@localhost identified by '你的密碼' password expire never;
alter user root@localhost identified with mysql_native_password by '你的密碼';
flush privileges;
OK5够薄Q浴!
修改主mysql配置 編輯/etc/mysql/my.cnf
[mysqld]
## 同一局域網(wǎng)內(nèi)注意要唯一
server-id=100
## 開啟二進(jìn)制日志功能,可以隨便攘讲小(關(guān)鍵)
log-bin=mysql-bin
下一步在Master數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)同步用戶永毅,授予用戶 slave REPLICATION SLAVE權(quán)限和REPLICATION CLIENT權(quán)限,用于在主從庫(kù)之間同步數(shù)據(jù)人弓。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
修改從機(jī)mysql配置
[mysqld]
## 設(shè)置server_id,注意要唯一
server-id=101
## 開啟二進(jìn)制日志功能沼死,以備Slave作為其它Slave的Master時(shí)使用
log-bin=mysql-slave-bin
## relay_log配置中繼日志
relay_log=edu-mysql-relay-bin
4. 連接主從配置
在Master進(jìn)入mysql,執(zhí)行show master status;
File和Position字段的值后面將會(huì)用到崔赌,在后面的操作完成之前意蛀,需要保證Master庫(kù)不能做任何操作,否則將會(huì)引起狀態(tài)變化健芭,F(xiàn)ile和Position字段的值變化县钥。
在Slave 中進(jìn)入 mysql,執(zhí)行以下命令
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000004', master_log_pos= 584, master_connect_retry=30;
命令說明:
master_host :Master的地址慈迈,指的是容器的獨(dú)立ip,可以通過docker inspect --format '{{ .NetworkSettings.IPAddress }}' mymysql ' 容器名稱|容器id
查詢?nèi)萜鞯膇p
master_port:Master的端口號(hào)若贮,指的是容器的端口號(hào)
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;