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>
相关推荐
程序员爱钓鱼2 小时前
Go语言实战案例-项目实战篇:编写一个轻量级在线聊天室
开发语言·后端·golang
数据知道2 小时前
Go基础:Go语言中的指针详解:在什么情况下应该使用指针?
开发语言·后端·golang·指针·go语言
我是前端小学生2 小时前
Poetry:Python 开发者的依赖管理与项目利器
后端·python
华仔啊2 小时前
SpringBoot 中的 7 种耗时统计方式,你用过几种?
java·后端
yeyong3 小时前
如何找到一个陌生服务器上的grafana-server是谁启动的
后端
小蒜学长3 小时前
springboot宠物领养救助平台的开发与设计(代码+数据库+LW)
java·数据库·spring boot·后端·宠物
武子康3 小时前
大数据-106 Spark Graph X案例:1图计算、2连通图算法、3寻找相同用户 高效分区、负载均衡与迭代优化
大数据·后端·spark
小羊在睡觉3 小时前
Go语言爬虫:爬虫入门
数据库·后端·爬虫·golang·go