# 备份Mysql结构和数据
本文作者:程序员飞云
# Mysql备份方式
mysqldump -u用户名 -p密码 --databases 数据库 > xxx.sql
1
# Centos备份Mysql
# 设置环境变量
#!/bin/bash
# 设置环境变量
export PATH=$PATH:/usr/local/soft/mysql/bin
# 日志文件路径
log_file="$backup_dir/log.txt"
error_log_file="$backup_dir/error.log"
# 保存备份个数,备份31天数据
number=31
backup_dir=/food/ztgtDcApi/mysqlbackup
# 获取当前日期时间
dd=$(date +%Y-%m-%d-%H-%M-%S)
# 备份工具绝对路径
tool=/usr/local/soft/mysql/bin/mysqldump
# MySQL 用户名和密码
username=root
password=ldhy888@666
# 将要备份的数据库名称
database_name=sky_take_out
# 如果文件夹不存在则创建
if [ ! -d "$backup_dir" ]; then
mkdir -p "$backup_dir"
fi
# 执行备份并捕获错误输出
backup_file="$backup_dir/$database_name-$dd.sql"
$tool -u"$username" -p"$password" "$database_name" > "$backup_file" 2>> "$error_log_file"
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "[$(date)] Backup succeeded: $backup_file" >> "$log_file"
else
echo "[$(date)] Backup failed: $backup_file" >> "$log_file"
fi
# 删除 `:wq` 错误指令
# 判断现在的备份数量是否大于 $number
count=$(ls -1 "$backup_dir"/*.sql 2>/dev/null | wc -l)
if [ $count -gt $number ]; then
# 找出需要删除的最早备份文件
delfile=$(ls -t "$backup_dir"/*.sql | tail -n 1)
if [[ -n "$delfile" && -f "$delfile" ]]; then
# 删除最早生成的备份,只保留 number 数量的备份
rm -f "$delfile"
# 写删除文件日志
echo "[$(date)] Deleted old backup: $delfile" >> "$log_file"
fi
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Cron定时执行脚本
- 创建新的定时任务
crontab -e
1
- 编写任务
0 */1 * * * sh /food/ztgtDcApi/mysql_dump_back.sh
1
需要注意脚本里面必须要使用备份命令的绝对路径,否则无法执行。
# 使用Navicat定时备份任务
# Windows定时备份数据
编写.bat脚本命令
@echo off
setlocal
:: 设置日期和时间格式为 YYYYMMDD_HHMMSS
for /f "tokens=2 delims==" %%i in ('"wmic os get localdatetime /value"') do set datetime=%%i
set Ymd=%datetime:~0,8%
set Hms=%datetime:~8,6%
:: 创建备份目录
set backupDir=D:\sky-take-out\%Ymd%
if not exist "%backupDir%" (
mkdir "%backupDir%"
) else (
echo 子目录或文件 %backupDir% 已经存在。
)
:: 定义 MySQL 用户名和密码 (注意: 密码应避免明文存储)
set mysqlUser=root
set mysqlPassword=ldhy888@666
:: 定义输出文件路径,包括时间戳
set logFile="%backupDir%\backup_log_%Hms%.txt"
set outputFile="%backupDir%\database_%Ymd%_%Hms%.sql"
:: 执行 mysqldump 并记录日志
"D:\Developer Tools\MySQL\MySQL Server 8.0\bin\mysqldump.exe" -u %mysqlUser% -p%mysqlPassword% -h 47.100.167.169 sky_take_out > "%outputFile%" 2>> "%logFile%"
:: 检查 mysqldump 是否成功完成
if errorlevel 1 (
echo Error occurred during database backup at %Ymd%_%Hms%. Check the log file for details.
) else (
echo Database backup completed successfully at %Ymd%_%Hms%.
)
endlocal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35