学习内容:

1.数据库的重要数据备份...

2.什么时候需要使用到数据库备份..

3.如何恢复备份的数据..

1.备份:

说到备份,相比大家都不应该陌生,比如说我们平时在为我们的电脑重新做系统的时候,那么我们保存在电脑里的重要文件我们都需要进行备份..或者是当我们在使用一键还原系统的时候,我们也需要进行备份..那么数据库也不例外,我们需要对数据库里面保存的重要数据进行备份..比如说一个大型的企业,那么必然会有自己的一个大型数据库,那么数据库管理员必然会将自己企业的数据库进行备份,一旦数据库的数据丢失,那么管理员可以将数据恢复到当时备份时的状态,以至于企业不会有任何的损失...

i.使用mysqldump进行数据库备份...

mysqldump -u root -h localhost -p samp_db >d:\samp_db_2015.sql
解释一下这个语句:mysqldump关键字..
-u表示user,就是用户....
-h表示host,登陆用户的主机名称
-p表示password,登陆时的密码,这里localhost表示的是我们本机,还可以使用ip地址,比如说127.0.0.1也是可以的...
samp_db表示我们要备份的数据库为samp_db...
>.....表示要保存的位置... -- MySQL dump 10.13 Distrib 5.1.73, for Win64 (unknown) //这一行表示了我们使用mysqldump工具的版本号
--
-- Host: 127.0.0.1 Database: samp_db           //主机信息和数据库备份的名称...
-- ------------------------------------------------------
-- Server version 5.1.73-community            //mysql服务器的版本号 /*!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 */;
DROP TABLE IF EXISTS `c_count`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `c_count` (       //这里表示的是我建立的表格,包含着表的基本信息....
`id` int(11) NOT NULL,
`num` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `c_count` //这里代表注释部分mysql数据库的注释部分使用 --符号..
--
/*!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 2015-05-11 19:41:23

我这里截取的内容不全,因为我建的数据库表格信息太多..如果全截下来估计得很长...想必大家也没心情看...所以就简单的截了部分内容...

这里面包含着drop,insert,create等语句...我稍微的解释一下上面的含义.....看上表。。。

注:

1./*!.....*/部分表示的是可执行的mysql注释语句,这些语句只能在mysql中执行...在其他类型的数据库将被认定为注释内容,并且不会被执行,这里体现了数据库的可移植性...

2./*!40101...*/这个40101表示的是这段语句在mysql的4.01.01版本或者比这个更高的版本的条件下才能被执行....

ii.mysqldump实现对部分表的备份...

mysqldump -u root -h localhost -p samp_db shop >d:\samp_db_shop_2015.sql;

这个和上面基本差不多,就是在数据库的后面多追加了某个表格...如果是多个表格的话,我们可以使用空格来进行分隔...

iii.mysqldump备份全部或者多个数据库...

mysqldump -u root -h localhost -p --databases samp_db mysql >d:\databases_2015.sql  //备份多个数据库,加 --databases
mysqldump -u root -h localhost -p --all-databases >d:\all_databases_2015.sql; //备份全部的数据库,加 --all-databases

备份的内容也基本和第一个截取的一样...只是能多了一点东西,由于是多个数据库的备份,那么备份的内容将会指明哪一个数据库是samp_db,哪一个是mysql。。。多个数据库之间我们用空格分隔...

2.物理备份...

简单的介绍一下物理备份的内容...

i.直接对数据库的存储目录进行复制...这一般属于一种简答,快速,有效的备份方式。。。但是这种备份方式还是有缺点的..它无法对innodb存储引擎下的数据进行备份...并且还原的时候最好是还原到相同版本,不同版本可能会导致不兼容...

ii.另一种方式是使用mysqlhotcopy进行备份...mysqlhotcopy是在perl脚本下才能够运行的...这个被成为快速备份,并且只能备份myisam存储引擎下的表这个我没有进行过多的研究,所以就不班门弄斧了...

-------------------------------------------------------------------——————————————————————————

2.数据恢复<==>还原

还原就是我们所说的数据恢复,我们之所以要备份数据库,不就是为了当数据库出现问题的时候,我们把备份数据进行还原的吗。。。所以有了备份,那么自然也要有还原...

i.使用mysql语句指令进行还原...

mysql -u user -p [dbname]<filename.sql //基本语法

这个在上面备份数据库的时候,对各个部分都有了一个讲解,所以这里不一个一个部分进行讲解了,只是在恢复的时候变成了 < 号了 .....

mysql -u root -h localhost -p samp_db < d:\samp_db_2015.sql; //还原我们备份的数据库信息....

注意:执行上面这条命令的时候我们必须要把数据库建好,否则会导致错误的发生....

还有我们可以在登陆到了数据库以后使用source语句进行数据库恢复....

mysql> use samp_db;
Database Changed
mysql>source d:\samp_db_2015.sql; //使用source还原数据库里的数据信息

ii.物理还原...

1.第一种就是我们在备份的时候直接对数据库的存储目录进行了复制,那么当还原的时候我们只需要把我们复制的东西重新拷贝到我们的存储目录下就可以直接完成了数据库的还原...

说白了就是假如我们有一个数据库samp_db,里面有一些重要的数据信息,重要的数据信息在存储目录下一定是按文件进行存储的,我们把这些文件直接剪切,放置到一个文件夹中保存。。那么这样做,就代表samp_db数据库里的重要数据丢失了,然后我们把我们那个文件夹里的数据重新拷贝到samp_db文件夹中,这样就代表重要数据还原回来了...

注意:这种方法只能还原在同一版本下的数据库,并且只对myisam存储引擎有效,对innodb存储引擎无效...

2.mysqlhotcopy快速恢复...

这种我也没有进行深入的研究,因此不进行班门弄斧....

注意:如果需要恢复的数据库已经存在,则在使用DROP语句删除已经存在的数据库之后,恢复才能成功。另外mysql不同版本之间必须兼容,恢复之后的数据才可以使用!!

-----------———————————————————————————————————————————————————————

3.数据库迁移.

数据库的迁移:数据库的迁移一般由数据库管理员来搞定...在这里也简单的说一下....

迁移的一般原因:

1、需要安装新的数据库服务器

2、mysql版本更新

3、数据库管理系统变更(从SQLSERVER迁移到mysql)...

i.相同版本的数据库迁移:

相同版本的数据库迁移就是主版本号相同的数据库直接进行数据库移动...常用的方法就是使用mysqldump导出数据,然后在目标数据库使用mysql进行导入

mysqldump -h www.clearlove.com -u root -p database_name |
mysql -h www.nuoyan.com -u root -p

mysqldump导入的数据直接通过管道符|,将www.clearlove.com上的数据库导入到www.nuoyan.com服务器上,database_name为数据库名...如果想导出全部的数据库则使用--all -databases参数...

ii.不同版本的mysql数据库的迁移:

因为数据库升级,需要将旧版本mysql数据库中的数据迁移到新版本数据库中。mysql服务器升级,需要先停止服务,然后卸载旧版本,并安装新版本的mysql.如果想保留旧版本中的用户访问控制信息,则需要备份mysql的mysql库,在新版本mysql安装完成后,重新读入mysql备份文件中的信息,旧版本和新版本的mysql可能使用不同的默认字符集,例如mysql.4.x中大多数使用latin1作为默认字符集,而mysql5.x的默认字符集为utf8。如果数据库中有中文数据,迁移过程中需要对默认字符集进行修改,不然可能无法正常显示结果。。。

新版本对旧版本有一定兼容性。从旧版本的mysql向新版本mysql迁移时,对于myisam引擎的表,可以直接复制数据库文件,

也可以用mysqlhotcopy工具、mysqldump工具。

对于innodb引擎的表一般只能使用mysqldump将数据导出。然后使用mysql命令导入目标服务器。

从新版本向旧版本mysql迁移数据时要小心,最好使用mysqldump命令导出,然后导入目标数据库中。

iii.不同数据库之间的迁移...

这种情况也是经常会有的,比如说将mysql迁移到oracle。。。这种迁移方式我们首先要比较两者之间的差异,不同的数据库在定义数据类型时的形式可能是不同的...比如说mysql中日期字段分为date和time两种,而oracle只有date一种...

-------------------------------------------------------------------------------------------------------------------------

4.导入和导出

导入:

在mysql中,当我们插入数据的时候,我们没必要一条条的输入sql语句来进行插入,我们还可以建立一个文本文件,然后将我们建立的文本文件的内容导入到数据库当中就可以了....

基本语法:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' //这句话表示的是载入 file_name.txt文件, low_priority参数表示的是当没有人访问数据表格时,在进行插入... local表示的是导入本地文件,并且必须要有完整的文件位置....

[REPLACE | IGNORE] //表示参数控制对现有表的唯一键记录重复的处理。就是比如说文件内插入了重复数据,我们应该如何处理.. replace表示使用新的一行去代替....ignore表示直接跳过....

上面这个语句必须要进行指定,否则一旦出现重复就会导致错误的发生,并且后续的数据将不会被导入... INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 'string']      //表示字段之间使用某个指定的字符或者字符串进行分隔
[[OPTIONALLY] ENCLOSED BY 'char']      //表示每个字段使用指定的字符包起来
[ESCAPED BY 'char' ] //表示将默认的转义字符改变为某个指定的字符
]
[LINES
[STARTING BY 'string']     //表示每行开头的字符,可以是一个或者多个
[TERMINATED BY 'string']       //表示每一行结束以某个指定字符结尾,一般都是\r\n...表示每一行结束都换行...
]
[IGNORE number LINES]       //表示忽略开始处的行数,number为忽略数
[(col_name_or_user_var,...)]
[SET col_name = expr,...]]
load data infile 'd:\data.txt' into samp_db.shop;

