Monthly Archives: Март 2019

Восстановление баз данных InnoDB после сбоев в MySQL

Возникла у меня проблема с выходом из строя баз данных MySQL. Причем, проблема проявляла себя в виде не запуска сервиса MySQL. При этом в логах довольно было мало информации. Однако, запустив mysql_safe все таки логи выдали ошибки. Из которых стало понятно, что база несколько испортилась (до этого пришлось физически выключать сервер, т.к. сервис MySQL завис от количества посещений и сервер длительное время не хотел перезагружаться).

Провозившись несколько часов вывелся рецепт лечения:

Лог ошибок может выдавать в случае сбоя нечто подобное:

Отправляет в документацию по восстановлению :)))

1. Переводим сервис в защищенный режим MySQL.

Останавливаем сервис, если он пытается запуститься.

Далее, добавляем строчки в конфиг MySQL my.cnf:

Причем, параметр innodb_force_recovery=3 увеличиваем, начиная с 1 и так до тех пор, пока не запустится сервис (максимум это значение может быть 8).

Вот, что означает этот параметр:

  1. Mode 1 — не «отваливается» MySQL, когда он видит коррумпированные страницы.
  2. Mode 2 — не запускает фоновые операции.
  3. Mode 3 — Не пытается откатить транзакции.
  4. Mode 4 —  не рассчитывает статистику или не применяет сохраненные/буферизированные изменения.
  5. Mode 5 —  Не смотрите на log-и отката при запуске.
  6. Mode 6 — Не прокрутки вперед от повтора логов (ib_logfiles) во время пуска.

2. Делаем бекап всех данных базы данных (после запуска сервера).

3. Переименовываем всю папку с данными MySQL (потом, когда все заработает — ее можно будет удалить)

4. Разворачиваем новый кластер MySQL.

Как это делается, описано в статье:

Инициализация базы данных MySQL, сброс пароля MySQL на Linux Ubuntu 18.04

5. Запускаем MySQL и восстанавливаем данные:

6. Перезагружаем сервис MySQL, чтоб обновились права (можно, конено, просто сделать flush прав, но как по мне, перезагрузка — надежней).

 

 

Еще полезные статьи по теме не запуска сервиса MySQL:

Не запускается Mysql

Исправляем поврежденные INNODB таблицы

 

 

 

 

 

 

Решение проблемы с правами доступа MySQL из-за сервиса AppArmor

При перезагрузке MySQL столкнулся с тем, что сервис не запускался. При более подробном анализе логов, увидел, что стало ругаться на права доступа в сервисе AppArmor.

Выводились сообщения, подобные таким:

Исправляется это дело внесением правил в файл (посредине файла) /etc/apparmor.d/usr.sbin.mysqld

Подобные правила:

Конечно, правила формируются в зависимости от сообщений. В каталогах можно применять маски, например: * — любое название.

Чтоб изменения вступили в силу нужно перезагрузить сервисы:

 

 

Предметная визуализация

Инициализация базы данных MySQL, сброс пароля MySQL на Linux Ubuntu 18.04

В новых версиях MySQL есть свои нюансы по сбросу пароля MySQL. У меня даже при развертывании первичной базы пустой базы не удавалось подключаться. Некоторое время пришлось повозиться, побеждая данную проблему. Дальше, я приведу рецепт, как инициализировать базу данных и сбросить пароль рута в MySQL.

1) Останавливаем текущую службу MySQL:

 

2) Создаем каталог /var/run/mysqld который будет использоваться процессом MySQL для хранения и доступа к файлу сокета, а также даем необходимые права:

 

3) Запускаем MySQL со следующими параметрами:

 

4) Убеждаемся, что процесс запущен:

 

5) На этом этапе мы можем получить доступ к MySQL без пароля.
Входим командой:

 

6) Затем сбрасываем пароль root следующей последовательностью запросов:

 

Мы установили пароль «123» для пользователя «root».

7) Завершаем текущий mysqld процесс:

 

[1]+ Завершён sudo /usr/sbin/mysqld —skip-grant-tables —skip-networking

8) Запускаем службу MySQL:

 

9) Теперь мы можем войти, используя только что установленный пароль для рута:

 

mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.22-0ubuntu18.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

 

10) Так же, база попросила установить пароль с помощью Alter User:

 

 

Источник: http://ikode.ru/articles/kak-sbrosit-parol-root-mysql-na-ubuntu-1804