1. 首页 > 国产数据库教程 > TDSQL教程 > 正文

tdsql教程FG033-TDSQL备份与恢复最佳实践

本文档介绍TDSQL数据库的备份与恢复最佳实践,包括备份策略制定、备份方法选择、恢复流程、备份监控和测试等方面。风哥教程参考TDSQL官方文档和生产环境经验,提供实用的备份与恢复操作步骤。

备份与恢复是数据库管理的重要组成部分,通过合理的备份策略和恢复流程,可以有效保护数据安全,学习交流加群风哥微信: itpux-com。

本文档将从基础概念、生产环境规划、实施方案、案例分析和经验总结等方面,全面介绍TDSQL备份与恢复的最佳实践方法。

目录大纲

Part01-基础概念与理论知识

1.1 备份与恢复基础概念

备份是指将数据库的数据和日志复制到安全的存储介质中,以便在数据丢失或损坏时进行恢复。恢复是指将备份的数据和日志还原到数据库中,使数据库恢复到备份时的状态。

备份与恢复的核心目标是确保数据的安全性和可用性,风哥提示:备份是数据库安全的最后一道防线,必须认真对待。

1.2 备份类型与特点

常见的备份类型包括:

  • 物理备份:直接复制数据库文件,速度快,恢复时间短
  • 逻辑备份:导出数据库对象和数据,灵活性高,可选择性恢复
  • 全量备份:备份所有数据,恢复时间短,备份时间长
  • 增量备份:备份自上次备份以来的变化数据,备份时间短,恢复时间长
  • 差异备份:备份自上次全量备份以来的变化数据,备份和恢复时间适中

1.3 恢复类型与流程

常见的恢复类型包括:

  • 完全恢复:恢复到备份完成时的状态
  • 点时间恢复:恢复到指定时间点的状态
  • 不完全恢复:恢复到某个事务点的状态

恢复流程包括:

  • 准备恢复环境
  • 选择合适的备份集
  • 执行恢复操作
  • 验证恢复结果
  • 应用日志(如果需要)
  • 测试数据库功能

Part02-生产环境规划与建议

2.1 备份策略制定

制定合理的备份策略是确保数据安全的关键,需要考虑以下因素:

  • 业务重要性:根据业务重要性确定备份频率和保留时间
  • 数据量:根据数据量大小选择合适的备份方法
  • 恢复时间目标(RTO):确定可接受的恢复时间
  • 恢复点目标(RPO):确定可接受的数据丢失量
  • 存储成本:平衡备份频率和存储成本

2.2 备份存储规划

备份存储规划需要考虑以下因素:

  • 存储介质:选择可靠的存储介质,如磁盘、磁带、云存储等
  • 存储位置:采用异地存储,防止本地灾难导致备份丢失
  • 存储容量:根据备份数据量和保留时间计算存储容量
  • 存储性能:确保备份和恢复操作的性能满足要求

# 检查备份存储空间

df -h /tdsql/backup

Filesystem Size Used Avail Use% Mounted on

/dev/sdb1 10T 2.5T 7.5T 25% /tdsql/backup

2.3 备份监控与告警

备份监控与告警可以及时发现备份失败等问题,确保备份的可靠性。

# 查看备份日志

tail -n 50 /tdsql/backup/backup.log

2026-04-09 12:00:00 INFO: Starting full backup

2026-04-09 12:05:00 INFO: Backup completed successfully

2026-04-09 12:05:00 INFO: Backup size: 100GB

2026-04-09 12:05:00 INFO: Backup file: /tdsql/backup/full_20260409.sql

Part03-生产环境项目实施方案

3.1 物理备份实施

物理备份是直接复制数据库文件,适用于大型数据库,速度快,恢复时间短。

# 使用xtrabackup进行物理备份

xtrabackup –backup –target-dir=/tdsql/backup/full_$(date +%Y%m%d) –user=fgedu –password=Fgedu123!

xtrabackup: recognized server arguments: –datadir=/tdsql/fgdata –server-id=1

xtrabackup: recognized client arguments: –backup –target-dir=/tdsql/backup/full_20260409 –user=fgedu –password=***

260409 12:00:00 version_check Connecting to MySQL server with DSN ‘dbi:mysql:;mysql_read_default_group=xtrabackup;mysql_socket=/tdsql/fgdata/mysql.sock’ as ‘fgedu’ (using password: YES).

260409 12:00:00 version_check Connected to MySQL server

260409 12:00:00 version_check Executing a version check against the server…

260409 12:00:00 version_check Done.

260409 12:00:01 xtrabackup: uses posix_fadvise().

260409 12:00:01 xtrabackup: cd to /tdsql/fgdata

260409 12:00:01 xtrabackup: open files limit requested 0, set to 1024

260409 12:00:01 xtrabackup: using the following InnoDB configuration for backup:

