首页 游戏 软件 资讯 排行榜 专题
首页
数据库
如何分库分别导出为多个独立文件_多库备份环境的高级选项配置

如何分库分别导出为多个独立文件_多库备份环境的高级选项配置

热心网友
51
转载
2026-04-27

分库独立导出需为每个库单独调用 mysqldump 或 pg_dump:MySQL 用循环执行 mysqldump -B "$db" -r "${db}_$(date +%F).sql",PostgreSQL 用 psql -t -c "SELECT datname..." 动态获取库名并 pg_dump -d "$db" -f "${db// /\_}.sql",均需引号保护变量、避免覆盖、控制并发≤2、加 set -e 确保失败中断。

mysqldump 一次导出多个库时如何避免混在一个文件里

很多朋友习惯用 mysqldump --databases db1 db2 db3 来一次性备份多个库,结果发现所有数据都被塞进了一个巨大的 SQL 文件里,中间仅仅用 create databaseuse 语句隔开。这种做法在恢复时其实埋了不少坑:万一目标实例里已经存在同名库,或者当前连接用户的权限不足,整个恢复过程就可能卡在半路,进退两难。

所以,想要真正实现“分库独立文件”,没有捷径可走,必须让每个数据库都走一遍独立的 mysqldump 进程。这里有个常见的误解,以为加上 --result-file 参数就能分流,其实这个参数只控制单次命令的输出路径,对合并多个库的操作完全无效。

  • 正确的做法是借助 shell 循环,每次调用 mysqldump 时只传入一个库名。
  • 输出文件名必须包含库名变量,比如 db1_$(date +%F).sql,否则后一个库的备份会直接覆盖前一个,风险极高。
  • 建议加上 --skip-comments 选项,减少冗余注释,避免某些恢复工具误将注释里的 USE 语句当作命令来解析。
  • 如果库名包含中划线、下划线这类特殊字符,mysqldump 本身是支持的,但在 shell 脚本里引用变量时,务必记得加上双引号:"$db"

PostgreSQL pg_dump 分库导出不写死库名的脚本写法

pg_dump 工具本身没有提供一键导出所有非系统库的开关,它的 -d 参数一次只能接受一个数据库。于是有人把命令硬写成 pg_dump -d db1 -f db1.sql && pg_dump -d db2 -f db2.sql 这样一长串。看起来能跑通,可一旦数据库列表有变动,维护起来就成了噩梦。

更稳健的方式,是动态查询 pg_database 系统表,过滤掉模板库后再进行循环导出。这里有两个细节需要特别注意:一是必须排除 template0template1;二是连接参数(比如 -U-h)最好统一放在循环外部定义,别在每次循环里重复写,既啰嗦又容易出错。

  • 使用 psql -t -c "SELECT datname FROM pg_database WHERE datistemplate = false AND datname NOT IN ('postgres')" 来获取需要备份的库名列表。
  • 在循环体内,执行 pg_dump -U $USER -h $HOST -d "$db" -f "$db.sql",记住,$db 变量两端必须加上双引号。
  • 加上 --no-owner--no-privileges 选项是个好习惯,可以避免在恢复时因为目标环境用户不存在而报错。
  • 如果某个库特别大,导出很慢,可以尝试加上 --jobs=2 启用并行导出,但要注意,这只是针对单个库内部的并行,并非跨库并行。

备份脚本里怎么处理库名中的空格或连字符

MySQL 允许库名包含空格(创建时需要用反引号包裹),PostgreSQL 也允许使用连字符(创建时用双引号包裹)。但问题来了,在 shell 脚本里,如果直接把这些包含特殊字符的库名当作变量展开,命令执行往往会直接崩溃。典型的错误就像 mysqldump -B `dbname with space`,系统会报 Unknown database——这其实不是数据库不认识它,而是 shell 把空格当成了命令参数的分隔符,把库名给“切碎”了。

