MySQL数据库备份
在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。已经知道表被破坏,用诸如vi或Emacs等编辑
器试图直接编辑它们,这对表绝对不是件好事!
备份数据库两个主要方法是用mysqldump程序或直接拷贝数据库文件(如用cp、cpio或tar等)。每种方法都
有其优缺点:
mysqldump与MySQL服务器协同操作。直接拷贝方法在服务器外部进行,并且你必须采取措施保证没有客户正
在修改你将拷贝的表,一般在数据库关闭情况下做。mysqldump比直接拷贝要慢些。mysqldump生成能够移植
到其它机器的文本文件,甚至那些有不同硬件结构的机器上。直接拷贝文件可以移植到同类机器上,但不能
移植到其它机器上,除非你正在拷贝的表使用MyISAM存储格式。
一、使用mysqldump备份和拷贝数据库
当你使用mysqldump程序产生数据库备份文件时,缺省地,文件内容包含创建正在倾倒的表的CREATE语句和包
含表中行数据的INSERT语句。换句话说,mysqldump产生的输出可在以后用作mysql的输入来重建数据库。
Mysqldump参数如下:
#mysqldump -u 用户名-p'密码' 数据库名 [表名] > 操作系统下文件名
举例:#./mysqldump -u root -p'123456' samp_db>samp.db.txt
输出文件的开头看起来象这样:
# MySQL Dump 6.0
#
# Host: localhost Database: samp_db
#---------------------------------------
# Server version 3.23.2-alpha-log
#
# Table structure for table 'absence'
#
CREATE TABLE absence(
student_id int(10) unsigned DEFAULT '0' NOT NULL,
date date DEFAULT '0000-00-00' NOT NULL,
PRIMARY KEY (student_id,date)
);
#
# Dumping data for table 'absence'
#
INSERT INTO absence VALUES (3,'1999-09-03');
INSERT INTO absence VALUES (5,'1999-09-03');
INSERT INTO absence VALUES (10,'1999-09-08');
......
文件剩下的部分有更多的INSERT和CREATE TABLE语句组成。
输出单个的表:
#mysqldump samp_db student score event absence >grapbook.sql
#mysqldump samp_db member president >hist-league.sql
缺省地,mysqldump在写入前将一个表的整个内容读进内存。这通常确实不必要,并且实际上如果你有一个大
表,几乎是失败的。你可用--quick选项告诉mysqldump只要它检索出一行就写出每一行。为了进一步优化倾
倒过程,使用--opt而不是--quick。--opt选项打开其它选项,加速数据的倾倒和把它们读回。
二、使用直接拷贝数据库的备份和拷贝方法
另一种不涉及mysqldump备份数据库和表的方式是直接拷贝数据库表文件。典型地,这用诸如cp、tar或cpio
实用程序。本文的例子使用cp。
%cd DATADIR
%cp -r samp_db /usr/archive/mysql
单个表可以如下备份:
%cd DATADIR/samp_db
%cp member.* /usr/archive/mysql/samp_db
%cp score.* /usr/archive/mysql/samp_db
....
当你完成了备份时,你可以重启服务器(如果关闭了它)或释放加在表上的锁定(如果你让服务器运行)。
要用直接拷贝文件把一个数据库从一台机器拷贝到另一台机器上,只是将文件拷贝到另一台服务器主机的适
当数据目录下即可。要确保文件是MyIASM格式或两台机器有相同的硬件结构,否则你的数据库在另一台主机
上有奇怪的内容。你也应该保证在另一台机器上的服务器在你正在安装数据库表时不访问它们。
建一个sh文件bakmysql.sh
#!/bin/sh
cd /usr/local/mysql/
tar cvf /mount2/mysqlvar.tar var
可以设到操作系统自动运行。
root用户crontab文件
/var/spool/cron/crontabs/root增加以下内容
0 2 1 * * /mount2/bakmysql.sh
#/etc/rc2.d/S75cron stop
#/etc/rc2.d/S75cron start
重新击活Sun Solaris自动处理进程
三、用备份恢复数据
数据库损坏的发生有很多原因,程度也不同。如果你走运,你可能仅损坏一两个表(如掉电),如果你倒霉
,你可能必须替换整个数据目录(如磁盘损坏)。在某些情况下也需要恢复,比如用户错误地删除了数据库
或表。不管这些倒霉事件的原因,你将需要实施某种恢复。
如果表损坏但没丢失,尝试用myisamchk或isamchk修复它们,如果这样的损坏可有修复程序修复。
1、 恢复整个数据库
Mysqldump参数如下:
#mysqldump -u 用户名-p'密码' 数据库名 < 操作系统下文件名
举例:
先在Mysql里创建另一个数据库
mysql> create database test;
然后将备份的数据导入
#mysqldump -u root -p'123456' test2 < samp.db.txt
器试图直接编辑它们,这对表绝对不是件好事!
备份数据库两个主要方法是用mysqldump程序或直接拷贝数据库文件(如用cp、cpio或tar等)。每种方法都
有其优缺点:
mysqldump与MySQL服务器协同操作。直接拷贝方法在服务器外部进行,并且你必须采取措施保证没有客户正
在修改你将拷贝的表,一般在数据库关闭情况下做。mysqldump比直接拷贝要慢些。mysqldump生成能够移植
到其它机器的文本文件,甚至那些有不同硬件结构的机器上。直接拷贝文件可以移植到同类机器上,但不能
移植到其它机器上,除非你正在拷贝的表使用MyISAM存储格式。
一、使用mysqldump备份和拷贝数据库
当你使用mysqldump程序产生数据库备份文件时,缺省地,文件内容包含创建正在倾倒的表的CREATE语句和包
含表中行数据的INSERT语句。换句话说,mysqldump产生的输出可在以后用作mysql的输入来重建数据库。
Mysqldump参数如下:
#mysqldump -u 用户名-p'密码' 数据库名 [表名] > 操作系统下文件名
举例:#./mysqldump -u root -p'123456' samp_db>samp.db.txt
输出文件的开头看起来象这样:
# MySQL Dump 6.0
#
# Host: localhost Database: samp_db
#---------------------------------------
# Server version 3.23.2-alpha-log
#
# Table structure for table 'absence'
#
CREATE TABLE absence(
student_id int(10) unsigned DEFAULT '0' NOT NULL,
date date DEFAULT '0000-00-00' NOT NULL,
PRIMARY KEY (student_id,date)
);
#
# Dumping data for table 'absence'
#
INSERT INTO absence VALUES (3,'1999-09-03');
INSERT INTO absence VALUES (5,'1999-09-03');
INSERT INTO absence VALUES (10,'1999-09-08');
......
文件剩下的部分有更多的INSERT和CREATE TABLE语句组成。
输出单个的表:
#mysqldump samp_db student score event absence >grapbook.sql
#mysqldump samp_db member president >hist-league.sql
缺省地,mysqldump在写入前将一个表的整个内容读进内存。这通常确实不必要,并且实际上如果你有一个大
表,几乎是失败的。你可用--quick选项告诉mysqldump只要它检索出一行就写出每一行。为了进一步优化倾
倒过程,使用--opt而不是--quick。--opt选项打开其它选项,加速数据的倾倒和把它们读回。
二、使用直接拷贝数据库的备份和拷贝方法
另一种不涉及mysqldump备份数据库和表的方式是直接拷贝数据库表文件。典型地,这用诸如cp、tar或cpio
实用程序。本文的例子使用cp。
%cd DATADIR
%cp -r samp_db /usr/archive/mysql
单个表可以如下备份:
%cd DATADIR/samp_db
%cp member.* /usr/archive/mysql/samp_db
%cp score.* /usr/archive/mysql/samp_db
....
当你完成了备份时,你可以重启服务器(如果关闭了它)或释放加在表上的锁定(如果你让服务器运行)。
要用直接拷贝文件把一个数据库从一台机器拷贝到另一台机器上,只是将文件拷贝到另一台服务器主机的适
当数据目录下即可。要确保文件是MyIASM格式或两台机器有相同的硬件结构,否则你的数据库在另一台主机
上有奇怪的内容。你也应该保证在另一台机器上的服务器在你正在安装数据库表时不访问它们。
建一个sh文件bakmysql.sh
#!/bin/sh
cd /usr/local/mysql/
tar cvf /mount2/mysqlvar.tar var
可以设到操作系统自动运行。
root用户crontab文件
/var/spool/cron/crontabs/root增加以下内容
0 2 1 * * /mount2/bakmysql.sh
#/etc/rc2.d/S75cron stop
#/etc/rc2.d/S75cron start
重新击活Sun Solaris自动处理进程
三、用备份恢复数据
数据库损坏的发生有很多原因,程度也不同。如果你走运,你可能仅损坏一两个表(如掉电),如果你倒霉
,你可能必须替换整个数据目录(如磁盘损坏)。在某些情况下也需要恢复,比如用户错误地删除了数据库
或表。不管这些倒霉事件的原因,你将需要实施某种恢复。
如果表损坏但没丢失,尝试用myisamchk或isamchk修复它们,如果这样的损坏可有修复程序修复。
1、 恢复整个数据库
Mysqldump参数如下:
#mysqldump -u 用户名-p'密码' 数据库名 < 操作系统下文件名
举例:
先在Mysql里创建另一个数据库
mysql> create database test;
然后将备份的数据导入
#mysqldump -u root -p'123456' test2 < samp.db.txt
meiking
2005-01-31 17:02:44
评论:0
阅读:1173
引用:0
