使用rsync建立MySQL从节点

ops/2024/10/20 5:02:19/

使用场景:MySQL主节点存储较大,使用xtrabackup会遇到异常的情况
前置条件:node-01 与 node-02 做过ssh互信,rsync客户端均已安装,主节点开启binlog
node-01 原主节点,数据存放目录为 /var/lib/mysql
node-02 新建从节点,数据存放目录为 /var/lib/mysql

一、数据复制

  1. node-01上运行使用rsync先传输一份数据副本(数据一致性不保证),用于rsync增量追平,选择非业务忙阶段
shell"># 保证 node-02 数据目录为空
export KBPS=5000 # 5MB/s
ssh node-02 "rm -rf /var/lib/mysql"
rsync -avP -e "ssh" /var/lib/mysql/  node-02:/var/lib/mysql  --bwlimit=${KBPS}
  1. 业务低峰运行,需要添加FTWRD实例级别读锁
shell"># 加锁
mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "flush tables with read lock;select sleep(28000)" &
# 去掉限速,尽快追平数据
rsync -avP -e "ssh" /var/lib/mysql/  node-02:/var/lib/mysql  --delete# 再运行,确认和上一次运行的输出一致则为获取到一致性数据
rsync -avP -e "ssh" /var/lib/mysql/  node-02:/var/lib/mysql  --delete# 获取 FTWRD 的 PID
FTWRD_PID=$(ps -aux |  grep mysql | grep flush | awk '{print $2}')kill  $FTWRD_PID

二、主库为传统模式

登录到node-02,通过binlog获取主节点的position值,当node-02节点上的数据是node-01上的镜像,所以在node-02解析出来的位点信息也是一样的

shell"># 获取最近的 binlog 文件名
ls mysql-bin.0* | sort -r | head -n 1# 获取最新的位点信息
mysqlbinlog --base64-output=decode-rows   mysql-bin.000970 > target.sql
grep "end_log_pos"  target.sql  | tail -n 1 >point.txt
cat point.txt

保证从节点的server-id 与主节点不一致

shell">sed -e "#s#server-id=1#server-id=13#g" /etc/my.cnf

删除当前的server的uuid 重启后自动生成新的

shell">rm -f /var/lib/mysql/auto.cnf

开启从MySQL实例,登录到从MySQL执行

CHANGE MASTER TO MASTER_HOST='node-01',	MASTER_PORT=3306, MASTER_USER='repl',MASTER_PASSWORD='xxxxx',MASTER_LOG_FILE='mysql-bin.000970',MASTER_LOG_POS={point.txt中的位点信息};start slave;
show slave status\G

三、主库开启了GTID

登录到node-02,保证从节点的server-id 与主节点不一致

shell">sed -e "#s#server-id=1#server-id=13#g" /etc/my.cnf

删除当前的server的uuid 重启后自动生成新的

shell">rm -f /var/lib/mysql/auto.cnf

开启从MySQL实例,登录到从MySQL执行

CHANGE MASTER TO MASTER_HOST='node-01',	MASTER_PORT=3306, MASTER_USER='repl',MASTER_PASSWORD='xxxxx',MASTER_LOG_POS=1;start slave;
show slave status\G

http://www.ppmy.cn/ops/5632.html

相关文章

kubebuilder(1)开发环境搭建

开发一个k8s operator,当然可以在官方原生的controller-runtime 项目上从头构建,但是比较复杂。现在一般基于operator脚手架进行开发。目前最流行的的脚手架是Kubebuilder 或 OperatorSDK。Kubebuilder 或 OperatorSDK都是对controller-runtime 项目进行了上层的封装…

【c++游戏】噩梦轮盘赌(俄罗斯转盘)

源代码 #include<bits/stdc.h> #include<time.h> #include<windows.h> using namespace std; // int hp3; int emhp3; // int b; int dantang[6]; int emhh; int shidan0; int kondan0; int zdzt0;int how; bool awa(){srand(time(NULL));if (shidan0){ret…

postman汉化

一、postman历史版本下载&#xff1a;Postman 10.24.16 Download for Windows / Old Versions / FileHorse.comhttps://www.filehorse.com/download-postman/old-versions/ 二、汉化包下载&#xff1a; Releases hlmd/Postman-cn GitHubPostman汉化中文版. Contribute to h…

数据结构——堆

目录 前言 一、堆的概念及结构 二、堆的实现 2.1 堆初始化 2.2 堆的销毁 2.3 交换数据 2.4 插入数据(插入到堆尾) 2.5 向上调整 2.6 堆的删除(删除堆顶元素) 2.7 向下调整 2.8 取堆顶 2.9 判空 完整代码 三、堆的创建 1.向上调整建堆 2.向下调整建堆 四、堆的…

Matlab|含sop的配电网重构(含风光|可多时段拓展)

目录 1 主要内容 2 部分程序 3 下载链接 1 主要内容 之前分享了很多配电网重构的程序&#xff0c;每个程序针对场景限定性比较大&#xff0c;程序初学者修改起来难度较大&#xff0c;本次分享一个基础程序&#xff0c;针对含sop的配电网重构模型&#xff0c;含风电和光伏&am…

部署轻量级Gitea替代GitLab进行版本控制(一)

Gitea 是一款使用 Golang 编写的可自运营的代码管理工具。 Gitea Official Website gitea: Gitea的首要目标是创建一个极易安装&#xff0c;运行非常快速&#xff0c;安装和使用体验良好的自建 Git 服务。我们采用Go作为后端语言&#xff0c;这使我们只要生成一个可执行程序即…

git切换源失败解决方案

git切换源失败解决方案 git切换源git切换源失败(无效) git切换源 git可以使用命令行切换源&#xff0c;一般使用的源有两个地址&#xff0c;git原生地址和淘宝镜像地址&#xff0c;部分公司会使用内部地址。 源切换后&#xff0c;npm i就是从源地址拉取相关依赖了。 原生地址…

2024上海国际半导体制造设备材料与核心部件展览会

2024上海国际半导体制造设备材料与核心部件展览会 2024 Shanghai International Semiconductor Manufacturing Equipment Materials and Core Components Exhibition 时间&#xff1a;2024年11月18日-20日 地点&#xff1a;上海新国际博览中心 详询主办方陆先生 I38&#…