17713433920 info@mac163.com

今天进入phpMyAdmin维护数据库时意外发现一个数据库中有一些表使用的MyISAM,另一些表使用的InnoDB,左思右想没确定导致这种问题的原因,因为一般来说一个网站的数据库所有表应该使用同一种引擎,于是想着如何无损地将所有表转换成同一种引擎。

从万能的搜索引擎了解到MyISAM和InnoDB引擎的区别如下。

MyISAM与InnoDB的区别

InnoDB MyISAM
支持事务处理等 不支持事务处理等。
不加锁读取
支持外键 不支持外键
支持行锁 不支持行锁
不支持FULLTEXT类型的索引 支持FULLTEXT类型的索引
不保存表的具体行数,扫描表来计算有多少行 保存表的具体行数,不带where时,直接返回保存的行数。
DELETE表时,是一行一行地删除 DELETE表时,先drop表,然后重建表
InnoDB把数据和索引存放在表空间里面 MyISAM表被存放在三个文件,frm文件存放表格定义
跨平台可直接拷贝使用 跨平台很难直接拷贝。
InnoDB中必须包含AUTO_INCREMENT类型字段的索引表格很难被压缩 MyISAM中可以使用AUTO_INCREMENT类型字段建立联合索引,表格可以被压缩。

那么,我们如何选择?

MyISAM:应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高。

建议zblog、dedecms、帝国cms、discuz、emlog之类对数据库读写不多的程序使用。

InnoDB:用于事务处理应用程序,支持外键,如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性。更新删除等频繁(InnoDB可以有效的降低由于删除和更新导致的锁定),对于数据准确性要求比较高的,此引擎适合。

建议WordPressjoomla、phpBB、Drupal之类比较依赖数据库读写的程序使用。

使用drupal构建的选择InnoDB更合适,下面提供两种经过验证可用的MyISAM转InnoDB方法。

方法一、通过phpmyadmin命令转换。

以我的网站数据库为例。

Mysql数据库转换

首先登录phpMyAdmin,点“SQL”。

wordpress网站数据库转换

然后在SQL查询框中输入命令,ALTER TABLE `数据库表名` ENGINE = INNODB; (后面带小写;)例如转换图片中的ban_ip表,命令就是  ALTER TABLE `ban_ip` ENGINE = INNODB; 可一条一行,同时转换多条命令。如下图:

Wordpress-mysql-数据库问题

接着点击查询框右下角的“执行”,命令执行成功如下:

Mysql数据库转换

如果执行不成功会有提示信息,检查命令的标点符号是否为英文半角输入,还有命令中的 ‘表名’前后不带空格。

方法二、使用SSH连接在linux中命令转换。

例如当前数据库用户名为root  数据库名为tuhongwei_com 数据库密码为123456 ,要转换的数据库表名为 ban_ip。

首先连接SSH,输入 mysql -uroot -p tuhongwei_com回车,输入数据库密码123456 回车(注意,在linux系统中输入密码屏幕不会提示),登录数据库成功后如下显示:

关于Wordpress网站数据库MySQL使用MyISAM或InnoDB引擎

因为我用的MariaDB所以像上图这样显示,如果是MySQL 前面的MariaDB就显示MySQL。

然后输入命令 alter table ban_ip engine=innodb; (后面英文半角;不要忘记)回车,执行成功后如下提示:

关于Wordpress网站数据库MySQL使用MyISAM或InnoDB引擎

以上就是MyISAM转InnoDB的两种方法,反之InnoDB转MyISAM方法一样,无非是将命令中的engine=myisam。

如果你有其他的转换方法,欢迎评论。


微信二维码

微信扫描二维码联系我们!
我们在微信上24小时期待你的声音
提供外贸路由器设备产品,轻松翻墙,解答:WP主题推荐,WP网站建设,Google SEO,百度SEO,专业服务器环境搭建等!


需要提供WordPress主题/插件的汉化服务可以随时联系我们!另外成品WordPress网站以及半成品WordPress网站建设,海外Google SEO优化托管服务,百度SEO优化托管服务,Centos/Debian服务器WP专用环境搭建,WP缓存服务器搭建,我们都是你的首选,拥有多年WP开源程序服务经验,我们一直在坚持客户体验,没有最好,只有更好!
回到顶部