Mysql——Innodb和Myisam概念与数据恢复
Innodb和Myisam是Mysql常见的两种数据存储引擎。没有研究过Oracle、SQL Server等数据库,所以下面只针对Mysql。
一、两种方式的数据存储结构:
在Myisam下,数据库的每个数据表都有*.frm、*.YMI和*.YMD三个文件,其中*.frm存储数据表的表结构,*.MYI存储数据表的索引,*.MYD存数数据表的记录数据;
在Innodb下,每个数据库下的每个数据表只有一个*.frm存储数据表的表结构,而所有数据库的所有表数据索引、数据记录都全部存储在ibdata1文件中,而ib_logfile0和ib_logfile1是日志文件。
二、数据导入和恢复:
Case1 Myisam =》 Myisam:
由于Myisam的数据表结构、索引、记录数据等信息分别存储在*.frm、*.MYI和*.MYD文件中,所以只需要将源数据库数据表的相应三个文件复制到对应目的数据库文件夹下就可以了。
但是如果只有*.frm(假设test.frm)了,那么可以将test.frm复制到对应的数据库目录(假设tmp数据库)之后,在tmp目录下,新建test.MYI和test.MYD文件。此时通过“show tables;”可以看到有test表,但是查看表的数据,如“desc test;”,此时报错无法查看,因为只有test.frm有数据,而test.MYI和test.MYD是新建的无效文件。然后可以通过Mysql自带修复操作“REPAIRTABLE test USE_FRM”修复数据表,然后就可以查看表的数据,但是为空(因为test.frm中不包含数据)。
Case2 Innodb =》 Innodb:
由于Innodb下,表结构存在*.frm文件,但是表的数据存储在ibdata1文件中,所以导入时,除了复制*.frm,还要复制源Mysql的data目录下的ibdata1,替换掉目的数据库的ibdata,如果目的数据库中有已存在的其他数据库,此时需要先备份目的数据库的原先data数据,然后将新导入的表格通过其他方式导出,然后在还原原先的data数据,将新导出的数据导入。
如果只有*.frm(假设test.frm),没有有效的ibdata1,那么也只能恢复表的结构。先将test.frm复制到另一个数据库中(假设tmp),然后在tmp下新建一个Innodb型的数据表test(有哪些字段不重要),不要添加任何记录。然后将要恢复的test.frm复制到test目录下替代新建test表产生的test.frm,重启mysql之后,新建的test表的结构就和要恢复的test表结构相同
Case3 Myisam =》 Innodb 和 Innodb =》 Myisam:
如果有*.frm、*.MYI和*.MYD三个文件,可以通过Case1的方法导入之后,重新导出sql或者其他文件,也可以导入后修改为Innodb,之后通过Case2方式。同样Innodb =》 Myisam的操作类似。
对于数据库的数据,除了从.frm文件恢复之外,如果有日志文件,从日志文件恢复也是一个一个选择。但是对于数据库,进行移植或这更换系统时,最好还是通过导入导出工具到处相应的sql语句文件。
三、Innodb和Myisam其他区别:
1、Myisam多个数据库和数据表的记录数据是分文件存储的,而Innodb所有表的记录数据都存储在ibdata1文件中,所以当数据表记录比较少,单个表的数据文件比较少时,此时使用Myisam性能会略好于Innodb。但是如果表的数据记录非常多,此时使用Innodb的性能会远远高于Myisam,通过测试可以发现,随着表的记录增加,Innodb的性能降低很少,而Myisam的性能则迅速降低。
2、Innodb支持事务操作,而Myisam不支持事务操作。
事务操作:就是一组多条sql指令作为一个整体,可以并发操作,但是关键点在于事务内的多个操作必须同时执行完才会提交结果。所以事务内的SQL要么都不做,要么都做。
事务实现一般有下面两种方式:
Way1 begin、rollback和commit:
begin表示开始事务,rollback表示事务回滚,commit表示事务提交。
Way2 通过set来改变Mysql默认的自动提交模式:
set autocommit=0 禁止自动提交(使用事务,此时每条SQL都会当作事务,必须显示使用commit体提交结果或者rollback撤销结果)
set autocommit=1 开启自动提交(禁用事务)
例子:参考这里
Mysql——Innodb和Myisam概念与数据恢复的更多相关文章
- 数据库使用--MySQL: InnoDB 还是 MyISAM?
MyISAM存储引擎 MyISAM是 默认存储引擎.它基于更老的ISAM代码,但有很多有用的扩展.MyISAM存储引擎的一些特征: · 所有数据值先存储低字节.这使得数据机和操作系统分离.二 ...
- MySQL: InnoDB 还是 MyISAM?
MyISAM存储引擎 MyISAM是 默认存储引擎.它基于更老的ISAM代码,但有很多有用的扩展.MyISAM存储引擎的一些特征:· 所有数据值先存储低字节.这使得数据机和操作系统分离.二进 ...
- MySQL: InnoDB 还是 MyISAM? (转载)
MyISAM存储引擎 原文作者:http://www.cnblogs.com/villion/archive/2009/07/09/1893762.html MyISAM是 默认存储引擎.它基于更老的 ...
- mysql innoDB 与 myISAM
转载文章 出处 http://www.pureweber.com/article/myisam-vs-innodb/ 使用MySQL当然会接触到MySQL的存储引擎,在新建数据库和新建数据表的时候都 ...
- MySQL InnoDB与MyISAM存储引擎差异
言: 之前简单介绍过 MySQL 常用的存储引擎,今天对两个主流的存储简单分析下差异,书上没有参考的笔试题解答注解: 差异: MyISAM 只支持表锁,不支持事务,表损坏率较高.较老的存储引擎. ...
- mysql innodb与myisam存储文件的区别
myisam: .frm: 存储表定义 .myd(MYData):存储数据 .MYI(MYindex):存储引擎 innodb: .frm:存储表定义 .idb:存储数据和索引,在同一个文件中
- mysql 存储引擎 InnoDB 与 MyISAM 的区别和选择
http://www.blogjava.net/jiangshachina/archive/2009/05/31/279288.html 酷壳 - MySQL: InnoDB 还是 MyISA ...
- MySQL数据库InnoDB引擎下服务器断电数据恢复
说明: 线上的一台MySQL数据库服务器突然断电,造成系统故障无法启动,重新安装系统后,找到之前的MySQL数据库文件夹. 问题: 通过复制文件的方式对之前的MySQL数据库进行恢复,发现在程序调用时 ...
- MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)
简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有OLTP和OLAP模式的区分.不同的存储引擎决定了 ...
随机推荐
- hdu 2059 龟兔赛跑 (dp)
/* 把起点和终点比作加油站,那总共同拥有n+2个加油站了, 每次都求出从第0个到第j个加油站(j<i)分别在加满油的情况下到第i个加油站的最短时间dp[i], 终于的dp[n+1]就是最优解了 ...
- Android AR场景拍照技术实现(有关键源代码)
ARVR技术交流群:129340649 欢迎增加. AR场景往往给别人留下的印象深刻,假设模型做的炫丽一点,效果将会更好. 那么怎样保存这一美好的情景呢?这篇文章将教你怎样实现AR场景的拍摄以及永久保 ...
- 2016/05/11 Thinkphp 3.2.2 验证码 使用 及校验
先新建一个公共控制器,用于放置验证码的实例化代码(不用新建控制器也行,任意公共控制器都可以). 例如:PublicController.class.php 4 5 6 7 8 9 10 11 12 1 ...
- docker大全集
1,什么是docker docker 最初是dotCloud公司创始人 Solomon Hykes 在法国期间发起的一个公司内部醒目,于 2013年 3 月以 Apache 2.0 授权协议开源, 主 ...
- Being a Hero (hdu 3251 最小割 好题)
Being a Hero Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- Chapter 20: Diagnostics
WHAT'S IN THIS CHAPTER?n Code contractsn Tracingn Event loggingn Performance monitoringWROX.COM CODE ...
- Android 网络调试 adb tcpip 开启方法
查看ip地址:adb shell ifconfig 1.连接USB数据线,打开usb调试,使用windows的“运行”命令行方式:(此方法需配置adb环境变量,也可直接进入adb工具目录执行\andr ...
- sphinx源码分析总结
http://www.cnblogs.com/bonelee/p/6667955.html shinx索引部分源码分析——过程:连接到CSphSource对应的sql数据源,通过fetch row取其 ...
- Spring配置事务的五种方式
Java事务的类型有三种: JDBC事务. 可以将多个 SQL 语句结合到一个事务中.JDBC 事务的一个缺点是事务的范围局限于一个数据库连接.一个 JDBC 事务不能跨越多个数据库 JTA(Java ...
- python的md5和base64加密
在用jmeter测试接口时,有的请求参数会加密,例如,回流接口:http://ip:port/oms-gateway-datareflow-mq/orderReflow/tmsPracticeActi ...