·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

将discuzX3.5社区数据库引擎由默认Innodb转为MyISAM

108 1
发表于 2025-1-13 17:04:41 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
背景:我本地电脑的机械硬盘时不时出现坏扇区,mysql也有可能会随时无法启动。上次由于无法启动,导致损失了相当多的资料,也包括我的一些开发插件资料。刚开始以为我在18年前修复过一次,这次还可以修复坏扇区,但现在的硬盘容量比18年前翻了10倍还要多。而且dos都无法认识现在的硬件,无奈,放弃了。只能通过分区软件将坏扇区分成一个单独的分区……

于是一个想法便诞生了:将discuzX3.5社区数据库引擎由默认Innodb转为MyISAM

操作步骤:
    先导出最新的sql文件:aaa.sql(最好用zip压缩一份,用于备份)替换导出的aaa.sql文件关键字:InnoDB为MyISAM,另外数据库名加_new(有些可能没有创建数据库的DDL,没关系,后面导入的时候手工创建一个数据库名称就是),再用工具导入修改后的aaa.sql(如果数据库_new没有,可以手工创建)修改config\config_global.php:$_config['db'][1]['dbname'] = '数据库名_new';    $_config['db']['common']['engine'] = 'myisam'; 两行运行网站,看是否正常。

当你看到这个贴子的时候,就表示我已经成功了。 将discuzX3.5社区数据库引擎由默认Innodb转为MyISAM discuzx3换数据库 我嘚意的笑,我嘚意的笑……

dz官方要是看到这个贴子,不骂死我,好不容易让用户使用上高大上的Innodb引擎,又为之做了那么多的代码匹配,你居然又搞潮流倒退,我要拍死你 将discuzX3.5社区数据库引擎由默认Innodb转为MyISAM discuzx3换数据库 ……

如果数据量大些,只能写程序进行转换,贴上一个自用的:将社区的数据库Innodb转换为MyISAM引擎。目前此程序已经成功转换本地、线上两个数据库。

使用方法也很简单:1、解压文件后,将文件放在社区根目录      2、在浏览器地址栏中访问此文件:http://aaa.com/--engine--.php      3、执行完毕后,删掉此文件
我要说一句 收起回复

评论1

Discuz智能体Lv.8 发表于 2025-3-18 01:36:59 | 查看全部
将Discuz! X3.5的数据库引擎从InnoDB转换为MyISAM是一个相对复杂的操作,尤其是在你已经遇到硬盘问题的情况下。虽然你提到已经成功完成了转换,但我想补充一些注意事项和建议,以确保你的数据库和网站能够长期稳定运行。

### 1. **InnoDB与MyISAM的区别**
   - **InnoDB**:支持事务、行级锁、外键约束,适合高并发、数据一致性要求高的场景。
   - **MyISAM**:不支持事务、表级锁,适合读多写少的场景,性能较好但不适合高并发写入。

### 2. **转换步骤的补充说明**
   - **备份数据**:在进行任何数据库操作之前,务必备份所有数据。你提到的导出SQL文件并压缩备份是非常好的做法。
   - **修改SQL文件**:将`ENGINE=InnoDB`替换为`ENGINE=MyISAM`,并确保所有表都正确转换。
   - **创建新数据库**:如果导出的SQL文件中没有创建数据库的语句,手动创建一个新的数据库。
   - **修改配置文件**:确保`config_global.php`中的数据库配置指向新的数据库。

### 3. **注意事项**
   - **数据一致性**:MyISAM不支持事务,因此在转换后,如果网站有高并发的写入操作,可能会出现数据不一致的问题。
   - **表级锁**:MyISAM使用表级锁,这意味着在高并发写入时,可能会出现锁等待的情况,影响性能。
   - **外键约束**:如果你在数据库中使用了外键约束,MyISAM不支持外键,转换后这些约束将失效。
   - **数据恢复**:如果硬盘问题持续存在,建议考虑更换硬盘或使用SSD,以提高数据库的稳定性和性能。

### 4. **自动化转换脚本**
   你提到的自动化转换脚本是一个很好的解决方案,尤其是对于数据量较大的情况。以下是一个简单的PHP脚本示例,用于将数据库中的所有表从InnoDB转换为MyISAM:

  
  1. <?php
  2.    // 数据库连接配置
  3.    $db_host = 'localhost';
  4.    $db_user = 'root';
  5.    $db_pass = 'password';
  6.    $db_name = 'your_database';

  7.    // 连接数据库
  8.    $conn = new mysqli($db_host, $db_user, $db_pass, $db_name);

  9.    if ($conn->connect_error) {
  10.        die("连接失败: " . $conn->connect_error);
  11.    }

  12.    // 获取所有表名
  13.    $tables = $conn->query("SHOW TABLES");

  14.    while ($row = $tables->fetch_row()) {
  15.        $table = $row[0];
  16.        // 转换表引擎为MyISAM
  17.        $conn->query("ALTER TABLE $table ENGINE=MyISAM");
  18.        echo "表 $table 已转换为 MyISAM<br>";
  19.    }

  20.    echo "所有表已成功转换为 MyISAM";

  21.    // 关闭连接
  22.    $conn->close();
  23.    ?>
复制代码


   **使用方法**:
   1. 将上述代码保存为`convert_to_myisam.php`。
   2. 将该文件上传到Discuz!的根目录。
   3. 在浏览器中访问`http://yourdomain.com/convert_to_myisam.php`。
   4. 执行完毕后,删除该文件以确保安全。

### 5. **长期解决方案**
   - **硬件升级**:建议更换为SSD硬盘,以提高数据库的读写性能和稳定性。
   - **定期备份**:无论使用哪种数据库引擎,定期备份都是必不可少的。
   - **监控硬盘健康**:使用工具(如`smartctl`)定期监控硬盘的健康状态,及时发现并处理问题。

### 6. **总结**
虽然MyISAM在某些场景下可能更适合你的需求,但InnoDB在数据一致性和并发处理方面具有明显优势。如果你决定继续使用MyISAM,请务必注意上述提到的潜在问题,并采取相应的措施来确保数据库的稳定性和安全性。

如果你有其他问题或需要进一步的帮助,请随时联系我!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.145.67.59,GMT+8, 2025-4-3 05:54 , Processed in 1.264835 second(s), 74 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表