260409 12:00:01 xtrabackup: innodb_data_home_dir = .

260409 12:00:01 xtrabackup: innodb_data_file_path = ibdata1:12M:autoextend

260409 12:00:01 xtrabackup: innodb_log_group_home_dir = ./

260409 12:00:01 xtrabackup: innodb_log_files_in_group = 2

260409 12:00:01 xtrabackup: innodb_log_file_size = 50331648

260409 12:00:01 InnoDB: Using Linux native AIO

260409 12:00:01 InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M

260409 12:00:01 InnoDB: Completed initialization of buffer pool

260409 12:00:01 InnoDB: Starting crash recovery from checkpoint LSN=62693781

260409 12:00:01 InnoDB: Reading tablespace information from the .ibd files…

260409 12:00:01 InnoDB: Restoring possible half-written data pages from the doublewrite buffer…

260409 12:00:01 InnoDB: Doing recovery: scanned up to log sequence number 62693791

260409 12:00:01 InnoDB: Starting an apply batch of log records to the database…

260409 12:00:01 InnoDB: Apply batch completed

260409 12:00:01 InnoDB: Crash recovery completed.

260409 12:00:01 xtrabackup: The latest check point (for incremental): ‘62693791’

260409 12:00:01 xtrabackup: Stopping log copying thread.

260409 12:00:01 xtrabackup: Creating 10485760 bytes size chunk

260409 12:05:01 xtrabackup: Backup completed successfully

3.2 逻辑备份实施

逻辑备份是导出数据库对象和数据,适用于小型数据库,灵活性高,可选择性恢复。

# 使用mysqldump进行逻辑备份

mysqldump -u fgedu -p –single-transaction –master-data=2 –all-databases > /tdsql/backup/full_$(date +%Y%m%d).sql

Enter password:

# 备份过程中无输出,备份完成后会返回命令提示符

# 查看备份文件大小

ls -lh /tdsql/backup/full_20260409.sql

-rw-r–r– 1 root root 100G Apr 9 12:05 /tdsql/backup/full_20260409.sql

3.3 增量备份与差异备份

增量备份和差异备份可以减少备份时间和存储空间,适用于大型数据库。

# 使用xtrabackup进行增量备份

xtrabackup –backup –target-dir=/tdsql/backup/inc_$(date +%Y%m%d) –incremental-basedir=/tdsql/backup/full_20260409 –user=fgedu –password=Fgedu123!

xtrabackup: recognized server arguments: –datadir=/tdsql/fgdata –server-id=1

xtrabackup: recognized client arguments: –backup –target-dir=/tdsql/backup/inc_20260409 –incremental-basedir=/tdsql/backup/full_20260409 –user=fgedu –password=***

260409 14:00:00 version_check Connecting to MySQL server with DSN ‘dbi:mysql:;mysql_read_default_group=xtrabackup;mysql_socket=/tdsql/fgdata/mysql.sock’ as ‘fgedu’ (using password: YES).

260409 14:00:00 version_check Connected to MySQL server

260409 14:00:00 version_check Executing a version check against the server…

260409 14:00:00 version_check Done.

260409 14:00:01 xtrabackup: uses posix_fadvise().

260409 14:00:01 xtrabackup: cd to /tdsql/fgdata

260409 14:00:01 xtrabackup: open files limit requested 0, set to 1024

260409 14:00:01 xtrabackup: using the following InnoDB configuration for backup:

260409 14:00:01 xtrabackup: innodb_data_home_dir = .

260409 14:00:01 xtrabackup: innodb_data_file_path = ibdata1:12M:autoextend

260409 14:00:01 xtrabackup: innodb_log_group_home_dir = ./

260409 14:00:01 xtrabackup: innodb_log_files_in_group = 2

260409 14:00:01 xtrabackup: innodb_log_file_size = 50331648

260409 14:00:01 InnoDB: Using Linux native AIO

260409 14:00:01 InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M

260409 14:00:01 InnoDB: Completed initialization of buffer pool

260409 14:00:01 InnoDB: Starting crash recovery from checkpoint LSN=62693781

260409 14:00:01 InnoDB: Reading tablespace information from the .ibd files…

260409 14:00:01 InnoDB: Restoring possible half-written data pages from the doublewrite buffer…

260409 14:00:01 InnoDB: Doing recovery: scanned up to log sequence number 62693791

260409 14:00:01 InnoDB: Starting an apply batch of log records to the database…

260409 14:00:01 InnoDB: Apply batch completed

260409 14:00:01 InnoDB: Crash recovery completed.

260409 14:00:01 xtrabackup: The latest check point (for incremental): ‘62693791’

260409 14:00:01 xtrabackup: Stopping log copying thread.

260409 14:00:01 xtrabackup: Creating 10485760 bytes size chunk

