该文件的其余部分由更多的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
mysqldump 的其他选项包括如下所示的几个:
--flush-log 和--lock-tables 的结合有助于检查数据库。--lock-table 锁定所有正在转储的表,而--flush-log 关闭并重新打开更新日志文件。如果正在产生后续的更新日志,则新的更新日志将只包含从备份的那一点开始修改数据库的查询。这时检查对于该备份
时间的更新日志的检查点(然而,锁定所有的表对于备份期间客户机访问来说不太好,如果您有需要执行更新操作的客户机的话)。
如果用--flush-logs 检查对于备份时间的更新日志检查点,最好转储整个数据库。如果转储单个文件,则将更新日志的检查点与备份文件同步是比较难的。在恢复操作中,您通常在总数据库( per- d a t a b a s e)的基础上抽取更新日志的内容。对于抽取单个表的更新日志来说没有选项,因此您必须自己抽取它们。
缺省设置时,mysqldump 将表的全部内容在写之前读到内存中。这实际上不是必须的,事实上,如果您真的有大型表的话,这几乎是一个失败的方法。可以用--quick 选项告诉mysqldump 写每一行(只要是被检索的)。要想进一步优化该转储过程,可用- - o p t
来代替- - q ui c k。-- opt 选项开启其他的选项,这些选项将加快转储数据和读回数据的速度。
由于快速备份的好处,使得用--opt 执行备份成为最常用的方法。但是,要当心, - - o p t 选项有一个代价: --opt 所优化的是您的备份过程,而不是由其他客户机对数据库的访问。--opt 选项可防止任何人更新被锁定的正在转储的任何表。您会很容易地发现在常
规数据库访问中在这一点上所做的努力。试着在一天中数据库通常最繁忙的时刻运行一个备份。这不会花费太多的时间。
与--opt 作用有点相反的选项是- d e l a y e d。该选项导致mysqldump 写INSERT D E L AYED 语句而非INSERT 语句。如果您将一个数据文件加载到另一个数据库中并且想要使该操作对其他查询(这些查询可能正在数据库中发生)造成的影响最小,则- -
d e l a y e d将有助于达到这个目的。
--compress 选项有助于将数据库拷贝到另一台机器上,因为它可以减少网络传输中的字节数量。这里有一个例子,请注意,为了使程序与远程主机上的服务器进行通信(而不是与本地主机通信),给出了--compress 选项:
% mysqldump --opt samp_db | mysql--compress -h boa.snake.net samp_db
mysqldump 有许多选项,详细信息请参考附录E。
使用直接拷贝数据库备份和拷贝方法
不用mysqldump 来备份数据库或表的另一种方法是直接拷贝表文件。通常可利用像c p、tar 或cpio 这样的实用程序来进行。本节的例子使用的是c p。
(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)当使用直接拷贝备份( direct-copy backup)方法时,必须确保没有使用这些表。如果在拷贝一个表的同时服务器正在修改它,则拷贝无效。
确保拷贝完整性的最好方法是关闭服务器,拷贝文件,然后重新启动服务器。如果不想关闭服务器,则应参考第13 章,查阅有关在执行表检查点时锁定服务器的介绍。如果服务器在运行中,则相同的约束都适用于拷贝文件,您应该用同样的锁定协议使服务器保持静止状态。
假定服务器关闭,或者已经锁定了想要拷贝的表,下面的例子将说明怎样将整个samp_db 数据库备份到备份目录中( DATADIR 代表服务器的数据目录):
% cd DATADIR
% cp -r samp_db /usr/archive/mysql 单个表可按如下进行拷贝:
% cd DATADIR/samp_db
% cd member.* /usr/archive/mysql/samp_db
% cd score.* /usr/archive/mysql/samp_db
...
当完成备份时,可以重新启动服务器(如果已使它关闭),或者释放在表上施加的锁(如果保持服务器运行)。
要想用直接拷贝文件将数据库从一台机器拷贝到另一台机器,只要将这些文件拷贝到另一台服务器主机上的相应数据库上即可。应确保这些文件是对MyISAM 表的或者两台机器都有相同的硬件结构。否则这些表在第二个主机上看起来好象有很奇怪的内容。还应该确保第
二台主机的服务器不会在您安装这些表时去访问它们。
复制数据库
术语复制的含义简单地说有点像拷贝数据库到另一个服务器,或者是包含在主数据库的内容发生变化时次数据库的有效更新( live updating)的含义。如果想简单地将数据库拷贝到另一个服务器上,则可以使用在前面已经讨论的那些命令。自MySQL3.23 版本以来,就已经开始出现对基于有效更新的复制的支持。但它的功能仍未成熟,因此,在这方面笔者没有什么可讨论的,如果有兴趣,您可以注意一下当前的新版本,看看有些什么新的开发功能。
查看全套"Mysql入门系列教程"