如何在Linux上备份和还原数据库

来源:开发教程作者:风铃头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何在Linux上备份和还原数据库》,敬请观看详情。凌晨三点生产库误删了订单表,没有可用备份就只能通宵手工补数据。Linux环境下数据库备份与还原的核心在于选对工具与定时策略。以MySQL为例,逻辑备份用mysqldump生成SQL文本,物理备份可用Percona XtraBackup拷贝数据文件。还原时先确认数据库实例状态,再导入备份文件或恢复数据目录。掌握权限配置、压缩传输与校验手段,才能避免在故障切换时手忙脚乱。本文梳理常用命令与典型脚本,帮你建立可靠的库级保护方案。

在Linux服务器上管理业务系统,数据库往往是最核心的资产。一旦遭遇误删表、磁盘损坏或勒索攻击,能否快速还原直接决定业务停摆时间。不同数据库引擎在Linux下的备份机制有所区别,但总体思路都是把数据一致性状态固化为可迁移的文件,并在需要时重新加载。

如何在Linux上备份和还原数据库

一、备份前的环境准备

动手备份之前,先确认数据库类型与版本。以最常见的MySQL和PostgreSQL为例,它们各自带有官方命令行工具,不需要额外安装复杂组件。在Linux终端中用以下命令可快速查看MySQL版本:

mysql -V
psql --version

同时要保证执行备份的Linux用户具备对应库的读权限。对于MySQL,通常创建一个专用备份账号并授予SELECT与LOCK TABLES权限,避免直接用root操作带来的安全风险。PostgreSQL则可以把备份用户加入pg_read_all_data角色。

另外,备份文件存放路径要有足够磁盘空间。建议使用独立的挂载盘或网络存储,防止系统盘满导致备份中断。可以用df -h命令观察各分区使用率,提前规划容量。

二、MySQL逻辑备份与还原

2.1 使用mysqldump备份

mysqldump是最基础的逻辑备份工具,它将库表结构及数据导出为SQL文本。单库备份命令如下,其中-u后接用户名,-p表示交互式输入密码:

mysqldump -u backup_user -p mydb > /backup/mydb_$(date +%F).sql

如果数据库较大,可以加上--single-transaction参数,利用InnoDB快照保证一致性而不锁表。对于含存储过程或触发器的库,应补充--routines与--triggers选项。导出后建议用gzip压缩,节省空间:

mysqldump -u backup_user -p --single-transaction mydb | gzip > /backup/mydb_$(date +%F).sql.gz

逻辑备份的优点是跨版本兼容性好,文本可审计;缺点是恢复慢,数据量上亿行时导入耗时明显。因此日常全量配合增量binlog是常见组合。

2.2 还原MySQL备份

还原时先确保目标实例已启动且库存在。如果是压缩文件,先解压再导入:

gunzip < /backup/mydb_2023-01-01.sql.gz | mysql -u root -p mydb

若需整实例恢复且原库已不存在,可先创建空库再导入。导入过程会重建表与写入数据,大文件建议用screen或nohup防止终端断开。还原后执行CHECK TABLE或业务校验脚本确认行数一致。

当误删发生在线时,还应结合mysqlbinlog工具回放误操作之后的正常事务,实现点到点恢复。这就要求日常开启log_bin并定期备份二进制日志。

三、PostgreSQL备份与还原

3.1 pg_dump与pg_dumpall

PostgreSQL提供pg_dump做单库导出,pg_dumpall导出全部库与全局对象。基础用法:

pg_dump -U backup_user -F c -b -v mydb -f /backup/mydb.dump

上面-F c表示自定义压缩格式,-b包含大对象。这种格式只能用pg_restore还原,支持选择性恢复表。若用纯文本格式(-F p),则可直接用psql执行。

相比MySQL的SQL文本,自定义格式在体积与恢复灵活性上更优,但可读性差。运维中常根据审计需求选择格式,核心交易库多用自定义格式加每日调度。

3.2 还原操作

使用pg_restore还原到新建库:

createdb -U postgres newdb
pg_restore -U postgres -d newdb /backup/mydb.dump

如果目标库已含部分对象,可加--clean先清除再导入。还原完毕后用ANALYZE更新统计信息,保障查询计划准确。PostgreSQL还支持从基础备份加WAL归档做PITR,适合金融级场景。

物理备份方面,可借助pg_basebackup生成数据目录副本,配合归档命令实现热备。但逻辑备份仍是开发测试环境最常用的轻量手段。

四、自动化与校验策略

4.1 利用cron定时备份

在Linux上写备份脚本并用crontab调度,能免去人工遗忘。示例脚本片段:

#!/bin/bash
DATE=$(date +%F)
mysqldump -u backup_user -p$PASS --single-transaction mydb | gzip > /backup/mydb_$DATE.sql.gz
# 保留最近七天
find /backup -name "mydb_*.sql.gz" -mtime +7 -delete

将脚本存为/opt/backup.sh,赋予执行权限,然后在crontab -e中加入:

0 2 * * * /opt/backup.sh >> /var/log/backup.log 2>&1

这样每天凌晨两点自动备份。注意密码明文写在脚本中有泄露风险,更好做法是使用配置文件或环境变量限定权限为600。

4.2 备份校验不可省

备份不等于能恢复。许多团队直到出事才发现文件损坏。可定期在备用机做还原演练,或用sha256sum记录校验值:

sha256sum /backup/mydb_*.sql.gz > /backup/checksum.txt

还原演练建议每季度一次,把备份恢复到隔离实例,跑核心查询比对。只有经过验证的备份,才会在真正故障时节省决策时间。

此外,将备份同步到异地或对象存储,能抵御机房级灾难。Linux下可用rsync推送到备机,或借助s3cmd传至兼容S3的存储。

五、常见误区与注意事项

一个典型误区是认为复制数据目录就是备份。对于正在写入的MySQL,直接cp数据文件极易导致页断裂不一致,必须用专业工具或停库。另一个误区是备份频率过低,靠单份周备应对日活业务,一旦周三故障就丢两天单。

权限方面,备份文件本身应包含敏感信息,Linux下需设置chmod 600并归属专用用户。还原到生产前,务必在测试库验证脚本兼容性,避免字符集不同引发乱码。掌握这些细节,Linux上的数据库备份还原才能从纸上流程变成可靠防线。

Linux数据库备份数据库还原修改时间:2026-08-04 02:18:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。