报错信息:uncategorized SQLException; SQL state [HY000]; error code [1015]; Can't lock file (errno: 165 - Table is read only); nested exception is java.sql.SQLException: Can't lock file (errno: 165 - Table is read only)
我的解决方法:
将innodb_force_recovery注释
innodb_force_recovery
是一个用于InnoDB存储引擎的参数。这个参数用于在数据库发生故障或损坏时尝试强制性地将InnoDB引擎进行恢复。
它的主要作用是启用InnoDB引擎的一种"强制恢复"模式,这样你可以尝试从某些特定的问题中进行恢复,而不至于让整个数据库变得不可用。
在使用innodb_force_recovery
时,需要谨慎操作,因为这可能导致数据丢失或进一步的损坏。以下是一些常见取值和其含义:
- 0: 禁用强制恢复,正常启动InnoDB引擎。
- 1-6: 启用不同级别的强制恢复,级别越高,尝试恢复的操作越多,但也伴随着越大的风险。6是最高级别。
- 大于6: 保留给开发和调试使用,通常不建议在生产环境中使用
禁用 innodb_force_recovery
参数会使 MySQL 使用正常的方式启动 InnoDB 存储引擎,不再强制进行恢复尝试。这通常是正常操作的状态,而不是处于紧急修复模式。
禁用该参数的影响包括:
-
正常操作: 禁用
innodb_force_recovery
将使 InnoDB 引擎按照正常的启动过程来工作。这意味着数据库将尝试打开和使用所有的表,并执行正常的读写操作。 -
数据一致性: 在禁用
innodb_force_recovery
的情况下,系统会尽力确保数据库的一致性。这是通过正常的事务处理和恢复机制来实现的,确保事务的原子性、一致性、隔离性和持久性。 -
性能: 在正常模式下,数据库应该可以正常运行而无需额外的恢复工作。因此,性能应该能够达到正常水平。
-
完整性: 禁用
innodb_force_recovery
有助于确保数据库的完整性。在恢复模式下,为了尝试修复潜在的问题,可能会执行一些破坏性的操作,而在正常模式下,这些操作是不会发生的。
总体来说,禁用 innodb_force_recovery
是恢复到正常操作状态的步骤,通常在你已经处理了潜在的问题,数据库不再需要强制恢复时使用。在正常运行时,不需要使用该参数,因为它会禁用一些安全机制以及数据完整性的保护。因此,使用 innodb_force_recovery
应该是一种紧急手段,而禁用它则是回到正常运行状态的一部分。