linux中如何备份数据库文件

在Linux环境中,数据库备份是保障数据安全的核心操作,无论是应对硬件故障、软件崩溃还是人为误操作,完善的备份机制都能快速恢复数据,降低业务损失,不同数据库系统的备份方法存在差异,本文将详细介绍MySQL/MariaDB、PostgreSQL、MongoDB等主流数据库在Linux中的备份实践,包括工具使用、命令参数、备份策略及自动化方案。

linux中如何备份数据库文件

MySQL/MariaDB数据库备份

MySQL和MariaDB作为最常用的关系型数据库之一,支持多种备份方式,主要分为逻辑备份(导出SQL语句)和物理备份(直接复制数据文件)。

逻辑备份:mysqldump工具

mysqldump是官方提供的逻辑备份工具,可导出数据库结构(CREATE语句)和数据(INSERT语句),支持单表、单库或全库备份,且能在运行时加表锁(避免数据不一致),适合中小型数据库。

基础命令示例

  • 备份单个数据库(不包含创建数据库语句):
    mysqldump -u root -p --databases db_name > db_backup.sql
  • 备份所有数据库(包含创建数据库语句):
    mysqldump -u root -p --all-databases > all_db_backup.sql
  • 备份单表并压缩存储(节省空间):
    mysqldump -u root -p db_name table_name | gzip > table_backup.sql.gz

关键参数说明

  • --single-transaction:InnoDB引擎下不加锁备份(避免阻塞写操作,推荐生产环境使用);
  • --master-data=2:记录备份时的binlog位置(用于主从同步或时间点恢复);
  • --routines --triggers:备份存储过程和触发器;
  • --events:备份事件调度器事件;
  • --hex-blob:二进制字段(如blob、binary)以十六进制格式导出,避免乱码。

物理备份:Percona XtraBackup

对于大型InnoDB数据库,物理备份(直接复制ibdata1、ibd等文件)效率更高,且支持热备份(不锁表),Percona XtraBackup是开源物理备份工具,通过复制数据页和redo log实现一致性备份。

基础命令示例

  • 全量物理备份(输出到指定目录):
    innobackupex --user=root --password=your_password /backup/data
  • 备份完成后应用日志(确保数据一致性):
    innobackupex --apply-log /backup/data
  • 恢复数据(需先停止MySQL服务):
    service mysql stop
    innobackupex --copy-back /backup/data
    chown -R mysql:mysql /var/lib/mysql  # 修改权限
    service mysql start

自动化备份脚本

结合crontab可实现定时备份,例如每日凌晨2点备份数据库并保留7天:

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/mysql"
MYSQL_USER="root"
MYSQL_PASS="your_password"
# 备份数据库并压缩
mysqldump -u$MYSQL_USER -p$MYSQL_PASS --all-databases | gzip > $BACKUP_DIR/mysql_$DATE.sql.gz
# 删除7天前的备份
find $BACKUP_DIR -name "mysql_*.sql.gz" -mtime +7 -exec rm {} ;

将脚本保存为/usr/local/bin/mysql_backup.sh,并添加到crontab:

0 2 * * * /usr/local/bin/mysql_backup.sh

PostgreSQL数据库备份

PostgreSQL支持逻辑备份(pg_dump)、物理备份(pg_basebackup)及WAL(Write-Ahead Logging)归档备份,适合不同场景需求。

逻辑备份:pg_dump工具

pg_dump是PostgreSQL官方逻辑备份工具,支持自定义、目录、归档三种格式,其中自定义格式(-Fc)压缩率高且恢复灵活。

linux中如何备份数据库文件

基础命令示例

  • 备份单个数据库(自定义格式):
    pg_dump -U postgres -Fc -f db_backup.dump db_name
  • 备份所有数据库(需pg_dumpall):
    pg_dumpall -U postgres -f all_db_backup.sql
  • 备份表结构(不含数据):
    pg_dump -U postgres -s -f schema.sql db_name

关键参数说明

  • -F:指定输出格式(c=自定义,d=目录,t=纯文本);
  • -v:详细输出,便于调试;
  • -Z:压缩级别(0-9,默认6);
  • -j:并行备份(提升大库备份速度)。

