MySQL备份时排除指定数据库或表的方法

苏见山
苏见山
发布时间:2026-10-13| 5人浏览过
原创

在进行 MySQL 备份时,若需跳过特定数据库(如 system schemas)或排除某个库内的部分无关表,手动编写 --databases 列表十分繁琐。本文将演示如何通过命令行管道快速生成包含所有有效库的转储文件,以及如何通过 Shell 脚本灵活控制备份粒度。

动态备份全库并排除特定数据库

使用 mysqldump 时,--all-databases 会备份所有数据,而 --ignore-table 仅能排除具体表,无法直接排除整个数据库。面对数十个数据库实例,逐个列举既低效又容易出错。

我们可以通过组合 SQL 查询命令与 Linux 文本处理工具来自动提取待备份的数据库名,从而构建一条高效的备份指令。基本逻辑如下:

  1. 获取库名列表:使用 mysql -e 'show databases;' 获取当前所有数据库名称。
  2. 过滤无关库:使用 grep 剔除不需要的库(如 information_schema, mysql, test 等)。注意需同时过滤掉输出头部的 “Database” 字样。
  3. 拼接 mysqldump 参数:将过滤后的库名单传递给 xargs,追加到 --databases 参数后执行 dump。

适用于大多数场景的基础命令如下:

mysql -uroot -pPASSWORD -e 'show databases;' | \
grep -E -v "Database|information_schema|mysql|test" | \
xargs mysqldump -uroot -pPASSWORD --databases > all_backup.sql

第1步:处理 performance_schema 兼容性问题

在 MySQL 5.5 及以上版本中,performance_schema 库可能会导致 xargs 拼接时的语法异常,或者由于该库体积庞大且无需备份。建议将其加入黑名单:

  • 方法一:在 mysqldump 阶段跳过
# 先列出所有非关键库,再通过 --skip-lock-tables 显式包含 performance_schema 但通常建议直接排除
grep -E -v "Database|information_schema|mysql|test" ... 
# 或者直接再次 grep 移除 performance_schema

推荐使用更简洁的 方法二:直接从列表中过滤掉 performance_schema:

mysql -uroot -pPASSWORD -e 'show databases;' | \
grep -E -v "Database|information_schema|mysql|test|performance_schema" | \
xargs mysqldump -uroot -pPASSWORD --databases > full_backup.sql

该命令会生成一个不包含被屏蔽库的完整 SQL 转储文件。

按表级别排除指定表格

如果目标是一个单独的数据库,但其中某些日志表或临时表不需要备份,可以通过遍历该库下的表名来实现有条件导出。

第1步:准备环境

  • 操作目的:确定需要忽略的具体表名集合。
  • 示例场景:假设在 spservice 库中,需要排除 mo_log, mt_log, report_info 三个表。

第2步:编写过滤循环脚本

以下脚本展示了两种排除策略。第一种是硬编码排除列表,第二种是将需要排除的表名作为参数传入。

#!/bin/sh
# 定义要排除的表列表,这里通过命令行参数 $@ 传入
# 用法: sh exclude.sh mo_log mt_log report_info

for j in $(mysql -uroot -e "USE spservice; SHOW TABLES" | grep -v Tables); do
    # 检查当前表是否在排除列表中
    # 如果不在排除列表中(grep 找不到),则执行 dump
    echo "$@" | grep -wq "$j"
    if [ $? -ne 0 ]; then
        mysqldump -uroot --default-character-set=utf8mb4 spservice $j >> ${j}.sql
    fi
done

注意事项:

  • 字符集建议根据实际数据库配置调整(如 utf8mb4)。
  • 此方法为逐表导出,文件较多;若只需合并为一个文件,可去掉 >> 重定向中的文件名部分,直接追加到一个总文件中。

自动化日常备份实战

结合上述思路,可以编写一个简单的生产用备份脚本。此脚本每日执行,包含数据库全量导出及配置文件备份,并通过邮件通知。

#!/bin/bash
# Description: backup mysql data
FILE="mysql_$(date +%F)"
BACKDIR="/mysqlbackup"
CONF_FILE="/etc/my.cnf"

# 1. 执行备份,排除系统库
mysql -uroot -e 'show databases' | egrep -v "Database|information_schema|performance_schema" \ 
   | xargs mysqldump -uroot --databases > $BACKDIR/$FILE.sql

# 2. 备份配置文件
[[ -f $CONF_FILE ]] && cp $CONF_FILE $BACKDIR/$FILE.cnf

# 3. 发送完成通知
echo "Machine: ServerHost\nIP: 172.16.10.12\nStatus: Backup completed successfully" | \
   mail -s "MySQL BackUP Complete" admin@example.com

exit 0

将此脚本保存至 /etc/cron.daily/mysql-backup 或通过 cron 设置定时任务,即可实现无人值守的增量/全量保障。

以上就是通过命令行管道高效备份 MySQL 及排除指定内容的详细内容,更多关于 MySQL 运维备份的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。