LINUX.ORG.RU
ФорумAdmin

Побился файл /var/lib/mysql/ibdata1 Восстановление mysql из бэкапа

 ,


0

1

Добрый день. Задавал вопрос на forum.sql.ru, но там увы, не ответили.
Есть настроенный сервер IP телефонии на Astreisk и померший сектор на жестком диске. Не повезло файлу /var/lib/mysql/ibdata1 База не запускается, есть резервные копии, и хотелось бы восстановить ее из бэкапа.. Что за файл конкретно помер не знаю, но может можно восстановить базу из бэкапов без этой информации...

У самого опыта немного ни в linux, ни в mysql. Сейчас задача - просто восстановить, чтоб запускалась вебморда и писались разговоры. Важны только данные конфигурации астериска\freepbx, чтобы не перенастраивать заново. Сама телефония сейчас работает и без mysql

# О системе

mysql Ver 15.1 Distrib 10.1.24-MariaDB, for Linux (x86_64) using readline 5.1
Asterisk 11.25.1
Centos 6.9

Лог старта Mysql

191120 21:18:25 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
2019-11-20 21:18:25 140640657311776 [Note] Using unique option prefix 'log-warning' is error-prone and can break in the future. Please use the full name 'log_warnings' instead.
2019-11-20 21:18:25 140640657311776 [Note] /usr/sbin/mysqld (mysqld 10.1.24-MariaDB) starting as process 2060 ...
2019-11-20 21:18:26 140640657311776 [Note] InnoDB: Started in read only mode
2019-11-20 21:18:26 140640657311776 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2019-11-20 21:18:26 140640657311776 [Note] InnoDB: The InnoDB memory heap is disabled
2019-11-20 21:18:26 140640657311776 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2019-11-20 21:18:26 140640657311776 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2019-11-20 21:18:26 140640657311776 [Note] InnoDB: Compressed tables use zlib 1.2.3
2019-11-20 21:18:26 140640657311776 [Note] InnoDB: Using Linux native AIO
2019-11-20 21:18:26 140640657311776 [Note] InnoDB: Using SSE crc32 instructions
2019-11-20 21:18:26 140640657311776 [Note] InnoDB: Disabling background IO write threads.
2019-11-20 21:18:26 140640657311776 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2019-11-20 21:18:26 140640657311776 [Note] InnoDB: Completed initialization of buffer pool
2019-11-20 21:18:26 7fe9746b8820 InnoDB: Operating system error number 2 in a file operation.
InnoDB: The error means the system cannot find the path specified.
InnoDB: If you are installing InnoDB, remember that you must create
InnoDB: directories yourself, InnoDB does not create them.
InnoDB: Operation open to file /home/buildbot/buildbot/build/mariadb-10.1.24/storage/xtradb/os/os0file.cc and at line 2155
2019-11-20 21:18:26 140640657311776 [ERROR] InnoDB: File ./ibdata1: 'open' returned OS error 71. Cannot continue operation
191120 21:18:26 [ERROR] mysqld got signal 6 ;
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 https://mariadb.com/kb/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: 10.1.24-MariaDB
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 = 467125 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 = 0x0 thread_stack 0x48400
/usr/sbin/mysqld(my_print_stacktrace+0x2b)[0x7fe975143abb]
/usr/sbin/mysqld(handle_fatal_signal+0x4d5)[0x7fe974ca2365]
/lib64/libpthread.so.0(+0xf7e0)[0x7fe9742a17e0]
/lib64/libc.so.6(gsignal+0x35)[0x7fe9726c7495]
/lib64/libc.so.6(abort+0x175)[0x7fe9726c8c75]
/usr/sbin/mysqld(+0x792e2c)[0x7fe974e64e2c]
/usr/sbin/mysqld(+0x793d19)[0x7fe974e65d19]
/usr/sbin/mysqld(+0x810b0b)[0x7fe974ee2b0b]
/usr/sbin/mysqld(+0x812e70)[0x7fe974ee4e70]
/usr/sbin/mysqld(+0x734e4d)[0x7fe974e06e4d]
/usr/sbin/mysqld(_Z24ha_initialize_handlertonP13st_plugin_int+0x68)[0x7fe974ca4a78]
/usr/sbin/mysqld(+0x46e425)[0x7fe974b40425]
/usr/sbin/mysqld(_Z11plugin_initPiPPci+0x92a)[0x7fe974b413da]
/usr/sbin/mysqld(+0x3cef35)[0x7fe974aa0f35]
/usr/sbin/mysqld(_Z11mysqld_mainiPPc+0x1c5e)[0x7fe974aa374e]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x7fe9726b3d1d]
/usr/sbin/mysqld(+0x3c5749)[0x7fe974a97749]
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.
191120 21:18:26 mysqld_safe mysqld from pid file /var/lib/mysql/ASTERISK.pid ended

