文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>MySQL数据库备份与恢复

MySQL数据库备份与恢复

时间:2009-07-21  来源:beyondzsq

首先建立一个计划并严格遵守,定期实施备份。

让服务器执行更新日志。当你在崩溃后需要恢复数据时,更新日志将帮助你。在你用备份文件恢复数据到备份时的状态后,你可以通过运行更新日志中的查询再次运用备份后面的修改,这将数据库中的表恢复到崩溃发生时的状态。
以文件系统备份的术语讲,数据库备份文件代表完全倾倒(full dump),而更新日志代表渐进倾倒(incremental dump)。
使用一种统一的和易理解的备份文件命名机制。象backup1、buckup2等不是特别有意义。当实施你的恢复时,你将浪费时间找出文件里是什么东西。你可能发觉用数据库名和日期构成备份文件名会很有用。
你可能想在生成备份后压缩它们。备份一般都很大!你也需要让你的备份文件有过期期限以避免它们填满你的磁盘,就象你让你的日志文件过期那样。
用文件系统备份你的备份文件。如果遇上了一个彻底崩溃,不仅清除了你的数据目录,也清除了包含你的数据库备份的磁盘驱动器,你将真正遇上了麻烦。也要备份你的更新日志。
将你的备份文件放在不同于用于你的数据库的文件系统上。这将降低由于生成备份而填满包含数据目录的文件系统的可能性。
用于创建备份的技术同样对拷贝数据库到另一台机器有用。最常见地,一个数据库被转移到了运行在另一台主机上的服务器,但是你也可以将数据转移到同一台主机上的另一个服务器。下面以数据库dzzw作为讲解备份恢复的实例:
一、.数据恢复
1.使用mysqldump备份数据库
当你使用mysqldump程序产生数据库备份文件时,缺省地,文件内容包含创建正在倾倒的表的CREATE语句和包含表中行数据的INSERT语句。换句话说,mysqldump产生的输出可在以后用作mysql的输入来重建数据库。
Mysqldump参数如下:
#mysqldump数据库名 [表名] -u 用户名-p '密码' > 操作系统下文件名

举例:

C:\>mysqldump dzzw -u root -p > d:\buckupdb\dzzw\dzzw2040728.sql
Enter password: ******
C;\>
这说明备份成功。

输出文件的开头看起来象这样:
-- MySQL dump 9.10
--
-- Host: localhost   Database: dzzw
-- ------------------------------------------------------
-- Server version      4.0.18-nt

--
-- Table structure for table `a_catalog`
--

CREATE TABLE a_catalog (
catalog_id varchar(50) NOT NULL default '',
dossier_id varchar(50) NOT NULL default '',
parent_id varchar(50) default NULL,
name text NOT NULL,
brief text,
creater_id varchar(50) NOT NULL default '',
active char(1) NOT NULL default 'Y',
ts datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (catalog_id,dossier_id)
) TYPE=MyISAM;

--
-- Dumping data for table `a_catalog`
--

INSERT INTO a_catalog VALUES ('sdaf','sadf','sadf','asdf','asdf','000','Y','2004-05-25 09:02:34');
INSERT INTO a_catalog VALUES ('sdf','sadf','sadf','sdaf','asdf','000','Y','2004-05-25 09:11:40');
INSERT INTO a_catalog VALUES ('DQGXL001','xhq001','xhq001','党群关系类','好好好好!','001','Y','2004-07-15 13:59:02');
INSERT INTO a_catalog VALUES ('阿萨达萨','xhq001','xhq001','阿萨','阿阿萨阿萨达萨巴','001','N','2004-07-15 14:03:03');
INSERT INTO a_catalog VALUES ('阿洒洒洒','xhq001','DQGXL001','阿达','阿达阿萨','001','Y','2004-07-15 14:03:40');
……
...... 
文件剩下的部分有更多的INSERT和CREATE TABLE语句组成。
输出单个的表:

C:\>mysqldump dzzw a_catalog -u root -p > d:\buckupdb\dzzw\a_catalog2040728.sql
Enter password: ******

C;\>
这说明备份成功。
输出文件的开头看起来象这样:
-- MySQL dump 9.10
--
-- Host: localhost   Database: dzzw
-- ------------------------------------------------------
-- Server version      4.0.18-nt

--
-- Table structure for table `a_catalog`
--

CREATE TABLE a_catalog (
catalog_id varchar(50) NOT NULL default '',
dossier_id varchar(50) NOT NULL default '',
parent_id varchar(50) default NULL,
name text NOT NULL,
brief text,
creater_id varchar(50) NOT NULL default '',
active char(1) NOT NULL default 'Y',
ts datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (catalog_id,dossier_id)
) TYPE=MyISAM;

--
-- Dumping data for table `a_catalog`
--

