我在运行Windows 7的服务器上拥有一个MySQL数据库,并且我想创建一个快速(但很安全!)副本而不关闭任何设备。我发出带有读取锁的FLUSH TABLES,运行Robocopy,然后发出UNLOCK TABLES。这是问题所在:如果我在Robocopy中使用/ B选项,它将打印很多消息,指出“该进程无法访问该文件,因为该文件正在被另一个进程使用。”,并且仅在MySql数据中复制了535个文件中的209个。目录。如果我不使用/ B选项,则Robocopy报告所有文件都已复制。但是现在我不确定。我猜想,即使在锁定状态下,MySQL也会使表文件保持打开状态,而Robocopy / B认为备份它们是不安全的。如果没有/ B,Robocopy会尽力而为,这应该可以工作,因为MySQL不执行任何I / O,但是我
如果您有一个全MyISAM数据库,则可以使用该数据库,因为所有MyISAM表的标头中都有0个文件句柄计数。
如果您有任何InnoDB表,则FLUSH TABLES WITH READ LOCK;
可能无法为数据完整性提供适当的隔离。早在2012年11月,我就在DBA StackExchange中撰写了有关此内容的文章(如何在不关闭MySQL从站的情况下使用Linux / tar运行冷备份?)
鉴于InnoDB架构(Percona首席技术官Vadim Tkechenko拍摄的照片)
FLUSH TABLES WITH READ LOCK;
发出后有四个仍在移动的对象:
假设您启动FLUSH TABLES WITH READ LOCK;
并进行Robocopy,并且复制需要5分钟,这意味着在5分钟内进行的任何物理更改都不会出现在备份中。更糟糕的是,文件更改将不会来自单个时间点。这意味着可能有些.ibd
文件可能已更改,也可能未更改,但是保存其更改的事务未完全提交。
您将不得不将数据复制到另一台机器上,启动MySQL,并查看崩溃恢复(在mysqld启动,读取和处理这四个对象期间发生)是否使数据稳定和可用。
您最好mysqldump
与--single-transaction
选项一起使用。
有关一些想法,请参阅我以前的DBA StackExchange帖子。
Apr 17, 2011
:如何优化大型数据库的mysqldump?Mar 14, 2014
:带有自动生成的导出名称的mysqldump本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句