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>
相关推荐
大鱼七成饱7 小时前
💥 从崩溃到稳定:我踩过的 Rust Tokio 线程池坑(含代码示例)
后端
喵个咪8 小时前
开箱即用的GO后台管理系统 Kratos Admin - 站内信
后端·微服务·go
韩立学长8 小时前
基于Springboot的旧物公益捐赠管理系统3726v22v(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
Dyan_csdn8 小时前
springboot系统设计选题3
java·spring boot·后端
Yeats_Liao9 小时前
时序数据库系列(二):InfluxDB安装配置从零搭建
数据库·后端·时序数据库
Yeats_Liao9 小时前
时序数据库系列(一):InfluxDB入门指南核心概念详解
数据库·后端·时序数据库·db
蓝-萧9 小时前
springboot系列--自动配置原理
java·后端
bobogift10 小时前
【玩转全栈】----Django基本配置和介绍
java·后端
倚栏听风雨10 小时前
Async-Profiler 框架简介
后端
qianbailiulimeng10 小时前
2019阿里java面试题(一)
java·后端