我知道我可以单独发出一个alter表,将表存储从MyISAM更改为InnoDB。
我想知道是否有一种方法可以快速将它们全部更改为InnoDB?
我知道我可以单独发出一个alter表,将表存储从MyISAM更改为InnoDB。
我想知道是否有一种方法可以快速将它们全部更改为InnoDB?
当前回答
下面是一个为Django用户提供的方法:
from django.core.management.base import BaseCommand
from django.db import connections
class Command(BaseCommand):
def handle(self, database="default", *args, **options):
cursor = connections[database].cursor()
cursor.execute("SHOW TABLE STATUS");
for row in cursor.fetchall():
if row[1] != "InnoDB":
print "Converting %s" % row[0],
result = cursor.execute("ALTER TABLE %s ENGINE=INNODB" % row[0])
print result
将它添加到你的应用程序的文件夹管理/命令/下,然后你可以用manage.py命令转换所有的表:
python manage.py convert_to_innodb
其他回答
在phpMyAdmin中使用此sql查询
SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' engine=InnoDB;')
FROM information_schema.tables
WHERE engine = 'MyISAM';
它还没有被提及,所以我将为后人写下来:
如果你在DB服务器之间迁移(或者有其他原因你需要转储和重新加载你的dta),你可以修改mysqldump的输出:
mysqldump --no-data DBNAME | sed 's/ENGINE=MyISAM/ENGINE=InnoDB/' > my_schema.sql;
mysqldump --no-create-info DBNAME > my_data.sql;
然后再次加载:
mysql DBNAME < my_schema.sql && mysql DBNAME < my_data.sql
(此外,根据我有限的经验,这可能是一个比“实时”修改表快得多的过程。这可能取决于数据和索引的类型。)
创建数据库的SQL转储文件(database_dump.sql),并在记事本中打开它。 将所有“ENGINE=MyISAM”替换为“ENGINE=InnoDB”。 保存文件并将其导入数据库。
对于转换MySql表存储引擎有许多方法:
使用MySql命令如下,转换为innodb (ALTER TABLE t1 ENGINE = innodb)或(ALTER TABLE t1 ENGINE = MyISAM)为MyISAM(你应该为每个单独的表这样做,t1是表名。) 编写一个在所有表上循环的脚本,并运行alter命令 使用一个已经可用的脚本来处理这个问题:https://github.com/rafihaidari/convert-mysql-tables-storage-engine
在我的例子中,我从一个默认MyISAM的MySQL实例迁移到一个默认InnoDB的MariaDB实例。
根据MariaDB迁移文件。
在旧服务器上运行:
mysqldump -u root -p --skip-create-options --all-databases > migration.sql
——skip-create-options确保数据库服务器在加载数据时使用默认存储引擎,而不是MyISAM。
mysql -u root -p < migration.sql
这抛出了一个关于创建mysql.db的错误,但现在一切都很好了:)