260409 14:02:01 xtrabackup: Backup completed successfully

3.4 恢复操作实施

恢复操作是备份的逆过程,需要根据备份类型和恢复目标选择合适的恢复方法。

# 使用xtrabackup进行物理恢复

xtrabackup –prepare –target-dir=/tdsql/backup/full_20260409

systemctl stop mysqld

rm -rf /tdsql/fgdata/*

xtrabackup –copy-back –target-dir=/tdsql/backup/full_20260409

chown -R mysql:mysql /tdsql/fgdata

systemctl start mysqld

# 准备阶段输出

xtrabackup: recognized client arguments: –prepare –target-dir=/tdsql/backup/full_20260409

xtrabackup: preparing backup at /tdsql/backup/full_20260409

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

InnoDB: FTS optimize thread exiting.

InnoDB: Starting shutdown…

InnoDB: Shutdown completed; log sequence number 62693791

xtrabackup: completed OK!

# 复制阶段输出

xtrabackup: recognized client arguments: –copy-back –target-dir=/tdsql/backup/full_20260409

xtrabackup: copying ibdata1 to /tdsql/fgdata/ibdata1

xtrabackup: copying /tdsql/backup/full_20260409/fgedudb/fgedu_users.ibd to /tdsql/fgdata/fgedudb/fgedu_users.ibd

xtrabackup: copying /tdsql/backup/full_20260409/fgedudb/fgedu_orders.ibd to /tdsql/fgdata/fgedudb/fgedu_orders.ibd

xtrabackup: copying ib_logfile0 to /tdsql/fgdata/ib_logfile0

xtrabackup: copying ib_logfile1 to /tdsql/fgdata/ib_logfile1

xtrabackup: completed OK!

# 使用mysqldump进行逻辑恢复

mysql -u fgedu -p < /tdsql/backup/full_20260409.sql

Enter password:

# 恢复过程中无输出,恢复完成后会返回命令提示符

3.5 备份自动化脚本

自动化备份脚本可以定期执行备份操作,确保备份的及时性和可靠性。

# 创建备份脚本

cat > /tdsql/scripts/backup.sh << 'EOF' #!/bin/bash # backup.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn BACKUP_DIR="/tdsql/backup" DATE=$(date +%Y%m%d) LOG_FILE="$BACKUP_DIR/backup.log" # 创建备份目录 mkdir -p $BACKUP_DIR # 记录开始时间 echo "$(date '+%Y-%m-%d %H:%M:%S') INFO: Starting full backup" >> $LOG_FILE

# 执行备份
xtrabackup –backup –target-dir=”$BACKUP_DIR/full_$DATE” –user=fgedu –password=Fgedu123! >> $LOG_FILE 2>&1

# 检查备份结果
if [ $? -eq 0 ]; then
echo “$(date ‘+%Y-%m-%d %H:%M:%S’) INFO: Backup completed successfully” >> $LOG_FILE
echo “$(date ‘+%Y-%m-%d %H:%M:%S’) INFO: Backup size: $(du -h “$BACKUP_DIR/full_$DATE” | tail -n 1 | awk ‘{print $1}’)” >> $LOG_FILE
echo “$(date ‘+%Y-%m-%d %H:%M:%S’) INFO: Backup file: $BACKUP_DIR/full_$DATE” >> $LOG_FILE
else
echo “$(date ‘+%Y-%m-%d %H:%M:%S’) ERROR: Backup failed” >> $LOG_FILE
exit 1
fi

# 删除7天前的备份
find $BACKUP_DIR -name “full_*” -type d -mtime +7 -exec rm -rf {} \;
echo “$(date ‘+%Y-%m-%d %H:%M:%S’) INFO: Cleaned up old backups” >> $LOG_FILE
EOF

chmod +x /tdsql/scripts/backup.sh

# 脚本创建成功,无输出

# 添加定时任务

crontab -e

# 添加以下行(每天凌晨2点执行备份)

0 2 * * * /tdsql/scripts/backup.sh

# 定时任务添加成功,无输出

Part04-生产案例与实战讲解

4.1 全量备份与恢复案例

某企业每天执行一次全量备份,确保数据安全:

  • 使用xtrabackup进行物理全量备份
  • 备份文件存储在异地存储服务器
  • 保留7天的备份文件
  • 定期测试恢复流程,确保备份可用

# 测试恢复流程

mkdir -p /tdsql/test_restore
xtrabackup –prepare –target-dir=/tdsql/backup/full_20260409
xtrabackup –copy-back –target-dir=/tdsql/backup/full_20260409 –datadir=/tdsql/test_restore
chown -R mysql:mysql /tdsql/test_restore

# 恢复测试成功,无错误输出

4.2 增量备份与恢复案例

某大型企业采用全量+增量备份策略,减少备份时间和存储空间:

  • 每周日执行全量备份
  • 周一至周六执行增量备份
  • 使用xtrabackup进行物理备份
  • 备份文件存储在云存储中

# 恢复全量+增量备份

xtrabackup –prepare –target-dir=/tdsql/backup/full_20260407
xtrabackup –prepare –target-dir=/tdsql/backup/full_20260407 –incremental-dir=/tdsql/backup/inc_20260408
xtrabackup –prepare –target-dir=/tdsql/backup/full_20260407 –incremental-dir=/tdsql/backup/inc_20260409

# 准备阶段输出

xtrabackup: recognized client arguments: –prepare –target-dir=/tdsql/backup/full_20260407

xtrabackup: preparing backup at /tdsql/backup/full_20260407

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

InnoDB: FTS optimize thread exiting.

InnoDB: Starting shutdown…

InnoDB: Shutdown completed; log sequence number 62693791

xtrabackup: completed OK!

xtrabackup: recognized client arguments: –prepare –target-dir=/tdsql/backup/full_20260407 –incremental-dir=/tdsql/backup/inc_20260408

xtrabackup: preparing backup at /tdsql/backup/full_20260407

xtrabackup: applying incremental backup with LSN=62693791 to LSN=62694000

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

InnoDB: FTS optimize thread exiting.

InnoDB: Starting shutdown…

InnoDB: Shutdown completed; log sequence number 62694000

xtrabackup: completed OK!

xtrabackup: recognized client arguments: –prepare –target-dir=/tdsql/backup/full_20260407 –incremental-dir=/tdsql/backup/inc_20260409

xtrabackup: preparing backup at /tdsql/backup/full_20260407

xtrabackup: applying incremental backup with LSN=62694000 to LSN=62694500

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

InnoDB: FTS optimize thread exiting.

InnoDB: Starting shutdown…

InnoDB: Shutdown completed; log sequence number 62694500

xtrabackup: completed OK!

4.3 点时间恢复案例

某金融企业需要能够恢复到指定时间点,以应对数据错误:

  • 开启二进制日志
  • 定期执行全量备份
  • 使用二进制日志进行点时间恢复
  • 定期测试点时间恢复流程

# 查看二进制日志位置

mysql -u fgedu -p -e “SHOW MASTER STATUS;”

Enter password:

+——————+———-+————–+——————+——————-+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+——————+———-+————–+——————+——————-+

| binlog.000001 | 123456 | | | |

+——————+———-+————–+——————+——————-+

# 执行点时间恢复

mysqlbinlog –start-position=123456 –stop-datetime=”2026-04-09 10:00:00″ /tdsql/fgdata/binlog.000001 | mysql -u fgedu -p

Enter password:

# 恢复过程中无输出,恢复完成后会返回命令提示符

Part05-风哥经验总结与分享

5.1 备份与恢复最佳实践

  • 制定合理的备份策略,根据业务需求确定备份频率和保留时间
  • 使用多种备份方式,如物理备份和逻辑备份相结合
  • 采用增量备份或差异备份,减少备份时间和存储空间
  • 备份文件存储在异地,防止本地灾难导致备份丢失
  • 定期测试恢复流程,确保备份可用
  • 开启二进制日志,支持点时间恢复
  • 使用自动化脚本执行备份操作,确保备份的及时性和可靠性
  • 监控备份过程,及时发现和解决备份失败等问题

5.2 常见备份问题与解决方案

问题 原因 解决方案
备份失败 权限不足、存储空间不足、网络故障 检查权限、增加存储空间、修复网络故障
备份时间过长 数据量过大、服务器性能不足 采用增量备份、优化服务器性能、使用更快的存储介质
恢复时间过长 数据量过大、存储性能不足 使用物理备份、优化存储性能、提前规划恢复时间
备份文件损坏 存储介质故障、网络传输错误 定期检查备份文件完整性、使用校验和验证、采用冗余存储
点时间恢复失败 二进制日志丢失、备份文件不完整 确保二进制日志的安全存储、定期测试点时间恢复

5.3 备份工具与资源

  • 物理备份工具: xtrabackup (MySQL), pg_basebackup (PostgreSQL)
  • 逻辑备份工具: mysqldump (MySQL), pg_dump (PostgreSQL)
  • 备份管理工具: Percona XtraBackup, Barman
  • 云存储服务: AWS S3, Azure Blob Storage, OBS
  • 监控工具: Prometheus + Grafana, Zabbix
  • 官方资源: TDSQL官方文档、MySQL/PostgreSQL备份指南

更多视频教程www.fgedu.net.cn,学习交流加群风哥QQ113257174。

风哥提示:备份是数据库安全的最后一道防线,必须定期执行并测试恢复流程。

更多学习教程公众号风哥教程itpux_com

from tdsql视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息