通过复制物理文件夹备份 MySQL MyISAM 数据库

通过复制物理文件夹备份 MySQL MyISAM 数据库

我有一台 Windows Server 2008 R2 机器,上面有 2 个 MySQL MyISAM 数据库。这些数据库相当大,总大小超过 20GB。

我每周更新一次这些数据库。(在此过程中,我会禁用我的网站 - 但这对我来说没问题)。然后,我关闭 MySQL 服务器实例,并将物理文件夹复制到同一服务器上的另一个备份文件夹(带日期戳 - 例如:CB1_17_03_2016)。

不过,我最近注意到,在备份文件夹中,单个文件(或大多数文件)- .MYD、.MYI 等的修改日期/时间与实际 MySQL 数据文件夹中的文件不同(较旧)。就好像复制文件时没有进行任何更改。我在 .bat 文件中使用以下代码来复制数据文件:

REM Switch off MySQL service, backup the newly updated folders, and switch on MySQL service again.

SET BackupFolder=C:\Backups\Data

FOR /f "tokens=1-5 delims=/ " %%d in ("%date%") DO SET Folder1=%BackupFolder%\CB1_%%d_%%e_%%f
FOR /f "tokens=1-5 delims=/ " %%d in ("%date%") DO SET Folder2=%BackupFolder%\CB2_%%d_%%e_%%f

SET MySqlFolder=...the folder where the MySQL data files are...
robocopy "%MySqlFolder%\cb1" "%Folder1%"
robocopy "%MySqlFolder%\cb2" "%Folder2%"

cd "%MySQLPath%" (set to MySql.exe location)
NET START MySQL

更新表后立即进行此复制。在关闭 MySQL 实例并复制文件之前,我是否需要发出 FLUSH TABLES 或类似命令?

提前致谢,蒂姆

答案1

答案2

您不能简单地复制 MySQL 文件来进行备份。它会不一致,而且很可能损坏。

在具有 MyISAM 表的 Windows 上(我假设没有 InnoDB 表),您有以下备份选项:

  • mysqlhotcopy(它复制文件但用 包装它FLUSH TABLES WITH READ LOCK
  • mysqldump/mysqlpump
  • 冷备份的从属设备
  • Oracle 的 MySQL 企业备份 ($$$)

答案3

你想要做的就是物理备份,从某种意义上说,您正在复制原始数据库文件。

更安全的做法是停止 mysql 并复制整个目录 - 换句话说,就是您正在做的事情。

您在备份上看到较旧的修改时间,可能是因为当您重新启动 mysql 服务时,表文件被触及,并且它们的最后修改时间被更新。

为了确保文件相同,你可以对两个文件运行 MD5 比较器,重启mysql服务,对比完成后​​重启服务,检查文件的最后修改时间是否更新。

相关内容