- Список файлов в каталоге /var/lib/mysql

[root@ASTERISK log]# ls -lh /var/lib/mysql/ --group-directories-first
total 65M
drwx------ 2 mysql mysql 12K Aug 21 19:29 asterisk
drwx------ 2 mysql mysql 4.0K Aug 21 19:29 asteriskcdrdb
drwx--x--x 2 mysql mysql 4.0K Oct 14 11:53 mysql
drwx------ 2 mysql mysql 4.0K Aug 21 19:16 performance_schema
-rw-rw---- 1 mysql mysql 16K Sep 23 10:25 aria_log.00000001
-rw-rw---- 1 mysql mysql 52 Sep 23 10:25 aria_log_control
-rw-rw---- 1 mysql mysql 32M Oct 14 11:54 ib_logfile0
-rw-rw---- 1 mysql mysql 32M Oct 11 22:43 ib_logfile1
-rw-rw---- 1 mysql mysql 2.7K Aug 21 19:28 localhost.localdomain.err
-rw-rw---- 1 mysql mysql 0 Aug 21 19:20 multi-master.info
srwxrwxrwx 1 mysql mysql 0 Oct 17 18:16 mysql.sock
-rw-rw---- 1 mysql mysql 24K Sep 25 20:16 tc.log

Бэкапы делал сам Astrisk, помимо разных файлов конфигурации, есть 2 файла: mysql2.sql и mysql3.sql такого содержимого..

DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` (
`variable` varchar(20) NOT NULL DEFAULT '',
`value` varchar(80) NOT NULL DEFAULT '',
PRIMARY KEY (`variable`)
);

INSERT INTO `admin` VALUES ('default_directory','1');
INSERT INTO `admin` VALUES ('directory28_migrated','1');
INSERT INTO `admin` VALUES ('email','root@localhost');
INSERT INTO `admin` VALUES ('need_reload','false');
INSERT INTO `admin` VALUES ('update_semail','ec711eb317488afb2f3babd635a287f2');
INSERT INTO `admin` VALUES ('version','13.0.192.14');
DROP TABLE IF EXISTS `ampusers`;
CREATE TABLE `ampusers` (
`username` varchar(255) NOT NULL,
`password_sha1` varchar(40) NOT NULL,
`extension_low` varchar(20) NOT NULL DEFAULT '',
`extension_high` varchar(20) NOT NULL DEFAULT '',
`deptname` varchar(20) NOT NULL DEFAULT '',
`sections` blob NOT NULL,
`digest` varchar(32) NOT NULL DEFAULT '',
PRIMARY KEY (`username`)
);

INSERT INTO `ampusers` VALUES ('Administrator','b662e4da175db33ae813b60aba06dd4d03df36d8','','','','*','cb5c05e2a82de2a675f3aadef7fac718');
...

Как правильно восстанавливать?



Последнее исправление: PATRI0T (всего исправлений: 1)

1. проверь диск. что побилось, почему? проблема не в железе часом? пофикси фс, если надо.

2. снеси бд целиком, создай новую, как при переустановке твоего астерикса.

3. выполни в ней эти sql скрипты, они создадут таблицы и наполнят данными.

n008_b4800n
()

померший сектор на жестком диске.

О, пардон, просмотрел.

Ну так ты уверен, что это не повторится? Файловая система проверена? Пересоздавай БД и наполняй данными со скриптов, гугл в помощь. Если, конечно, там ничего, кроме астерикса, не было.

n008_b4800n
()
Ответ на: комментарий от n008_b4800n

Спасибо за ответ.

Все перенесли на новый винт. Т.е. все что нужно сделать, это :

1. удалить папку /var/lib/mysql
2. удалить-установить mysql
3. создать 2 базы asterisk и asteriskcdrdb
4. залить в них данные из скриптов? скрипты назваются mysql2.sql и mysql3.sql.. как определить где какой?
А пользователи в базе были? где об этом найти инфу... чет запутался..

PATRI0T
() автор топика
Ответ на: комментарий от PATRI0T

Не надо удалять mysql просто снеси бд и создай заново. Пользователи для подключения к бд - инфа о них в конфе самого астерикса. +если ты тупо снесешь БД, пользователь останется, просто дай ему права на новую бд. Там, скорее всего, 1 пользователь, которому дан доступ к БД. Где какой - в настройках бекапа нельзя посмотреть? Судя по всему, 1 бд для списка пользователей самого астерикс (вебморда), второй для записи. Посмотри в настройках, какая для чего. Ну и тот листинг, что ты привел, очевидно, содержит список пользователей. Значит, второй для записи (бд с cdr в названии, по логике)

n008_b4800n
()
Ответ на: комментарий от n008_b4800n

увы, mysql не стартует..

В конфиге прописывал, не помогло...

innodb_force_recovery = 6 
skip-grant-tables 
Пробовал все значения innodb_force_recovery от 1 до 6

Подробный лог

191128 13:08:58 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
2019-11-28 13:08:58 140396960036896 [Note] Using unique option prefix 'log-warning' is error-prone and can break in the future. Please use the full name 'log_warnings' instead.
2019-11-28 13:08:58 140396960036896 [Note] /usr/sbin/mysqld (mysqld 10.1.24-MariaDB) starting as process 11521 ...
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: Started in read only mode
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: Using mutexes to ref count buffer pool pages
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: The InnoDB memory heap is disabled
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: Compressed tables use zlib 1.2.3
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: Using Linux native AIO
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: Using SSE crc32 instructions
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: Disabling background IO write threads.
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: Completed initialization of buffer pool
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: Highest supported file format is Barracuda.
2019-11-28 13:08:58 140396960036896 [Note] InnoDB: The user has set SRV_FORCE_NO_LOG_REDO on, skipping log redo
2019-11-28 13:08:58 7fb0b6ee3820  InnoDB: Assertion failure in thread 140396960036896 in file fsp0fsp.cc line 1884
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
191128 13:08:58 [ERROR] mysqld got signal 6 ;
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 https://mariadb.com/kb/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: 10.1.24-MariaDB
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 = 467125 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 = 0x0 thread_stack 0x48400
/usr/sbin/mysqld(my_print_stacktrace+0x2b)[0x7fb0b796eabb]
/usr/sbin/mysqld(handle_fatal_signal+0x4d5)[0x7fb0b74cd365]
/lib64/libpthread.so.0(+0xf7e0)[0x7fb0b6acc7e0]
mysys/stacktrace.c:268(my_print_stacktrace)[0x7fb0b4ef2495]
/lib64/libc.so.6(abort+0x175)[0x7fb0b4ef3c75]
include/fut0lst.ic:71(flst_read_addr)[0x7fb0b72aad31]
fsp/fsp0fsp.cc:1884(fseg_inode_get)[0x7fb0b77f3762]
ibuf/ibuf0ibuf.cc:604(ibuf_init_at_db_start())[0x7fb0b7654228]
dict/dict0boot.cc:464(dict_boot())[0x7fb0b779f553]
srv/srv0start.cc:2588(innobase_start_or_create_for_mysql())[0x7fb0b77113ba]
handler/ha_innodb.cc:4442(innobase_init)[0x7fb0b7631e4d]
sql/handler.cc:513(ha_initialize_handlerton(st_plugin_int*))[0x7fb0b74cfa78]
sql/sql_plugin.cc:1400(plugin_initialize)[0x7fb0b736b425]
sql/sql_plugin.cc:1677(plugin_init(int*, char**, int))[0x7fb0b736c3da]
sql/mysqld.cc:5147(init_server_components)[0x7fb0b72cbf35]
sql/mysqld.cc:5736(mysqld_main(int, char**))[0x7fb0b72ce74e]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x7fb0b4eded1d]
/usr/sbin/mysqld(+0x3c5749)[0x7fb0b72c2749]
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.
191128 13:08:58 mysqld_safe mysqld from pid file /var/lib/mysql/ASTERISK.pid ended

Я так понимаю, чтобы удалить базы, мне по любому нужно запустить mysql.. а он не запускается Вручную:

[root@ASTERISK mysql]# sudo -u mysql mysqld --console --innodb_force_recovery=1
2019-11-28 13:25:24 139840117282848 [Note] Using unique option prefix 'log-warning' is error-prone and can break in the future. Please use the full name 'log_warnings' instead.
2019-11-28 13:25:24 139840117282848 [Note] mysqld (mysqld 10.1.24-MariaDB) starting as process 11921 ...
2019-11-28 13:25:24 139840117282848 [Warning] Could not increase number of max_open_files to more than 1024 (request: 4162)

Скриптом:

[root@ASTERISK mysql]# /etc/init.d/mysql start
Starting MySQL.191128 13:25:14 mysqld_safe Logging to '/var/log/mysqld.log'.
191128 13:25:14 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
 ERROR!

PATRI0T
() автор топика
Ответ на: комментарий от PATRI0T

О.. удалил (переместил) папки с базами, и файлы

[root@ASTERISK del]# ls -l
total 110608
drwx------ 2 mysql mysql    12288 Aug 21 19:29 asterisk
drwx------ 2 mysql mysql     4096 Aug 21 19:29 asteriskcdrdb
-rw-rw---- 1 mysql mysql 12582912 Nov 28 09:18 ibdata1
-rw-rw---- 1 mysql mysql 33554432 Oct 14 11:54 ib_logfile0
-rw-rw---- 1 mysql mysql 33554432 Oct 11 22:43 ib_logfile1
-rw-rw---- 1 mysql mysql 33554432 Nov 28 09:18 ib_logfile101

И база завелась

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| del                |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

MariaDB [(none)]> select Host,user from mysql.user;
+-----------+-------------+
| Host      | user        |
+-----------+-------------+
| 127.0.0.1 | root        |
| localhost | freepbxuser |
| localhost | root        |
+-----------+-------------+

Сейчас попробую создать базы, дать права и залить дампы

PATRI0T
() автор топика
Ответ на: комментарий от PATRI0T

в my.cnf пропиши другую директорию в datadir,logdir и т.д. например /var/lib/mysql_new/
После чего создай эту директорию, раздай права:

mkdir /var/lib/mysql_new/
chown mysql:mysql /var/lib/mysql_new/
chmod 750 /var/lib/mysql_new/
Затем запусти инициализацию новых файлов:
mysqld --initialize-insecure
Выполнив все это, запускай демон и восстановление из бэкапа. Старые файлы не трогай, пусть лежат. Если все заработает и ок -удаляй.

redwagon
()
Ответ на: комментарий от redwagon

да, супер, спасибо огромное. Все получилось. Разве что в mariadb нет --initialize-insecure, там отдельное приложение mysql_install_db

PATRI0T
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.