DB-Mysql-数据备份

原理

数据库管理软件按照最初设计的逻辑关系,以数据库的逻辑结构对象为单位,将数据中的数据按照预定义的逻辑关联格式一条一条生成相关的文本文件,达到备份的目的。

逻辑

1、将数据生成为可以完全重现当时数据库中数据的INSERT语句;
2、通过软件,将数据库表的数据以特定的分隔符进行分割后记录在文本文件中。

生产insert语句

存在的问题:
mysqldump不停备份时,可能有数据变更的请求,这样可能造成mysqldump备份出来的数据不一致,在对一致性和完整性要求比较严格的系统中,该备份是无效的备份。

解决方法:
1、将整个备份过程控制在一个事务中;
mysqldump通过 -single-transcation选项支持此功能而不影响数据库的服务。
2、通过锁表:–lock-tables 每次锁定一个数据库的表;(–lock-all-tables一次锁定所有的表,适用于dump的表分别处于各个不同的数据库中的情况。

生成特定格式的纯文本备份数据文件:

优点:使用存储空间小,数据格式清晰,编辑方便;
缺点:每个备份文件只能备份一个表,没有数据结构的重建命令(不过可以通过其他方式生成);

  (1)select ... from... into outfile [fields terminated by] 
        [lines terminated by]
  (2)通过mysqldump,即 –T选项:结构与数据分别导出备份;
例如:mysqldump -u root -p -T /tmp/test backname

###数据库备份程序
mysqldump
mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。转储包含创建表和/或装载表的SQL语句。

MysqlDump与MysqlHotCopy的区别是什么?
mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类Unix 和 NetWare 系统上。
目前 MySQL 支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。

使用语法:

shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] --database DB1 [DB2 DB3...]
shell> mysqldump [options] --all-database
#如果没有指定任何表或使用了--database或--all-database选项,则转储整个数据库。

mysqldump重要参数

Options(参数)        说明
--add-drop-database 在每个CREATE DATABASE语句前添加DROP DATABASE语句
--add-drop-tables   在每个CREATE TABLE语句前添加DROP TABLE语句
--all-database      转储所有数据库中的所有表,与--database相同
--allow-keywords    允许创建关键字列名
--comments[={0|1}]  如果设置为 0,禁止转储文件中的其它信息。 默认值为1,即包括额外信息。
--default-character-set=charset 使用charsetas默认字符集。
--database,-B       转储几个数据库
--quick             该选项用于转储大的表。它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中。
--add-locks         在插入数据开始的时候加上LOCK TABLES
-R, --routines      导出函数和存储过程
--triggers          导出触发器
-n, --no-create-db  不提供建库语句
-t, --no-create-info    不写重新创建每个转储表的CREATE TABLE语句
-d, --no-data       不提供导出数据库数据记录
-T, --tab=name      分别导出数据库结构和数据,生成.sql和.txt文件
--tables            用表格式显示输出

PS:选项中“-”和“–”的区别:“—选项”后可以用=赋予值,而“-选项”不可以

mysqldump重要选项

--Options(--选项)       设置选项但无=时的默认值    未设置选项时的默认值
--add-drop--database    FALSE                   不启用
--add-drop-tables       TRUE                    启用
--all--database         FALSE   
--allow-keywords        FALSE   
--comments[={0|1}]      TRUE                    1
--default-character-set utf8                    UTF-8
--database              FALSE                   不启用
--quick                 TRUE    
--add-locks             TRUE                    启用
--triggers              TRUE                    启用
--no-create-db          FALSE                   启用
--no-create-info        FALSE                   不启用
--no-data               FALSE                   不启用
--tab=name              No default value        不启用

执行命令:mysqldump –uroot –p > test.sql 结果是什么?
输出如下提示信息:

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help

执行命令:
mysqldump –uroot –p zoo > zoo_test.sql
more zoo_test.sql

结果是怎么样的?

-- MySQL dump 10.11
--
-- Host: localhost    Database: zoo
-- ------------------------------------------------------
-- Server version   5.0.89-community
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `pet`
--

DROP TABLE IF EXISTS `pet`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;  
/*定义表结构*/
CREATE TABLE `pet` (
  `name` varchar(20) default NULL,
  `owner` varchar(20) default NULL,
  `species` varchar(20) default NULL,
  `sex` char(1) default NULL,
  `birth` date default NULL,
  `death` date default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `pet`
--
/*导出表结构*/
LOCK TABLES `pet` WRITE;
/*!40000 ALTER TABLE `pet` DISABLE KEYS */;
INSERT INTO `pet` VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL),('Bower','Benny','dog','m','1989-08-31','1995-07-29'),('Fluffy','Harold','cat','f','1993-02-04',NULL),('Claws','Gwen','bird','m','1994-03-17',NULL),('rold','cat','f','1','0000-00-00',NULL),('Claws','Gwen','cat','m','1994-03-17','0000-00-00'),('Buffy','Harold','dog','f','1989-05-13','0000-00-00'),('Fang','Benny','dog','m','1990-08-27','0000-00-00'),('Bowser','Diane','dog','m','1979-08-31','1995-07-29'),('Chirpy','Gwen','bird','f','1998-09-11','0000-00-00'),('Slim','Benny','snake','m','1996-04-29',NULL),('',NULL,NULL,NULL,NULL,NULL);
/*!40000 ALTER TABLE `pet` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2010-01-18  0:55:11
mysqldump

mysqldump最常用于备份一个整个的数据库:
shell> mysqldump –opt db_name > backup-file.sql
可以这样将转储文件读回到服务器:
shell> mysql db_name < backup-file.sql


mysqldump也可用于从一个MySQL服务器向另一个服务器复制数据时装载数据库:
shell> mysqldump –opt db_name | mysql –host=remote_host -C db_name
其中,-C表示压缩在客户端和服务器之间发送的所有信息
–compress,-C
压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)。


可以用一个命令转储几个数据库:
shell > mysqldump —database db_name1 [db_name2 …] > my_databases.sql
如果想要转储所有数据库,使用–all–database选项:
shell > mysqldump –all-databases > all_databases.sql


纯数据文本备份的恢复,利用load命令、
Shell > mysql -u root -p 数据库名< 备份文件目录
例如: mysqldump -uroot -p –tables zoo pet < /root/est1/pet_dump.sql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值