我有一台Windows Server 2008 R2机器,并且有2台MySQL MyISAM数据库。 这些数据库是相当大的,因为它们的大小超过20GB。
我每周更新一次这些数据库。 (我在这个过程中禁用了我的网站 – 但这对我来说是好的)。 然后closuresMySQL服务器实例,并将物理文件夹复制到同一台服务器上的另一个备份文件夹(date戳 – 例如:CB1_17_03_2016)。
最近我注意到的是,在备份文件夹中,单个文件(或大多数文件) – .MYD,.MYI等与实际的MySQL数据中的文件有不同的(较旧的)修改date/时间夹。 这就像文件被复制,没有做出的改变。 我在.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
更新表格后立即进行此复制。 在closuresMySQL实例并复制文件之前,我需要发出一个FLUSH TABLES或类似的东西吗?
提前感谢蒂姆
也许可以用下面的方法代替:
MySQL :: MySQL 5.7参考手册:: 4.5.4 mysqldump – 一个数据库备份程序
你不能简单地复制MySQL文件来进行备份。 这将是不一致的,最有可能的腐败。
在Windows上使用MyISAM表(我假设没有InnoDB表),你有以下的备份选项:
FLUSH TABLES WITH READ LOCK ) 你想要做的就是所谓的物理备份 ,就是说你正在复制原始数据库文件。
更安全的赌注是停止mysql并复制整个目录 – 换句话说,你已经在做什么。
您在备份上看到较早的修改时间,可能是因为当您重新启动mysql服务时,表格文件被触摸,并且上次修改时间被更新。
为了确保文件是相同的,你可以在两个文件上运行MD5比较器, 然后重新启动mysql服务。 比较之后,重新启动服务并检查文件的上次修改时间是否已更新。