根本的解决方案不是去修改数据库里的库名,而是确保在命令执行时,变量值能被原封不动地传递过去。关键在于理解引号的嵌套和转义层级:外层用双引号保护变量不被 shell 解析,内层可能存在的反引号或双引号,则交给数据库客户端自己去处理。

  • MySQL 场景:使用 mysqldump -B "$db" -r "${db}_backup.sql"。即使 $db 的值本身包含反引号(比如 `my db`),这样写也能正确传递。
  • PostgreSQL 场景:使用 pg_dump -d "$db" -f "${db// /_}.sql"。这里用了一个小技巧 ${db// /_},把库名中的空格替换成下划线,主要是为了避免生成包含空格、可能引发问题的文件名。
  • 一个通用的好建议:所有输出文件路径都尽量使用绝对路径。如果使用相对路径,当脚本通过 cron 定时任务执行时,工作目录可能不是你预想的那一个,文件很容易被写到莫名其妙的地方去。

并发导出多个库时磁盘 I/O 和连接数的实际瓶颈

听起来很美好:用 & 符号在后台并发跑 5 个 mysqldump,备份速度岂不是能翻几倍?但现实往往很骨感,真正的瓶颈通常会卡在磁盘写入速度上,或者把数据库的连接池直接打满。尤其是在使用共享宿主机的云数据库服务时,默认的 max_connections 可能只有 151,5 个库同时 dump 就占去 5 个连接,如果业务本身连接数就高,还可能意外触发慢查询甚至导致锁表。

因此,一个更现实、更平衡的策略是:将并发数控制在 ≤ 2,并且配合压缩进行流式写入。千万别盲目相信“进程越多越快”,对于 I/O 密集型任务,过多的并发反而会因磁盘磁头频繁寻道而导致整体速度下降。

  • 对于 MySQL,强烈推荐在导出 InnoDB 表时加上 --single-transaction 参数。它通过开启一个一致性快照来获取数据,比 --lock-tables 那种锁表的方式对线上业务的影响要小得多。
  • 输出直接通过管道交给 gzip 压缩:mysqldump db1 | gzip > db1.sql.gz。这不仅能大幅节省磁盘空间,还能减少实际的磁盘写入量(写放大)。
  • 对于 PostgreSQL,可以考虑使用 -Fc(自定义格式)替代默认的纯 SQL 文本格式。这种格式体积更小、恢复更快,但缺点是必须使用 pg_restore 工具来读取。
  • 务必在脚本的开头加上 set -e 命令。这样,当任何一个 mysqldumppg_dump 命令执行失败时,整个脚本就会立即停止,防止后续的备份操作继续覆盖或写入不完整的文件。

还有一个极易被忽略的细节:时间戳的精度。如果在同一秒内启动多个 dump 进程,按照常规的 $(date +%F) 生成的文件名就会重复,导致文件被覆盖。哪怕只是毫秒级的冲突,也需要防范。可以采用 $(date +%F_%H-%M-%S-%N | cut -c1-17) 来截断纳秒部分,或者更简单地,在文件名中嵌入进程号 $$,从而彻底避免重名。

来源:https://www.php.cn/faq/2314580.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

你牛你来游戏官网下载地址与安装教程
游戏攻略
你牛你来游戏官网下载地址与安装教程

获取《你牛你来》安卓最新版,可通过九游门户站或APP实现。在九游网站或应用内搜索游戏名称,进入专区即可选择高速或普通下载。该方法便捷高效,能快速完成安装并提供相关攻略参考。

热心网友
05.27
Vidu制作蒲公英飘散广角效果详细教程
AI资讯
Vidu制作蒲公英飘散广角效果详细教程

在Vidu中实现蒲公英飘散效果,需优化提示词协同建模构图、气流与景深。可通过分层动态提示构建纵深,或采用两阶段生成与遮罩合成分别控制背景与粒子轨迹。新版本支持调整物理参数模拟真实飘散,也可上传参考图配合权重设置引导形态与方向。

热心网友
05.27
QoderWake异常报警设置教程:关键任务失败通知与人工介入指南
AI资讯
QoderWake异常报警设置教程:关键任务失败通知与人工介入指南

为QoderWake配置异常报警与人工介入机制,可保障关键任务失败时及时感知与干预。设置核心包括:定义权限红线触发条件并绑定通知渠道;启用执行前确认或执行后复核的人工介入策略;基于审计日志模式设置告警规则;最后通过沙箱模拟完整流程,验证从触发、通知到人工审批各环节的有效性。

热心网友
05.27
森林冰火人双人版官方正版下载安装指南
游戏攻略
森林冰火人双人版官方正版下载安装指南

获取《森林冰火人双人版》官方正版,请访问九游平台网站或APP,搜索游戏名称进入专区,选择高速或普通下载方式即可安全便捷安装。

热心网友
05.27
QoderWake快捷命令使用指南 别名功能简化复杂操作
AI资讯
QoderWake快捷命令使用指南 别名功能简化复杂操作

QoderWake可通过设置别名简化复杂命令。主要有三种方法:在Shell配置文件中定义永久别名;在软件配置目录创建可执行脚本并绑定;或直接使用其内置的图形化模板功能,通过界面设置快捷键绑定完整命令。

热心网友
05.27

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

AI数据挖掘核心技术解析与实战应用指南
AI教程
AI数据挖掘核心技术解析与实战应用指南

AI数据挖掘能从海量数据中提炼关键洞察。其核心技术包括:聚类分析将相似数据自动分组以发现模式;分类算法基于历史数据预测新数据类别;关联规则学习揭示数据项间的共生关系;回归分析则量化变量间影响并预测数值趋势。掌握这些方法对决策至关重要。

热心网友
05.27
成都启用全国首个机器人配送社区外卖无需进楼
业界动态
成都启用全国首个机器人配送社区外卖无需进楼

外卖配送的“最后100米”难题,在成都一处青年公寓社区找到了创新解决方案。全国首个实现配送机器人常态化运营的住宅区,近日于成都正式落地。 社区内的配送任务由10台名为“享递Ultra”的机器人承担,它们来自成都高新区的一家科技企业。自今年1月启动试运行以来,这些机器人已累计完成近3万单配送任务,平均

热心网友
05.27
Stable Diffusion图片信息本地解析教程 保护隐私安全提取提示词
AI教程
Stable Diffusion图片信息本地解析教程 保护隐私安全提取提示词

Stable Diffusion 法术解析工具:本地读取AI绘画生成信息的专业解决方案 在利用Stable Diffusion进行AI绘画创作或学习时,你是否常常面临这样的难题:遇到一张效果出色的SD作品,却无法获知其生成所用的具体“咒语”(Prompt)、模型参数等关键信息?同时,出于对作品版权和

热心网友
05.27
极限竞速地平线6正式发售 获2026年最高游戏评分
游戏资讯
极限竞速地平线6正式发售 获2026年最高游戏评分

赛车游戏爱好者们,重磅喜讯来袭!微软旗下王牌竞速系列最新力作《极限竞速:地平线6》现已全球正式发售,同步登陆PC与Xbox Series X|S平台,并首发即加入XGP游戏库。这款备受期待的开放世界赛车游戏,一经推出便交出了一份堪称完美的答卷。 权威游戏媒体IGN毫不吝啬地给出了满分评价,其评语写道

热心网友
05.27
MOCA币购买指南:安全买入流程与挂单卖出策略
web3.0
MOCA币购买指南:安全买入流程与挂单卖出策略

MocaNetwork作为新兴的Web3社交层项目,其代币MOCA的购买需要谨慎规划。本文梳理了从前期准备到买入、持有及卖出的完整流程,重点介绍了中心化交易所直接购买、通过跨链桥转移资产以及使用去中心化交易所挂单等几种主流方式,并分析了不同卖出策略的适用场景,旨在帮助参与者更稳健地操作。

热心网友
05.27