备份和拷贝MYSQL数据库

2008-02-23 07:41:58来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

重要的是在表丢失和毁坏时备份数据库。假如系统发生崩溃,您就能够将表恢复到崩溃时刻的状态,并尽可能不丢失数据。同样,错发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. 1999-10-02

% mysqldump menagerie> /usr/archives/mysql/menagerie.1999-10-02

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

用文档系统备份来备份您的备份文档。假如您遭受了一个完全崩溃,不但毁坏了数据目录而且还破坏了包含数据库备份的磁盘驱动器,那将造成真正的麻烦。您还应该备份更新日志。

将备份文档放在和您的数据库不同的文档系统上。这将减少含有数据字典的文档系统被生成的备份文档填满的可能性。

创建备份的技术对于将数据库拷贝到另一个服务器上也是很有帮助的。将数据库转移到运行在另一个主机上的服务器是很平常的,但您还能够将数据转移到运行在相同主机上的另一个服务器。假如正为一个新版本的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 语句写到备份文档中。然后,当您取出该备份文档并将其加载到第二个数据库时,假如表已存在将不会出现错误信息。假如您正在运行第二个数据库,可使用此技术利用从第一个数据库中的数据拷贝来定期地加载他。

假如您正在转储数据库使该数据库能够转换到另一个服务器上,则无须创建备份文档。应确保该数据库存在于另一台主机上,然后用一个管道使mysql直接读取mysqldump 的输出结果来转储数据库。例如,假如想要将samp_db 数据库从p i t _ v i per.snake.net 拷贝到b o a . s n a k e . n e t,操作如下:

% mysqladmin -h boa.snake.netcreate samp_db

% mysqldump samp_db | mysql-h boa.snake.net samp_db

稍后,假如想要在boa.snake.net 中再次刷新该数据库,可跳过mysqladmin 命令,但要将--add-drop-table 增加到mysqldump 中,以避免得到有关“表已存在”的错误:

% mysqldump --add-drop-table samp_db | mysql-h boa-snake.net samp_db

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Linux系统中Mysql

下一篇: 备份PostgreSQL和MySQL数据库