MySQL备份指定表的常见方法总结

 更新时间:2026年06月03日 09:01:52   作者:Oneslide  
MySQL备份是数据库管理的核心环节之一,通过备份能够有效地防止数据丢失,确保数据的安全和恢复能力,下面我们就来看看如何使用MySQL备份指定表吧

MySQL备份是数据库管理的核心环节之一,通过备份能够有效地防止数据丢失,确保数据的安全和恢复能力。备份的方式多种多样,可以根据业务规模、数据的重要性和恢复时间要求来选择合适的备份方案

mysql备份指定表

#!/bin/bash
# ====================== 配置项(只改这里)======================
MYSQL_HOST="127.0.0.1"
MYSQL_PORT="3306"
MYSQL_USER="root"
MYSQL_PASS="your_pass_password"
# Socket 连接配置(可选)
CONN_SOCKET_ENABLED=true  # 开启则为 true,关闭则为 false
MYSQL_SOCKET="/usr/local/mysql/temp/mysql.sock"
# 备份根目录
BACKUP_ROOT="mysql-backup"
# ===============================================================
# 检查参数
if [ $# -ne 2 ]; then
    echo "用法: $0 <数据库名> <表名>"
    echo "示例: $0 test_db user_table"
    exit 1
fi
# 接收参数
DB_NAME="$1"
TABLE_NAME="$2"
# 备份目录 & 日志
BACKUP_DIR="${BACKUP_ROOT}/$(date +%Y%m%d_%H%M%S)_${DB_NAME}_${TABLE_NAME}"
LOG_FILE="${BACKUP_DIR}/backup.log"
mkdir -p "${BACKUP_DIR}"
# 日志函数
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "${LOG_FILE}"
}
log "===== 开始【无锁】单表备份 ====="
log "数据库:${DB_NAME}"
log "表名:${TABLE_NAME}"
log "备份目录:${BACKUP_DIR}"
# 构建 socket 参数(可选)
SOCKET_PARAM=""
if [ "${CONN_SOCKET_ENABLED}" = "true" ]; then
    SOCKET_PARAM="--socket=${MYSQL_SOCKET}"
    log "[INFO] 已启用 socket 连接:${MYSQL_SOCKET}"
fi
# 1. 检查数据库是否存在
DB_EXISTS=$(mysql -h"${MYSQL_HOST}" -P"${MYSQL_PORT}" -u"${MYSQL_USER}" -p"${MYSQL_PASS}" ${SOCKET_PARAM} \
-e "SHOW DATABASES LIKE '${DB_NAME}';" -sN 2>/dev/null)
if [ -z "${DB_EXISTS}" ]; then
    log "[ERROR] 数据库 ${DB_NAME} 不存在!"
    exit 1
fi
# 2. 检查表是否存在
TABLE_EXISTS=$(mysql -h"${MYSQL_HOST}" -P"${MYSQL_PORT}" -u"${MYSQL_USER}" -p"${MYSQL_PASS}" ${SOCKET_PARAM} \
-e "SHOW TABLES FROM \`${DB_NAME}\` LIKE '${TABLE_NAME}';" -sN 2>/dev/null)
if [ -z "${TABLE_EXISTS}" ]; then
    log "[ERROR] 表 ${DB_NAME}.${TABLE_NAME} 不存在!"
    exit 1
fi
log "[INFO] 库表验证通过,开始备份..."
# 3. 备份文件路径
BACKUP_FILE="${BACKUP_DIR}/${TABLE_NAME}.sql"
# 4. 执行【无锁】单表备份(已加入你要求的3个参数)
mysqldump \
    -h"${MYSQL_HOST}" \
    -P"${MYSQL_PORT}" \
    -u"${MYSQL_USER}" \
    -p"${MYSQL_PASS}" \
    ${SOCKET_PARAM} \
    --single-transaction \
    --lock-tables=FALSE \
    --add-locks=FALSE \
    --hex-blob \
    --opt \
    --set-gtid-purged=OFF \
    --default-character-set=utf8mb4 \
    "${DB_NAME}" "${TABLE_NAME}" > "${BACKUP_FILE}" 2>> "${LOG_FILE}"
