mysqldump 操作手册

mysqldump 命令使用文档

1. 命令概述

mysqldump 是 MySQL 官方提供的逻辑备份工具。它将数据库的结构和数据导出为一个包含 SQL 语句的文本文件。这个文件可以用于恢复数据库或将其迁移到另一台服务器。

基本特点:

  • 逻辑备份:备份结果是可读的 SQL 脚本。
  • 灵活性高:可以备份单个表、单个数据库、多个数据库或所有数据库。
  • 一致性 :通过特定参数(如 --single-transaction)可以在备份期间保持数据一致性。

2. 基本语法

bash 复制代码
mysqldump [options] [database_name] [table1] [table2] ... > backup_file.sql
  • [options]: 连接选项和备份选项(详见下文)。
  • [database_name]: 要备份的数据库名称。
  • [table1] [table2] ...: (可选)指定要备份的特定表。如果不指定,则备份整个数据库。
  • > backup_file.sql: 将输出重定向到指定的备份文件。

3. 连接选项(必备)

选项 简写 说明 示例
--user= -u 连接数据库的用户名。 -u root
--password= -p 提示输入用户密码。为了安全,建议只在命令行写 -p,然后交互式输入密码。 -p
--host= -h MySQL 服务器的主机名或 IP 地址,默认为 localhost -h 127.0.0.1
--port= -P MySQL 服务器的端口号,默认为 3306 -P 3307

4. 核心备份场景与示例

场景 1:备份单个数据库(不包含 CREATE DATABASE 语句)

命令:

bash 复制代码
mysqldump -u username -p database_name > backup.sql

说明:

  • 这种方式导出的 SQL 文件不包含 CREATE DATABASE 语句。
  • 恢复前,必须先手动在目标服务器上创建一个空数据库。

恢复命令:

bash 复制代码
mysql -u username -p target_database_name < backup.sql

场景 2:备份单个数据库(包含 CREATE DATABASE 语句)

命令:

bash 复制代码
mysqldump -u username -p --databases database_name > backup.sql

说明:

  • 使用 --databases 参数后,导出的 SQL 文件会包含 CREATE DATABASEUSE 语句。
  • 恢复时无需预先创建数据库,会自动创建。

恢复命令:

bash 复制代码
mysql -u username -p < backup.sql

场景 3:备份所有数据库

命令:

bash 复制代码
mysqldump -u username -p --all-databases > full_backup.sql

说明:

  • 备份整个 MySQL 实例中的所有数据库,包括系统库(如 mysql, sys)。
  • 文件会非常大,恢复时间较长。

场景 4:只备份数据库结构(不含数据)

命令:

bash 复制代码
mysqldump -u username -p -d database_name > structure_only.sql

说明:

  • 使用 -d--no-data 参数。

场景 5:只备份数据(不含表结构)

命令:

bash 复制代码
mysqldump -u username -p -t database_name > data_only.sql

说明:

  • 使用 -t--no-create-info 参数。

场景 6:备份单个或多个表

命令:

bash 复制代码
mysqldump -u username -p database_name table1 table2 > tables_backup.sql

说明:

  • 在数据库名后直接跟一个或多个表名。

5. 重要备份选项(强烈推荐使用)

选项 说明
--single-transaction 在备份开始前,启动一个事务来获取数据一致性快照。对于 InnoDB 表,此参数可以实现在不锁表的情况下进行备份,是生产环境必备选项。
--routines 备份存储过程和函数。
--events 备份事件调度器事件。
--triggers 备份触发器(默认已开启)。
--hex-blob 使用十六进制格式导出二进制数据(如 BLOB 类型),避免数据损坏。
--add-drop-table 在每个 CREATE TABLE 语句前加上 DROP TABLE IF EXISTS 语句(默认已开启)。确保恢复时不会因表已存在而报错。
--complete-insert 使用包含列名的完整 INSERT 语句,提高恢复至不同结构表的兼容性。
--skip-lock-tables 不锁表。在备份 MyISAM 表且可以接受少量不一致时使用。不要与 --single-transaction 同时用于 InnoDB。

6. 完整生产环境备份示例

一个健壮的、用于生产环境的备份命令通常如下:

bash 复制代码
mysqldump -u root -p \
  --databases bidding_dev \
  --single-transaction \
  --routines \
  --events \
  --triggers \
  --hex-blob \
  --complete-insert \
  --result-file=bidding_dev_full_backup_$(date +%Y%m%d).sql

此命令说明:

  • 备份 bidding_dev 数据库。
  • 使用事务保证 InnoDB 表的一致性。
  • 同时备份存储过程、事件和触发器。
  • 安全处理二进制数据。
  • 使用带列名的 INSERT 语句。
  • 备份文件名中自动加入当前日期(Linux/macOS 语法)。

7. 在 Windows 下的批处理脚本示例

将以下内容保存为 backup.bat 文件,并双击运行。

batch 复制代码
@echo off
setlocal

rem 设置变量
set "BACKUP_PATH=D:\MySQL_Backups"
set "MYSQL_PATH=D:\Program Files\MySQL\MySQL Server 8.1\bin\mysqldump.exe"
set "DB_NAME=bidding_dev"
set "DB_USER=root"

rem 创建以日期命名的文件夹(格式:YYYYMMDD)
for /f "tokens=1-3 delims=/" %%a in ('date /t') do set "FDATE=%%c%%a%%b"
set "FULL_BACKUP_PATH=%BACKUP_PATH%\%FDATE%"

if not exist "%FULL_BACKUP_PATH%" mkdir "%FULL_BACKUP_PATH%"

rem 执行备份命令
echo Starting backup of %DB_NAME%...
"%MYSQL_PATH%" -u %DB_USER% -p --databases %DB_NAME% --single-transaction --routines --events --triggers --hex-blob > "%FULL_BACKUP_PATH%\%DB_NAME%_backup.sql"

if %errorlevel% == 0 (
    echo Backup completed successfully! File saved to: %FULL_BACKUP_PATH%\%DB_NAME%_backup.sql
) else (
    echo Backup failed!
)

pause

实际使用

arduino 复制代码
D:\Program Files\MySQL\MySQL Server 8.1\bin>mysqldump -u root -p bidding_lzct > backup.sql
Enter password: ***

D:\Program Files\MySQL\MySQL Server 8.1\bin>
相关推荐
摇滚侠21 小时前
Spring Boot 3零基础教程,IOC容器中组件的注册,笔记08
spring boot·笔记·后端
程序员小凯1 天前
Spring Boot测试框架详解
java·spring boot·后端
你的人类朋友1 天前
什么是断言?
前端·后端·安全
程序员小凯1 天前
Spring Boot缓存机制详解
spring boot·后端·缓存
i学长的猫1 天前
Ruby on Rails 从0 开始入门到进阶到高级 - 10分钟速通版
后端·ruby on rails·ruby
用户21411832636021 天前
别再为 Claude 付费!Codex + 免费模型 + cc-switch,多场景 AI 编程全搞定
后端
茯苓gao1 天前
Django网站开发记录(一)配置Mniconda,Python虚拟环境,配置Django
后端·python·django
Cherry Zack1 天前
Django视图进阶:快捷函数、装饰器与请求响应
后端·python·django
爱读源码的大都督1 天前
为什么有了HTTP,还需要gPRC?
java·后端·架构
码事漫谈1 天前
致软件新手的第一个项目指南:阶段、文档与破局之道
后端