Category: "MySQL, 全般IT, 数据库, 杂项想法" , Tags: mysqldump index dmp
怕热的しゃちょー(Shacho) 写着呢.
东京的夏天太热了.
我要请大家把自己周围的温度降下来一点.
可是,现在还不算夏天.
言归正传, 咱们慢慢的讲MySQL吧.
我从事数据库方面从事了10年以上了, 用过很多种, 结果觉得还是Oracle最佳. 就是当时.
我听过它的名字, 并听过它受的好评,像动作轻快, 速度快, 这些从事那业界的人有的一般的信息.
老实说, 我差不多没有什么预备知识就要实际的工作. 我第一个印象是”和Oracle差不多”. 还有”很简单”.
没想到苦战从这里开始.
Oracle技师很容易跌跤的几个要点.
很多人讲过这件事, 所以我不会讲太多. 只要介绍之中, 技术支持等等的时候必需的.
有丰富知识的人不需要读这篇文章, 不过, 我觉得你到这页面来看一看就意味着你是所谓的MySQL初学者SE(虽然你说你不懂, 你老板却说”没关系, 没关系”叫你为顾客工作, 再说当然没有他的支持也没有时间得到预备知识. 这就是年富力强的SE), 所以没问题吧.
我希望这能帮助你. 加油!
第1: Import mysqldump的Output时, Index除了Primary以外都会消失
跟Oracle的export相似, 但是用法相当不一样, 那就是mysqldump.
因为比较活生生, 我比较喜欢mysqldump.
话说回来, 关于题目里谈到的内容. 如果你看看mysqldump output的结果, 毫不奇怪.
首先,
mysqldump -F -l -uxxxx -p –all-databases > test.sql
你这样output文件, 然后要import这个的话,
dmp里的表定义会像下列的.
Drop table
Create Table
Lock Tables
Alter Table Disable Keys
Insert Table
Alter Table Enable Keys
像上述的, 第一行的drop命令会删除所有表定义,
所以, Create里的Primary Key以外, 我们不能把index回到原位. 很有道理, 对不对?
要是你不改变数据库定义和表定义,
而truncate所有数据的话,
你可以用以下的dump命令, 就能得到里面只有数据的dmp文件.
mysqldump -F -l -uxxx -p –all-databases –no-create-info –no-create-db –skip-add-drop-database –skip-add-drop-table > test.sql
–no-create-info :不输出create table
–no-create-db :不输出create database
–skip-add-drop-database :不输出drop database
–skip-add-drop-table :不输出drop table
像试验, 你要反复数据的输入和输出好几次的时候可能有用.
可是, 很大的table里有好多index,
这样insert之前有很多index的话, 当然insert速度会慢一点.
于是, 实际上, 有时候做另外Create Index SQL然后做普通的drop table dmp比import之后加index比较快(考虑麻烦也是).
我觉得只看看mysqldump选件会造成的差异也是值得的.
试试看!


