电脑技术学习

MySQL数据库备份守则和方法

dn001


如果你想压缩备份,使用类似如下的命令:



%mysqldump;samp_db;│;gzip;>/usr/archives/mysql/samp_db.1999-10-02.gz;

如果你要一个庞大的数据库,输出文件也将很庞大,可能难于管理。如果你愿意,你可以在mysqldump命令行的数据库名后列出单独的表名来倾到它们的内容,这将倾倒文件分成较小、更易于管理的文件。下例显示如何将samp_db数据库的一些表倾到进分开的文件中:

%mysqldump;samp_db;student;score;event;absence;>grapbook.sql;

%mysqldump;samp_db;member;president;>hist-league.sql;

如果你生成准备用于定期刷新另一个数据库内容的备份文件,你可能想用--add-drop-table选项。这告诉服务器将DROP;TABLE;IF;EXISTS语句写入备份文件,然后,当你取出备份文件并把它装载进第二个数据库时,如果表已经存在,你不会得到一个错误。如果你倒出一个数据库以便能把数据库转移到另一个服务器,你甚至不必创建备份文件。要保证数据库存在于另一台主机,然后用管道倾倒数据库,这样mysql能直接读取mysqldump的输出。例如:你想从主机pit-viper.snake.net拷贝数据库samp_db到boa.snake.net,可以这样很容易做到:



%mysqladmin;-h;boa.snake.net;create;samp_db;

%mysqldump;samp_db;│;mysql;-h;boa.snake.net;samp_db;

以后,如果你想再次刷新boa.snake.net上的数据库,跳过mysqladmin命令,但要对mysqldump加上--add-drop-table以避免的得到表已存在的错误:

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

mysqldump其它有用的选项包括:;

--flush-logs --lock-tables 组合将对你的数据库检查点有帮助。

--lock-tables 锁定你正在倾倒的所有表

--flush-logs 关闭并重新打开更新日志文件,新的更新日志将只包括从备份点起的修改数据库的查询。这将设置你的更新日志检查点位备份时间。(然而如果你有需要执行个更新的客户,锁定所有表对备份期间的客户访问不是件好事。)如果你使用 --flush-logs 设置检查点到备份时,有可能最好是倾倒整个数据库。如果你倾倒单独的文件,较难将更新日志检查点与备份文件同步。在恢复期间,你通常按数据库为基础提取更新日志内容,对单个表没有提取更新的选择,所以你必须自己提取它们。缺省地,mysqldump 在写入前将一个表的整个内容读进内存。这通常确实不必要,并且实际上如果你有一个大表,几乎是失败的。你可用 --quick 选项告诉 mysqldump 只要它检索出一行就写出每一行。为了进一步优化倾倒过程,使用 --opt而不是 --quick--opt 选项打开其它选项,加速数据的倾倒和把它们读回。用 --opt 实施备份可能是最常用的方法,因为备份速度上的优势。然而,要警告你,--opt 选项确实有代价,--opt 优化的是你的备份过程,不是其他客户对数据库的访问。--opt 选项通过一次锁定所有表阻止任何人更新你正在倾倒的任何表。你可在一般数据库访问上很容易看到其效果。当你的数据库一般非常频繁地使用,只是一天一次地调节备份。一个具有 --opt 的相反效果的选项是--dedayed。该选项使得 mysqldump 写出 INSERT;DELAYED 语句而不是 INSERT 语句。如果你将数据文件装入另一个数据库并且你想是这个操作对可能出现在该数据库中的查询的影响最小,--delayed 对此很有帮助。 --compress 选项在你拷贝数据库到另一台机器上时很有帮助,因为它减少网络传输字节的数量。下面有一个例子,注意到--compress 对与远端主机上的服务器通信的程序才给出,而不是对与本地主机连接的程序:;

%mysqldump;--opt;samp_db;│;mysql;--compress;-h;boa.snake.net;samp_db;

mysqldump有很多选项,详见《MySQL参考手册》。