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

通过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_file
    echo "password=$SRC_PASS" >> $pass_file
    chmod 600 $pass_file

    mysqldump --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/null

    rm -f $pass_file
}

progress_bar() {
    pv -N "$1" -pet -W --rate -i 5
}

# 断点续传逻辑
if [[ -f $DUMP_FILE && -f $SUCCESS_FLAG ]]; then
    echo "检测到已有导出文件,跳过导出直接导入..."
else
    echo "开始全量导出..."
    # 通过临时密码文件执行安全导出
    safe_mysql_cmd | progress_bar "导出进度" > $DUMP_FILE

    if [ ${PIPESTATUS[0]} -eq 0 ]; then
        touch $SUCCESS_FLAG
        echo "导出完成,文件大小: $(du -sh $DUMP_FILE | awk '{print $1}')"
    else
        echo "导出失败,请检查参数!"
        rm -f $DUMP_FILE
        exit 1
    fi
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-warnings

if [ $? -eq 0 ]; then
    rm -f $SUCCESS_FLAG $DUMP_FILE
    echo "同步成功!"
else
    echo "导入失败,请检查目标库权限!下次执行将自动续传"
    exit 1
fi

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/968005.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云消息队列 ApsaraMQ Serverless 演进:高弹性低成本、更稳定更安全、智能化免运维

如今&#xff0c;消息队列已成为分布式架构中不可或缺的关键服务&#xff0c;为电商、物联网、游戏和教育等行业&#xff0c;提供了异步解耦、集成、高性能和高可靠的核心价值。 过去一年&#xff0c;我们发布了云消息队列 ApsaraMQ 全系列产品 Serverless 化&#xff0c;面向…

Spring依赖注入方式

写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油&#xff0c;冲鸭&#x…

Mysql索引失效的场景

对索引列使用函数或表达式&#xff0c;或参与计算&#xff08;优化方法&#xff1a;将计算移到条件右侧&#xff1a;&#xff09;例 优化 对索引列进行隐式类型转换&#xff0c;条件中的数据类型与索引列的数据类型不匹配&#xff0c;会进行隐式类型转换 以like 通配符开头索…

CTFHub-RCE系列wp

目录标题 引言什么是RCE漏洞 eval执行文件包含文件包含php://input读取源代码远程包含 命令注入无过滤过滤cat过滤空格过滤目录分隔符过滤运算符综合过滤练习 引言 题目共有如下类型 什么是RCE漏洞 RCE漏洞&#xff0c;全称是Remote Code Execution漏洞&#xff0c;翻译成中文…

算法学习笔记之并查集

简介 问题描述&#xff1a;将编号为1-N的N个对象划分为不相交集合&#xff0c;在每个集合中&#xff0c;选择其中的某个元素代表所在集合。 常见两种操作&#xff1a; 1.合并两个集合 2.查找某元素属于哪个集合 实现方法1 用编号最小的元素标记所在集合&#xff1b; 定义…

渗透利器工具:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)

Burp Suite 联动 XRAY 图形化工具.&#xff08;主动扫描被动扫描&#xff09; Burp Suite 和 Xray 联合使用&#xff0c;能够将 Burp 的强大流量拦截与修改功能&#xff0c;与 Xray 的高效漏洞检测能力相结合&#xff0c;实现更全面、高效的网络安全测试&#xff0c;同时提升漏…

菌贝:云南鸡枞菌走向世界的第一品牌

云南&#xff0c;这片神奇的土地&#xff0c;孕育了无数珍稀的野生菌&#xff0c;而鸡枞菌无疑是其中的佼佼者。它以其独特的口感和丰富的营养价值&#xff0c;被誉为“菌中之王”。在云南鸡枞菌的品牌化进程中&#xff0c;菌贝以其卓越的品质和广泛的影响力&#xff0c;成为云…

如何恢复使用 Command+Option+Delete 删除的文件:完整指南

在日常使用 Mac 时&#xff0c;我们经常会使用 CommandOptionDelete 组合键来快速删除文件。这种删除方式会将文件直接移出废纸篓&#xff0c;而不会经过废纸篓的中间步骤&#xff0c;因此文件看似被永久删除。然而&#xff0c;即使文件被这样删除&#xff0c;仍然有几种方法可…

windows生成SSL的PFX格式证书

生成crt证书: 安装openssl winget install -e --id FireDaemon.OpenSSL 生成cert openssl req -x509 -newkey rsa:2048 -keyout private.key -out certificate.crt -days 365 -nodes -subj "/CN=localhost" 转换pfx openssl pkcs12 -export -out certificate.pfx…

