mysql数据库引擎更换

近期在做mysql主从因需要不得不进行数据库引擎更改,然后整理出了一些方法与大家分享如果你有更好的想法可以在评论交流。

1。查看mysql现在提供引擎。

在mysql命令行下输入

show engines;

查看当前默认储存引擎。

mysql> show variables like ‘%storage_engine%‘;

查看单个表的引擎。

mysql> show create table 表名;

2.修改缺省引擎。

在my.cnf加入然后重启服务

skip-innodb
default-storage-engine=MYISAM
default-tmp-storage-engine=MYISAM

3.跟换单个数据库引擎

【1】ALTER TABLE

mysql > ALTER TABLE mytable ENGINE=Falcon;

这种语法适合所有引擎,但是转换过程会耗费大量时间。mysql为此要执行一个旧表到新表的逐行复制。在这期间,转换操作可能会占用服务器的所有I/O处理能力,并且在转换时,源表要被读加锁。因此,在一个繁忙的表上做此操作,要加以注意。
如果从一种引擎到另一种引擎做表转换,所有属于原始引擎的专用特性都会丢失。例如,将一个InnoDB表转换成MyISAM表,再转换回来,最初定义在原InnoDB表上的所有外键都会丢失。

【2】转储(Dump)和导入(Import)

如果想对表转换的过程做更多控制,可以选择使用mysqldump工具,将表先转储成一个文本文件,然后再编辑转储文件,修改其中的CREATE TABLE语句。一定要注意修改表名和引擎类型,因为即使引擎类型有所不同,同一数据库也不允许存在相同表名的两张表。另外,mysqldump在CREATE TABLE语句之前,会默默地加上DROP TABLE命令,如果不注意,很可能丢失原有数据。

mysqldump -uroot -S /tmp/mysql2.sock mysql > *.sql ;
mysql -uroot -S /tmp/mysql2.sock db1 < *.sql

在导入之前先修改sql文件

vim *.sql

:1,$s/InnoDB/MyISAM/G

此方法在前两种方法之间做了一个平衡,它不转储整张表,或者一次性转换所有数据,而是创建一个新表,使用mysql的INSERT ... SELECT语法来转移数据。
如下:
mysql > CREATE TABLE innodb_table like myisam_table;
mysql > ALTER TABLE innodb_table ENGINE=InnoDB;
mysql > INSERT INTO innodb_table SELECT * FROM myisam_table;

如果数据量不大,这种办法效果不错,但是更高效的办法是增量地填充表,在填充每个增量数据块的时候都提交事务,这样就不会导致撤销日志变得过于庞大。假定id是主键,可以重复运行下列查询(每次逐次增大x和y的值),直至所有的数据都复制到新表。
mysql > START TRANSACTION;
mysql > INSERT INTO innodb_table SELECT * FROM myisam_table
-> WHERE id BETWEEN x AND y;
mysql > COMMIT;

转移操作完成后,源表扔会保留,可以在操作完成后删除,而此时,新表已被填充完毕。注意:如果有必要,请在转换时加锁源表,避免复制时数据不一致。

出自http://www.cnblogs.com/loveLearning/archive/2013/04/17/3025502.html

时间: 2024-10-13 11:21:27

mysql数据库引擎更换的相关文章

mysql 数据库引擎

一.数据库引擎 数据库引擎是用于存储.处理和保护数据的核心服务.利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求. 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库.这包括创建用于存储数据的表和用于查看.管理和保护数据安全的数据库对象(如索引.视图和存储过程). 二.数据库引擎任务 在数据库引擎文档中,各主题的顺序遵循用于实现使用数据库引擎进行数据存储的系统的任务的主要顺序. 设计并创建数据库以保存系统所需的关系或XML文档 实现系

MySQL数据库引擎快速设定 .doc 11页

MySQL数据库引擎快速设定 如果你是个赛车手并且按一下按钮就能够立即更换引擎而不需要把车开到车库里去换,那会是怎么感觉呢?MySQL数据库为开发人员所做的就好像是按按钮换引擎:它让你选择数据库引擎,并给你一条简单的途径来切换它. MySQL的自带引擎肯定是够用了,但是在有些情况下,其他的引擎可能要比手头所用更适合完成任务.如果愿意的话,你甚至可以使用MySQL++ API来创建自己的数据库引擎,就像打穿气缸装上自己的化油器.现在让我们来看看你该如何选择引擎,以及如何在可用引擎之间切换. 选择你

代码配置都没问题,为什么事务不回滚(了解Mysql数据库引擎)

前几天开发中遇到了一个问题,在进行调试的过程中发现配置在service层的事务不起作用,抛出异常后数据库的更新还是成功了,事务并没有回滚,然后就开始各种检查,查看spring的事务是否配置正确,进入更新方法时是否开启了事务,经过检查之后发现一切都正常,那为什么事务不回滚呢?问题出在了一个很难会去考虑的地方(数据库里创建的表不支持事务). Mysql数据库默认的创建表的引擎是:MYISAM,使用这种引擎的表效率高,但是不支持事务,所以我们在建表时最好是根据需求手动去指定我们需要的引擎,下面是一个能

如何查看mysql数据库的引擎/MySQL数据库引擎详解

一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎:mysql> show engines; 看你的mysql当前默认的存储引擎:mysql> show variables like '%storage_engine%'; 你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):mysql> show create table 表名; MySQL数据库引擎详解 作为Java程序员,MySQL数据库

Mysql数据库引擎分析

先来一篇博文:http://www.jb51.net/article/38004.htm 这篇自我感觉写的还不错.大家可以看看. 1.什么是数据库引擎 简单来说就是数据库用于存储.处理和保护数据的核心服务.利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求.使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库,这包括创建用于存储数据的表和用于查看.管理和保护数据安全的数据库对象. 2.mysql数据库引擎类型(百度百科) 2.1 ISAM

MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

http://www.jb51.net/article/38004.htm 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用.如果技术高超,还可以使用MySQL+API自己做一个引擎.下面介绍几种数据库引擎:  ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设

[转]MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用.如果技术高超,还可以使用MySQL+API自己做一个引擎.下面介绍几种数据库引擎:  ISAM:ISAM是一个定义明确且历经时间考验的数

常用mysql数据库引擎——MyISAM和InnoDB区别

背景: 昨天做项目时,发现使用事务后回滚不了,后来把数据库引擎从MyISAM换成InnoDB后果断好了,如下图: 正文: MyISAM和InnoDB是mysql常用的数据库引擎,他们的区别如下: 数据库引擎 适用范围 性能 事务 外键 数据受损恢复 MyISAM 适合频繁查询 高 × × × InnoDB 适合频繁修改 中 √ √ √ 注:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎 参考资料: MySQL数据库引擎介绍.区别.创建和性能测试的深入分析 http://www.jb

如何修改MySQL数据库引擎

对于MySQL数据库,如果你要使用事务以及行级锁就必须使用INNODB引擎.如果你要使用全文索引,那必须使用MyISAM. INNODB的实用性,安全性,稳定性更高但是效率比MyISAM稍差,但是有的功能是MyISAM没有的.修改MySQL的引擎为INNODB,可以使用外键,事务等功能,性能高.本文主要介绍如何修改MySQL数据库引擎为INNODB,接下来我们开始介绍. 首先修改my.ini,在[mysqld]下加上: default-storage-engine=INNODB 其中的蓝色字体是