# 5. 检查备份结果
if [ $? -eq 0 ]; then
    FILE_SIZE=$(stat -c%s "${BACKUP_FILE}" 2>/dev/null || stat -f%z "${BACKUP_FILE}")
    if [ "${FILE_SIZE}" -lt 100 ]; then
        log "[WARN] 备份完成,但文件过小(可能是空表):${FILE_SIZE} 字节"
    else
        log "[SUCCESS] 无锁备份成功!文件大小:${FILE_SIZE} 字节"
        log "[SUCCESS] 备份文件:${BACKUP_FILE}"
    fi
else
    log "[ERROR] 备份失败!查看日志:${LOG_FILE}"
    exit 1
fi
log "===== 单表备份全部完成 ====="

MySQL备份表的四种方式

MySQL备份是数据库管理的核心环节之一,通过备份能够有效地防止数据丢失,确保数据的安全和恢复能力。备份的方式多种多样,可以根据业务规模、数据的重要性和恢复时间要求来选择合适的备份方案。以下是四种常见的MySQL备份表的方式,涵盖从简单的命令行工具到复杂的二进制日志备份,供不同场景下使用。

1. 使用mysqldump工具进行备份

mysqldump是MySQL自带的命令行工具,允许用户将数据库中的表结构和数据导出为SQL文件。mysqldump的备份方式简单直接,无需停止数据库服务,能够在数据库正常运行时备份数据,因而广泛应用于小型和中型数据库的备份。

命令格式:

mysqldump -u用户名 -p密码 数据库名 表名> 导出的文件名.sql

命令解释:

  • -u用户名:指定用于连接MySQL的用户名。
  • -p密码:指定用户密码。如果密码较长或包含特殊字符,也可以不直接输入密码,运行命令后手动输入。
  • 数据库名:需要备份的数据库名称。
  • 表名:要备份的表名。
  • > 导出的文件名.sql:将备份结果导出为一个SQL文件。

优点:

  • 无需停止数据库服务,可以在线备份。
  • 操作简单、易于集成到定时任务或自动化脚本中。
  • 能够将表结构和数据一起备份,便于迁移和恢复。

缺点:

  • 对于大型数据库,备份和恢复速度较慢。
  • 备份时会消耗较多的CPU和I/O资源,可能会影响数据库性能。

适用场景:

  • 适合小型或中型数据库的定期备份。
  • 适用于不需要实时备份、对资源消耗不敏感的场景。

2. 使用MySQL Workbench工具备份

MySQL Workbench是一款官方提供的图形化管理工具,提供了友好的用户界面,使得数据库管理更加直观,尤其适合不熟悉命令行操作的用户。通过MySQL Workbench,用户可以选择具体的数据库或表进行备份。

备份步骤:

  1. 打开MySQL Workbench,连接到数据库服务器。
  2. 在菜单中选择“Server” -> “Data Export”。
  3. 选择要备份的数据库或表,并选择备份位置。
  4. 点击“Start Export”开始备份。

优点:

  • 界面友好,操作简便。
  • 可以直观地选择需要备份的数据库或表。
  • 适合初学者使用,无需复杂的命令。

缺点:

  • 需要安装额外的软件。
  • 备份和恢复效率不如命令行工具。
  • 依赖图形界面,无法完全自动化。

适用场景:

  • 适合初学者或不熟悉命令行工具的用户。
  • 中小型数据库的日常维护和管理。

3. 使用SELECT INTO OUTFILE语句进行备份

SELECT INTO OUTFILE是通过SQL语句直接将表中的数据导出到文件中。这种备份方式相对灵活,用户可以控制导出数据的格式、路径等,但只能备份数据部分,无法导出表结构信息。

语法格式:

SELECT * INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '
'
FROM 表名;

