![mysql 吐出大量“表标记为崩溃”错误](https://linux22.com/image/539331/mysql%20%E5%90%90%E5%87%BA%E5%A4%A7%E9%87%8F%E2%80%9C%E8%A1%A8%E6%A0%87%E8%AE%B0%E4%B8%BA%E5%B4%A9%E6%BA%83%E2%80%9D%E9%94%99%E8%AF%AF.png)
我有一个 mysql 服务器(版本:5.5.3-m3-log 源分发版),它一直显示大量
110214 3:01:48 [ERROR] /usr/local/mysql/libexec/mysqld: Table './mydb/tablename' is marked as crashed and should be repaired
110214 3:01:48 [Warning] Checking table: './mydb/tablename'
我在想可能的原因是什么以及如何解决。这里是完整的 mysql 配置列表:
connect_errors = 6000
table_cache = 614
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 2G
max_length_for_sort_data = 2G
join_buffer_size = 256M
thread_cache_size = 300
#thread_concurrency = 8
query_cache_size = 512M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
default-storage-engine = MyISAM
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 246M
max_heap_table_size = 246M
long_query_time = 3
log-slave-updates = 1
log-bin = /data/mysql/3306/binlog/binlog
binlog_cache_size = 4M
binlog_format = MIXED
max_binlog_cache_size = 8M
max_binlog_si ze = 1G
relay-log-index = /data/mysql/3306/relaylog/relaylog
relay-log-info-file = /data/mysql/3306/relaylog/relaylog
relay-log = /data/mysql/3306/relaylog/relaylog
expire_logs_days = 30
key_buffer_size = 1G
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 2G
myisam_max_sort_file_size = 5G
myisam_repair_threads = 1
max_binlog_size = 1G
interactive_timeout = 64
wait_timeout = 64
skip-name-resolve
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396
该盒子运行的是 centos-5.5。感谢您的帮助。
答案1
尽管损坏的数据很少见,但这是我们工作的本质。
只需运行 mysqlcheck mydb tablenam -r
那应该有帮助。
你的机器是否进行了硬重启或者其他操作?
答案2
对于“修复”部分,您还可以将“myisam-recover-options”(与 5.5.3 之前的“myisam-recover”相同)放入 my.cnf 中,这样 MySQL 将尝试动态修复 MyISAM 表 - 存在不同的选项,请参阅 MySQL 文档
答案3
如果您遇到的此类错误与您的问题所暗示的一样多,那么您应该查看 MySQL 本身以外的其他内容。如果没有外部帮助,MySQL 不会轻易产生这样的重复多个错误。我建议您在继续操作之前对您的硬盘驱动器和 RAM 进行一些认真的诊断。