1

Доброго времени суток! Работал сервер на MariaDB. Пропало электричество, сервер отключился. После загрузки не запускается MariaDB. В логах следующее:

180902 12:13:51 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
180902 12:13:51 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.
180902 12:13:51 [Note] /usr/sbin/mysqld (mysqld 10.0.35-MariaDB) starting as process 1898 ...
180902 12:13:51 [Note] InnoDB: Using mutexes to ref count buffer pool pages
180902 12:13:51 [Note] InnoDB: The InnoDB memory heap is disabled
180902 12:13:51 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
180902 12:13:51 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
180902 12:13:51 [Note] InnoDB: Compressed tables use zlib 1.2.8
180902 12:13:51 [Note] InnoDB: Using Linux native AIO
180902 12:13:51 [Note] InnoDB: Using CPU crc32 instructions
180902 12:13:51 [Note] InnoDB: Initializing buffer pool, size = 512.0M
180902 12:13:51 [Note] InnoDB: Completed initialization of buffer pool
180902 12:13:51 [Note] InnoDB: Highest supported file format is Barracuda.
180902 12:13:51 [Note] InnoDB: The log sequence numbers 131198271055 and 131198271055 in ibdata files do not match the log sequence number 131214606861 in the ib_logfiles!

Что это значит? База повреждена? Как восстановить? Резервной копии нет((

2

Прописал в my.cnf параметр

innodb_force_recovery = 7

и база данных запустилась. Сначала начинал со значения "4", и в итоге дошёл до "7". Но некоторые сайты некорректно работают. Я так понимаю в этом режиме действуют какие-то ограничения. Что теперь делать?

3

Теперь база данных стала запускаться в режиме

innodb_force_recovery = 6

Но проблемы те же. Нашёл в интернете такую фразу

Кроме того, следует знать, что режимы 4-6  mysql будет работать  в режиме только для чтения.

Видимо поэтому некоторые сайты выдают ошибку. Как от этого уйти? Как восстановить нормальную работоспособность?

4

Пробовал следующие команды:

mysqlcheck --all-databases -r
mysqlcheck --all-databases -a
mysqlcheck --all-databases -o

Команды успешно выполняются, но база данных всё равно запускается только с параметром 6.

5

Вопрос. Если я для каждой БД сделаю дамп, очищу БД, затем восстановлю из дампа, это сработает?

6

Пробовал удалять файлы ib_logfile, MariaDB вообще не запускается.

7 (2018-09-02 16:03:29 отредактировано neket89)

Нашёл вот такую статью http://linux-notes.org/ispravlyaem-povr … -tablitsy/. Вроде бы всё чётко описано, но мне не понятен  шаг №4:

Выключите сервер базы данных и удалите каталог данных. Запустите «mysql_install_db» для создания таблиц MySQL по умолчанию.

Каким образом удалить каталог данных?
Я удалил содержимое каталога /var/lib/mysql/, затем запустил команду "mysql_install_db":

Installing MariaDB/MySQL system tables in '/var/lib/mysql' ...
180902 18:02:38 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.
180902 18:02:38 [Note] /usr/sbin/mysqld (mysqld 10.0.35-MariaDB) starting as process 20125 ...
180902 18:02:38 [Note] InnoDB: Using mutexes to ref count buffer pool pages
180902 18:02:38 [Note] InnoDB: The InnoDB memory heap is disabled
180902 18:02:38 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
180902 18:02:38 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
180902 18:02:38 [Note] InnoDB: Compressed tables use zlib 1.2.8
180902 18:02:38 [Note] InnoDB: Using Linux native AIO
180902 18:02:38 [Note] InnoDB: Using CPU crc32 instructions
180902 18:02:38 [Note] InnoDB: Initializing buffer pool, size = 512.0M
180902 18:02:39 [Note] InnoDB: Completed initialization of buffer pool
180902 18:02:39 [Note] InnoDB: Restoring page 0 of tablespace 0
180902 18:02:39 [Warning] InnoDB: Doublewrite does not have page_no=0 of space: 0
180902 18:02:39 [ERROR] InnoDB: space header page consists of zero bytes in data file ./ibdata1
180902 18:02:39 [ERROR] InnoDB: Could not open or create the system tablespace. If you tried to add new data files to the system tablespace, and it failed here, you should now edit innodb_data_file_path in my.cnf back to what it was, and remove the new ibdata files InnoDB created in this failed attempt. InnoDB only wrote those files full of zeros, but did not yet use them in any way. But be careful: do not remove old data files which contain your precious data!
180902 18:02:39 [ERROR] Plugin 'InnoDB' init function returned error.
180902 18:02:39 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
handlersocket: initialized
180902 18:02:39 server_audit: MariaDB Audit Plugin version 1.4.3 STARTED.
180902 18:02:39 server_audit: Query cache is enabled with the TABLE events. Some table reads can be veiled.180902 18:02:39 [ERROR] Unknown/unsupported storage engine: InnoDB
180902 18:02:39 [ERROR] Aborting

180902 18:02:39 server_audit: STOPPED
180902 18:02:39 [Note] unregister_replicator OK
handlersocket: terminated
180902 18:02:39 [Note] /usr/sbin/mysqld: Shutdown complete


Installation of system tables failed!  Examine the logs in
/var/lib/mysql for more information.

The problem could be conflicting information in an external
my.cnf files. You can ignore these by doing:

    shell> /usr/bin/mysql_install_db --defaults-file=~/.my.cnf

You can also try to start the mysqld daemon with:

    shell> /usr/sbin/mysqld --skip-grant-tables --general-log &

and use the command line tool /usr/bin/mysql
to connect to the mysql database and look at the grant tables:

    shell> /usr/bin/mysql -u root mysql
    mysql> show tables;

Try 'mysqld --help' if you have problems with paths.  Using
--general-log gives you a log in /var/lib/mysql that may be helpful.

The latest information about mysql_install_db is available at
https://mariadb.com/kb/en/installing-system-tables-mysql_install_db
You can find the latest source at https://downloads.mariadb.org and
the maria-discuss email list at https://launchpad.net/~maria-discuss

Please check all of the above before submitting a bug report
at http://mariadb.org/jira

База данных всё равно не запускается.

8 (2018-09-02 17:07:21 отредактировано ingvaro)

neket89⇓ пишет:

Каким образом удалить каталог данных?

Один из путей это
- установить phpmyadmin
-  в /etc/phpmyadmin/config.inc.php изменить стр 33

$cfg['Servers'][$i]['AllowNoPassword'] = true;

-  запустить phpmyadmin
- зайти в базу и удалить каталог данных
- по дефолту вход в  базу  :   root  без пароля

neket89⇓ пишет:

Я удалил содержимое каталога /var/lib/mysql/, затем запустил команду "mysql_install_db":


Но у себя
- остановил сервис mysqld
-  удалил  /var/lib/mysql/*
- запустил сервис mysqld
- содержимое папки /var/lib/mysql восстановилось
- Все запускалось в root-терминале

Команда   "mysql_install_db" так же восстановила базу у меня
Вот моя установка у вас что то одни ошибки  я бы проверил права доступа для /var/lib/mysql
Ведь он должен  быть пустой.

Spoiler

MagOS mysql # mysql_install_db
Installing MariaDB/MySQL system tables in '/var/lib/mysql' ...
2018-09-02 18:54:30 140262912514112 [Note] Using unique option prefix 'key_buffer' is error-prone and can break in the future. Please use the full name 'key_buffer_size' instead.
2018-09-02 18:54:30 140262912514112 [Note] /usr/sbin/mysqld (mysqld 10.1.35-MariaDB) starting as process 9495 ...
handlersocket: initialized
2018-09-02 18:54:30 140262912514112 [Note] InnoDB: innodb_empty_free_list_algorithm has been changed to legacy because of small buffer pool size. In order to use backoff, increase buffer pool at least up to 20MB.

2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: The InnoDB memory heap is disabled
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Compressed tables use zlib 1.2.11
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Using Linux native AIO
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Using generic crc32 instructions
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Completed initialization of buffer pool
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2018-09-02 18:54:31 140262912514112 [Warning] InnoDB: New log files created, LSN=45781
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Doublewrite buffer not found: creating new
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Doublewrite buffer created
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: 128 rollback segment(s) are active.
2018-09-02 18:54:31 140262912514112 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Foreign key constraint system tables created
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Creating tablespace and datafile system tables.
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Tablespace and datafile system tables created.
2018-09-02 18:54:31 140262912514112 [Note] InnoDB: Waiting for purge to start
2018-09-02 18:54:31 140262912514112 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.39-83.1 started; log sequence number 0
2018-09-02 18:54:31 140262233863936 [Note] InnoDB: Dumping buffer pool(s) not yet started
2018-09-02 18:54:31 140262912514112 [Warning] mysqld: GSSAPI plugin : default principal 'mariadb/magos@' not found in keytab
2018-09-02 18:54:31 140262912514112 [ERROR] mysqld: Server GSSAPI error (major 851968, minor 2529639093) : gss_acquire_cred failed -Unspecified GSS failure.  Minor code may provide more information. Keytab FILE:/etc/krb5.keytab is nonexistent or empty.
2018-09-02 18:54:31 140262912514112 [ERROR] Plugin 'gssapi' init function returned error.
180902 18:54:31 server_audit: MariaDB Audit Plugin version 1.4.4 STARTED.
180902 18:54:31 server_audit: Query cache is enabled with the TABLE events. Some table reads can be veiled.180902 18:54:32 server_audit: STOPPED
handlersocket: terminated
OK
Filling help tables...
2018-09-02 18:54:34 140668384057408 [Note] Using unique option prefix 'key_buffer' is error-prone and can break in the future. Please use the full name 'key_buffer_size' instead.
2018-09-02 18:54:34 140668384057408 [Note] /usr/sbin/mysqld (mysqld 10.1.35-MariaDB) starting as process 9525 ...
handlersocket: initialized
2018-09-02 18:54:34 140668384057408 [Note] InnoDB: innodb_empty_free_list_algorithm has been changed to legacy because of small buffer pool size. In order to use backoff, increase buffer pool at least up to 20MB.

2018-09-02 18:54:34 140668384057408 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2018-09-02 18:54:34 140668384057408 [Note] InnoDB: The InnoDB memory heap is disabled
2018-09-02 18:54:34 140668384057408 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2018-09-02 18:54:34 140668384057408 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2018-09-02 18:54:34 140668384057408 [Note] InnoDB: Compressed tables use zlib 1.2.11
2018-09-02 18:54:34 140668384057408 [Note] InnoDB: Using Linux native AIO
2018-09-02 18:54:34 140668384057408 [Note] InnoDB: Using generic crc32 instructions
2018-09-02 18:54:34 140668384057408 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2018-09-02 18:54:34 140668384057408 [Note] InnoDB: Completed initialization of buffer pool
2018-09-02 18:54:34 140668384057408 [Note] InnoDB: Highest supported file format is Barracuda.
2018-09-02 18:54:34 140668384057408 [Note] InnoDB: 128 rollback segment(s) are active.
2018-09-02 18:54:34 140668384057408 [Note] InnoDB: Waiting for purge to start
2018-09-02 18:54:34 140668384057408 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.39-83.1 started; log sequence number 1616697
2018-09-02 18:54:34 140667707713280 [Note] InnoDB: Dumping buffer pool(s) not yet started
2018-09-02 18:54:34 140668384057408 [Warning] mysqld: GSSAPI plugin : default principal 'mariadb/magos@' not found in keytab
2018-09-02 18:54:34 140668384057408 [ERROR] mysqld: Server GSSAPI error (major 851968, minor 2529639093) : gss_acquire_cred failed -Unspecified GSS failure.  Minor code may provide more information. Keytab FILE:/etc/krb5.keytab is nonexistent or empty.
2018-09-02 18:54:34 140668384057408 [ERROR] Plugin 'gssapi' init function returned error.
180902 18:54:34 server_audit: MariaDB Audit Plugin version 1.4.4 STARTED.
180902 18:54:34 server_audit: Query cache is enabled with the TABLE events. Some table reads can be veiled.180902 18:54:35 server_audit: STOPPED
handlersocket: terminated
OK
Creating OpenGIS required SP-s...
2018-09-02 18:54:37 140673699571776 [Note] Using unique option prefix 'key_buffer' is error-prone and can break in the future. Please use the full name 'key_buffer_size' instead.
2018-09-02 18:54:37 140673699571776 [Note] /usr/sbin/mysqld (mysqld 10.1.35-MariaDB) starting as process 9557 ...
handlersocket: initialized
2018-09-02 18:54:37 140673699571776 [Note] InnoDB: innodb_empty_free_list_algorithm has been changed to legacy because of small buffer pool size. In order to use backoff, increase buffer pool at least up to 20MB.

2018-09-02 18:54:37 140673699571776 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2018-09-02 18:54:37 140673699571776 [Note] InnoDB: The InnoDB memory heap is disabled
2018-09-02 18:54:37 140673699571776 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2018-09-02 18:54:37 140673699571776 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2018-09-02 18:54:37 140673699571776 [Note] InnoDB: Compressed tables use zlib 1.2.11
2018-09-02 18:54:37 140673699571776 [Note] InnoDB: Using Linux native AIO
2018-09-02 18:54:37 140673699571776 [Note] InnoDB: Using generic crc32 instructions
2018-09-02 18:54:37 140673699571776 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2018-09-02 18:54:37 140673699571776 [Note] InnoDB: Completed initialization of buffer pool
2018-09-02 18:54:37 140673699571776 [Note] InnoDB: Highest supported file format is Barracuda.
2018-09-02 18:54:37 140673699571776 [Note] InnoDB: 128 rollback segment(s) are active.
2018-09-02 18:54:37 140673699571776 [Note] InnoDB: Waiting for purge to start
2018-09-02 18:54:37 140673699571776 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.39-83.1 started; log sequence number 1616707
2018-09-02 18:54:37 140673021900544 [Note] InnoDB: Dumping buffer pool(s) not yet started
2018-09-02 18:54:37 140673699571776 [Warning] mysqld: GSSAPI plugin : default principal 'mariadb/magos@' not found in keytab
2018-09-02 18:54:37 140673699571776 [ERROR] mysqld: Server GSSAPI error (major 851968, minor 2529639093) : gss_acquire_cred failed -Unspecified GSS failure.  Minor code may provide more information. Keytab FILE:/etc/krb5.keytab is nonexistent or empty.
2018-09-02 18:54:37 140673699571776 [ERROR] Plugin 'gssapi' init function returned error.
180902 18:54:37 server_audit: MariaDB Audit Plugin version 1.4.4 STARTED.
180902 18:54:37 server_audit: Query cache is enabled with the TABLE events. Some table reads can be veiled.180902 18:54:37 server_audit: STOPPED
handlersocket: terminated
OK

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'/usr/bin/mysqladmin' -u root password 'new-password'
'/usr/bin/mysqladmin' -u root -h MagOS password 'new-password'

Alternatively you can run:
'/usr/bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
service mysqld start

You can test the MariaDB daemon with mariadb-bench package

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/

9

ingvaro⇓ пишет:

Но у себя
- остановил сервис mysqld
-  удалил  /var/lib/mysql/*
- запустил сервис mysqld
- содержимое папки /var/lib/mysql восстановилось

Команда   "mysql_install_db" так же восстановила базу у меня
Все запускалось в root-терминале

Под root выполняю те же действия, но не запускается mysql.

10 (2018-09-02 17:23:51 отредактировано ingvaro)

neket89⇓ пишет:

Под root выполняю те же действия, но не запускается mysql.

Я бы проверил права доступа для /var/lib/mysql
У вас в начале вроде ошибка  -  что то не может установиться или что то не находится

neket89⇓ пишет:

180902 18:02:39 [ERROR] InnoDB: space header page consists of zero bytes in data file ./ibdata1

А так вроде надо попытаться переустановить сервис

11

ingvaro⇓ пишет:

Я бы проверил права доступа для /var/lib/mysql
У вас в начале вроде ошибка  -  что то не может установиться или что то не находится

Права 755, владелец/группа mysql. Выставлял 777 - то же самое.

12 (2018-09-02 17:52:15 отредактировано neket89)

ingvaro⇓ пишет:

А так вроде надо попытаться переустановить сервис

На всякий случай я сделал копию /var/lib/mysql. Если я сейчас полностью удалю MariaDB, установлю заново, скопирую обратно папку /var/lib/mysql, данные не пропадут? Смогу ли я их восстановить?

Помимо копии я также сделал полный дамп всех БД с помощью команды

mysqldump --force --compress --triggers --routines --create-options -uroot --all-databases > /usr/alldb.sql

Единственное, меня смущает что размер этого дампа чуть больше 1,5 Гб. А папка занимает 6 Гб.

13 (2018-09-02 18:07:47 отредактировано ingvaro)

neket89⇓ пишет:

На всякий случай я сделал копию /var/lib/mysql. Если я сейчас полностью удалю MariaDB, установлю заново, скопирую обратно папку /var/lib/mysql, данные не пропадут? Смогу ли я их восстановить?

Если выложите, так попробую восстановить
Только сразу напишите рекомендованные действия как восстанавливать

14

Сейчас сделаю дамп каждой базы отдельно и буду переустанавливать MariaDB.

15

Ещё остаётся вопрос пары пользователь/пароль. Это можно как-то экспортировать/импортировать?

16 (2018-09-02 20:14:00 отредактировано ingvaro)

neket89⇓ пишет:

Ещё остаётся вопрос пары пользователь/пароль. Это можно как-то экспортировать/импортировать?

При переустановке MariaDB пароль админа для  входа в  базу  :   root  без пароля
Если он  изменен , то я бы его переустановил в phpmyadmin, а потом восстановил базу
Остальные пароли должны появиться при восстановлении.
А так сильно базами не занимался и что то конкретное сказать трудно.

Спасибо сказали: neket891

17

Проблема РЕШЕНА! Спасибо ingvaro, за помощь и подсказки. В общем сделал следующее:
1. Переименовал одну из баз данных. Имеется в виду переименовал каталог в папке /var/lib/mysql/. Сделал это просто ради эксперимента посмотреть измениться ли название в phpMyAdmin. Название изменилось.
2. Затем я удалил большинство баз данных (оставил несколько штук из 60).
3. Перезапустил mysql и увидел что перезапуск происходит быстрее обычного.
4. Попробовал понизить число innodb_force_recovery до 5 - запускается. Тогда постепенно стал понижать, а затем вообще убрал эту строку из конфигурационного файла и в итоге БД запускается.
5. Затем я по одной базе данных стал копировать обратно и каждый раз при этом перезапускал mysql. Так я перенёс обратно все удалённые БД.

То есть сейчас работает всё как было. Понятно что это явно был сбой, связанный с пропаданием электричества. Я всё равно так и не понял, что повлияло на восстановление работоспособности?

18

Блин. Надо делать бекапы ребята (((

MXLinux 19.3 - xfce
Чем больше я работаю админом, тем больше понимаю,
насколько волшебна фраза - "Нет технической возможности!"

==============================================

19

XliN⇓ пишет:

Блин. Надо делать бекапы ребята (((

Ну даже если бы был у меня бэкап, чем бы поменялась ситуация? Мне не хотелось терять связку пользователь/пароль. Ведь их бы пришлось также восстанавливать. А как это сделать?

20 (2018-09-06 10:09:19 отредактировано neket89)

Опять после перезагрузки повторилась проблема...

Я повторил те же действия:
1. Выставил параметр innodb_force_recovery = 6
2. Удалил половину БД
3. Стал запускать постепенно понижая параметр, а затем закомметировал его
4. Скопировал обратно удалённые БД

Сейчас всё работает. Но в любом случае при каждой перезагрузке выполнять такие действия это не нормально. Что посоветуете?

21

я бы сделал дамп всех баз. Потом удалил бы всё и загрузил всё из дампа. Нельзя построить нормальную  крепость на основе развалин. (с)

Это не должно быть слишком сложно... (с)