У меня есть 2 центра обработки данных, каждый с базой данных master / slave, на которой работает сервер Percona 5.5.23. По какой-то причине одна из подчиненных баз данных вылетела с такой ошибкой:
03:00:40 UTC - mysqld got signal 11 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed,
something is definitely wrong and this may fail.
key_buffer_size=16777216
read_buffer_size=131072
max_used_connections=1
max_threads=151
thread_count=0
connection_count=0
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 346809 K bytes of memory
Hope that's ok; if not, decrease some variables in the equation.
Thread pointer: 0x0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0 thread_stack 0x80000
/usr/local/Percona-Server-5.5.23-rel25.3- 240.Linux.x86_64/bin/mysqld(my_print_stacktrace+0x35)[0x7d4c85]
/usr/local/Percona-Server-5.5.23-rel25.3-240.Linux.x86_64/bin/mysqld(handle_fatal_signal+0x3e1)[0x690cb1]
/lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x7fd2b94c7cb0]
/usr/local/Percona-Server-5.5.23-rel25.3-240.Linux.x86_64/bin/mysqld[0x8f2df2]
/usr/local/Percona-Server-5.5.23-rel25.3-240.Linux.x86_64/bin/mysqld[0x81d607]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x7e9a)[0x7fd2b94bfe9a]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7fd2b86a93fd]
The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains information that should help you find out what is causing the crash.
140802 03:00:41 mysqld_safe Number of processes running now: 0
140802 03:00:41 mysqld_safe mysqld restarted
/usr/local/Percona-Server-5.5.23-rel25.3-240.Linux.x86_64/bin/mysqld: error while loading shared libraries: unexpected PLT reloc type 0x00
140802 03:00:41 mysqld_safe mysqld from pid file /dbdata1/mysqld.pid ended
Каждая попытка перезапуска этого ведомого устройства приводит к появлению последних 3 строк предыдущего журнала ошибок. Он не говорит, какая общая библиотека не загружается. Я немного искал "неожиданный тип перемещения PLT", но ничего конкретного, чтобы объяснить, что это такое. Я действительно видел кое-что о том, как это могло быть вызвано повреждением двоичного файла, поэтому я провел контрольные суммы на mysqld на всех 4 моих серверах баз данных. Оказывается, все мои рабочие базы данных показывают одинаковую контрольную сумму:
sha256sum mysqld
0b42e4625a87de52e5f51f2eb74fb7f2db63116e2b78f51d2897c1938a0e03d1 mysqld
где, как показывает моя сломанная база данных:
sha256sum mysqld
7bfd58d1c1948a36cf4602c697dadd60e422d61ff75eeb4a0344f8ec395b03ea mysqld
Таким образом, двоичный файл кажется поврежденным, хотя, как ни странно, все двоичные файлы имеют одинаковую дату модификации И одинаковое количество байтов. Я не уверен, что могло случиться с двоичным кодом работающего сервера, который мог его повредить.
Я мог бы попытаться переустановить Percona, чтобы получить рабочие двоичные файлы, но я хотел бы знать, что здесь произошло, чтобы я мог предотвратить повторение этого в будущем.
Разобрался благодаря этому сообщению в блоге: https://blogs.oracle.com/ksplice/entry/attack_of_the_cosmic_rays1
Таким образом, двоичный файл также имел такое же количество байтов и время модификации (2012 г.), что и другие рабочие серверы, поэтому было странно, что двоичный файл на диске не был изменен, но контрольная сумма все еще была другой. Похоже, двоичный файл был полностью кэширован в ОЗУ, и вот где произошло повреждение. Очистка кеша сработала!