本文共 3626 字,大约阅读时间需要 12 分钟。
MySQL 数据库的备份是数据库管理员(DBA)工作中不可或缺的一部分。备份可以防止数据丢失,帮助恢复数据库到某个特定点,或者在故障发生时快速恢复服务。以下是 MySQL 数据库备份的常用方法,包括逻辑备份和物理备份,以及具体的实施建议。
逻辑备份是将数据库中的数据转换为SQL语句文件,备份方式最为常用。最常用的工具是 mysqldump
,它支持多种参数,能够按库或表分别备份数据。
mysqldump
进行逻辑备份mysqldump
是一个强大的工具,可以选择按库、表或具体的表结构进行备份。以下是 mysqldump
的一些常用参数:
--master-data=1
:在备份过程中记录主库的 binlog 文件和位置,这在还原时非常重要。-B
:按库进行备份,适用于多个库的情况。-A
:锁定所有表,确保备份的一致性。-F
:在备份完成后刷新 binlog 文件。--events
:记录事件日志,确保备份包括高级事件。示例命令:
mysqldump -uroot -pxxx -A -B --master-data=2 --events > /opt/mysql_backup/`date +%F`.sql.gz
增量备份是基于全量备份的基础上,仅备份自最后一次全量备份以后的数据。增量备份可以减少存储空间和时间。常用的方式是结合 mysqldump
和 mysqlbinlog
工具。
方法一:使用 mysqldump
和 mysqlbinlog
:
mysqlbinlog
工具解析 binlog 文件,将增量数据还原到测试环境或目标数据库。方法二:直接截取 binlog 文件:
物理备份是直接将数据库文件复制到外部存储的过程。由于数据库在备份期间仍然接收写入,为了确保数据一致性,通常需要在备份前对数据库进行锁表或停机处理。
cp
、rsync
)将数据库文件(如 ib_datafile
)复制到远程或本地存储。增量备份的频率和方式取决于企业的具体需求。以下是常见的企业场景:
rsync
截取 binlog 文件进行增量备份。特性 | 全量备份 | 增量备份 |
---|---|---|
恢复时间 | 较长,需还原全量文件 | 较短,仅需还原增量文件 |
资源占用 | 高,备份期间占用系统资源 | 较低,备份时资源占用较少 |
频率 | 每天或每周 | 每分钟或每小时 |
锁表或停机 | 需要锁表或停机 | 不需要,适用于在线备份 |
mysqlbinlog
工具将 binlog 文件还原到特定时间点。mysqldump
进行全量备份mysqldump -uroot -pxxx -A -B --master-data=2 --events --single-transaction | gzip > /opt/mysql_bak.sql.gz
mysqldump -uroot -pxxx -A -B --master-data=2 -F --events > /opt/mysql_bak.sql.gz
mysql -uroot -prootabcd -e "show databases;" | grep -Evi "Database|information_schema|performance_schema" | sed -r 's#(.*)#mysqldump -uroot -prootabcd --events -B \1 |gzip > /tmp/\1.sql.gz#g' | bash
#!/bin/shMYUSER=rootMYPASS=rootabcd[ ! -d /server/backup/ ] && mkdir -p /server/backupMYCMD="mysql -u$USER -p$MYPASS"MYDUMP="mysqldump -u$MYUSER -p$MYPASS -B"for database in $MYCMD -e "show databases;" | grep -Evi "Database|information_schema|performance_schema|mysql"
do$MYDUMP $database | gzip > /server/backup/${database}_$(date +%F).sql.gzdone
---## 六、案例:多个库和多个表备份到一起了,如何恢复单个库或表### 1. 恢复单个库或表- **步骤**:1. 将备份文件导入测试数据库。2. 使用 `grep` 过滤需要的表或库。3. 恢复到正式数据库。### 2. 恢复单个表- **命令**:```bashgrep tablename bak.sql > name.sql
grep -B "databasename.*" bak.sql > name.sql
SELECT *
,而是明确列出需要查询的列。SELECT SQL_NO_CACHE
,直接从缓存中读取。expire_logs_days
,自动删除旧的 binlog 文件。mysqldump
、xtrabackup
。xtrabackup
、Percona Backup。mysqlbinlog
工具mysqlbinlog --start-datetime="2023-10-01 00:00:00" --stop-datetime="2023-10-01 10:00:00" 15:44' time.sql
-d
:指定数据库。--base64-output
:解密 binlog 文件。source
命令mysql -uroot -pxxx < /opt/mysql_bak.sql
mysqlbinlog
工具验证文件是否损坏。通过以上方法,DBA 可以根据具体需求选择合适的备份策略,确保数据库的安全性和可用性。
转载地址:http://pxbfk.baihongyu.com/