我们都知道 MYSQL中常见表格的引擎有两种: 一是MyISAM 另一种是 InnoDB (当然还有Memory, CSV等其它系统自带的类型). MyISAM 是5.5.1版本前默认的数据库引擎类型, 而5.5.1版之后所有新创建的表格默认类型就是 InnoDB 了.
MyISAM 的优点是压缩比较大, 同时是整个表格锁定, 所以不太适合经常插入删除的表格. MyISAM 还不支持 Transaction, 在之前, MyISAM 的一大优点是支持 全文检索 Full Text Indexing 不过现在 InnoDB 也可以了.
InnoDB 支持事务, 是在行级别进行锁定, 而且在大部分情况下性能要好一些.
把表格转换成 InnoDB
我们可以通过 Alter Table 表名 Engine=InnoDB 来把单个表转换成 InnoDB 但是一个数据库有很多这样的表, 一个一个弄实在是麻烦, 所以, 整了一个PHP小工具, 在命令行下执行, 该PHP脚本可以把指定数据库中的 MyISAM 的表都转换成 InnoDB.
系统中数据库如 sys, mysql 有些表类型最好不要去修改.
<?php
// https://helloacm.com/a-simple-php-command-line-tool-to-convert-mysql-tables-from-myisam-to-innodb-in-specified-database/
function ConvertAllTablesToInnoDB($database) {
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "password");
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, $database);
if (!$conn) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
$sql = "SELECT TABLE_NAME FROM
INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '$database'
AND ENGINE = 'MyISAM'
";
$rs = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_array($rs)) {
$tbl = $row[0];
$sql = "ALTER TABLE `$tbl` ENGINE=INNODB";
echo $sql . "\n";
mysqli_query($conn, $sql);
}
}
if ($argc < 2) {
exit( "Usage: php $argv[0] database1 database2 ...\n" );
}
for ($i = 1; $i < $argc; ++ $i) {
echo "ConvertAllTablesToInnoDB " . $argv[$i] . "... \n";
ConvertAllTablesToInnoDB($argv[$i]);
}
比如 WORDPRESS 数据库中有很多表, 执行效果如下:
# php convert_to_innodb.php wordpress
ConvertAllTablesToInnoDB wordpress...
ALTER TABLE `wp_commentmeta` ENGINE=INNODB
ALTER TABLE `wp_comments` ENGINE=INNODB
ALTER TABLE `wp_icl_string_translations` ENGINE=INNODB
ALTER TABLE `wp_imagify_files` ENGINE=INNODB
ALTER TABLE `wp_imagify_folders` ENGINE=INNODB
ALTER TABLE `wp_itsec_lockouts` ENGINE=INNODB
ALTER TABLE `wp_itsec_log` ENGINE=INNODB
ALTER TABLE `wp_itsec_temp` ENGINE=INNODB
ALTER TABLE `wp_links` ENGINE=INNODB
ALTER TABLE `wp_options` ENGINE=INNODB
ALTER TABLE `wp_postmeta` ENGINE=INNODB
ALTER TABLE `wp_posts` ENGINE=INNODB
ALTER TABLE `wp_term_relationships` ENGINE=INNODB
ALTER TABLE `wp_term_taxonomy` ENGINE=INNODB
ALTER TABLE `wp_termmeta` ENGINE=INNODB
ALTER TABLE `wp_terms` ENGINE=INNODB
ALTER TABLE `wp_usermeta` ENGINE=INNODB
ALTER TABLE `wp_users` ENGINE=INNODB
ALTER TABLE `wp_wc_download_log` ENGINE=INNODB
ALTER TABLE `wp_wc_webhooks` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_api_keys` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_attribute_taxonomies` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_downloadable_product_permissions` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_log` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_order_itemmeta` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_order_items` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_payment_tokenmeta` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_payment_tokens` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_sessions` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_shipping_zone_locations` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_shipping_zone_methods` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_shipping_zones` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_tax_rate_locations` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_tax_rates` ENGINE=INNODB
ALTER TABLE `wp_wpio_images` ENGINE=INNODB
ALTER TABLE `wp_yith_ywpar_points_log` ENGINE=INNODB
英文: A Simple PHP Command Line Tool to Convert MySQL Tables from MyISAM to InnoDB in Specified Database
运维/DevOps
- 如何使用 NVM 清理除了保留版本以外的所有 Node.Js 版本
- 哪吒 Nezha 服务器监控软件: 一下子把28台服务器都放在一个页面里
- MySQL参数一键配置脚本: 有效提升数据库性能
- 把 MySQL 中的 MyISAM 表格转换成 InnoDB 的PHP小工具
- 通过 MySQLTuner 来检查数据库配置
- 升级到 PHP 5.5 之后内置 OpCache 加速缓存
- VPS低配置服务器优化的一些方法
- 如何在 Linux 下 列出最耗资源的进程 (BASH 脚本)
- 在LINUX下循环备份的方法
- 更改Wordpress博客全站的评论名称
- 几条Wordpress 博客 有用的 SQL 语句
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK