on it road .com

MEMORY表维护

当使用 DELETE...WHERE 语句删除行时,MEMORY 表不会释放内存。
要释放内存,我们必须执行空的 ALTER TABLE 操作。

InnoDB 表维护

如果表检查表明存在问题,请通过使用 mysqldump 将表转储、删除并从转储文件重新创建表来将表恢复到一致状态。
如果 MySQL 服务器或者其运行的主机发生崩溃,某些 InnoDB 表可能处于不一致状态。
InnoDB 执行自动恢复作为其启动序列的一部分。

使用 CHECK TABLE 或者客户端程序查找不一致、不兼容和其他问题。
通过使用 mysqldump 转储一个表来恢复它:

shell> mysqldump [db_name] [table_name] > [dump_file]

然后删除它并从转储文件中重新创建它。

shell> mysql [db_name] < [dump_file]

极少数情况下,服务器不会因为自动恢复失败而启动。
如果发生这种情况,请使用以下过程:

  • 重新启动服务器,将 --innodb_force_recovery 选项设置为 1 到 6 之间的值。这些值表明在避免崩溃时越来越谨慎,以及对恢复的表中可能的不一致的容忍度越来越高。一个好的开始值是 4,它可以防止插入缓冲区合并操作。
  • 当服务器启动时 --innodb_force_recovery 设置为非零值,InnoDB 会阻止 INSERT、UPDATE 或者 DELETE 操作。因此,我们应该转储 InnoDB 表,然后在选项生效时删除它们。然后在没有 --innodb_force_recovery 选项的情况下重新启动服务器。当服务器启动时,从转储文件中恢复 InnoDB 表。
  • 如果前面的步骤失败,请从以前的备份中恢复表。
MySQL 表维护

归档(ARCHIVE)表维护

归档压缩问题:

  • 表行在插入时被压缩。
  • 在检索时,行会按需解压缩。
  • 某些 SELECT 语句可能会使压缩恶化。

使用 OPTIMIZE TABLE 或者 REPAIR TABLE 可以实现更好的压缩。
OPTIMIZE TABLE 在表未被访问(通过读或者写)时起作用。

MyISAM 表维护

对于动态和静态格式表,默认的 CHECK TABLE 检查类型都是 MEDIUM。
如果静态格式表类型设置为 CHANGED 或者 FAST,则默认值为 QUICK。
CHANGED 和 FAST 会跳过行扫描,因为这些行很少损坏。

shell> myisamchk --medium-check [table_name]

如果表被标记为“损坏”或者“未正确关闭”,则检查表更改表。
如果在表中没有发现任何问题,则将表状态标记为“最新”。
如果表已损坏,则问题很可能出在索引中,而不是出在数据中。
--myisam-recover 选项值可以由逗号分隔的以下一个或者多个值的列表组成:

  • 默认:默认检查
  • BACKUP :告诉服务器备份它必须更改的任何表
  • FORCE :即使导致多行数据丢失也执行表恢复
  • 快速:执行快速恢复。恢复会跳过由删除或者更新导致的行之间没有间隙(称为“空洞”)的表。

例如,要告诉服务器对发现有问题的 MyISAM 表执行强制恢复,但要对其更改的任何表进行备份,请将以下内容添加到选项文件中:

[mysqld] 
myisam-recover=FORCE,BACKUP
日期:2020-09-17 00:11:15 来源:oir作者:oir