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>
相关推荐
Z.风止1 分钟前
Go-learning(1)
开发语言·笔记·后端·golang
光电大美美-见合八方中国芯4 分钟前
【SOA仿真6】多层膜仿真计算
后端·restful
小马爱打代码11 分钟前
Spring Boot:Sentinel 企业级熔断、降级与限流实战
spring boot·后端·sentinel
野犬寒鸦23 分钟前
从零起步学习并发编程 || 第二章:多线程与死锁在项目中的应用示例
java·开发语言·数据库·后端·学习
没有bug.的程序员27 分钟前
Spring Cloud Sentinel:熔断降级规则配置与分布式流量防线实战终极指南
java·分布式·后端·spring cloud·sentinel·熔断规则·分布式流量防线
JP-Destiny29 分钟前
后端-RabbitMQ
后端·消息队列·rabbitmq·java-rabbitmq
李慕婉学姐31 分钟前
【开题答辩过程】以《基于SpringBoot Vue的校园后勤管理系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
vue.js·spring boot·后端
咖啡啡不加糖36 分钟前
Arthas 使用指南:Java 应用诊断利器
java·spring boot·后端
努力也学不会java37 分钟前
【Spring Cloud】优雅实现远程调用-OpenFeign
java·人工智能·后端·spring·spring cloud
J_liaty37 分钟前
SpringBoot整合Canal实现数据库实时同步
数据库·spring boot·后端·canal