命令解释:

  • OUTFILE '/path/to/file.csv':指定导出的文件路径和名称。
  • FIELDS TERMINATED BY ',':定义字段之间的分隔符,这里使用逗号分隔。
  • OPTIONALLY ENCLOSED BY '"':可选字段用引号包围。
  • LINES TERMINATED BY ' ':定义记录之间的分隔符,这里为换行符。
  • FROM 表名:指定要备份的表。

优点:

  • 备份速度快,适合数据导出需求较高的场景。
  • 可以导出为多种格式,如CSV文件,便于数据交换和处理。
  • 灵活性高,能够选择性导出部分数据。

缺点:

  • 无法备份表结构,只能备份表中的数据。
  • 需要手动恢复表结构后再导入数据。

适用场景:

  • 适合需要导出数据进行分析或数据迁移的场景。
  • 数据导出量大,对表结构备份要求不高的场景。

4. 使用Binary Log备份

二进制日志(Binary Log)是MySQL记录所有对数据库进行修改的SQL语句的日志文件,通过回放这些日志可以实现数据恢复。使用二进制日志进行备份是一种增量备份方式,特别适合大型数据库和需要高频率备份的场景。

启用二进制日志:

在MySQL配置文件my.cnf中,添加以下行以启用二进制日志:

log-bin=/var/log/mysql/mysql-bin.log

保存后,重启MySQL服务使配置生效。

备份步骤:

  • 定期备份二进制日志文件:cp /var/log/mysql/mysql-bin.* /path/to/backup/
  • 在发生故障时,通过回放二进制日志恢复数据:mysqlbinlog /path/to/mysql-bin.000001| mysql -u用户名 -p密码

优点:

  • 实现增量备份和实时备份,节省存储空间。
  • 可以快速恢复最近的数据变更,适合需要实时性强的业务场景。
  • 备份文件较小,适合大规模数据库环境。

缺点:

  • 恢复操作较为复杂,需要回放大量SQL语句。
  • 二进制日志文件会不断增长,需定期清理以节省磁盘空间。

适用场景:

  • 适合需要增量备份的中大型数据库。
  • 适合数据实时性要求较高的生产环境。

知识扩展

在实际运维或开发中,有时只需备份数据库中的某几张表(而非整个库),以节省空间或提高效率。以下是几种主流的备份方式:

1. 使用 mysqldump 工具(最常用)

mysqldump 是 MySQL 官方自带的逻辑备份工具,可以灵活指定库和表。

备份单张表(结构+数据)

mysqldump -u 用户名 -p 数据库名 表名 > 表名.sql

示例:备份 mydb 库中的 users 表

mysqldump -u root -p mydb users > users_backup.sql

备份多张指定表

mysqldump -u root -p mydb users orders products > multi_tables.sql

只备份表结构(不含数据)

mysqldump -u root -p --no-data mydb users > users_structure.sql

只备份数据(不含结构)

mysqldump -u root -p --no-create-info mydb users > users_data.sql

恢复备份(直接导入)

mysql -u root -p mydb < users_backup.sql

2. 使用 SELECT INTO OUTFILE 导出为文本文件

适合将表数据导出为 CSV 或 TSV 格式,仅数据,不含结构

-- 导出为 CSV(逗号分隔,字段可选引号)
SELECT * FROM users
INTO OUTFILE '/tmp/users.csv'
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

注意

  • 需要 FILE 权限。
  • 输出路径必须在 MySQL 服务器上,且对 mysql 用户可写。
  • 恢复时使用 LOAD DATA INFILE

3. 使用 MySQL Workbench(图形化)

适合少量操作或开发环境。

  • 连接到数据库。
  • 在左侧 Navigator 中找到目标数据库。
  • 右键点击需要备份的表 → 选择 Table Data Export Wizard(或 Export Table Data)。
  • 选择导出格式(.sql.csv 等)和导出路径。
  • 按照向导完成。

4. 使用 mysqlpump(MySQL 5.7+ 引入)

mysqlpump 支持并行导出,语法与 mysqldump 类似,也可指定表。

