【MySQL】通过shell脚本一键同步MySQL数据库结构和数据到指定库中

ops/2025/2/13 1:42:57/

通过shell脚本对数据库进行覆盖式备份/迁移,简单方便,适合需要快速同步某个库结构和数据到目标库的场景。

	通过AI调试了好些次得到能用的脚本,本文主要是做一个对该脚本的记录

| 安装依赖


# 安装进度条库
sudo apt install pv

注:如果脚本运行所在环境需要先安装mysql-client(安装mysql时自带),则需要先安装才能使用mysqldump命令

| 数据库全量同步脚本


将配置部分带<>的内容改为实际的数据库配置,内容保存为sync_data.sh,然后chmod +x sync_data.sh给予权限

#!/bin/bash# MySQL全量同步脚本
# 功能:同步源数据库的结构和数据到目标数据库(覆盖模式)# 配置源数据库信息
SRC_HOST="<ipaddress>"
SRC_PORT="<port>"     
SRC_USER="<username>"
SRC_PASS="<password>"
SRC_DB="<dbname>"# 配置目标数据库信息
DST_HOST="<ipaddress>"
DST_PORT="<port>"     
DST_USER="<username>"
DST_PASS="<password>"
DST_DB="<dbname>"DUMP_FILE="/tmp/mysql_dump.sql"
SUCCESS_FLAG="/tmp/dump_success.flag"# 清除密码命令行警告的安全封装函数
safe_mysql_cmd() {local pass_file=$(mktemp)echo "[client]" > $pass_fileecho "password=$SRC_PASS" >> $pass_filechmod 600 $pass_filemysqldump --defaults-extra-file=$pass_file \-h$SRC_HOST -P$SRC_PORT -u$SRC_USER \--ssl=0 \--single-transaction \--quick \--skip-add-locks \--no-tablespaces \--routines \--events \--triggers \--set-gtid-purged=OFF \--databases $SRC_DB 2>/dev/nullrm -f $pass_file
}progress_bar() {pv -N "$1" -pet -W --rate -i 5
}# 断点续传逻辑
if [[ -f $DUMP_FILE && -f $SUCCESS_FLAG ]]; thenecho "检测到已有导出文件,跳过导出直接导入..."
elseecho "开始全量导出..."# 通过临时密码文件执行安全导出safe_mysql_cmd | progress_bar "导出进度" > $DUMP_FILEif [ ${PIPESTATUS[0]} -eq 0 ]; thentouch $SUCCESS_FLAGecho "导出完成,文件大小: $(du -sh $DUMP_FILE | awk '{print $1}')"elseecho "导出失败,请检查参数!"rm -f $DUMP_FILEexit 1fi
fi# 数据导入
echo "开始全量导入..."
{echo "SET FOREIGN_KEY_CHECKS=0;"echo "DROP DATABASE IF EXISTS $DST_DB;"echo "CREATE DATABASE $DST_DB;"echo "USE $DST_DB;"cat $DUMP_FILE
} | progress_bar "导入进度" | mysql -h$DST_HOST -P$DST_PORT -u$DST_USER -p$DST_PASS \--ssl=0 \--max_allowed_packet=512M \--net_buffer_length=16K \--compress \--show-warningsif [ $? -eq 0 ]; thenrm -f $SUCCESS_FLAG $DUMP_FILEecho "同步成功!"
elseecho "导入失败,请检查目标库权限!下次执行将自动续传"exit 1
fi

运行./sync_data.sh,等待完成即可。


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

相关文章

【动态规划】风扫枯杨,满地堆黄叶 - 9. 完全背包问题

本篇博客给大家带来的是完全背包问题之动态规划解法技巧. &#x1f40e;文章专栏: 动态规划 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快乐顺…

React Hooks 与 Class 组件相比有何优势

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

PC端自动化测试实战教程-5-pywinauto 操作PC端应用程序窗口 - 下篇(详细教程)

1.简介 上一篇宏哥主要讲解和介绍了如何获取PC端应用程序窗口信息和如何连接窗口对其进行操作的常用的几种方法。今天宏哥接着讲解和分享一下窗口的基本操作&#xff1a;最大化、最小化、恢复正常、关闭窗口、获取窗口状态和获取窗口坐标。以及窗口的其他打开方法和选择方法。…

Django中select_related 的作用

Django中这句代码Dynamic.objects.select_related(song)是什么意思&#xff1f; 在 Django 中&#xff0c;这句代码&#xff1a; Dynamic.objects.select_related(song) 的作用是 在查询 Dynamic 模型的同时&#xff0c;预加载 song 关联的外键对象&#xff0c;从而减少数据…

Office/WPS接入DeepSeek等多个AI工具,开启办公新模式!

在现代职场中&#xff0c;Office办公套件已成为工作和学习的必备工具&#xff0c;其功能强大但复杂&#xff0c;熟练掌握需要系统的学习。为了简化操作&#xff0c;使每个人都能轻松使用各种功能&#xff0c;市场上涌现出各类办公插件。这些插件不仅提升了用户体验&#xff0c;…

chromium-mojo

https://chromium.googlesource.com/chromium/src//refs/heads/main/mojo/README.md 相关类&#xff1a;https://zhuanlan.zhihu.com/p/426069459 Core:https://source.chromium.org/chromium/chromium/src//main:mojo/core/README.md;bpv1;bpt0 embedder:https://source.chr…

基于JavaWeb的在线美食分享平台(源码+lw+部署文档+讲解),源码可白嫖!

摘要 本在线美食分享平台采用B/S架构&#xff0c;数据库是MySQL&#xff0c;网站的搭建与开发采用了先进的Java进行编写&#xff0c;使用了数据可视化技术、爬虫技术和Spring Boo框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。前台主要功能包括&…

基于Flask搭建AI应用,本地私有化部署开源大语言模型

一、概述 随着人工智能技术的飞速发展&#xff0c;越来越多的企业和开发者希望在本地环境中部署和使用大语言模型&#xff0c;以确保数据隐私和安全性。本文将介绍如何基于Flask框架搭建一个AI应用&#xff0c;并在本地私有化部署开源的大语言模型。 二、背景 大语言模型&…