目录
1.简介
**mysqldump
**是 MySQL 数据库管理系统的命令行实用程序,用于创建数据库的逻辑备份。它能够导出数据库的结构(如表结构、视图、触发器等)以及表中的数据为 SQL 格式的文本文件。
2.基本用途
- 全库备份:可以备份整个 MySQL 服务器上的所有数据库。
- 单数据库备份:仅备份指定的单一数据库。
- 表备份:备份特定数据库中的某几张表。
3.命令格式
mysqldump [选项] [数据库名 [表名...]]
3.1常用选项
选项 | 描述 |
---|---|
-u 用户名, --user=用户名 |
指定连接MySQL服务器的用户名。 |
-p[密码], --password[=密码] |
提供连接MySQL服务器的密码。如果仅使用 -p ,将会提示输入密码。为安全起见,建议不在命令行直接暴露密码。 |
-h 主机名, --host=主机名 |
指定MySQL服务器的主机名或IP地址,默认是localhost。 |
-P 端口, --port=端口 |
如果MySQL服务不是运行在默认的3306端口,可以用此选项指定端口号。 |
-A, --all-databases |
备份所有数据库。 |
-B, --databases |
允许指定多个数据库进行备份,后面直接列出数据库名。 |
数据库名 [表名...] |
指定要备份的数据库和可选的表名,如果不指定,则默认备份所有表。 |
> 备份文件路径 |
输出重定向符号,用于指定备份文件的保存路径和名称。 |
--single-transaction |
对于支持事务的存储引擎(如InnoDB),在开始导出前启动一个事务,确保导出数据的一致性,适用于在线备份,无需锁表。 |
--lock-tables=false |
防止在备份时锁定表,通常与 --single-transaction 一起使用,尤其适用于InnoDB表。 |
--routines |
包含数据库中的存储过程和函数到备份中。 |
--triggers |
包含数据库中的触发器到备份中。 |
--events |
包含数据库中的事件调度器事件到备份中。 |
--skip-add-drop-table |
备份时不包含 DROP TABLE 语句,这样在恢复时不会删除已存在的表。 |
--quick |
在转储大表时,使用更快的读取方法,减少内存消耗。 |
3.2常用命令
**导出命令大全**
#导出education数据库里面的users表的表数据和表结构
mysqldump -u[用户名] -h[ip] -p[密码] -P[端口号] 数据库名 表名 >导出的文件名.sql
mysqldump -uroot -h127.0.0.1 -proot -P3306 education users>d:/user.sql
#导出包括系统数据库在内的所有数据库(all.sql默认保存在bin文件夹下面)
mysqldump -uroot -proot --all-databases>all.sql
#导出多张表:
mysqldump -uroot -proot --databases test --tables t1 t2>two.sql
#只导出表结构不导表数据,添加"-d"命令参数
mysqldump -uroot -h127.0.0.1 -proot -P3306 -d education users>d:/user.sql
#只导出表数据不导表结构,添加"-t"命令参数
mysqldump -uroot -h127.0.0.1 -proot -P3306 -t education users>d:/user.sql
#只导出test数据库的表结构
导出:mysqldump -uroot -proot --no-data --databases test>s1.sql
导入:mysql -uroot -proot -h127.0.0.1 -P3306 test<s1.sql
**导入命令大全**
格式:mysql -h[ip] -P[(大写)端口] -u[用户名] -p[密码] [数据库名] < d:XX.sql(路径)
mysql -uroot -proot -h127.0.0.1 -P3306 education<d:/database.sql
mysql -uroot -proot -h127.0.0.1 -P3306 <d:/all_database.sql
#命令行导入
mysql> use test;
mysql> source /home/test/database.sql
4.备份脚本
#!/bin/bash
# 设置脚本名称、日期等信息
NAME="MySQL Database Backup Script"
DATE=$(date +%Y-%m-%d-%H-%M)
LOG_FILE="/var/log/mysql_backup.log"
# 使用环境变量或配置文件读取敏感信息,提高安全性
source /etc/mysql_backup.conf 2>/dev/null # 假设配置文件存放于此路径
# 若配置文件不存在,则设置默认值或提示错误
: ${MYSQL_USER:=mysql_user_not_set}
: ${MYSQL_PASSWORD:=mysql_passwd_not_set}
: ${MYSQL_HOST:=localhost}
: ${MYSQL_PORT:=3306}
: ${MYSQL_CHARSET:=utf8mb4}
: ${BACKUP_PATH:=/backups/mysql}
: ${MAX_BACKUPS:=10}
: ${EMAIL_TO:=you@example.com}
: ${EMAIL_FROM:=backup_script@example.com}
# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_PATH"
# 获取当前日期时间,用于备份文件命名
DATE_TIME=$(date +%Y%m%d_%H%M%S)
# 执行备份并压缩
mysqldump --opt --all-databases --single-transaction --flush-logs --master-data=2 \
-h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD \
| gzip > "$BACKUP_PATH/mysql_backup_$DATE_TIME.sql.gz"
if [ $? -eq 0 ]; then
echo "$(date) - 数据库备份成功" >> "$LOG_FILE"
# 删除超出保留数量的旧备份
find "$BACKUP_PATH" -name "*.sql.gz" -type f | sort | head -n -$MAX_BACKUPS | xargs -r rm -f
echo "$(date) - 已清理过期备份文件" >> "$LOG_FILE"
# 发送邮件通知(需要安装mail或msmtp等工具)
{
echo "主题: MySQL 数据库备份通知"
echo "From: $EMAIL_FROM"
echo "To: $EMAIL_TO"
echo ""
echo "数据库备份已完成,备份文件:mysql_backup_$DATE_TIME.sql.gz"
echo "备份路径:$BACKUP_PATH"
} | mail -s "$(echo -e "MySQL Backup on $DATE")" "$EMAIL_TO"
else
echo "$(date) - 数据库备份失败,请检查错误日志" >> "$LOG_FILE"
# 发送错误通知
{
echo "主题: MySQL 数据库备份失败通知"
echo "From: $EMAIL_FROM"
echo "To: $EMAIL_TO"
echo ""
echo "数据库备份失败,请立即检查。"
} | mail -s "$(echo -e "MySQL Backup Failure on $DATE")" "$EMAIL_TO"
fi
说明:
- 环境变量 : 使用环境变量读取敏感信息,可以提高脚本的灵活性和安全性。这里假设存在一个
/etc/mysql_backup.conf
配置文件来集中管理这些变量,以避免硬编码。- 日志记录: 添加了日志文件,用于记录备份操作的详细信息,方便追踪和审计。
- 备份压缩 : 使用
gzip
命令对备份文件进行压缩,减少存储空间占用。- 自动清理 : 使用
find
命令自动清理超过保留数量的旧备份文件,提高了脚本的自动化程度。- 邮件通知 : 添加了成功和失败的邮件通知功能,可以及时提醒管理员备份状态,
5.定时执行备份脚本
-
编辑Crontab配置 :首先,打开终端并以您的用户身份运行
crontab
命令来编辑Cron配置。如果您想要以root用户身份执行备份,可以使用sudo crontab -e
,否则,只需输入crontab -e
。 -
添加定时任务 :在打开的Crontab文件中,移动光标到文件末尾,然后添加以下行来设定定时任务。假设您的备份脚本名为
mysql_backup.sh
,且该脚本位于/usr/local/bin/
目录下:0 2 * * * /usr/local/bin/mysql_backup.sh
这行的意思是:每天的凌晨2点0分执行
/usr/local/bin/mysql_backup.sh
脚本。Cron任务的时间格式为分钟 小时 日 月 星期,从左到右依次对应。 -
保存并退出 :编辑完成后,保存文件并退出编辑器。大多数情况下,您可以通过按下
Ctrl+X
,然后按Y
键确认保存,最后按回车键退出。 -
测试与验证 :您可以通过查看Cron的日志(通常是
/var/log/syslog
或/var/log/cron.log
,具体取决于您的系统配置)来确认任务是否按时执行,或者等待下一个执行时间点查看是否收到了邮件通知(如果您的脚本配置了邮件通知功能)。