select * from shop;

将文件导入到smap_db数据库shop表格...

2.使用mysqlimport进行导入...

mysqlimport是一个独立的exe应用程序...和load data infile基本差不多...

基本语法:
mysqlimport -u root -p dbname filename.txt [OPTIONS] --[OPTIONS] 选项
FIELDS TERMINATED BY 'value'
ENCLOSED BY 'value'
ESCAPED BY 'value'
LINES TERMINATED BY 'value'
IGNORE LINES

这个和语法和上面类似,所以不进行解释了。。。。

mysqlimport -u root -p samp_db d:\data.txt;

mysqlimport的功能和load data infile 基本一样,唯一就是没有指定字段的数据导入...下面指定的field字段中插入数据...这个功能mysqlimport是无法实现的....

load  data infile d:\data.txt into table shop(shop_id,shop_name,shop_info);

导出:

有了导入,那么必然就有导出....

i.使用select into ....outfile进行导出...

基本语法:
和导入的基本语法有很多东西类似...就不进行解释了
select columnlist from Table WHERE condition into outfile 'filename' [OPTIONS]
fields terminated by 'VALUE'
fields [OPTIONALLY] ENCLOSED BY 'VALUE'
fields ESCAPED BY 'VALUE'
lines STARTING by 'VALUE'
lines terminated by 'VALUE' select * from samp.shop into outfile d:\shop.txt
FIELDS
TERMINATED BY ','
ENCLOSED BY '\''
ESCAPED BY '\''
LINES
TERMINATED BY '\r\n'; //按照了指定的规格进行数据的导入...

