15.4.1 修复和检查 CSVtable

CSV存储引擎支持CHECK TABLEREPAIR TABLE语句,以验证并在可能的情况下修复损坏的CSVtable。

运行CHECK TABLE语句时,将通过以下方法检查CSV文件的有效性:查找正确的字段分隔符,转义的字段(匹配或缺少引号),与 table 定义进行比较的正确字段数以及是否存在相应的CSV元文件。发现的第一个无效行将报告错误。检查有效 table 将产生如下所示的输出:

mysql> CHECK TABLE csvtest;
+--------------+-------+----------+----------+
| Table        | Op    | Msg_type | Msg_text |
+--------------+-------+----------+----------+
| test.csvtest | check | status   | OK       |
+--------------+-------+----------+----------+

检查损坏的 table 将返回错误:

mysql> CHECK TABLE csvtest;
+--------------+-------+----------+----------+
| Table        | Op    | Msg_type | Msg_text |
+--------------+-------+----------+----------+
| test.csvtest | check | error    | Corrupt  |
+--------------+-------+----------+----------+

如果检查失败,该 table 将标记为已崩溃(损坏)。将 table 标记为损坏后,将在下次运行CHECK TABLE或执行SELECT语句时自动对其进行修复。运行CHECK TABLE时,将显示相应的损坏状态和新状态:

mysql> CHECK TABLE csvtest;
+--------------+-------+----------+----------------------------+
| Table        | Op    | Msg_type | Msg_text                   |
+--------------+-------+----------+----------------------------+
| test.csvtest | check | warning  | Table is marked as crashed |
| test.csvtest | check | status   | OK                         |
+--------------+-------+----------+----------------------------+

要修复 table,请使用REPAIR TABLE,它会从现有CSV数据中复制尽可能多的有效行,然后用恢复的行替换现有的CSV文件。超出损坏数据的所有行都将丢失。

mysql> REPAIR TABLE csvtest;
+--------------+--------+----------+----------+
| Table        | Op     | Msg_type | Msg_text |
+--------------+--------+----------+----------+
| test.csvtest | repair | status   | OK       |
+--------------+--------+----------+----------+

Warning

在修复过程中,只有从CSV文件到第一行损坏的行才被复制到新 table 中。从第一行损坏到 table 末尾的所有其他行都被删除,即使是有效行也是如此。