日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql环形复制的弊端_Docker+阿里云centos7+MySQL主从环形复制踩坑记

發(fā)布時(shí)間:2024/9/27 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql环形复制的弊端_Docker+阿里云centos7+MySQL主从环形复制踩坑记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

老規(guī)矩,先列坑

slave鏈接master的時(shí)候,一直提示2003錯(cuò)誤

修改了iptables后,docker 下的容器無(wú)法正常使用

配置正確后,創(chuàng)建新的db部分機(jī)器沒(méi)有同步

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,并且運(yùn)行

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 開(kāi)放3306端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd --reload

提一嘴,這里有個(gè)坑

2.3 在本地創(chuàng)建mysql配置文件路徑

mkdir -p /usr/local/mysql/master

mkdir -p /usr/local/mysql/slave1

2.4 把docker下的配置文件復(fù)制到本地

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 再把文件復(fù)制到docker下

docker cp /usr/local/mysql/master/my.cnf master:/etc/mysql/my.cnf

docker restart master

2.7 通過(guò) Navicat 等工具,鏈接mysql-master,并且創(chuàng)建slave用戶

修改mysql賬號(hào)密碼也可以直接通過(guò)navicat進(jìn)行操作,docker下直接修改root密碼我還沒(méi)找到命令,有知道的可以留言回復(fù)告訴我一下~

GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by 'backup';

show grants for 'backup'@'%';

2.8 創(chuàng)建slave環(huán)境,和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

通過(guò)navicat鏈接到slave1后,執(zhí)行:

CHANGE MASTER TO

MASTER_HOST='ip',

MASTER_PORT=3306,

MASTER_USER='backup',

MASTER_PASSWORD='backup';

START SLAVE;

到這里,按照我的步驟的話,都應(yīng)該是正確的。

3. 排坑

3.1 防火墻

老生常談防火墻~,在查看slave的狀態(tài)是,發(fā)現(xiàn) Slave_IO_State 的狀態(tài)一直是connecting而Slave_IO_Running一直是connecting,后面通過(guò)把服務(wù)器的防火墻關(guān)閉后,就可以了。

/bin/systemctl stop iptables.service

3.2 關(guān)于修改了iptables后,無(wú)法使用docker,重啟master服務(wù)會(huì)提示:

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

這需要我們對(duì)docker進(jìn)行重啟,重啟后的docker服務(wù)會(huì)向iptables注冊(cè)一個(gè)鏈,以便讓docker服務(wù)管理的containner所暴露的端口之間進(jìn)行通信

systemctl restart docker.service

docker restart master

docker restart slave1

3.3 部分沒(méi)有同步問(wèn)題

這里需要重新清空二進(jìn)制日志

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

這里需要分析邏輯和主從關(guān)系,看一下同步到哪一個(gè)庫(kù)就斷了,然后執(zhí)行reset slave

stop slave;

reset slave;

start slave;

3.5 清空舊的復(fù)制信息

reset slave all;

我們使用reset slave后不會(huì)清空復(fù)制信息的master host, master port, master user, or master password等

4. 延伸

4.1 延伸之 reset master 和reset slave的區(qū)別

reset master 是用來(lái)清空二進(jìn)制日志中所有的文件,使bin-log從000001開(kāi)始,而reset slave是用來(lái)清空主從的pos位置關(guān)系

reset master一般用于初始化安裝主從的時(shí)候使用

總結(jié)

以上是生活随笔為你收集整理的mysql环形复制的弊端_Docker+阿里云centos7+MySQL主从环形复制踩坑记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。