MySQL数据库全量备份与恢复实战指南:从入门到精通
-
- MySQL备份与还原简要指令(Windows、Linux、Docker):
- 一、为什么数据库备份如此重要?
- 二、MySQL备份类型全解析
-
- [1. 物理备份 vs 逻辑备份](#1. 物理备份 vs 逻辑备份)
- [2. 全量、增量与差异备份](#2. 全量、增量与差异备份)
- 三、手把手教你进行MySQL全量备份
-
- [1. 使用mysqldump进行逻辑备份(推荐)](#1. 使用mysqldump进行逻辑备份(推荐))
- [2. 使用Percona XtraBackup进行物理热备份](#2. 使用Percona XtraBackup进行物理热备份)
- 四、数据恢复实战:当灾难发生时
-
- [1. 从mysqldump备份恢复(推荐)](#1. 从mysqldump备份恢复(推荐))
- [2. 从XtraBackup备份恢复](#2. 从XtraBackup备份恢复)
- [3. 时间点恢复(PITR)](#3. 时间点恢复(PITR))
- 五、备份策略与自动化(进阶)
-
- [1. 使用cron定时自动备份](#1. 使用cron定时自动备份)
- [2. 增量备份策略](#2. 增量备份策略)
- [3. 备份验证与监控](#3. 备份验证与监控)
- 六、Docker环境下的MySQL备份与恢复实战
-
- [1. Docker中MySQL数据管理的核心:持久化存储](#1. Docker中MySQL数据管理的核心:持久化存储)
- [2. Docker环境备份实战:两种主要方法](#2. Docker环境备份实战:两种主要方法)
- [3. Docker环境恢复实战](#3. Docker环境恢复实战)
- [4. 自动化备份脚本(.sh脚本文件)](#4. 自动化备份脚本(.sh脚本文件))
- [5. Docker Compose环境下的备份策略](#5. Docker Compose环境下的备份策略)
- [6. 关键注意事项与排错指南](#6. 关键注意事项与排错指南)
- 写在最后
数据库备份就像给数据买保险,平时可能感觉不到它的存在,但一旦发生意外,它就是救命稻草。根据统计,超过60%的数据丢失是由于人为操作失误导致的,而可靠的备份策略可以避免99%的数据灾难。
本文将带你全面掌握MySQL数据库备份与恢复的核心技能,无论你是刚入行的开发者还是需要维护生产环境的DBA,这里都有你需要知道的一切。
MySQL备份与还原简要指令(Windows、Linux、Docker):
| 环境 | 备份指令 | 还原指令 | 关键注意事项 |
|---|---|---|---|
| Windows版 | mysqldump -u root -p --all-databases --single-transaction --routines --triggers > C:\backup\full_backup.sql |
mysql -u root -p < C:\backup\full_backup.sql |
1. 需提前创建C:\backup目录 2. 建议在PowerShell或命令提示符中执行 |
| Linux版 | mysqldump -u root -p --all-databases --single-transaction --routines --triggers > /home/full_backup_$(date +\%Y\%m\%d).sql |
mysql -u root -p < /home/full_backup.sql |
1. 确保有/home目录写权限 2. --single-transaction 保证InnoDB表一致性 |
| Docker版 | docker exec <容器名或ID> mysqldump -u root -p密码 --all-databases --single-transaction --routines --triggers > /宿主机路径/backup_$(date +\%Y\%m\%d).sql |
docker exec -i <容器名或ID> mysql -u root -p密码 < /宿主机路径/backup.sql |
1. 输出路径必须是宿主机路径,不是容器内路径 2. -i 参数保持STDIN打开以接收管道数据 |
一、为什么数据库备份如此重要?
想象一下这样的场景:凌晨三点,你的手机突然响起,线上核心业务数据库遭到误删除,如果不立即恢复,每小时公司将损失数十万元。这时,一个可靠的备份就是你的"后悔药"。
数据丢失的原因多种多样:程序错误、人为操作失误、磁盘故障甚至自然灾害都可能让你的数据瞬间消失。而备份的主要目的就是灾难恢复,确保在最坏的情况下,业务能够快速回到正轨。
二、MySQL备份类型全解析
选择正确的备份方式是制定备份策略的第一步。MySQL备份主要分为两大类,各有优缺点,适用于不同场景。
1. 物理备份 vs 逻辑备份
物理备份相当于给数据库文件系统拍一张完整的"照片",包含数据目录和文件的原始副本。这种方法速度快,恢复简单,适合数据量大、恢复时间要求高的生产环境。
bash
# 物理冷备份示例(需停止MySQL服务)
systemctl stop mysqld
tar Jcf /backup/mysql_all_$(date +%F).tar.xz /var/lib/mysql/data
systemctl start mysqld
逻辑备份则是将数据库结构和内容转换为SQL语句或文本格式。这种方式灵活性高,可移植性强,适合数据量不大、需要跨版本迁移的场景。
bash
# 逻辑备份示例(使用mysqldump)
mysqldump -u root -p --all-databases > /backup/full_backup.sql
简单来说,物理备份像是复制整个房子,而逻辑备份则是按照设计图纸和物品清单重建房子。
2. 全量、增量与差异备份
这三种备份策略在资源占用和恢复复杂度上各有侧重:
| 备份类型 | 备份内容 | 备份速度 | 恢复复杂度 | 存储占用 | 适用场景 |
|---|---|---|---|---|---|
| 全量备份 | 所有数据 | 慢 | 低 | 高 | 定期完整保护(如每周一次) |
| 增量备份 | 上次备份后变化的数据 | 快 | 高 | 低 | 频繁备份,节省资源 |
| 差异备份 | 上次全量备份后变化的所有数据 | 中等 | 中等 | 中等 | 平衡备份与恢复效率 |
对于大多数生产环境,我推荐采用 "全量+增量"混合策略:每周日进行全量备份,每天凌晨进行增量备份。这样既节省存储空间,又能保证在需要时能够恢复到任意时间点。
三、手把手教你进行MySQL全量备份
理论讲完了,现在让我们动手实操。我将介绍两种最常用的全量备份方法,你可以根据实际情况选择。
1. 使用mysqldump进行逻辑备份(推荐)
mysqldump是MySQL官方自带的备份工具,也是最常用、最灵活的备份方式。
备份整个MySQL服务器(所有数据库):
bash
mysqldump -u root -p --all-databases --single-transaction --routines --triggers > /backup/full_backup_$(date +\%Y\%m\%d).sql
重要参数解释:
| 参数 | 缩写 | 含义 |
|---|---|---|
| --all-databases | -A | 导出全部数据库 |
| --no-data | -d | 不导出任何数据,只导出数据库表结构 |
| --add-drop-database | 每个数据库创建之前添加drop数据库语句 | |
| --add-drop-table | 每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项) | |
| --default-character-set | 设置默认字符集,默认值为utf8 | |
| --flush-privileges | 在导出mysql数据库之后,发出一条FLUSH PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候 | |
| --force | 在导出过程中忽略出现的SQL错误 | |
| --host | -h | 需要导出的主机信息,如-ht=localhost |
| --ignore-table | 不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ...... | |
| --no-create-db | -n | 只导出数据,而不添加CREATE DATABASE 语句 |
| --no-create-info | -t | 只导出数据,而不添加CREATE TABLE 语句。 |
| --triggers | 导出触发器。该选项默认启用,用--skip-triggers禁用它。 | |
| --single-transaction | 该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。 | |
| --quick | -q | 不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项 |
| --routines | -R | 导出存储过程以及自定义函数 |
| --add-locks | 在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项) | |
| --opt | 等同于--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 该选项默认开启, 可以用--skip-opt禁用 | |
| --lock-all-tables | -x | 提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项 |
备份单个或多个特定数据库:
bash
# 备份单个数据库
mysqldump -u root -p --databases mydb > /backup/mydb_backup.sql
# 备份多个数据库
mysqldump -u root -p --databases db1 db2 db3 > /backup/multi_db_backup.sql
小技巧:如果数据库很大,可以边备份边压缩,节省磁盘空间:
bash
mysqldump -u root -p --all-databases | gzip > /backup/full_backup_$(date +\%Y\%m\%d).sql.gz
2. 使用Percona XtraBackup进行物理热备份
对于数据量很大(几十GB以上)的生产数据库,mysqldump可能会太慢。这时,Percona XtraBackup是更好的选择。它可以在不停止MySQL服务的情况下进行物理备份,特别适合需要高可用的生产环境。
安装XtraBackup(以Ubuntu/Debian为例):
bash
sudo apt-get update
sudo apt-get install percona-xtrabackup-80
执行全量备份:
bash
# 创建备份目录
mkdir -p /backup/xtrabackup/full
# 执行备份
xtrabackup --backup --user=root --password=your_password --target-dir=/backup/xtrabackup/full/$(date +\%Y\%m\%d_\%H\%M\%S)
# 准备备份(使备份文件可用于恢复)
xtrabackup --prepare --target-dir=/backup/xtrabackup/full/latest_backup
XtraBackup的核心优势是它的"热备份"能力------在备份期间几乎不影响数据库的正常读写操作。这对于7×24小时运行的业务系统来说至关重要。
四、数据恢复实战:当灾难发生时
备份做得再好,如果恢复不了也是白费。下面我详细介绍从不同备份中恢复数据的方法。
1. 从mysqldump备份恢复(推荐)
这是最简单的恢复方式,适合中小型数据库:
bash
# 恢复整个MySQL服务器
mysql -u root -p < /backup/full_backup.sql
# 恢复单个数据库(需要先创建数据库)
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS mydb;"
mysql -u root -p mydb < /backup/mydb_backup.sql
如果备份文件是压缩的:
bash
gunzip < /backup/full_backup.sql.gz | mysql -u root -p
重要提醒 :在恢复生产数据库前,一定要先在测试环境验证备份文件的完整性和可恢复性!我见过太多人以为自己有备份,真正需要时却发现备份文件损坏或无法恢复。
2. 从XtraBackup备份恢复
从物理备份恢复稍微复杂一些,但速度比逻辑恢复快得多:
bash
# 停止MySQL服务
sudo systemctl stop mysql
# 备份当前数据目录(以防万一)
sudo mv /var/lib/mysql /var/lib/mysql.bak.$(date +\%Y\%m\%d)
# 创建新的数据目录
sudo mkdir -p /var/lib/mysql
# 恢复备份
sudo xtrabackup --copy-back --target-dir=/backup/xtrabackup/full/latest_backup
# 设置正确的权限
sudo chown -R mysql:mysql /var/lib/mysql
# 启动MySQL服务
sudo systemctl start mysql
3. 时间点恢复(PITR)
有时,我们不需要恢复到备份时的状态,而是需要恢复到故障前的某个特定时间点。这就需要**时间点恢复(Point-in-Time Recovery)**技术。
实现PITR需要两个条件:
- 一个完整的备份(全量备份)
- 从备份时间到故障时间的二进制日志(binlog)
bash
# 首先,恢复最近的全量备份
mysql -u root -p < /backup/full_backup_20250101.sql
# 然后,应用从备份时间到故障时间的二进制日志
mysqlbinlog --start-datetime="2025-01-01 12:00:00" \
--stop-datetime="2025-01-02 08:30:00" \
/var/lib/mysql/mysql-bin.00000* | mysql -u root -p
要启用二进制日志,需要在MySQL配置文件(my.cnf)中添加:
ini
[mysqld]
log-bin=mysql-bin
server-id=1
五、备份策略与自动化(进阶)
对于生产环境,手动备份远远不够。我们需要自动化、可监控的备份方案。
1. 使用cron定时自动备份
bash
# 编辑crontab
crontab -e
# 添加以下行,每天凌晨2点进行全量备份并保留30天
0 2 * * * /usr/bin/mysqldump -u root -pYourPassword --all-databases --single-transaction --routines --triggers | gzip > /backup/mysql_full_$(date +\%Y\%m\%d).sql.gz
0 3 * * * find /backup/ -name "mysql_full_*.sql.gz" -mtime +30 -delete
# 每周日凌晨1点使用XtraBackup进行物理备份
0 1 * * 0 /usr/bin/xtrabackup --backup --user=root --password=YourPassword --target-dir=/backup/xtrabackup/full/$(date +\%Y\%m\%d) > /var/log/xtrabackup.log 2>&1
2. 增量备份策略
对于数据变化频繁的环境,可以结合全量和增量备份:
bash
# 周日:全量备份
xtrabackup --backup --target-dir=/backup/xtrabackup/full/$(date +\%Y\%m\%d)
# 周一至周六:增量备份(基于前一天的备份)
xtrabackup --backup --target-dir=/backup/xtrabackup/inc/$(date +\%Y\%m\%d) \
--incremental-basedir=/backup/xtrabackup/latest_backup
3. 备份验证与监控
备份不只是创建文件,还需要定期验证备份的有效性。我建议至少每月执行一次恢复测试。
可以创建一个简单的监控脚本,检查备份是否成功完成:
bash
#!/bin/bash
# backup_check.sh
BACKUP_DIR="/backup"
LOG_FILE="/var/log/backup_status.log"
# 检查最近24小时内是否有新的备份文件
RECENT_BACKUP=$(find $BACKUP_DIR -name "*.sql.gz" -mtime -1)
if [ -z "$RECENT_BACKUP" ]; then
echo "$(date): 警告:过去24小时内未发现新的备份文件" >> $LOG_FILE
# 可以添加邮件或短信告警
else
echo "$(date): 备份正常,最新文件:$RECENT_BACKUP" >> $LOG_FILE
fi
六、Docker环境下的MySQL备份与恢复实战
如今近70%的MySQL实例运行在容器中,但很多人发现,重启一个Docker容器后数据"消失"了。容器化部署的便利性背后,隐藏着数据管理的全新挑战。
Docker为MySQL部署带来了革命性便利,但其 "无状态"的本质 与传统数据库的 "强状态"需求 形成了鲜明矛盾。容器可以随时销毁重建,但数据必须永久留存。理解这一矛盾,是做好Docker环境备份的关键。
1. Docker中MySQL数据管理的核心:持久化存储
Docker容器本身是临时的,重启或删除容器时,容器内部的所有更改都会丢失,包括你辛苦创建的数据库数据。
为了让数据持久化,Docker提供了两种主要方式:
bash
# 方式一:数据卷(Volume) - Docker管理的存储区域
docker run -d --name mysql-container \
-v mysql-data:/var/lib/mysql \ # 'mysql-data'是卷名
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0
# 方式二:绑定挂载(Bind Mount) - 主机目录直接映射
docker run -d --name mysql-container \
-v /home/user/mysql-data:/var/lib/mysql \ # 主机路径
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0
关键检查点:在开始备份前,务必确认你的容器使用哪种方式:
bash
# 查看容器的存储配置
docker inspect mysql-container | grep -A 10 Mounts
# 查看所有数据卷
docker volume ls
2. Docker环境备份实战:两种主要方法
方法一:逻辑备份(推荐)
通过docker exec在容器内执行mysqldump,这是最安全、最推荐的方式:
bash
# 在宿主机创建备份目录
mkdir -p /backup
# 备份所有数据库方式1(mysql-container为容器名称,$MYSQL_ROOT_PASSWORD可替换为数据库明文密码)
docker exec mysql-container sh -c \
'exec mysqldump --all-databases --single-transaction --routines -uroot -p"$MYSQL_ROOT_PASSWORD"' \
> /backup/all-databases-$(date +%Y%m%d).sql
# 备份所有数据库方式2(mysql-container-id为容器id,$MYSQL_ROOT_PASSWORD可替换为数据库明文密码)
docker exec mysql-container-id mysqldump \
-uroot \
-p'$MYSQL_ROOT_PASSWORD' \
--all-databases \
--single-transaction \ # ✅ 确保InnoDB表一致性备份
--routines \ # ✅ 包含存储过程和函数
--triggers \ # ✅ 包含触发器
--events \ # ✅ 包含事件调度器
--max-allowed-packet=512M \ # ✅ 调整包大小,适合大表备份
--quick \ # ✅ 逐行检索,避免大表内存溢出
> /backup/all-databases-$(date +%Y%m%d).sql
# 备份单个数据库(更常见)
docker exec mysql-container sh -c \
'exec mysqldump myapp_db --single-transaction -uroot -p"$MYSQL_ROOT_PASSWORD"' \
> /backup/myapp-db-$(date +%Y%m%d).sql
# 压缩备份(节省70%空间)
docker exec mysql-container sh -c \
'exec mysqldump --all-databases --single-transaction -uroot -p"$MYSQL_ROOT_PASSWORD"' \
| gzip > /backup/backup-$(date +%Y%m%d).sql.gz
重要提示 :如果数据库很大,添加--single-transaction参数可以避免锁表,确保备份期间业务正常运行。
方法二:物理备份(数据卷备份)
适用于需要快速全量备份的场景:
bash
# 1. 备份整个数据卷
docker run --rm \
-v mysql-data:/source \ # 源卷
-v /backup:/backup \ # 备份目录
alpine tar czf /backup/mysql-volume-$(date +%Y%m%d).tar.gz -C /source .
# 2. 查看备份内容
ls -lh /backup/mysql-volume-*.tar.gz
物理备份的优势是速度快,但备份文件较大,且恢复时需要MySQL版本一致。
3. Docker环境恢复实战
方法一:从SQL备份恢复(推荐)
bash
# 方法1:直接通过navicat等数据库可视化工具,选中mysql实例执行sql脚本即可
# 方法2:直接管道传输(适合小文件)
cat /backup/myapp-db-20250101.sql | \
docker exec -i mysql-container mysql -uroot -p"$MYSQL_ROOT_PASSWORD"
# 方法3:先复制到容器内再执行(适合大文件)
docker cp /backup/myapp-db-20250101.sql mysql-container:/tmp/restore.sql
docker exec mysql-container sh -c \
'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" < /tmp/restore.sql'
方法二:从数据卷备份恢复
bash
# 场景:原有容器损坏,需要从数据卷备份创建新容器
# 1. 创建新的数据卷
docker volume create mysql-data-new
# 2. 恢复备份到新数据卷
docker run --rm \
-v /backup:/backup \
-v mysql-data-new:/target \
alpine sh -c "tar xzf /backup/mysql-volume-20250101.tar.gz -C /target"
# 3. 使用恢复的数据卷启动新容器
docker run -d --name mysql-new \
-v mysql-data-new:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3307:3306 \
mysql:8.0
4. 自动化备份脚本(.sh脚本文件)
对于生产环境,手动备份远远不够。这里提供一个企业级备份脚本:
bash
#!/bin/bash
# docker-mysql-backup.sh
set -e # 遇到任何错误立即退出
# 配置区
CONTAINER_NAME="mysql-prod"
BACKUP_DIR="/backup/mysql"
RETENTION_DAYS=30
MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD} # 从环境变量获取
# 创建备份目录
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="$BACKUP_DIR/$DATE"
mkdir -p "$BACKUP_PATH"
echo "=== MySQL Docker备份开始 $(date) ==="
# 1. 执行逻辑备份
echo "1. 执行数据库逻辑备份..."
docker exec "$CONTAINER_NAME" mysqldump --all-databases \
--single-transaction \
--routines \
--triggers \
--events \
-uroot -p"$MYSQL_ROOT_PASSWORD" \
> "$BACKUP_PATH/full_backup.sql"
# 2. 压缩备份文件
echo "2. 压缩备份文件..."
gzip "$BACKUP_PATH/full_backup.sql"
# 3. 记录binlog位置(用于时间点恢复)
echo "3. 记录Binlog位置..."
docker exec "$CONTAINER_NAME" mysql -uroot -p"$MYSQL_ROOT_PASSWORD" \
-e "SHOW MASTER STATUS\G" > "$BACKUP_PATH/binlog_status.txt"
# 4. 备份关键配置文件
echo "4. 备份配置文件..."
docker cp "$CONTAINER_NAME:/etc/mysql/conf.d" "$BACKUP_PATH/conf.d/" 2>/dev/null || true
# 5. 清理旧备份
echo "5. 清理过期备份..."
find "$BACKUP_DIR" -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \; 2>/dev/null || true
# 6. 验证备份完整性
echo "6. 验证备份完整性..."
if [ -s "$BACKUP_PATH/full_backup.sql.gz" ]; then
echo "✅ 备份成功: $BACKUP_PATH"
echo "文件大小: $(du -h "$BACKUP_PATH/full_backup.sql.gz" | cut -f1)"
else
echo "❌ 备份失败!"
exit 1
fi
echo "=== 备份完成 $(date) ==="
设置定时任务(每天凌晨2点执行):
bash
# 编辑crontab
crontab -e
# 添加以下行
0 2 * * * /bin/bash /path/to/docker-mysql-backup.sh >> /var/log/mysql-backup.log 2>&1
5. Docker Compose环境下的备份策略
如果你使用Docker Compose,备份策略可以更优雅:
yaml
# docker-compose.yml 备份友好配置
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: app-mysql
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password # 密码文件更安全
volumes:
- mysql_data:/var/lib/mysql
- ./backups:/backups # 挂载备份目录
- ./conf.d:/etc/mysql/conf.d:ro # 配置文件
secrets:
- db_root_password
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
timeout: 10s
retries: 3
volumes:
mysql_data:
secrets:
db_root_password:
file: ./secrets/db_root_password.txt
对应的备份命令:
bash
# 在docker-compose.yml所在目录执行
docker-compose exec mysql mysqldump --all-databases \
--single-transaction -uroot -p$(cat secrets/db_root_password.txt) \
> backups/backup-$(date +%Y%m%d).sql
6. 关键注意事项与排错指南
常见问题1:备份时权限错误
bash
# 错误:Access denied for user 'root'@'localhost'
# 解决方案1:确保密码正确
docker exec mysql-container mysqladmin -uroot -p"old_password" password "new_password"
# 解决方案2:使用配置文件
echo -e "[client]\nuser=root\npassword=123456" > my.cnf
docker cp my.cnf mysql-container:/root/.my.cnf
docker exec mysql-container chmod 600 /root/.my.cnf
常见问题2:备份文件过大
bash
# 方案A:按数据库拆分备份
for DB in $(docker exec mysql-container mysql -uroot -p123456 -e "SHOW DATABASES;" | grep -v Database);
do
docker exec mysql-container mysqldump $DB > /backup/$DB.sql
done
# 方案B:排除不需要备份的数据
docker exec mysql-container mysqldump --all-databases \
--ignore-table=logs.access_log \
--ignore-table=temp.temp_data
常见问题3:备份期间容器重启
bash
# 使用健康检查确保MySQL就绪
docker run -d --name mysql \
--health-cmd="mysqladmin ping -uroot -p123456" \
--health-interval=10s \
mysql:8.0
# 在备份脚本中添加健康检查
if [ "$(docker inspect -f '{{.State.Health.Status}}' mysql)" != "healthy" ]; then
echo "MySQL未就绪,等待..."
sleep 30
fi
写在最后
数据库备份不像开发新功能那样有立竿见影的成就感,它更像是默默无闻的守护者。但正是这个"无聊"的工作,在关键时刻能挽救整个业务。
最好的备份策略不是技术最先进的,而是最适合你业务需求并且能够持续执行的策略。开始可能只是一个简单的每日mysqldump脚本,随着业务增长,逐步完善为全量+增量+跨地域备份的完整方案。
不要等到数据丢失的那一天,才后悔没有认真对待备份。今天下班前,就检查一下你的数据库备份是否在正常运行吧。
