备份和拷贝MYSQL数据库查询

重要的是在表丢失和毁坏时备份数据库查询。如果系统发生崩溃,您就能够将表恢复到崩溃时刻的状态,并尽量不丢失数据。同样,错发DROP DATABASE 或DROP TABLE 命令的用户可能会向您请求进行数据修复。有时,这是由MySQL管理人员引起的破坏,管理人员试图通过使用像vi 或eMacs 这样的在线编辑器直接编辑表文件而毁坏了它们。这样做对表来说肯定是干了坏事。

备份数据库查询的两种主要方法是使用mysqldump 程序或直接拷贝数据库查询文件(如便用c p、tar 或c p i o)。每种方法都有个人优点和缺点:

mysqldump 与MySQL网络服务器联合进行操作。直接拷贝方法与网络服务器相脱离,因此必须采取一定的有效措施确保在进行拷贝时没有客户机在修改这些表。这个问题与利用系统文件备份来备份数据库查询的问题相同:如果数据库查询表在系统文件备份时进行更新,则进行备份的表文件处于非一致的状态,并且对于今后恢复该表没更有意义。系统文件备份和直接拷贝文件的区别是:对于后者,您具有控制备份进度的权利,因此可以采取一定的有效措施确保网络服务器使表处于静止状态。

mysqldump 比直接拷贝技术要慢

mysqldump 产生可移植到其他机器、甚至具有不同硬件结构的机器上的文本文档。直接拷贝文件不能够移植到其他机器上,除非要拷贝的表使用MyISAM 存储格式。ISAM 表只能在具有相同硬件结构的机器之间进行拷贝。例如,将文件从S PARC 的Solaris 机器拷到Intel 的Solaris 机器(或者相反)是难以实现的。由MySQL3.23 引进的MyISAM 表存储格式可以解决这个问题,因为该格式与机器独立。因此,如果以下两个条件都满足的话,直接拷贝文件可以移植到具有不同硬件结构的机器上:即另一台机器上也必须运行MySQL3.23 以上的版本,并且文件必须表示成MyISAM 表,而不是ISAM 表。

不论选择哪种备份方法,都有某些原则,您应该始终坚持这些原则,才能确保在需要恢复数据库查询内容时得到最好的结果:

定期执行备份。设置一个时刻表并坚持使用它。

告诉网络服务器运行版本更新。版本更新在您需要恢复崩溃后的数据库查询时给予帮助。在使用备份数据将数据库查询恢复到备份时刻的状态后,可以通过运行版本更新中的查询,重新运行备份之后所做的改变。这个操作将数据库查询中的表恢复到了崩溃时刻的状态。在系统文件备份语言中,数据库查询备份数据表示完全转储( full dump),而版本更新则表示增量转储。

使用一致和可理解的备份数据命名模式。像b a c k up 1、backup2 等名字没有特殊的含义。当需要它执行恢复时,还得虚度光阴去查看文件中的内容。您会发现使用数据库查询名和花时间去构造备份数据名是有好处的。例如:

% mysqldump samp_db /usr/archives/mysql/samp_db.

% mysqldump menagerie /usr/archives/mysql/menagerie.

在产生备份数据后您可能需要将它们压缩。毕竟备份数据都比较大,所以您可能还需要终止备份数据以免它们填满磁盘,这与终止日志文件类似。您可以用相同的技术终止备份数据:

用系统文件备份来备份您的备份数据。如果您遭受了一个完全崩溃,不仅毁坏了数据目录而且还破坏了包含数据库查询备份的磁盘控制器,那将造成真实的麻烦。您还应该备份版本更新。

将备份数据放在与您的数据库查询不同的系统文件上。这将减少含有数据字典的系统文件被生成的备份数据填满的概率。

创建备份的技术对于将数据库查询拷到另一个网络服务器上也是很有帮助的。将数据库查询转移到运行在另一个主机上的网络服务器是很平常的,但您还能够将数据转移到运行在相同主机上的另一个网络服务器。如果正为一个最新版本的MySQL运行网络服务器,并且想用成品网络服务器上的某些真实数据来测试它时,可能会这样做。还有一种可能,那便是您得到了一台新的机器并要将所有的数据库查询移动到新机器上。

用mysqldump 备份和拷贝数据库查询

当使用mysqldump 程序产生数据库查询备份数据时,缺省设置是该文件的内容由C R E AT E TABLE 语句组成,这些语句创建被转储的表以及包含表中的行数据的INSERT 语句。也就是说,mysqldump 创建在今后可作为对mysql的输入使用的输出结果,以重建数据库查询。

可以将整个数据库查询按以下命令转储到单独的文本文档中:



该文件的其余部分由更多的INSERT 和CREATE TABLE 语句组成。如果想在生成备份时进行压缩,可换成类似下列的命令:

% mysqldump samp_db | gzip /usr/archives/mysql/samp_db.1999.10.02.gz

如果您有一个超互联网大数据库,则该输出文件也将是极大的且管理起来很困难。如果您喜欢的话,可以通过在mysqldump 命令的数据库查询名之后命名单个的表来转储这些表的内容。这个操作将该转储文件分成更小的、更多的可管理的文件。下面的例子将说明如何把samp_db 的一些表转储到单个文件中:

% mysqldump samp_db student score event absence gradebook.sql

% mysqldump samp_db member president hist-league.sql

如果您正在生成备份数据并打算用这些备份数据来定期刷新另一个数据库查询的内容,则可能要使用--add-drop-table 选项。此选项告诉mysqldump 将DROP TABLE IF EXISTS 语句写到备份数据中。然后,当您取出该备份数据并将其加载到第二个数据库查询时,如果表已经存在将不会出现错误报告。如果您正在运行第二个数据库查询,可使用此技术利用从第一个数据库查询中的数据拷贝来定期地加载它。


扫描二维码分享到微信