用户认证综合实验

实验需求 需求一&#xff1a;根据下表&#xff0c;完成相关配置 需求二&#xff1a;配置DHCP协议&#xff0c;具体要求如下 需求三&#xff1a;防火墙安全区域配置 需求四&#xff1a;防火墙地址组信息 需求五&#xff1a;管理员 为 FW 配置一个配置管理员。要求管理员可以通…

5.7.2 进度管理

文章目录 进度管理Gantt图PERT图 进度管理 进度安排&#xff1a;通过将项目分解成多个活动&#xff0c;分析活动间的依赖关系&#xff0c;估算工作量&#xff0c;分配资源&#xff0c;制定活动时序。 Gantt图 Gantt图横坐标表示时间&#xff0c;纵坐标表示不同任务。使用一条条…

MQTT(Message Queuing Telemetry Transport)协议(二)

下面为你详细介绍如何基于 TCP 协议对 MQTT 进行封装&#xff0c;包括实现思路、代码示例及代码解释。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>…

b站——《【强化学习】一小时完全入门》学习笔记及代码(1-3 多臂老虎机)

问题陈述 我们有两个多臂老虎机&#xff08;Multi-Armed Bandit&#xff09;&#xff0c;分别称为左边的老虎机和右边的老虎机。每个老虎机的奖励服从不同的正态分布&#xff1a; 左边的老虎机&#xff1a;奖励服从均值为 500&#xff0c;标准差为 50 的正态分布&#xff0c;即…

Unity 接入Tripo 文生模型,图生模型

官方网站&#xff1a;https://www.tripo3d.ai/app/home自行注册账号并且登陆下载Unity插件&#xff1a;https://cdn-web.tripo3d.ai/plugin/tripo-unity.zip申请apikey&#xff1a; https://platform.tripo3d.ai/api-keys使用&#xff08;后续过程就按照第二步下载的插件里面的…

Arduino 第十一章:温度传感器

Arduino 第十一章&#xff1a;LM35 温度传感器 一、LM35 简介 LM35 是美国国家半导体公司&#xff08;现德州仪器&#xff09;生产的一款精密集成电路温度传感器。与基于热力学原理的传统温度传感器不同&#xff0c;LM35 能直接将温度转换为电压输出&#xff0c;且输出电压与…

【并发控制、更新、版本控制】.NET开源ORM框架 SqlSugar 系列

系列文章目录 &#x1f380;&#x1f380;&#x1f380; .NET开源 ORM 框架 SqlSugar 系列 &#x1f380;&#x1f380;&#x1f380; 文章目录 系列文章目录一、并发累计&#xff08;累加&#xff09;1.1 单条批量累计1.2 批量更新并且字段11.3 批量更新并且字段list中对应的…

5 分钟用满血 DeepSeek R1 搭建个人 AI 知识库(含本地部署)

最近很多朋友都在问&#xff1a;怎么本地部署 DeepSeek 搭建个人知识库。 老实说&#xff0c;如果你不是为了研究技术&#xff0c;或者确实需要保护涉密数据&#xff0c;我真不建议去折腾本地部署。 为什么呢&#xff1f; 目前 Ollama 从 1.5B 到 70B 都只是把 R1 的推理能力…

opc da 服务器数据 转 EtherCAT项目案例

目录 1 案例说明 2 VFBOX网关工作原理 3 应用条件 4 查看OPC DA服务器的相关参数 5 配置网关采集opc da数据 6 启动EtherCAT从站转发采集的数据 7 在服务器上运行仰科OPC DA采集软件 8 案例总结 1 案例说明 在OPC DA服务器上运行OPC DA client软件查看OPC DA服务器的相…

微信小程序地图开发总结-规划路线

在现代移动应用中&#xff0c;地图导航功能已成为必不可少的一部分。通过地图 API&#xff0c;我们可以轻松地在应用中集成位置服务和路径规划功能。本篇文章将带大家一起实现一个简单的路径导航功能&#xff0c;使用腾讯地图 API结合微信小程序&#xff0c;实现从当前位置到目…

【已解决】VSCode:“正在重新激活终端”

背景&#xff1a; 1、切换Python环境的时候有问题&#xff0c;然后一直显示“正在重新激活终端”。 2、此处电脑&#xff1a;MAC 解决方法&#xff1a; 打开命令面板&#xff08;按 CtrlShiftP 或 CmdShiftP&#xff09;。输入并选择 Python: Clear Cache and Reload Window…