Всем привет. Друзья, огромная просьба, если вам помогло решение, поставьте лайк. Не стесняйтесь писать комментарии.
Сегодня поймал письмо от zabbix о слишком большом количестве процессов на одном из серверов freepbx.
Беглый осмотр показал, что постоянно перезапускается mariadb в safe mode.
Симптомы: вебморда крашится с ошибками что нет доступа к sql базе.
В логах было видно такое:
InnoDB: Error: the OS said file flush did not succeed
InnoDB: Operating system error number 5 in a file operation.
InnoDB: Error number 5 means 'Input/output error'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/operating-system-error-codes.html
InnoDB: File operation call: 'flush'.
InnoDB: Cannot continue operation.
или такое
InnoDB: Error: tried to read 16384 bytes at offset 0 524124160.
InnoDB: Was only able to read 8192.
InnoDB: Operating system error number 5 in a file operation.
InnoDB: Error number 5 means 'Input/output error'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/operating-system-error-codes.html
InnoDB: File operation call: 'read'.
InnoDB: Cannot continue operation.
Это лечится, но если есть рабочий бэкап базы или самого FBPX.
Если бэкапа нет, тогда можно попробовать забэкапить текущую БД.
Если бэкапа нет и текущая бд не бэкапится , то новости хреновые, придется переставить FBPX.
Если переставлять FBPX лень, я сделал бэкап базы чистого FBPX 15 для 13 астериска( версию потом можно сменить через asterisk-version-switch так что не парьтесь). Ссыль на базу https://ip.kurskhelp.ru:82/index.php/s/6FEDGgGbGxRwdBR
Если нет бэкапа БД, но есть рабочий бэкап FPBX, тогда идем по инструкции до победного.
По ходу статьи видно будет где остановиться под каждое выше написанное "если".
Итак, поехали.
1. Пробуем бэкапить текущю бд если mariadb запускается.
mysqldump --extended-insert --all-databases --add-drop-database --disable-keys --flush-privileges --quick --routines --triggers > '/root/fbpxbackup.sql'
Если бэкап прошел с ошибками, тогда качайте эту чистую базу под FBPX
https://ip.kurskhelp.ru:82/index.php/s/6FEDGgGbGxRwdBR
2. Останавливаем сервисы, убиваем процессы модуля firewall если установлен.
systemctl stop crond
systemctl stop sangoma-pnpd.service
systemctl stop incrond.service
systemctl stop mariadb.service
ps -ef | grep firew | grep -v grep
kill ИД процесса который найдете, если ничего нет, пропускаем.
3. Редактируем /etc/my.cnf добавляем в секцию [mysqld] эти строки
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
innodb_log_file_size=250M
innodb_buffer_pool_size=1G
4. Перемещаем старую папку с базой, создаем новую папку, накидываем на нее привелегии нужные, инсталим в нее базу, запускаем mariadb.
mv /var/lib/mysql /var/lib/mysql.ori
mkdir /var/lib/mysql
chown mysql:mysql /var/lib/mysql
sudo -u mysql mysql_install_db
systemctl start mariadb.service
5. Восстанавливаем свою бд или мою по ссылке из шага 1.
mysql < /root/fbpxbackup.sql
Если восстановили свою бд без ошибок, на этом в принципе восстановление закончено.
6. Следующие шаги для тех кто восстанавливал из файла по ссылке.
смотрим в /etc/freepbx.conf username и password на БД.
mysql
grant all privileges on *.* TO 'username'@'localhost' identified by 'password';
Тут подставьте свои значения в 'username' и 'password' из файла /etc/freepbx.conf
Выполните затем
flush privileges;
7. Запускаем обратно сервисы
systemctl start crond
systemctl start sangoma-pnpd.service
systemctl start incrond.service
8. Заходим в вебморду FPBX, копируем id сессии
Возвращаемся обратно в консоль и разлочиваем сессию
fwconsole unlock ID сессии
Возвращаемся в вебморду, заходим в FreePBX Administration, оставляем поля username и password пустыми, жмем Continue.
Когда попали в вебморду FPBX
заходим в settings -> advanced settings
Находим поле Asterisk Manager Password и нажимаем restore default.
Затем идем в admin - administrators и создаем нового админского пользователя и пароль.
9. Обновляем все модули что есть на FPBX из консоли чтобы быстрее было.
fwconsole ma upgradeall
fwconsole reload
На этом этапе у вас уже не должно быть никаких ошибок при применении конфига в FPBX. Если ошибки сыпятся смотрите в вебморде на что ругается возможно нет каких то модулей. Доставьте необходимые модули через командную строку. Вебморда обычно пишет команду которую нужно выполнить когда не хватает каких то модулей.
Для тех у кого рабочего бэкапа FPBX нет, на этом останавливаются. Теперь у вас чистый рабочий FPBX без настроек.
10. Проверяем установлен модуль backup или нет, если не установлен его нужно поставить(это нужно для восстановления вашего бэкапа FPBX).
fwconsole ma list | grep backup
Если его нет, ставим:
fwconsole ma downloadinstall backup
11. Идем в admin - backup & restore, заливаем бэкап на сервер или начинаем восстановление бэкапа который хранится локально.
(если сервак не видит бэкап, но фактически бэкап есть, просто скачайте его на комп, типа cp /var/spool/asterisk/backup/backupname /var/www/html/ зайдите браузером на http://ipастериска/backupname и у вас должен скачаться бэкап, потом удалите его как скачаете из /var/www/html)
12. Проверяем настройки модулей firewall, backup, fail2ban (intrusion detection из меню admin - system admin menu), certificate management(если ранее настраивали), сторонние модули которые раньше были установлены у вас остались, но их нужно заново установить, по идее все конфиги целы, они после установки должны будут подхватиться.
Так же в admin - module admin вы можете увидеть некоторые модули с пометкой broken, это нормально, просто удалите их, их фактически нет, но из-за разницы баз, они висят в вебморде.
Если все прошло нормально у вас должен быть рабочий FPBX.
Если не помогло, сори за потраченное время, но хотя бы попытались восстановить без переустановки.
Что можно сделать еще, если есть рабочий бэкап астериска?
Если нужны записи разговоров и еще сервак как то функционирует, тогда скачайте записи разговоров себе на комп через winscp или любым другим софтом под вашу систему. Скачайте бэкап с него к себе на комп. Скачайте свежий образ FPBX, заново накатите систему на сервер телефонии и восстановите просто ваш бэкап на него.
После восстановления все должно будет работать без проблем.
Коллеги, если вам нужна моя помощь все мои контакты тут