15.4.1 修复和检查 CSVtable
CSV
存储引擎支持CHECK TABLE和REPAIR TABLE语句,以验证并在可能的情况下修复损坏的CSV
table。
运行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 末尾的所有其他行都被删除,即使是有效行也是如此。