MySql - 将数据库的存储引擎从InnoDB转换为MyISAM

35
如何将MySQL数据库存储引擎从InnoDB转换为MyISAM? 我找到了很多转换数据库表存储引擎的网站,但是没有转换整个数据库的。 我附上了截图以便更好地理解 提前感谢。

你的意思是说你已经尝试过这个了吗?[http://dev.mysql.com/doc/refman/5.0/en/converting-tables-to-innodb.html] - Skippy Fastol
我想要转换数据库而不是表格。你给的链接是用来转换表格而不是数据库的。 - Tony Stark
如果这个问题对你有帮助,不仅可以回答,还可以点赞哦。 - Tony Stark
管理员:刚刚点赞了! - Skippy Fastol
可能是重复的问题:如何将所有表从MyISAM转换为InnoDB? - T.Todua
很抱歉打扰您,但将InnoDB表转换为MyISAM是否会产生问题?我的意思是,如果我有没有外键限制和所有相关功能的InnoDB。目前我有InnoDB表,但我想将它们转换为MyISAM,因为InnoDB表被用作MyISAM表。谢谢。 - zeflex
7个回答

66

使用这个!!

SET storage_engine=MYISAM;
ALTER TABLE table_name ENGINE = MyISAM;

-干杯!!


1
我想将数据库的InnoDB存储引擎转换为MyISAM,而不是表。 - Tony Stark
2
谢谢。这节省了我很多时间。当我在运行MySQL(mariadb)的树莓派上执行此操作时,系统最终停止在进行大量插入或更新时锁定。速度快了10倍。 - Rahim Khoja

19
ALTER TABLE `table_name` ENGINE=INNODB

14

你无法更改数据库的默认存储引擎,但是可以使用 default-storage-engine 配置设置来更改整个服务器的存储引擎。请注意,这实际上不会更改现有表的存储引擎,而只会更改在更改后创建的新表的存储引擎。


谢谢你的回答,它对我很有帮助。是的,抱歉回复晚了。 - Tony Stark
@ArunVM - 如果可以的话,请发表一个答案,说明如何完成这个操作。我知道可以对服务器或单个表格进行操作,但不能对整个数据库进行操作。 - Eric Petroelje

8

数据库只是MySQL实现命名空间的一种方式,因此数据库本身没有存储引擎,只有表格才有存储引擎。这就是为什么你可以在一个数据库中拥有多个不同存储引擎的表格。

你需要逐个修改每个表格以将它们切换到InnoDB。


4

要使其永久生效,请添加到my.cnf文件中(根据上下文情况,可能有多个位置)

/etc/my.cnf

default-storage-engine= MyISAM

为了安全起见,可以使用show databases;输出数据库列表

在我的情况下,我使用php快速实现..

$db = mysql_connect('localhost','someadmin','somepass');
$dbs = array();
$dbs[] = 'test';
$dbs[] = 'myImportantDb';

foreach($dbs as $v){
    mysql_select_db($v);
    $q = mysql_query('show tables');
    $tables = array();
    while($r = mysql_fetch_row($q)){
            $tables[] = $r[0];
    }
    foreach($tables as $t){
        echo "do $v.$t\n";
        mysql_query('ALTER TABLE `'.$t.'` ENGINE=MyISAM;');
    }
}
mysql_close($db);

1
在PhpMyadmin 4.5中,选择变量选项卡并查找存储引擎,然后选择编辑并输入MyISAM。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接