|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。mysql|备份|数据|数据库主要的是在表丧失和损坏时备份数据库。假如体系产生溃散,您就可以够将表恢复到溃散时候的形态,并尽量不丧失数据。一样,错发DROPDATABASE或DROPTABLE命令的用户大概会向您哀求举行数据恢复。偶然,这是由MySQL办理员引发的损坏,办理员试图经由过程利用像vi或emacs如许的编纂器间接编纂表文件而损坏了它们。如许做对表来讲一定是干了好事。
备份数据库的两种次要办法是利用mysqldump程序或间接拷贝数据库文件(如便用cp、tar或cpio)。每种办法都有本人的长处和弱点:
mysqldump与MySQL服务器团结举行操纵。间接拷贝办法与服务器相离开,因而必需接纳措施确保在举行拷贝时没有客户机在修正这些表。这个成绩与使用文件体系备份来备份数据库的成绩不异:假如数据库表在文件体系备份时举行更新,则举行备份的表文件处于非分歧的形态,而且关于从此恢复该表没成心义。文件体系备份和间接拷贝文件的区分是:关于后者,您具有把持备份进度的权力,因而能够接纳措施确保服务器使表处于运动形态。
mysqldump比间接拷贝手艺要慢。
mysqldump发生可移植到其他呆板、乃至具有分歧硬件布局的呆板上的文本文件。间接拷贝文件不克不及够移植到其他呆板上,除非要拷贝的表利用MyISAM存储格局。ISAM表只能在具有不异硬件布局的呆板之间举行拷贝。比方,将文件从SPARC的Solaris呆板拷贝到Intel的Solaris呆板(大概相反)是行欠亨的。由MySQL3.23引进的MyISAM表存储格局能够办理这个成绩,由于该格局与呆板自力。因而,假如以下两个前提都满意的话,间接拷贝文件能够移植到具有分歧硬件布局的呆板上:即另外一台呆板上也必需运转MySQL3.23以上的版本,而且文件必需暗示成MyISAM表,而不是ISAM表。
不管选择哪一种备份办法,都有某些准绳,您必需保持这些准绳,才干确保在必要恢单数据库内容时失掉最好的了局:
按期实行备份。设置一个工夫表并保持利用它。
告知服务器运转更新日记。更新日记在您必要恢复溃散后的数据库时赐与匡助。在利用备份文件将数据库恢复到备份时候的形态后,能够经由过程运转更新日记中的查询,从头运转备份以后所做的改动。这个操纵将数据库中的表恢吹搅吮览J笨痰淖刺T谖募高潮阜萦镅灾校菘獗阜菸募硎就耆?fulldump),而更新日记则暗示增量转储。
利用分歧和可了解的备份文件定名形式。像backup1、backup2等名字没有特别的寄义。当必要它实行恢复时,还得华侈工夫往检察文件中的内容。您会发明利用数据库名和花工夫往机关备份文件名是有优点的。比方:
%mysqldumpsamp_db>/usr/archives/mysql/samp_db.1999-10-02
%mysqldumpmenagerie>/usr/archives/mysql/menagerie.1999-10-02
在发生备份文件后您大概必要将它们紧缩。究竟备份文件都对照年夜,以是您大概还必要停止备份文件以免它们填满磁盘,这与停止日记文件相似。您能够用不异的手艺停止备份文件:
用文件体系备份来备份您的备份文件。假如您蒙受了一个完整溃散,不但损坏了数据目次并且还损坏了包括数据库备份的磁盘驱动器,那将形成真实的贫苦。您还应当备份更新日记。
将备份文件放在与您的数据库分歧的文件体系上。这将削减含无数据字典的文件体系被天生的备份文件填满的大概性。
创立备份的手艺关于将数据库拷贝到另外一个服务器上也是很有匡助的。将数据库转移到运转在另外一个主机上的服务器是很寻常的,但您还能够将数据转移到运转在不异主机上的另外一个服务器。假如正为一个新版本的MySQL运转服务器,而且想用制品服务器上的某些实在数据来测试它时,大概会如许做。另有一种大概,那就是您失掉了一台新的呆板并要将一切的数据库挪动到新呆板上。
用mysqldump备份和拷贝数据库
当利用mysqldump程序发生数据库备份文件时,缺省设置是该文件的内容由CREATETABLE语句构成,这些语句创立被转储的表和包括表中的行数据的INSERT语句。换句话说,mysqldump创立在从此可作为对mysql的输出利用的输入了局,以重修数据库。
能够将全部数据库按以下命令转储到独自的文本文件中:
该文件的其他部分由更多的INSERT和CREATETABLE语句构成。
假如想在天生备份时举行紧缩,可交换成相似以下的命令:
%mysqldumpsamp_db|gzip>/usr/archives/mysql/samp_db.1999.10.02.gz
假如您有一个超年夜数据库,则该输入文件也将是极年夜的且办理起来很坚苦。假如您喜好的话,能够经由过程在mysqldump命令的数据库名以后定名单个的表来转储这些表的内容。这个操纵将该转储文件分红更小的、更多的可办理的文件。上面的例子将申明怎样将samp_db的
一些表转储到单个文件中:
%mysqldumpsamp_dbstudentscoreeventabsence>gradebook.sql
%mysqldumpsamp_dbmemberpresident>hist-league.sql
假如您正在天生备份文件并盘算用这些备份文件来按期革新另外一个数据库的内容,则大概要利用--add-drop-table选项。此选项告知mysqldump将DROPTABLEIFEXISTS语句写到备份文件中。然后,当您掏出该备份文件并将其加载到第二个数据库时,假如表已存在将不会呈现毛病信息。假如您正在运转第二个数据库,可以使用此手艺使用从第一个数据库中的数据拷贝来按期地加载它。
假如您正在转储数据库使该数据库能够转换到另外一个服务器上,则不必创立备份文件。应确保该数据库存在于另外一台主机上,然后用一个管道使mysql间接读取mysqldump的输入了局来转储数据库。比方,假如想要将samp_db数据库从pit_viper.snake.net拷贝到boa.snake.net,操纵以下:
%mysqladmin-hboa.snake.netcreatesamp_db
%mysqldumpsamp_db|mysql-hboa.snake.netsamp_db
稍后,假如想要在boa.snake.net中再次革新该数据库,可跳过mysqladmin命令,但要将--add-drop-table增添到mysqldump中,以免失掉有关“表已存在”的毛病:
%mysqldump--add-drop-tablesamp_db|mysql-hboa-snake.netsamp_db
mysqldump的其他选项包含以下所示的几个:
--flush-log和--lock-tables的分离有助于反省数据库。--lock-table锁定一切正在转储的表,而--flush-log封闭偏重新翻开更新日记文件。假如正在发生后续的更新日记,则新的更新日记将只包括从备份的那一点入手下手修正数据库的查询。这时候反省关于该备份
工夫的更新日记的反省点(但是,锁定一切的表关于备份时代客户机会见来讲不太好,假如您有必要实行更新操纵的客户机的话)。
假如用--flush-logs反省关于备份工夫的更新日记反省点,最恶化储全部数据库。假如转储单个文件,则将更新日记的反省点与备份文件同步是对照难的。在恢复操纵中,您一般在总数据库(per-database)的基本上抽取更新日记的内容。关于抽取单个表的更新日记来讲没有选项,因而您必需本人抽取它们。
缺省设置时,mysqldump将表的全体内容在写之前读到内存中。这实践上不是必需的,现实上,假如您真的有年夜型表的话,这几近是一个失利的办法。能够用--quick选项告知mysqldump写每行(只需是被检索的)。要想进一步优化该转储历程,可用--opt
来取代--quick。--opt选项开启其他的选项,这些选项将加速转储数据和读回数据的速率。
因为疾速备份的优点,使得用--opt实行备份成为最经常使用的办法。可是,要小心,--opt选项有一个价值:--opt所优化的是您的备份历程,而不是由其他客户机对数据库的会见。--opt选项可避免任何人更新被锁定的正在转储的任何表。您会很简单地发明在常
规数据库会见中在这一点上所做的勉力。试着在一天中数据库一般最忙碌的时候运转一个备份。这不会消费太多的工夫。
与--opt感化有点相反的选项是-delayed。该选项招致mysqldump写INSERTDELAYED语句而非INSERT语句。假如您将一个数据文件加载到另外一个数据库中而且想要使该操纵对其他查询(这些查询大概正在数据库中产生)酿成的影响最小,则--
delayed将有助于到达这个目标。
--compress选项有助于将数据库拷贝到另外一台呆板上,由于它能够削减收集传输中的字节数目。这里有一个例子,请注重,为了使程序与远程主机上的服务器举行通讯(而不是与当地主机通讯),给出了--compress选项:
%mysqldump--optsamp_db|mysql--compress-hboa.snake.netsamp_db
mysqldump有很多选项,具体信息请参考附录E。
利用间接拷贝数据库备份和拷贝办法
不必mysqldump来备份数据库或表的另外一种办法是间接拷贝表文件。一般可使用像cp、tar或cpio如许的有用程序来举行。本节的例子利用的是cp。
当利用间接拷贝备份(direct-copybackup)办法时,必需确保没有利用这些表。假如在拷贝一个表的同时服务器正在修正它,则拷贝有效。
确保拷贝完全性的最好办法是封闭服务器,拷贝文件,然后从头启动服务器。假如不想封闭服务器,则应参考第13章,查阅有关在实行表反省点时锁定服务器的先容。假如服务器在运转中,则不异的束缚都合用于拷贝文件,您应当用一样的锁定协定使服务器坚持运动形态。
假定服务器封闭,大概已锁定了想要拷贝的表,上面的例子将申明如何将全部samp_db数据库备份到备份目次中(DATADIR代表服务器的数据目次):
%cdDATADIR
%cp-rsamp_db/usr/archive/mysql单个表可按以下举行拷贝:
%cdDATADIR/samp_db
%cdmember.*/usr/archive/mysql/samp_db
%cdscore.*/usr/archive/mysql/samp_db
...
当完成备份时,能够从头启动服务器(假如已使它封闭),大概开释在表上施加的锁(假如坚持服务器运转)。
要想用间接拷贝文件将数据库从一台呆板拷贝到另外一台呆板,只需将这些文件拷贝到另外一台服务器主机上的响应数据库上便可。应确保这些文件是对MyISAM表的大概两台呆板都有不异的硬件布局。不然这些表在第二个主机上看起来好象有很奇异的内容。还应当确保第
二台主机的服务器不会在您安装这些表时往会见它们。
复制数据库
术语“复制”的寄义复杂地说有点像“拷贝数据库到另外一个服务器”,大概是包括在主数据库的内容产生变更时次数据库的无效更新(liveupdating)的寄义。假如想复杂地将数据库拷贝到另外一个服务器上,则可使用在后面已会商的那些命令。自MySQL3.23版本以来,就已入手下手呈现对基于无效更新的复制的撑持。但它的功效仍未成熟,因而,在这方面笔者没有甚么可会商的,假如有乐趣,您能够注重一下以后的新版本,看看有些甚么新的开辟功效。业界普遍的声音认为:“MySQL是一个可靠的数据库系统,MySQL学习教程无论是在嵌入式或大型群集系统的部署中,还是在基于Web的应用程序领域。 |
|