千云物流 -低代码平台MySQL备份数据

发布于:2024-09-19 ⋅ 阅读:(106) ⋅ 点赞:(0)

windows备份

在这里插入图片描述

全量备份

创建备份目录

需要在安装数据库的服务器上创建备份目录,所有如果要做备份至少需要两倍的硬盘空间,

mkdir D:\mysql_backup\full_backup

准备备份脚本

创建一个windows批处理文件(例如 full_backup.bat),用来执行全量备份并使用 robocopy 将备份文件传输到远程服务器。

@echo off

:: 配置部分
set MYSQL_USER=root
set MYSQL_PASSWORD=yourpassword
set MYSQL_HOST=localhost
set BACKUP_DIR=C:\mysql_backups\full
set REMOTE_DIR=\\remote-server\backup\full
set TIMESTAMP=%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set BACKUP_FILE=%BACKUP_DIR%\full_backup_%TIMESTAMP%.sql

:: 创建本地备份目录
if not exist %BACKUP_DIR% (
    mkdir %BACKUP_DIR%
)

:: 执行全量备份
mysqlpump -u%MYSQL_USER% -p%MYSQL_PASSWORD% -h%MYSQL_HOST% --result-file=%BACKUP_FILE%

:: 使用robocopy传输备份文件到远程服务器
robocopy %BACKUP_DIR% %REMOTE_DIR% %BACKUP_FILE%

:: 输出备份完成信息
if %errorlevel% leq 1 (
    echo Full backup completed successfully and copied to remote server.
) else (
    echo Error during backup or file transfer.
)
pause

脚本说明:

  • BACKUP_DIR:本地存储备份文件的目录。
  • REMOTE_DIR:远程服务器的备份目录路径。
  • TIMESTAMP:生成带时间戳的备份文件名,确保每次备份文件名唯一。
  • mysqlpump:执行全量备份命令。
  • robocopy:复制备份文件到远程服务器,robocopy 会自动处理网络传输中的一些问题。

执行全量备份

编写批处理脚本

自动化备份

你可以通过Windows任务计划程序将这些脚本设置为定期执行,每两天进行全量备份,每天执行增量备份

  1. 打开“任务计划程序”。
  2. 创建基本任务,并设置触发器(如每周或每天)。
  3. 在操作中,选择“启动程序”,然后浏览并选择对应的批处理文件(full_backup.bat 或 incremental_backup.bat)。
  4. 保存任务。

增量备份

启用二进制日志

这里需要启用二进制,配置文件中的配置mysql的配置my.ini

[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server-id=1

编写增量备份脚本

MySQL的增量备份一般是通过备份二进制日志(Binary Logs)来实现的。以下是一个基于 mysqlpump 备份二进制日志的增量备份脚本示例:

@echo off

:: 配置部分
set MYSQL_USER=root
set MYSQL_PASSWORD=yourpassword
set MYSQL_HOST=localhost
set BINLOG_DIR=C:\mysql_binlogs
set BACKUP_DIR=C:\mysql_backups\incremental
set REMOTE_DIR=\\remote-server\backup\incremental
set TIMESTAMP=%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%

:: 创建本地备份目录
if not exist %BACKUP_DIR% (
    mkdir %BACKUP_DIR%
)

:: 刷新二进制日志
mysqladmin -u%MYSQL_USER% -p%MYSQL_PASSWORD% -h%MYSQL_HOST% flush-logs

:: 复制新的二进制日志到备份目录
robocopy %BINLOG_DIR% %BACKUP_DIR% mysql-bin.*

:: 使用robocopy传输增量备份文件到远程服务器
robocopy %BACKUP_DIR% %REMOTE_DIR%

:: 输出备份完成信息
if %errorlevel% leq 1 (
    echo Incremental backup completed successfully and copied to remote server.
) else (
    echo Error during incremental backup or file transfer.
)
pause
  • BINLOG_DIR:二进制日志文件的存储目录。
  • mysqladmin flush-logs:刷新二进制日志,生成新的日志文件,准备备份旧的日志文件。
  • robocopy:将本地备份文件传输到远程服务器,并处理传输中的问题。

传输二进制日志文件

@echo off
set BINLOG_DIR=C:\mysql\data
set REMOTE_SHARE=\\192.168.1.100\BackupDirectory\incremental_backup

echo Transferring binary logs to remote share...
robocopy %BINLOG_DIR% %REMOTE_SHARE% mysql-bin.*

if %errorlevel% geq 8 (
    echo Failed to transfer binary logs to the remote share.
) else (
    echo Binary logs successfully transferred to the remote share.
)

echo Incremental backup completed.

备份计划

恢复备份

恢复全量备份

mysql -u root -p < /path/to/backup/directory/full_backup_YYYYMMDD.sql

应用增量备份

mysqlbinlog /path/to/backup/directory/incremental_backup/mysql-bin.000001 | mysql -u root -p
mysqlbinlog /path/to/backup/directory/incremental_backup/mysql-bin.000002 | mysql -u root -p

linux备份