Задать вопрос

Как исправить ошибку: Lost connection to MySQL server during query?

Есть информационный сайт с базой знаний.
В одно прекрасное утро по метрике замечаю, что сильно просела посещаемость за прошлый день.
Иду на сайт - ошибка подключения к БД. Ежедневный бэкап был сделан текущей ночью, то есть уже содержит ошибку.

Mysql 5.7.23
Ubuntu 16.04.1

Пробую подключиться к MySQL. При любом запросе к одной таблице выдается ошибка:
Lost connection to MySQL server during query?
Лог MySQL
2018-08-20T05:10:47.022666Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)
2018-08-20T05:10:47.022728Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000)
2018-08-20T05:10:47.197039Z 0 [Warning] option 'net_buffer_length': unsigned value 536870912 adjusted to 1048576
2018-08-20T05:10:47.197073Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-08-20T05:10:47.199115Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.23-0ubuntu0.16.04.1) starting as process 15650 ...
2018-08-20T05:10:47.203962Z 0 [Note] InnoDB: PUNCH HOLE support available
2018-08-20T05:10:47.203985Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2018-08-20T05:10:47.203995Z 0 [Note] InnoDB: Uses event mutexes
2018-08-20T05:10:47.204001Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2018-08-20T05:10:47.204007Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.8
2018-08-20T05:10:47.204012Z 0 [Note] InnoDB: Using Linux native AIO
2018-08-20T05:10:47.204424Z 0 [Note] InnoDB: Number of pools: 1
2018-08-20T05:10:47.204585Z 0 [Note] InnoDB: Not using CPU crc32 instructions
2018-08-20T05:10:47.206665Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
2018-08-20T05:10:47.217553Z 0 [Note] InnoDB: Completed initialization of buffer pool
2018-08-20T05:10:47.220127Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2018-08-20T05:10:47.232641Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
2018-08-20T05:10:47.234316Z 0 [Note] InnoDB: Log scan progressed past the checkpoint lsn 930035778
2018-08-20T05:10:47.234328Z 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 930035787
2018-08-20T05:10:47.234335Z 0 [Note] InnoDB: Database was not shutdown normally!
2018-08-20T05:10:47.234340Z 0 [Note] InnoDB: Starting crash recovery.
2018-08-20T05:10:47.359530Z 0 [ERROR] InnoDB: Space ID in fsp header is 1702065259, but in the page header it is 1870161781.
2018-08-20T05:10:47.359555Z 0 [ERROR] InnoDB: Data file './kubium/game.ibd' uses page size 0, but the innodb_page_size start-up parameter is 16384
2018-08-20T05:10:47.359578Z 0 [ERROR] InnoDB: Operating system error number 2 in a file operation.
2018-08-20T05:10:47.359586Z 0 [ERROR] InnoDB: The error means the system cannot find the path specified.
2018-08-20T05:10:47.359605Z 0 [ERROR] InnoDB: If you are installing InnoDB, remember that you must create directories yourself, InnoDB does not create them.
2018-08-20T05:10:47.359613Z 0 [ERROR] InnoDB: Could not find a valid tablespace file for `kubium/game`. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html for how to resolve the issue.
2018-08-20T05:10:47.359626Z 0 [Warning] InnoDB: Ignoring tablespace `kubium/game` because it could not be opened.
2018-08-20T05:10:47.440722Z 0 [Note] InnoDB: Removed temporary tablespace data file: "ibtmp1"
2018-08-20T05:10:47.440745Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2018-08-20T05:10:47.440799Z 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2018-08-20T05:10:47.498664Z 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
2018-08-20T05:10:47.499709Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
2018-08-20T05:10:47.499724Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
2018-08-20T05:10:47.500094Z 0 [Note] InnoDB: Waiting for purge to start
2018-08-20T05:10:47.550321Z 0 [Note] InnoDB: 5.7.23 started; log sequence number 930035787
2018-08-20T05:10:47.550589Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2018-08-20T05:10:47.550723Z 0 [Note] Plugin 'FEDERATED' is disabled.
2018-08-20T05:10:47.554667Z 0 [Note] InnoDB: Buffer pool(s) load completed at 180820  8:10:47
2018-08-20T05:10:47.556929Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
2018-08-20T05:10:47.556958Z 0 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306
2018-08-20T05:10:47.556970Z 0 [Note]   - '127.0.0.1' resolves to '127.0.0.1';
2018-08-20T05:10:47.557020Z 0 [Note] Server socket created on IP: '127.0.0.1'.
2018-08-20T05:10:47.566786Z 0 [Note] Event Scheduler: Loaded 0 events
2018-08-20T05:10:47.567067Z 0 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.7.23-0ubuntu0.16.04.1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)
2018-08-20T05:10:48.024221Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)
*** Error in `/usr/sbin/mysqld': malloc(): memory corruption: 0x00007fcbfc124080 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fcc3d2537e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x8213e)[0x7fcc3d25e13e]
/lib/x86_64-linux-gnu/libc.so.6(__libc_malloc+0x54)[0x7fcc3d260184]
/usr/sbin/mysqld(my_malloc+0x88)[0xe8fdd8]
/usr/sbin/mysqld(alloc_root+0xe9)[0xe8b879]
/usr/sbin/mysqld(strmake_root+0x16)[0xe8bc16]
/usr/sbin/mysqld(_Z14open_table_defP3THDP11TABLE_SHAREj+0xffd)[0xcf010d]
/usr/sbin/mysqld(_Z15get_table_shareP3THDP10TABLE_LISTPKcmjPij+0x16f)[0xbf357f]
/usr/sbin/mysqld(_Z10open_tableP3THDP10TABLE_LISTP18Open_table_context+0xb2a)[0xbf46ca]
/usr/sbin/mysqld(_Z11open_tablesP3THDPP10TABLE_LISTPjjP19Prelocking_strategy+0x79b)[0xbfb9bb]
/usr/sbin/mysqld(_Z21open_tables_for_queryP3THDP10TABLE_LISTj+0x59)[0xbfc169]
/usr/sbin/mysqld[0xcae17f]
/usr/sbin/mysqld(_Z14get_all_tablesP3THDP10TABLE_LISTP4Item+0x70e)[0xcaea7e]
/usr/sbin/mysqld[0xc9964c]
/usr/sbin/mysqld(_Z24get_schema_tables_resultP4JOIN23enum_schema_table_state+0x195)[0xcaaab5]
/usr/sbin/mysqld(_ZN4JOIN14prepare_resultEv+0x95)[0xc8efb5]
/usr/sbin/mysqld(_ZN4JOIN4execEv+0xa8)[0xc1dbf8]
/usr/sbin/mysqld(_Z12handle_queryP3THDP3LEXP12Query_resultyy+0x233)[0xc8fa53]
/usr/sbin/mysqld[0x753f3b]
/usr/sbin/mysqld(_Z21mysql_execute_commandP3THDb+0x465b)[0xc5170b]
/usr/sbin/mysqld(_Z11mysql_parseP3THDP12Parser_state+0x3ad)[0xc53dbd]
/usr/sbin/mysqld(_Z16dispatch_commandP3THDPK8COM_DATA19enum_server_command+0x102a)[0xc54efa]
/usr/sbin/mysqld(_Z10do_commandP3THD+0x1c7)[0xc563b7]
/usr/sbin/mysqld(handle_connection+0x288)[0xd18718]
/usr/sbin/mysqld(pfs_spawn_thread+0x1b4)[0xeb3504]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba)[0x7fcc3de4e6ba]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7fcc3d2e341d]



Пробовал разное решение проблемы. В частности увеличивал значения mysql:
connect_timeout = 43200
max_allowed_packet = 1024M
net_buffer_length = 512M
innodb_force_recovery = 4

До таблицы так и не удалось ни разу достучаться.
Может есть какая-то возможность ее воскресить? Спасибо
  • Вопрос задан
  • 13608 просмотров
Подписаться 2 Сложный 5 комментариев
Решения вопроса 1
2ord
@2ord
Видно что-то навернулось с файлами БД и также ошибка повреждения памяти.

Добавлено
Судя по всему, произошёл серьезный сбой в QEMU либо вызван сбоем в хост-машине. В результате во время работы СУБД файлы БД, включая служебные файлы, были повреждены (как минимум, файлы в директории /var/lib/mysql ). Стоит проверить также целостность самой ОС.

Рекомендую объявить посетителям о проблеме, а тем временем обратиться к специалистам по восстановлению MySQL + InnoDB, поскольку хорошего бекапа не было.

Имеет смысл создать TAR архив со сжатием директории /var/lib/mysql с надеждой на последующее восстановление данных.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@hx510b
"Я знаю, что ничего не знаю"
Судя по:
Error in `/usr/sbin/mysqld': malloc(): memory corruption: 0x00007fcbfc124080