物理备份:pg_basebackup

pg_basebackup用于流复制或主从架构的物理备份,直接复制数据目录,支持备份时运行(-R参数会自动生成recovery.conf)。

基础命令示例

  • 本地物理备份(无需停止服务):
    pg_basebackup -U postgres -D /backup/postgresql -Ft -z -P
  • 远程物理备份(通过流复制协议):
    pg_basebackup -h remote_host -U replication_user -D /backup/postgresql -Ft -z

WAL归档备份(时间点恢复)

PostgreSQL基于WAL实现事务日志记录,结合全量备份和WAL归档可恢复到任意时间点,配置步骤如下:

  • 修改postgresql.conf
    wal_level = replica
    archive_mode = on
    archive_command = 'cp %p /backup/wal/%f'
  • 重启PostgreSQL服务,WAL日志会自动归档到/backup/wal/目录。
  • 恢复时,先恢复全量备份,然后将WAL文件按顺序应用即可。

MongoDB数据库备份

MongoDB作为NoSQL数据库,支持逻辑备份(mongodump)和物理备份(文件系统复制),分片集群还需配合备份工具(如MongoDB Backup)。

逻辑备份:mongodump工具

mongodump是官方逻辑备份工具,支持全量备份和基于oplog的增量备份,可导出BSON格式数据。

基础命令示例

  • 全量备份(默认导出到dump目录):
    mongodump --host localhost --port 27017 --db db_name --out /backup/mongo
  • 备份并压缩:
    mongodump --db db_name --archive=mongo_backup.archive --gzip
  • 备份单个集合:
    mongodump --collection collection_name --db db_name

关键参数说明

  • --oplog:记录备份期间的oplog(用于增量备份);
  • --query:按条件备份(如--query '{status: "active"}');
  • --username/--password:认证用户备份。

物理备份:文件系统复制

对于独立MongoDB实例,可直接复制数据目录(/var/lib/mongo),但需先锁定数据库(避免写入):

linux中如何备份数据库文件

mongo --eval "db.fsyncLock()"  # 锁定数据库
cp -r /var/lib/mongo /backup/mongo_data
mongo --eval "db.fsyncUnlock()"  # 解锁数据库

注意:物理备份需确保MongoDB服务停止,或通过fsyncLock短暂锁定,否则可能导致数据不一致。

增量备份

通过oplog实现增量备份,需先开启oplog(默认大小5%磁盘空间):

# 备份全量数据并记录oplog时间点
mongodump --oplog --out /backup/mongo_full
# 后续增量备份(基于oplog时间戳)
mongodump --oplogReplay --db db_name --out /backup/mongo_incr

通用备份策略与最佳实践

不同数据库的备份工具和命令虽有差异,但通用策略可总结为以下几点:

备份类型组合

  • 全量备份+增量备份:全量备份周期较长(如每周),增量备份周期较短(如每天),减少存储空间和备份时间;
  • 全量备份+日志备份:如MySQL的binlog、PostgreSQL的WAL,可实现时间点恢复。

备份存储与安全

  • 异地存储:备份数据同步至远程服务器或云存储(如AWS S3、阿里云OSS),避免本地灾难;
  • 加密备份:使用openssl或工具自带加密功能(如mysqldump --aes-256-cbc),防止数据泄露;
  • 权限控制:备份文件设置严格权限(chmod 600),仅授权用户可访问。

备份验证与恢复测试

  • 定期验证:通过恢复备份文件检查数据完整性(如mysql -u root -p < db_backup.sql);
  • 恢复演练:模拟故障场景,测试恢复流程和时间,确保备份可用性。

不同数据库备份工具对比

数据库类型 工具名称 备份类型 适用场景 优点
MySQL/MariaDB mysqldump 逻辑备份 中小型数据库、结构迁移 兼容性好,可跨版本恢复
MySQL/MariaDB XtraBackup 物理备份 大型InnoDB数据库、热备份 不锁表,效率高
PostgreSQL pg_dump 逻辑备份 精准备份(表/索引) 支持多种输出格式,压缩率高
PostgreSQL pg_basebackup 物理备份 流复制、主从架构 直接复制数据文件,恢复快速
MongoDB mongodump 逻辑备份 NoSQL数据库、增量备份 支持oplog,灵活过滤集合
MongoDB 文件系统复制 物理备份 独立实例、快速备份 无需工具,直接复制数据目录

相关问答FAQs

Q1:如何设置MySQL自动定时备份并保留最近30天的备份?
A:可通过crontab结合mysqldump实现,首先编写备份脚本(如/usr/local/bin/mysql_auto_backup.sh):

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/mysql"
MYSQL_USER="root"
MYSQL_PASS="your_password"
RETENTION_DAYS=30
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行备份并压缩
mysqldump -u$MYSQL_USER -p$MYSQL_PASS --all-databases --single-transaction | gzip > $BACKUP_DIR/mysql_$DATE.sql.gz
# 删除30天前的备份
find $BACKUP_DIR -name "mysql_*.sql.gz" -mtime +$RETENTION_DAYS -exec rm {} ;

然后添加crontab任务(每天凌晨1点执行):

0 1 * * * /usr/local/bin/mysql_auto_backup.sh

最后赋予脚本执行权限:chmod +x /usr/local/bin/mysql_auto_backup.sh

Q2:PostgreSQL如何通过全量备份和WAL归档实现时间点恢复?
A:假设已配置WAL归档(archive_mode=on),恢复步骤如下:

  1. 停止PostgreSQL服务systemctl stop postgresql
  2. 替换数据目录:将备份的全量数据(如通过pg_basebackup获取)复制到数据目录(/var/lib/postgresql/data),并修改权限:chown -R postgres:postgres /var/lib/postgresql/data
  3. 创建恢复信号文件:在数据目录中创建recovery.signal文件(触发恢复模式);
  4. 配置恢复目标(可选):在postgresql.conf中设置recovery_target_time(如2023-10-01 12:00:00)恢复到指定时间点,或recovery_target = 'latest'恢复到最新可用状态;
  5. 启动服务systemctl start postgresql,PostgreSQL将自动应用WAL归档日志,直至达到恢复目标。

恢复完成后,recovery.signal会自动删除,数据库进入正常读写模式。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/22552.html

(0)
酷番叔酷番叔
上一篇 5小时前
下一篇 4小时前

相关推荐

  • linux安装2t硬盘如何分区

    分一个主分区用于系统和常用软件,剩余空间分多个逻辑分区用于存储数据、

    2025年8月17日
    900
  • linux如何删除gpt分区

    在Linux系统中删除GPT分区需要谨慎操作,因为分区删除会导致分区内的数据永久丢失,务必提前备份重要数据,以下是详细的操作步骤和注意事项,涵盖常用工具的使用方法,准备工作确认磁盘路径:首先需要确定要操作的目标磁盘,例如/dev/sdb、/dev/nvme0n1等,可通过lsblk或fdisk -l命令查看所有……

    2025年8月28日
    1100
  • linux在虚拟机中如何全屏

    虚拟机中,通常可通过安装虚拟机工具(如VMware Tools等),然后使用相应快捷键

    2025年8月18日
    1200
  • Linux系统如何使用mp4v2库?操作步骤与方法详解

    mp4v2库是一个广泛使用的开源C++库,专门用于处理MP4(MPEG-4 Part 14)格式的媒体文件,支持创建、修改、读取和解析MP4文件,包括添加/删除轨道、设置元数据(如标题、艺术家)、处理音视频轨道等功能,在Linux系统中,通过mp4v2库可以高效地实现MP4文件的底层操作,常用于媒体处理工具的开……

    2025年8月23日
    1600
  • Linux如何创建文本文件?常用方法有哪些?

    在Linux系统中,创建文本文件是最基础且高频的操作之一,无论是编写配置文件、Shell脚本,还是记录日志、存储数据,都离不开文本文件的创建,Linux提供了多种创建文本文件的方式,涵盖命令行工具和交互式编辑器,每种方法都有其适用场景和优缺点,本文将详细介绍这些方法,帮助用户根据实际需求选择最合适的操作方式,使……

    2025年8月26日
    1400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信