ii.使用mysqldump进行文件的导出...

mysqldump -T path -u root -p dbname [tables][OPTIONS]

--fields-terminated-by=
--fields-enclosed-by=
--fields-optionally-enclosed-by=
--fields-escaped-by=
--lines-terminated-by= mysqldump -T d:\ -u root -h localhost -p samp_db shop; 这样就实现了数据的导出...

iii.我们还可以使用mysql进行数据的导出。。。这个相比mysqldump,导出数据的可读性更强。。。。

mysql -u root -p --execute="SELECT 语句" dbname >filename.txt//基本语法...

mysql -u root -p --execute="SELECT * FROM person;" test>C:\person3.txt//还可以是.html文件或者.xml文件....

------------------------------------------------------------------------------------------------------------------------

截止到这里数据库就告一段落了,把基础的东西总算是学了个差不多了...还有很多东西没有学到。。。等以后在实际开发中在进行知识点的弥补吧...明天开始该进行JDBC的学习了。。。。。

 

Mysql学习笔记(十四)备份与恢复的更多相关文章

  1. MySQL学习笔记十四:优化(1)

    SQL优化 1.查看各种SQL执行的频率 mysql> show status like 'Com_select';--Com_insert,Com_delete,connections(试图连 ...

  2. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  3. (C/C++学习笔记) 十四. 动态分配

    十四. 动态分配 ● C语言实现动态数组 C语言实现动态数组,克服静态数组大小固定的缺陷 C语言中,数组长度必须在创建数组时指定,并且只能是一个常数,不能是变量.一旦定义了一个数组,系统将为它分配一个 ...

  4. MySQL学习笔记十二:数据备份与恢复

    数据备份 1.物理备份与逻辑备份 物理备份 物理备份就是将数据库的数据文件,配置文件,日志文件等复制一份到其他路径上,这种备份速度一般较快,因为只有I/O操作.进行物理备份时,一般都需要关闭mysql ...

  5. MYSQL进阶学习笔记十四:MySQL 应用程序优化!(视频序号:进阶_32)

    知识点十五:MySQL 的应用程序优化(32) 一.访问数据库采用连接池 把连接当做对象或设备,统一放在‘连接池’里.凡是需要访问数据库的地方都从连接池里取连接 二.采用缓存减少对于MySQL的访问: ...

  6. Mysql学习笔记(四)字符串函数

    PS:终于看完了字符串函数,心都快碎了...涉及的函数真是太多了...感觉这里的字符串函数和JAVA里的基本都差不多了...基本上算是掌握了,但是想全记住那是不太可能的... 学习内容: 字符串函数的 ...

  7. MySQL学习笔记十五:优化(2)

    一.数据库性能评测关键指标 1.IOPS:每秒处理的IO请求次数,这跟磁盘硬件相关,DBA不能左右,但推荐使用SSD. 2.QPS:每秒查询次数,可以使用show status或mysqladmin ...

  8. MySQL学习笔记十六:锁机制

    1.数据库锁就是为了保证数据库数据的一致性在一个共享资源被并发访问时使得数据访问顺序化的机制.MySQL数据库的锁机制比较独特,支持不同的存储引擎使用不同的锁机制. 2.MySQL使用了三种类型的锁机 ...

  9. MySQL学习笔记十:日志管理

    1.错误日志文件 MySQL的错误日志文件记录错误信息,还会记录mysqld进程的关闭和启动的信息,但也不是什么错误信息都会记录,只记录mysqld进程运行过程中发生的关键性错误. 错误日志的启动,可 ...

  10. mysql学习笔记 第四天

    mysql引擎: archive(档案)[数据插入以后不能被修改,只读] blackhole[这种写操作是删除数据,读操作是返回空白记录] CSV[在储存数据时以逗号作为数据项之间的分隔符] exam ...

随机推荐

  1. Oracle的FRA(Flash Recovery Area)的好处

    如果FRA的空间耗尽,只会影响到这个Oracle实例自身.所以不会耗尽所有磁盘空间从而影响到其它的数据库实例或其它应用.

  2. HTML 邮件链接,超链接发邮件

    在网页中可以设置如“联系我们”.“问题反馈”等所谓的邮箱链接,类似网页超链接,只是可以直接打开默认邮箱程序. 使用<a href="mailto:youEMail@xxx.yyy&qu ...

  3. TCP/IP 端口号大全

    常用端口: 20 ftp-data FTP 数据端口 21 ftp 文件传输协议(FTP)端口:有时被文件服务协议(FSP)使用 22 ssh 安全 Shell(SSH)服务 23  telnet T ...

  4. Android文本输入框(EditText)切换密码的显示与隐藏

    package cc.c; import android.app.Activity; import android.os.Bundle; import android.text.Selection; ...

  5. [Java] 解决spring的xml标签内不能自由增加说明的难题,方便调试、部署时进行批量屏蔽

    作者:zyl910 以往我们想在spring的xml配置文件中增加说明文本时,只能使用xml注释(<!-- 注释 -->).这对于"调试.部署时想批量屏蔽部分bean" ...

  6. 每日英语:Success Outside the Dress Code

    Anyone who has felt like the odd duck of the group can take heart from new research from Harvard Bus ...

  7. 解决Win7旗舰版开机后无线网络识别非常慢的问题

    最近电脑开机后WIFI识别和连接非常慢,不知何故.查看百度安全卫士的优化记录,发现其禁用了 Network List Service,将该服务设为自动启动,重启服务后,问题解决.PS:如此优化太可恶!

  8. A cycle was detected in the build path of project

    解决Eclipse中Java工程间循环引用而报错的问题 如果我们的项目包含多个工程(project),而它们之间又是循环引用的关系,那么Eclipse在编译时会抛出如下一个错误信息: “A cycle ...

  9. Spring4 MVC Hibernate4集成

      Spring4 MVC Hibernate4集成 一.    本文所用环境 Spring4.0.3.RELEASE Hibernate4.3.5.Final Mysql 二.    工程目录 三. ...

  10. Spring MVC 事务配置

    Spring MVC事务配置 要了解事务配置的所有方法,请看一下<Spring事务配置的5种方法> 本文介绍两种配置方法: 一.      XML,使用tx标签配置拦截器实现事务 一.   ...