mysql - ERROR 2006 (HY000) : MySQL server has gone away - Broken db, 表或 mysql 坏了?

标签 mysql database

在 Debian 8 下的 mysql 5.5.53(innodb 数据库)上

又一个 mysql 新手苦苦学习 mysql。真正艰难的方法。提供的任何帮助都会很棒。我的网站离线了,这对我来说真的很重要。问题:我不知道我是否有损坏的数据库、表或者 mysql 本身是否损坏。n mysql 崩溃与一个数据库而不是另一个。我使用

登录到 mysql
mysql -u root -p

进入后,我输入

use drupal;
show tables;

效果很好。然后我输入

use civicrm;
show tables;

我明白了

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...

然后我试试

 mysqlcheck -u root --password civicrm

这将开始列出 civicrm 的所有表,但它会在大约 4 个表崩溃后命中名为 log_civicrm_* 的表

 Got error: 2013: Lost connection to MySQL server during query when executing 'CHECK TABLE ... '

索引文件 ib_logfile1 和 ib_logfile0 都被重建。我已将 my.cnf 设置为

key_buffer      = 512M
max_allowed_packet  = 64M
thread_stack        = 3M
thread_cache_size       = 8

我试图转储数据库 civicrm,但它在启动时就失败了。我可以转储大部分表,除了少数几个名为 log_civicrm_* 我尝试使用的表

innodb_force_recovery=5

没有变化。文件/var/log/mysql/error.log 显示

170127 21:48:27 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.53-0+deb8u1'  socket: '/var/run/mysqld/mysqld.sock'  
port: 3306  (Debian)
02:48:28 UTC - mysqld got signal 11 ;

Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (7f23402d6f40): is an invalid pointer
Connection ID (thread ID): 9
Status: NOT_KILLED

任何从 civicrm 中删除表的尝试都会因 2006 错误而失败。我在这里有什么选择?数据库是否需要修复、表,或者是否有其他东西坏了,接下来我该去哪里修复它?谢谢。

最佳答案

发现问题。损坏的日志表。为糟糕的 mysql 造成 MEGA-chaos。任何时候使用 CiviCRM 表都会崩溃。

要解决,

找到 civicrm 数据库的存储位置。如果在典型的 *nix 发行版上并使用 mysql,可能是/var/lib/mysql/civicrm

关闭mysql(服务mysql停止)

创建一个新目录(mkdir logtables),现在将所有日志表移动到该目录中(mv civicrm.log_* logtables)

清除 error.log 文件,这样您就可以在每次启动 mysql 时看到发生了什么。为此,cat/dev/null >/var/log/mysql/error.log(假设 mysql 服务器日志文件位于/var/log/mysql,您在发出该命令之前会检查它)

启动mysql(服务mysql启动)

如果您没有 root 权限,当您尝试移动日志表时,操作系统会崩溃。建议使用 sudo(例如 sudo mv civicrm.log_*)或 su root 将您的权限提升到 root,然后疯狂但不要太疯狂。请记住,在 Unix/Linux 中无法撤消。启动mysql后,查看mysql服务器的日志文件,看是否再次开心。

关于mysql - ERROR 2006 (HY000) : MySQL server has gone away - Broken db, 表或 mysql 坏了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41907028/

相关文章:

mysql - 如何在过程或触发器中创建 mysql 事件?

MySQL:SELECT...GROUP BY 导致 "Table is read only "错误

php - 在 SQL 数据库中存储表单数据

php - 根据时间戳的一部分从 MySQL 数据库中进行选择

android - 如何获取 ListView 的选定索引或位置并传递到新的 Activity 中?

mongodb - 为初学者推荐一个好的 mongodb/数据库教程?

java - 打开购物车与其他系统集成

sql - 带时间戳的逻辑删除

mysql - 无法获得正确的分组依据表达式

mysql - 如何根据另一个表中的值设置一个表的字段