原来自己用的是为了装的, 所以在设置database usage(如下图1)的时候按照discuz官方的建议,选的都是Non-Transactional Database Only(只支持MyISAM数据引擎的非事务数据库),用MyISAM数据库,还没涉及到需要InnoDB,因此打算直接不加载INNODB引擎。
### 将MySQL从MyISAM转换成InnoDB的错误与解决方法
#### 一、问题背景及概述
本文主要探讨了在将MySQL数据库从MyISAM引擎转换为InnoDB引擎时遇到的问题及其解决方法。作者最初使用的是一款仅支持MyISAM引擎的非事务型数据库,并未考虑使用InnoDB。然而,在尝试安装WordPress时遇到了与数据库引擎相关的错误,这促使作者开始研究如何正确地将MyISAM引擎转换为InnoDB引擎。
#### 二、MyISAM与InnoDB的区别
在深入了解问题之前,我们需要先了解一下MyISAM和InnoDB两种存储引擎的基本特性:
1. **MyISAM**:
- 不支持事务处理,这意味着一旦数据库崩溃或发生故障,可能无法保证数据的一致性。
- 表锁机制:当一个表被锁定后,其他的查询操作将被阻塞,直到该表解锁为止。
- 不支持外键约束。
2. **InnoDB**:
- 支持事务处理,能够确保数据的完整性,即使系统出现故障也能通过回滚事务来恢复数据一致性。
- 行级锁定:相较于MyISAM的表级锁定,InnoDB提供了更细粒度的锁定机制,提高了并发处理能力。
- 支持外键约束,有助于维护数据的一致性和完整性。
#### 三、转换过程中遇到的问题及分析
##### 1. 错误现象
作者在尝试安装第二个WordPress时遇到了问题,具体表现为使用phpMyAdmin访问数据库时出现错误提示:“Mysqld-nt.exe应用程序错误:“0x005346c4”指令引用的“0x00786000”内存,该内存不能为读”,接着MySQL服务停止响应,导致无法登录数据库。
##### 2. 错误原因分析
- **数据库引擎不匹配**:原本的数据库使用的是MyISAM引擎,而WordPress默认使用InnoDB引擎。这种引擎不匹配可能导致一系列兼容性问题。
- **配置文件错误**:在尝试更改数据库引擎配置时,由于配置文件(my.ini)中的设置与实际需求不符,导致MySQL服务启动失败。
##### 3. 解决步骤
1. **重新配置数据库引擎**:通过MySQL安装向导将数据库类型从Non-Transactional Database Only改为支持InnoDB引擎的类型。
2. **修改InnoDB数据文件路径**:根据实际情况调整InnoDB数据文件的存储位置,例如将其设置在D:\MySQLInnoDBDatafiles目录。
3. **处理InnoDB日志文件问题**:检查并调整InnoDB日志文件大小,确保与my.ini文件中的设置一致。删除不符合大小要求的日志文件(.ib_logfile0和.ib_logfile1),重启MySQL服务。
#### 四、深入分析及解决策略
##### 1. 分析错误日志
通过对MySQL的错误日志进行分析,发现如下关键信息:
- 日志文件大小不匹配:`InnoDB: Error: logfile .\ib_logfile0 is of different size 052428800 bytes InnoDB: than specified in the .cnf file 010485760 bytes!`
- 存储引擎不可用:`1010019:47:42 [ERROR] Default storage engine (InnoDB) is not available`
这些错误信息指向了日志文件大小配置不一致的问题。
##### 2. 解决策略
- **调整日志文件大小**:根据错误日志提供的信息,调整.my.ini文件中关于InnoDB日志文件的大小设置,使其与实际文件大小一致。
- **删除不匹配的日志文件**:删除大小不一致的日志文件,并重启MySQL服务。
- **检查并修改配置文件**:确保my.ini文件中的所有设置与实际情况相符合,包括InnoDB数据文件的位置、日志文件大小等。
#### 五、总结
通过以上步骤,作者成功解决了将MySQL从MyISAM转换成InnoDB时遇到的问题。这一过程不仅需要对MyISAM和InnoDB两种存储引擎的特点有所了解,还需要具备一定的数据库管理经验。希望本文能够帮助遇到类似问题的技术人员解决问题。