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 DATABASE
和USE
语句。 - 恢复时无需预先创建数据库,会自动创建。
恢复命令:
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>
