[MySQL] MySQL数据移植迁移 + 备份【InnoDB存储引擎】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_14852397/article/details/51741595

存储引擎:

         Myslq目前比较常用的两个数据库存储引擎分别是MyISAM与InnoDB,MyISAM与InnoDB的主要的不同点在于性能和事务控制上。这里简单的介绍一下两者间的区别:

MyISAM是MySQL5.5之前版本默认的数据库存储引擎。MYISAM提供高速存储和检索,以及全文搜索能力,适合数据仓库等查询频繁的应用。但不支持事务、也不支持外键。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。

InnoDB是MySQL5.5版本的默认数据库存储引擎,不过InnoDB已被Oracle收购,MySQL自行开发的新存储引擎Falcon将在MySQL6.0版本引进。InnoDB具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。尽管如此,但是InnoDB包括了对事务处理和外来键的支持,这两点都是MyISAM引擎所没有的。

 

应用场景:

MyISAM:

(1) 做很多count 的计算;

(2) 插入不频繁,查询非常频繁;

(3) 没有事务。

InnoDB:

(1) 可靠性要求比较高,或者要求事务;

(2) 表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。

(4) 性能较好的服务器,比如单独的数据库服务器,像阿里云的关系型数据库RDS就推荐使用InnoDB引擎。

 

实际问题:

         在实际开发中对于MySQL数据库进行移植迁移或者系统故障时,数据库未及时备份发生的问题,开始把本地data中的数据库文件拷贝到另一台电脑上测试, 执行show tables ;可以看到数据库表,但是对表进行任何操作都报错:ERROR 1146 (42S02): Table 'xxx' doesn't exist(表不存在),原以为Mysql的数据库文件.frm复制到本地安装MySQL数据存储目录的data文件夹下就可以,事实不是我们想的那样,对MySQL数据库的移植迁移,我们能看到的只是它生成的表结构也就是说以 .frm为后缀名的文件!以下是几个文件介绍。

         .frm文件是数据库中很多的表的结构描述文件;

         ib_logfile0和ib_logfile1是关于数据库的一些日志文件;

         ibdata1文件时数据库的真实数据存放文件;

注:数据移植迁移需要数据库版本,存储引擎相同!(这里做的是InnoDB存储引擎,MyISAM没有尝试过,数据库版本不同很遗憾没能成功!)

实际环境:

# mysql 查询版本

select version();

# mysql 查看所有存储引擎

show engines;

# 查看可用的存储引擎

show variables like 'storage_engine';

实际操作:

         应用工具:

MySQL(数据库)

Navicat Premium(数据库工具)

好备份(备份软件)

         好备份软件上有mysql备份,但是备份出来的却只有.frm表应用结构文件,即时还原还是之前说的那个ERROR 1146问题,所以我采取的是文件备份,当然文件备份也就等同于数据的移植迁移,所以这个刚好一举两得!以下是备份软件图:

1.      选择文件备份,添加一个任务


2.      填写备份任务信息


3.      高级部分不用过,当然你也可以按自己需求来


4.      填写完毕后确定[保存任务]

5.      界面上有个立即备份按钮,点击然后等提示备份成功信息!

6.      这就是备份的所有数据库的数据信息


7.      测试是否备份数据可行,首先利用备份软件备份一下当前的数据库,然后从数据库把某个数据库删掉[模拟误删],如图所示



8.      还原数据,首先的关闭数据库服务


然后进行数据还原,把刚才删的数据库和需要替换的几个文件覆盖到数据库的数据目录下



9.      启动数据库,查看是否成功[命令上图已存在,下面就直接看结果]


正常无误,大功告成![存在的一个问题就是函数没有还原,具体原因以后分析!为了防止数据库的存储函数和存储过程丢失,最好在写的时候进行对应的保存,如图查询就是我之前写的函数保存,这个是可以还原]

10.  非正常替换时的异常,也就是上面讲到的[ERROR 1146 (42S02): Table 'xxx' doesn't exist(表不存在)],关闭数据库服务,然后如图我在还原前把误删时的文件保留下来,就是为了演示这个异常,对还原正常的数据库进行再次覆盖,也就是假如我们只进行了tdrxwg这个数据库进行了还原。如图:


进行验证,启动数据库服务,如下图所示表虽然还原成功但是对表进行操作时异常。到此结束,如果大家有更好的备份方式请互相交流!还有就是我的这个数据库是存在着存文件的,虽然可以用别的方式保存sql语句,但是还原时不通过,这种情况不知为什么!OK!个人能力有限,到时为止!谢谢!


--------------------------------------------------------------------------------------------------------------------
一花一世界,一叶一菩提。

我自落叶飘零,寻梦旅途繁忙!


猜你喜欢

转载自blog.csdn.net/qq_14852397/article/details/51741595