INSERT INTO a_catalog VALUES ('sdaf','sadf','sadf','asdf','asdf','000','Y','2004-05-25 09:02:34');
INSERT INTO a_catalog VALUES ('sdf','sadf','sadf','sdaf','asdf','000','Y','2004-05-25 09:11:40');
INSERT INTO a_catalog VALUES ('DQGXL001','xhq001','xhq001','党群关系类','好好好好!','001','Y','2004-07-15 13:59:02');
INSERT INTO a_catalog VALUES ('阿萨达萨','xhq001','xhq001','阿萨','阿阿萨阿萨达萨巴','001','N','2004-07-15 14:03:03');
INSERT INTO a_catalog VALUES ('阿洒洒洒','xhq001','DQGXL001','阿达','阿达阿萨','001','Y','2004-07-15 14:03:40');


缺 省地,mysqldump在写入前将一个表的整个内容读进内存。这通常确实不必要,并且实际上如果你有一个大表,几乎是失败的。你可用--quick选项 告诉mysqldump只要它检索出一行就写出每一行。为了进一步优化倾倒过程,使用--opt而不是--quick。--opt选项打开其它选项,加速 数据的倾倒和把它们读回。

C:\>mysqldump dzzw a_catalog --opt -u root -p > d:\buckupdb\dzzw\a_catalog204072
8.sql
Enter password: ******

C:\>
这说明备份成功。

输出文件的开头看起来象这样:
DROP TABLE IF EXISTS a_catalog;
CREATE TABLE a_catalog (
catalog_id varchar(50) NOT NULL default '',
dossier_id varchar(50) NOT NULL default '',
parent_id varchar(50) default NULL,
name text NOT NULL,
brief text,
creater_id varchar(50) NOT NULL default '',
active char(1) NOT NULL default 'Y',
ts datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (catalog_id,dossier_id)
) TYPE=MyISAM;

--
-- Dumping data for table `a_catalog`
--


/*!40000 ALTER TABLE a_catalog DISABLE KEYS */;
LOCK TABLES a_catalog WRITE;
INSERT INTO a_catalog VALUES ('sdaf','sadf','sadf','asdf','asdf','000','Y','2004-05-25 09:02:34'),('sdf','sadf','sadf','sdaf','asdf','000','Y','2004-05-25 09:11:40'),('DQGXL001','xhq001','xhq001','党群关系类','好好好 好!','001','Y','2004-07-15 13:59:02'),('阿萨达萨','xhq001','xhq001','阿萨','阿阿萨阿萨达萨巴 ','001','N','2004-07-15 14:03:03'),('阿洒洒洒','xhq001','DQGXL001','阿达','阿达阿萨','001','Y','2004-07-15 14:03:40');
UNLOCK TABLES;
/*!40000 ALTER TABLE a_catalog ENABLE KEYS */;

2.使用直接拷贝数据库的备份方法
另一种不涉及mysqldump备份数据库和表的方式是直接拷贝数据库表文件。
关 闭数据库,拷贝D:\mysql\data\dzzw 所有文件。当你完成了备份时,你可以重启服务器(如果关闭了它)或释放加在表上的锁定(如果你让服务器运行)。要用直接拷贝文件把一个数据库从一台机器拷 贝到另一台机器上,只是将文件拷贝到另一台服务器主机的适当数据目录下即可。要确保文件是MyIASM格式或两台机器有相同的硬件结构,否则你的数据库在 另一台主机上有奇怪的内容。你也应该保证在另一台机器上的服务器在你正在安装数据库表时不访问它们。

二、.数据恢复
数据库损坏的发生有很多原因,程度也不同。如果你走运,你可能仅损坏一两个表(如掉电),如果你倒霉,你可能必须替换整个数据目录(如磁盘损坏)。在某些情况下也需要恢复,比如用户错误地删除了数据库或表。
1.用mysqldump恢复整个数据库
Mysqldump参数如下:
#mysqldump -u 用户名-p'密码' 数据库名 < 操作系统下文件名

举例:
先在Mysql里创建数据库
mysql> create database dzzw;
Query OK, 1 row affected (0.05 sec)

然后将备份的数据导入
C:\>mysql -u root -p dzzw < d:\dzzw2040728.sql
Enter password: *****

进入mysql 建立用户hs
C:\>mysql -uroot -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.0.18-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
mysql> use dzzw;
Database changed
mysql> grant select,insert,update,delete on dzzw.* to hs@localhost identified by
'hsoft';
Query OK, 0 rows affected (0.16 sec)

mysql> grant select,insert,update,delete on dzzw.* to hs identified by 'hsoft';
Query OK, 0 rows affected (0.00 sec)

这样就成功恢复了数据库dzzw;
2. 使用直接拷贝备份的数据库恢复整个数据库
     先关闭mysql数据库,把备份的数据库dzzw,放到 d:\mysql\data\下就行,
这样就把数据库dzzw恢复了。然后启动mysql数据库,进入mysql 建立用户hs
C:\>mysql -uroot -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.0.18-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
mysql> use dzzw;
Database changed
mysql> grant select,insert,update,delete on dzzw.* to hs@localhost identified by
'hsoft';
Query OK, 0 rows affected (0.16 sec)

mysql> grant select,insert,update,delete on dzzw.* to hs identified by 'hsoft';
Query OK, 0 rows affected (0.00 sec)

这样就成功恢复了数据库dzzw;

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载