mysqlpump -u root -p mydb users > users.sql

5. 使用 pt-dump(Percona Toolkit)

Percona Toolkit 中的 pt-dump 功能更强,支持过滤表、正则匹配等。

pt-dump --user=root --password=xxx --database=mydb --tables='users,orders' > backup.sql

6. 使用存储过程或脚本循环备份

如果需要批量备份多张表(例如按表名前缀),可写一个脚本循环执行 mysqldump

Bash 示例

#!/bin/bash
DB="mydb"
TABLES="users orders products"
for t in $TABLES; do
    mysqldump -u root -p$PASS $DB $t > ${t}.sql
done

总结

MySQL的备份方式多种多样,不同的备份方式各有优缺点。对于中小型数据库,mysqldump和MySQL Workbench工具较为合适,操作简便,且支持表结构和数据的备份。对于只需要数据导出分析的情况,可以使用SELECT INTO OUTFILE语句。而对于大型数据库和实时备份的需求,Binary Log增量备份是一种高效的解决方案。

在实际应用中,应根据业务的规模、数据的重要性和恢复时间的需求选择合适的备份方式。同时,定期测试备份的有效性是确保数据安全的关键环节。

到此这篇关于MySQL备份指定表的常见方法总结的文章就介绍到这了,更多相关MySQL备份指定表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL中的字符替换示例详解

    MySQL中的字符替换示例详解

    本文介绍了 MySQL 中的两种字符替换函数:REPLACE 和 REGEXP_REPLACE,通过这两个函数的使用,我们可以方便地进行字符替换操作,提高数据处理的效率和准确性,感兴趣的朋友跟随小编一起看看吧
    2023-06-06
  • MySQL进行表之间关联更新的实现方法

    MySQL进行表之间关联更新的实现方法

    在实际编程工作或运维实践中,对MySQL数据库表进行关联更新是一种比较常见的应用场景,针对这样的业务场景,我们来看看有什么方法可以实现关联更新,需要的朋友可以参考下
    2023-10-10
  • 查看修改MySQL表结构命令

    查看修改MySQL表结构命令

    这篇文章主要介绍了查看修改MySQL表结构命令,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Mysql字符集utf8和utf8mb4详解

    Mysql字符集utf8和utf8mb4详解

    文章介绍了MySQL中utf8和utf8mb4两种字符集的区别,包括编码方式、存储空间、索引长度以及支持的Unicode字符范围,同时,通过创建两个表并插入数据进行存储长度的比较,验证了上述理论
    2024-12-12
  • Mac Homebrew安装MySQL数据库具体步骤

    Mac Homebrew安装MySQL数据库具体步骤

    作为Mac开发者的核心工具,Homebrew(简称brew)的安装稳定性直接影响开发效率,这篇文章主要介绍了Mac Homebrew安装MySQL数据库具体步骤,文中将安装步骤通过图文介绍的非常详细,需要的朋友可以参考下
    2026-04-04
  • mysql 8.0.25之取巧解决修改密码报错的问题

    mysql 8.0.25之取巧解决修改密码报错的问题

    这篇文章主要介绍了mysql8.0.25之取巧解决修改密码报错的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • mysql8.0.21安装教程图文详解

    mysql8.0.21安装教程图文详解

    这篇文章主要介绍了mysql8.0.21安装教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • mysql如何查询当前数据库中不为空的表

    mysql如何查询当前数据库中不为空的表

    这篇文章主要介绍了mysql如何查询当前数据库中不为空的表问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 使用Canal实现MySQL主从同步的流程步骤

    使用Canal实现MySQL主从同步的流程步骤

    这篇文章主要介绍了如何使用Canal实现MySQL主从同步效果,文中通过代码示例和图文结合的方式给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-04-04
  • Mysql中复制详细解析

    Mysql中复制详细解析

    这篇文章主要介绍了Mysql中复制详细解析,从基本概念、用途、实现方法以及集中模式进行了介绍,然后分享了具体实现代码,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10

最新评论