兴海北路

---男儿仗剑自横行
<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

  • 随笔 - 85
  • 文章 - 0
  • 评论 - 17
  • 引用 - 0

常用链接

留言簿(6)

随笔分类

随笔档案

收藏夹

全是知识啊

搜索

  •  

最新评论

阅读排行榜

评论排行榜

mysql数据库的备份与恢复详解
作者: falcon   发表日期: 2006-04-16 10:50   复制链接



引言:

数据对我们来说,往往非常重要,一旦丢失,将损失巨大,因此应该养成备份和恢复数据的习惯

正文:

对于mysql来说,常见的备份和恢复办法如下:

先通过命令行进入mysql的bin目录下,然后进行如下操作

备份:mysqldump 需要导出的数据库名 >想备份成的文件名 -u 用户名 -p

如我想用root用户导出一个名为falcon_search的数据库为一个falcon_search.mysql,那么我就可以这么做拉

Quote:

mysqldump falcon_search >falcon_search.mysql -u root -p


Enter password: ******
******输入你的root用户密码就可以拉

备份和恢复往往是孪生兄弟或姐妹
下面我们来恢复

恢复:mysqldump 需要导入为什么数据库名 <备份好的文件名 -u 用户名 -p

假如我要恢复刚才备份的数据库,那么我可以这么做
Quote:

mysqldump falcon_search <falcon_search.mysql -u root -p


Enter password: ******
******输入你的root用户密码就可以拉

到这里,我们发现mysql数据库的备份和恢复比较简单,是吧?
不过这种备份和恢复只能在mysql内部进行哦,也就是说这样备份的数据不容易恢复到其他的数据库里头去.

其实mysqldump还有更多强大和灵活的数据导入功能,如果与load命令想结合将很灵活的实现不同数据库之间的备份和恢复.

先看看mysqldump命令介绍吧:http://www.top169.net/Article/Database/d03/200509/Article_14746.htm

下面我们就把上面连接中几个常用的东西扣出来,主要介绍如何导出数据库的表结构(create语句),数据(insert语句),表结构定义和文本内容,然后介绍如何执行类似批处理文件sql脚本,以及如何把文本内容导入到数据库内.
[注:我同样以一个数据库名为falcon_search的数据库来介绍]

首先,我们导出数据库的表结构
Quote:

mysqldump -d falcon_search >falcon_search.sql



我们发现falcon_search.sql中的内容如下:
-- MySQL dump 9.10
--
-- Host: localhost   Database: falcon_search
-- ------------------------------------------------------
-- Server version     4.0.18-nt

--
-- Table structure for table `cat_tab`
--

CREATE TABLE cat_tab (
id int(11) NOT NULL default '0',
cat char(100) binary NOT NULL default '',
postfix char(1) binary default NULL,
pid int(11) default NULL,
ipid int(11) NOT NULL default '0',
acctime int(11) default NULL,
PRIMARY KEY (id,ipid)
) TYPE=MyISAM;

--
-- Table structure for table `file_tab`
--

CREATE TABLE file_tab (
file char(100) binary NOT NULL default '',
postfix char(4) binary NOT NULL default '',
pid int(11) default NULL,
ipid int(11) default NULL,
acctime int(11) default NULL
) TYPE=MyISAM;

--
-- Table structure for table `key_tab`
--

CREATE TABLE key_tab (
skey char(100) binary NOT NULL default '',
acctime int(11) default '0',
UNIQUE KEY skey (skey)
) TYPE=MyISAM;

--
-- Table structure for table `site_tab`
--

CREATE TABLE site_tab (
id int(11) NOT NULL default '0',
site varchar(15) NOT NULL default '',
port int(11) default '21',
user varchar(15) NOT NULL default 'anonymous',
pw varchar(15) NOT NULL default 'falcon',
acc enum('N','Y') default 'N',
indb enum('N','Y') default 'N',
info text,
PRIMARY KEY (id)
) TYPE=MyISAM;

里头有详细的信息,包括数据库名,以及各个表的结构.

现在我们导出数据(insert语句)

mysqldump -t falcon_search >falcon_search.txt
注意:这里的falcon_search.txt里头的内容是一些insert语句,也是sql脚本,在创建好对应的数据库后可以直接执行

直接导出上面两项到一个文件中

mysql falcon_search >falcon_search.sql

这里的falcon_search.sql将包括上面两项内容

导出表结构以及对应表中数据的文本文件

mysqldump -T . falcon_search

生成8个文件,分别是4个表的定义文件,和四个表数据对应的文本文件

注意这个时候的参数哦,有两项包括-T(大写)以及.(当前路径,指明导出数据存放的路径,你完全可以指明为其他的路径)

补充:导出为文本格式的数据还有一个办法
例如,我要导出file_tab中的所有数据到falcon_search.txt

select * into outfile "falcon_search.txt" from file_tab;

注意:默认路径不再是bin目录下,而是mysql/data路径下,其实你可以自己指明路径

到这里我们很灵活的获得了数据库的集中形式了.

下面得介绍一下备份的孪生兄弟[恢复]哦

我们分别根据我们已经得到的备份文件来进行恢复
[注:假设我们下面进行的恢复操作是完全在一个刚安装的mysql上进行的]

第一种情况

假如我们得到的是表结构(creat语句)以及数据(insert语句)的sql脚本,即我们上面得到的falcon_search.sql和falcon_search.txt

那么我们先根据脚步里头的表结构脚本里头的数据库名创建相应的数据库

create database falcon_search;

然后先在falcon_search.txt文件的最前面添加上一句

use falcon_search;

接着直接执行表结构对应的sql脚本

mysql <falcon_search.sql

这样我们就已经创建好了数据库和表拉,剩下的是插入数据

同样我们先加入这么一句到falcon_searh.txt的最前面

use falcon_search;

接着类似执行

mysql <falcon_search.txt

这样我们就进行第一种情况的恢复工作

第二种情况

假如我们得到仅有falcon_search.sql,即里头即包含了表结构也包含了数据,那么我们恢复工作更简单拉

先创建falcon_search数据库
然后在falcon_search.sql语句的最前面添加一句

use falcon_search;

接着执行falcon_search.sql脚本就可以

mysql <falcon_search.sql


第三种情况

假如我们获得的是每个表的表结果文件(表名.sql)以及各个表的数据对应的文本文件

我们进行的工作实质上同上

先创建数据库[根据表结构文件中database的名]
然后在每个sql脚本前面加上
use falcon_search;
接着执行各个sql脚本,创建各个表
然后我们的重要内容是把文本文件导入到各个表中拉

这里重点介绍一下
需要用load data local infile "文本文件(如果不是当前路径请指明绝对路径)" into table 表名;
说明,其中local指明为从本地文件导入

假如我要把当前目录下(bin)的site_tab.txt里头的内容导入到site_tab中
只要

先进入mysql的命令行下

mysql>use falcon_search;
msyql>load data local infile "site_tab.txt" into table site_tab;

使用load的好处是,可以很方面通过文本文件这个途径把其他数据库中的内容导入到mysql中,从而作到不同数据库之间数据的转换拉。

ok,到这里基本上就完了
如果有问题可以在后面跟帖哦

posted on 2008-03-14 16:14 随意门 阅读(380) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理