快捷搜索:

MySQL平台数据库备份详细说明

在数据库表损掉或毁坏的环境下,备份你的数据库是很紧张的。假如发生系统崩溃,你肯定想能够将你的表尽可能损掉起码的数据规复到崩溃发生时的状态。无意偶尔,恰是MySQL治理员造成破坏。治理员已经知道表已破坏,用诸如vi或Emacs等编辑器试图直接编辑它们,这对表绝对不是件好事!

备份数据库两个主要措施是用mysqldump法度榜样或直接拷贝数据库文件(如用cp、cpio或tar等)。每种措施都有其优毛病:

mysqldump与MySQL办事器协同操作。直接拷贝措施在办事器外部进行,并且你必须采取步伐包管没有客户正在改动你将拷贝的表。假如你想用文件系统备份来备份数据库,也会发生同样的问题:假如数据库表在文件系统备份历程中被改动,进入备份的表文件主语不同等的状态,而对今后的规复表将掉去意义。文件系统备份与直接拷贝文件的差别是对后者你完全节制了备份历程,这样你能采取步伐确保办事器让表不受滋扰。

mysqldump比直接拷贝要慢些。

mysqldump天生能够移植到其它机械的文本文件,以致那些有不合硬件布局的机械上。直接拷贝文件不能移植到其它机械上,除非你正在拷贝的表应用MyISAM存储款式。ISAM表只能在相似的硬件布局的机械上拷贝。在MySQL 3.23中引入的MyISAM表存储款式办理了该问题,由于该款式是机械无关的,以是直接拷贝文件可以移植到具有不合硬件布局的机械上。只要满意两个前提:另一台机械必须也运行MySQL 3.23或今后版本,而且文件必须以MyISAM款式表示,而不是ISAM款式。

不管你应用哪种备份措施,假如你必要规复数据库,有几个原则应该遵守,以确保最好的结果:

按期实施备份。建立一个计划并严格遵守。

让办事器履行更新日志。当你在崩溃后必要规复数据时,更新日志将赞助你。在你用备份文件规复数据到备份时的状态后,你可以经由过程运行更新日志中的查询再次运用备份后面的改动,这将数据库中的表规复到崩溃发生时的状态。

以文件系统备份的术语讲,数据库备份文件代表完全倾倒(full dump),而更新日志代表渐进倾倒(incremental dump)。

应用一种统一的和易理解的备份文件命名机制。象backup1、buckup2等不是分外故意义。当实施你的规复时,你将挥霍光阴找出文件里是什么器械。你可能发觉用数据库名和日期构成备份文件名会很有用。例如:

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

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

你可能想在天生备份后压缩它们。备份一样平常都很大年夜!你也必要让你的备份文件有过时候日以避免它们填满你的磁盘,就象你让你的日志文件过时那样。

用文件系统备份备份你的备份文件。假如赶上了一个彻底崩溃,不仅清除了你的数据目录,也清除了包孕你的数据库备份的磁盘驱动器,你将真正赶上了麻烦。

也要备份你的更新日志。

将你的备份文件放在不合于用于你的数据库的文件系统上。这将低落因为天生备份而填满包孕数据目录的文件系统的可能性。

用于创建备份的技巧同样对拷贝数据库到另一台机械有用。最常见解,一个数据库被转移到了运行在另一台主机上的办事器,然则你也可以将数据转移到同一台主机上的另一个办事器。

1 应用mysqldump备份和拷贝数据库

当你应用mysqldumo法度榜样孕育发生数据库备份文件时,缺省地,文件内容包孕创建正在倾倒的表的CREATE语句和包孕表中行数据的INSERT语句。换句话说,mysqldump孕育发生的输出可在今后用作mysql的输入来重修数据库。

你可以将全部数据库倾倒进一个零丁的文本文件中,如下:

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

%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选项经由过程一次锁定所有表阻拦任何人更新你正在倾倒的任何表。你可在一样平常数据库造访上很轻易看到其效果。当你的数据库一样平常异常频繁地应用,只是一天一次地调节备份。

要用直接拷贝文件把一个数据库从一台机械拷贝到另一台机械上,只是将文件拷贝到另一台办事器主机的适当数据目录下即可。要确保文件是MyIASM款式或两台机械有相同的硬件布局,否则你的数据库在另一台主机上有稀罕的内容。你也应该包管在另一台机械上的办事器在你正在安装数据库表时不造访它们。

3 复制数据库(Replicating Database)

复制(Replication)类似于拷贝数据库到另一台办事器上,但它切实着实切含义是实时地包管两个数据库的完全同步。这个功能将在3.23版中呈现,而且还不很成熟,是以本文不作具体先容。

4 用备份规复数据

数据库毁坏的发生有很多缘故原由,程度也不合。假如你行运,你可能仅毁坏一两个表(如掉落电),假如你不利,你可能必须调换全部数据目录(如磁盘毁坏)。在某些环境下也必要规复,比如用户差错地删除了数据库或表。不管这些不利事故的缘故原由,你将必要实施某种规复。

假如表毁坏但没损掉,考试测验用myisamchk或isamchk修复它们,假如这样的毁坏可有修复法度榜样修复,你可能根本不必要应用备份文件。关于表修复的历程,见《数据库掩护与修复》。

规复历程涉及两种信息源:你的备份文件和个更新日志。备份文件将表规复到实施备份时的状态,然而一样平常表在备份与发生问题之间的光阴内已经被改动,更新日志包孕了用于进行这些改动的查询。你可以应用日志文件作为mysql的输入来重复查询。这已恰是为什么要启用更新日志的缘故原由。

规复历程视你必须规复的信息若干而不合。实际上,规复全部数据库比单个表跟轻易,由于对付数据库运用更新日志比单个表轻易。

4.1 规复全部数据库

首先,假如你想规复的数据库是包孕授权表的mysql数据库,你必要用--skip-grant-table选项运行办事器。否则,它会诉苦不能找到授权表。在你已经规复表后,履行mysqladmin flush-privileges奉告办事器装载授权标并应用它们。

您可能还会对下面的文章感兴趣: