当前位置

将Drupal 7默认的MySQL引擎从InnoDB改为MyISAM

James Qi 在 2012年3月22日 - 13:24 提交
内容摘要:前段时间安装Drupal 7的时候就遇到自动在MySQL中使用InnoDB的情况,而且好像是即使MySQL默认引擎为MyISAM也依旧使用InnoDB。虽然InnoDB有自己的特点,Drupal 7选......

  前段时间安装Drupal 7的时候就遇到自动在MySQL中使用InnoDB的情况,而且好像是即使MySQL默认引擎为MyISAM也依旧使用InnoDB。虽然InnoDB有自己的特点,Drupal 7选用这个也正常,但对于我们来说,有多个子网站的时候,以前是将数据库分散到多块硬盘上的,就需要用MyISAM来让每个子网站有独立的目录比较方便,所以还是需要能使用MyISAM。

  按照网上找到的一篇文章,修改includes/database/mysql/shema.inc这个文件可以解决,虽然修改drupal core文件不是一个很好的办法,先这样用。

83行:

'mysql_engine' => 'InnoDB',

改为:

'mysql_engine' => 'MyISAM',

  后来在其它服务器上设置新的Drupal 7网站时忘记了修改,结果都自动生成了InnoDB的表,等以后可以用备份、恢复的办法来转为MyISAM。另外,还可以用SQL命令来逐个表alter为MyISAM(alter table merchant type=innodb;),也在网上找到一个批量修改一个库中各个表type的程序:http://forums.mysql.com/read.php?21,26193,49429#msg-49429

<?php
#This script will change all the table engine types for a given database!
#All the DB tools I have (GNU/freeware) will not change a list of database
# types, so this script saves time when a CMS or other populates a database
# with tables we cannot use! This can be migrated to InnoDB by changing line
# 23, col 46 from MyISAM to InnoDB (double check the capitals there!).
# Change these variables relative: serverName, userName, password, databaseName

 

# 20051410 JLynch
# myisamFixer.php

ini_set('display_errors', 'On');
error_reporting(E_ALL);

 

$link = mysql_connect("serverName","userName","password")
or die("unable to connect to msql server: " . msql_error());

mysql_select_db("databaseName", $link)
or die("unable to select database 'db': " . msql_error());

 

$result = mysql_query("show tables");
if (!$result) {
die('query failed: ');
}

while ($row = mysql_fetch_array($result)){
mysql_query("ALTER TABLE ".$row[0]." ENGINE=MyISAM; ");
#Command Reference: ALTER TABLE tableName ENGINE=MyISAM
}

 

?>

 

评论

-- 发自IP地址: 59.173.8.114 (位置 | 谁是)

今天把前一阵子自动建立的InnoDB数据库转为MyISAM了,没有用备份、恢复的办法,而是用命令直接转:ALTER TABLE tablename ENGINE = MYISAM; 只是需要逐个库打开、逐个表转换,可以设法批量来做。据说可以on-the-fly转换,不过我还是先把网站暂停后进行了,花了几个小时。

James Qi / 祁劲松

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符