Ad Widget

Collapse

Проблема с MySQL на сервере zabbix

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Amir
    Junior Member
    • Dec 2013
    • 5

    #1

    Проблема с MySQL на сервере zabbix

    Добрый день! Вчера неожиданно обесточили серверную и похоже бесперебойники были не готовы к этому, в связи с чем сервер zabbix жестко вырубился. При восстановлении электропитания zabbix уже не захотел запускаться: ошибка в браузере -
    Code:
    Zabbix 2.4.5 
    Database error
    Error connecting to database: No such file or directory
    Так вот, пропущу прелюдию и сразу скажу, что проблема с MySQL. При старте он сразу вылетает, причем в логи ничего не пишет. Запуск через mysqld_safe показал в логах следующее:
    160718 10:38:00 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
    160718 10:38:00 [Note] /usr/sbin/mysqld (mysqld 5.5.46-MariaDB-log) starting as process 2969 ...
    160718 10:38:00 InnoDB: The InnoDB memory heap is disabled
    160718 10:38:00 InnoDB: Mutexes and rw_locks use GCC atomic builtins
    160718 10:38:00 InnoDB: Compressed tables use zlib 1.2.8
    160718 10:38:00 InnoDB: Using Linux native AIO
    160718 10:38:00 InnoDB: Initializing buffer pool, size = 128.0M
    160718 10:38:00 InnoDB: Completed initialization of buffer pool
    160718 10:38:00 InnoDB: highest supported file format is Barracuda.
    InnoDB: Log scan progressed past the checkpoint lsn 2414755548105
    160718 10:38:00 InnoDB: Database was not shut down normally!
    InnoDB: Starting crash recovery.
    InnoDB: Reading tablespace information from the .ibd files...
    InnoDB: Restoring possible half-written data pages from the doublewrite
    InnoDB: buffer...
    InnoDB: Doing recovery: scanned up to log sequence number 2414760790528
    InnoDB: Doing recovery: scanned up to log sequence number 2414761460674
    InnoDB: 2 transaction(s) which must be rolled back or cleaned up
    InnoDB: in total 107 row operations to undo
    InnoDB: Trx id counter is 474FFE00
    160718 10:38:01 InnoDB: Starting an apply batch of log records to the database...
    InnoDB: Progress in percents: 0 1 160718 10:38:01 [ERROR] 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.

    To report this bug, see http://kb.askmonty.org/en/reporting-bugs

    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.

    Server version: 5.5.46-MariaDB-log
    key_buffer_size=134217728
    read_buffer_size=131072
    max_used_connections=0
    max_threads=153
    thread_count=0
    It is possible that mysqld could use up to
    key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 466702 K bytes of memory
    Hope that's ok; if not, decrease some variables in the equation.

    Thread pointer: 0x0x0
    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 = 0x0 thread_stack 0x48000
    /usr/sbin/mysqld(my_print_stacktrace+0x29)[0x7fbedee62b69]
    /usr/sbin/mysqld(handle_fatal_signal+0x515)[0x7fbedeb0ed95]
    /lib64/libpthread.so.0(+0xf9f0)[0x7fbedd7de9f0]
    /usr/sbin/mysqld(+0x6d6ca2)[0x7fbeded47ca2]
    /usr/sbin/mysqld(+0x6d7f8d)[0x7fbeded48f8d]
    /usr/sbin/mysqld(+0x6c1170)[0x7fbeded32170]
    /usr/sbin/mysqld(+0x6c2b3b)[0x7fbeded33b3b]
    /usr/sbin/mysqld(+0x652780)[0x7fbedecc3780]
    /usr/sbin/mysqld(+0x68d719)[0x7fbedecfe719]
    /usr/sbin/mysqld(+0x605788)[0x7fbedec76788]
    /lib64/libpthread.so.0(+0x80db)[0x7fbedd7d70db]
    /lib64/libc.so.6(clone+0x6d)[0x7fbedc8a7e3d]
    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.
    160718 10:38:01 mysqld_safe mysqld from pid file /var/lib/mysql/zabbix24.pid ended
    В общем, некая ошибка [ERROR] mysqld got signal 11 ; приводит к тому, что MySQL не запускается ни в какую. Гугл не помог. С MySQL, к сожалению, я толком не работал и копать глубже самостоятельно уже не смогу.
    Ребят, может у вас есть опыт решения подобных проблем? Подскажите пожалуйста что же делать... Бэкапов нет и самое главное, что количество устройств мониторинга просто огромное и за короткий период набить новую базу будет не так то просто.
  • Firm
    Senior Member
    • Dec 2009
    • 342

    #2
    Если база Zabbix-а была на движке InnoDB, то можно попробовать (видно, что падает на применении транзакций из binary log) добавить в /etc/my.cnf (/etc/mysql/my.cnf) следующее:

    [mysqld]
    innodb_force_recovery = 1

    и рестартовать mysqld. Если не поможет - увеличить значение на единицу и попробовать ещё раз. Как только запустится - сделать backup и дальше уже шаманить с repair table, хотя правильнее будет заново базу создать. Если не поможет, увы, тут уже надо отдельно разбираться.

    Comment

    • Amir
      Junior Member
      • Dec 2013
      • 5

      #3
      Originally posted by firm
      Если база zabbix-а была на движке innodb, то можно попробовать (видно, что падает на применении транзакций из binary log) добавить в /etc/my.cnf (/etc/mysql/my.cnf) следующее:

      [mysqld]
      innodb_force_recovery = 1

      и рестартовать mysqld. Если не поможет - увеличить значение на единицу и попробовать ещё раз. Как только запустится - сделать backup и дальше уже шаманить с repair table, хотя правильнее будет заново базу создать. Если не поможет, увы, тут уже надо отдельно разбираться.
      Спасибо за ответ! Нечто подобное я и провернул - действительно всё восстановилось

      Comment

      • Amir
        Junior Member
        • Dec 2013
        • 5

        #4
        В общем после нескольких дней мучений удалось восстановиться. Написал для себя небольшую инструкцию. Может кому-то пригодиться. Думаю её можно применить не только при ошибке signal 11, но и в других случаях, когда InnoDB рушится.
        порядок восстановления при signal 11
        0. выключить сервисы
        service zabbix-server stop
        service apache2 stop
        1. запустить mysqld_safe
        2. посмотреть логи в /var/lib/mysql/имя_хоста.err
        какая ошибка приводит к падению? В данном случае было:
        InnoDB: Progress in percents: 0 1 160718 10:38:01 [ERROR] mysqld got signal 11 ;
        3. killproc mysqld_safe
        4. killproc mysql
        5. добавить в /etc/my.cnf после [mysqld]:
        innodb_force_recovery=1 (Начать с 1 (самый безопасный вариант) до 6(самый опасный))
        innodb_purge_threads=0
        6. запускать mysqld_safe до тех пор пока он перестанет падать. В моём случае получилось только на 6!
        7. в случае успеха периодически проверять лог .err на предмет завершения процесса восстановления
        8. произвести дамп таблиц заббикса
        mysqldump zabbix | bzip2 -9 > dbdump.bz2
        9. произвести проверку таблиц
        mysqlcheck --all-databases
        может быть вместо проверки запускать сразу ремонт?
        mysqlcheck -Ar --auto-repair (у меня вызывало ошибку)
        10. можно попробовать ещё раз сделать дамп заббикса как в п.8
        11. был вариант удалить "битые" таблицы, но он не сработал у меня
        drop table database.table; где, database = zabbix, table=битая таблица
        12. выключить mysql
        killproc mysqld_safe
        killproc mysql
        13. закомментить в /etc/my.cnf или вообще удалить
        #innodb_force_recovery=1
        #innodb_purge_threads=0
        14. скопировать куда-нибудь из папки /var/lib/mysql папки mysql и performa...
        15. удалить содержимое папки /var/lib/mysql, кроме папок mysql и performa...
        16. запустить mysqld_safe - будет восстановлена база mysql
        17. создать базу zabbix с нуля:
        shell> mysql
        mysql> create database zabbix character set utf8 collate utf8_bin;
        mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
        mysql> quit;
        перейти в папку /usr/share/doc/packages/zabbix24-server/mysql
        shell> mysql zabbix < schema.sql
        shell> mysql zabbix < images.sql
        shell> mysql zabbix < data.sql
        18. восстановиться из ранее сохраненного дампа
        bzcat dbdump.bz2 | mysql zabbix
        периодически следить за свободным местом на диске - df - может не хватить памяти!
        19. включить сервисы
        service zabbix-server start
        service apache2 start
        20. попробовать зайти - у меня сразу всё заработало, правда только через mysqld_safe, но как временное решение для нормального бэкапа этого достаточно.
        линки связанные с данной темой:
        http://dev.mysql.com/doc/refman/5.5/...-recovery.html

        http://local.com.ua/forum/blog/3/ent...%D0%B5-innodb/
        Last edited by Amir; 21-07-2016, 13:16.

        Comment

        Working...