# 备份Mysql结构和数据

本文作者:程序员飞云

本站地址:https://www.flycode.icu (opens new window)

# Mysql备份方式

mysqldump -u用户名 -p密码 --databases 数据库 > xxx.sql
1

(opens new window)

# 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

# Cron定时执行脚本

  1. 创建新的定时任务
crontab -e 
1
  1. 编写任务
0 */1 * * * sh  /food/ztgtDcApi/mysql_dump_back.sh
1

需要注意脚本里面必须要使用备份命令的绝对路径,否则无法执行。

# 使用Navicat定时备份任务

image-20241225143951093

image-20241225143752921

# 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
最近更新: 1/14/2025, 1:13:36 AM
飞云编程   |