mysql环形复制的弊端_Docker+阿里云centos7+MySQL主从环形复制踩坑记
老規矩,先列坑
slave鏈接master的時候,一直提示2003錯誤
修改了iptables后,docker 下的容器無法正常使用
配置正確后,創建新的db部分機器沒有同步
Got fatal error 1236 from master when reading data from binary log: 'unknown error reading log event
安裝步驟
1. 安裝docker
yum install docker -y
systemctl start docker.service
systemctl enable docker.service
2. 安裝MySQL 5.7.13,并且運行
2.1 docker安裝mysql5.7版本
docker pull mysql:5.7.13
docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13
2.2 開放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
提一嘴,這里有個坑
2.3 在本地創建mysql配置文件路徑
mkdir -p /usr/local/mysql/master
mkdir -p /usr/local/mysql/slave1
2.4 把docker下的配置文件復制到本地
docker cp master:/etc/mysql/my.cnf /usr/local/mysql/master
2.5 修改配置文件,在 [ mysqld ] 中添加 server-id
vi /usr/local/mysql/master/my.cnf
# 添加下面這兩行到 [mysqld] 中
log-bin=mysql-bin
server-id=1
2.6 再把文件復制到docker下
docker cp /usr/local/mysql/master/my.cnf master:/etc/mysql/my.cnf
docker restart master
2.7 通過 Navicat 等工具,鏈接mysql-master,并且創建slave用戶
修改mysql賬號密碼也可以直接通過navicat進行操作,docker下直接修改root密碼我還沒找到命令,有知道的可以留言回復告訴我一下~
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by 'backup';
show grants for 'backup'@'%';
2.8 創建slave環境,和master配置基本相同
docker run --name slave1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -e mysql:5.7.13
docker cp slave1:/etc/mysql/my.cnf /usr/local/mysql/slave1
vi /usr/local/mysql/slave1/my.cnf
# [mysqld ]添加
log-bin=mysql-bin
server-id=2 # 這里的server-id不能和master相同
docker cp /usr/local/mysql/slave1/my.cnf slave1:/etc/mysql/my.cnf
docker restart slave1
2.9 配置slave
通過navicat鏈接到slave1后,執行:
CHANGE MASTER TO
MASTER_HOST='ip',
MASTER_PORT=3306,
MASTER_USER='backup',
MASTER_PASSWORD='backup';
START SLAVE;
到這里,按照我的步驟的話,都應該是正確的。
3. 排坑
3.1 防火墻
老生常談防火墻~,在查看slave的狀態是,發現 Slave_IO_State 的狀態一直是connecting而Slave_IO_Running一直是connecting,后面通過把服務器的防火墻關閉后,就可以了。
/bin/systemctl stop iptables.service
3.2 關于修改了iptables后,無法使用docker,重啟master服務會提示:
Error response from daemon: driver failed programming external connectivity on endpoint master (817bc6d0cbb1904d02343e35d295281d2c5386e702bd893c770a9d32948ec310): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1))
Error: failed to start containers: master
這需要我們對docker進行重啟,重啟后的docker服務會向iptables注冊一個鏈,以便讓docker服務管理的containner所暴露的端口之間進行通信
systemctl restart docker.service
docker restart master
docker restart slave1
3.3 部分沒有同步問題
這里需要重新清空二進制日志
reset master;
stop slave ;
reset slave;
start slave;
3.4 Got fatal error 1236 from master when reading data from binary log: 'unknown error reading log event
這里需要分析邏輯和主從關系,看一下同步到哪一個庫就斷了,然后執行reset slave
stop slave;
reset slave;
start slave;
3.5 清空舊的復制信息
reset slave all;
我們使用reset slave后不會清空復制信息的master host, master port, master user, or master password等
4. 延伸
4.1 延伸之 reset master 和reset slave的區別
reset master 是用來清空二進制日志中所有的文件,使bin-log從000001開始,而reset slave是用來清空主從的pos位置關系
reset master一般用于初始化安裝主從的時候使用
總結
以上是生活随笔為你收集整理的mysql环形复制的弊端_Docker+阿里云centos7+MySQL主从环形复制踩坑记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小爱同学100个奇葩回复_杰理新一代蓝牙
- 下一篇: 对java这门课程的认识_关于java课