1. сделать копию /var/lib/mysql на другой накопитель

2. Исследуем и решаем:
2.1. вариант1 - битая память - прогнать memtest, может перегрев системы? устраняем или, если обе проблемы не подтверждаются, то идем дальше. Хотя тут похоже сторонний виртуальный сервер. Но проблема может быть.
Если проблема с ОЗУ, то протестировать внутри ОС можно созданием сжатых архивов и проверкой их целостности, в случае проблем с ОЗУ рано или поздно появятся ошибки контрольных сумм.

2.2. вариант2 - либо испорчены файлы данных, и mysql становится плохо из-за кривого кода. файлы могут быть испорчены некорректным завершением работы сервера либо проблемами с блочным устройством:

2018-08-20T05:10:47.359613Z 0 [ERROR] InnoDB: Could not find a valid tablespace file for `kubium/game`. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html for how to resolve the issue.
2018-08-20T05:10:47.359626Z 0 [Warning] InnoDB: Ignoring tablespace `kubium/game` because it could not be opened.

- это может быть косвенным признаком проблем с файлами.
2.2.1. проверяем состояние блочных устройств smartctl - наличие offline uncorrectable или relocated sectos - могут быть причиной порчи данных - замена накопителя. Для чужого хостинга это недоступно. Можно косвенно проверить чтением блочного устройства /dev/vda
2.2.2. проверяем fsck файловую систему, наличие ошибок в файловой системы может указывать на повреждение содержания файлов БД. чиним и молимся, что важнейшие файлы не были задеты.
2.2.3. проверяем структуру innodb/myisam файлов, для этого используем штатные средства диагностики или вспомогательные утилиты, например "Percona Data Recovery Tool for InnoDB can help recover corrupted or deleted InnoDB tables. https://launchpad.net/percona-data-recovery-tool-f..." если проблемы - пытаемся чинить.
Простой старый способ решения некоторых проблем - это dump базы в sql файл , и импорт заново в базу. старую можно переименовать.
2.2.4. проблема может быть вызвана повреждением файлов индексов, в этом случае пересоздание индексов может все решить.

2.3. вариант3 - похожие проблемы могут наблюдаться при подсовывании двоичных файлов баз от более свежей версии mysql - проверяем эту версию.
Можно попробовать обновить версию mysql или сменить ее на mariadb, возможно некоторые проблемы уже решены.

На машине немного памяти - 1Гб, при исчерпании свободного ОЗУ в системе запускается OOM Killer, который убивает процессы в системе, вполне мог убить процесс mysql прямо посередине критичного изменения файлов БД. Это можно найти в логах.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
memory corruption: 0x00007fcbfc124080
Возможно память битая
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы