Назад | Перейти на главную страницу

Лучший способ восстановить mysql из «chmod -R 777 /» с неповрежденными базами данных

Вопрос:
Как лучше всего восстановить mysql (или в худшем случае: выполнить миграцию) из "chmod -R 777 /" с неповрежденными базами данных?

Система:
Ubuntu 12.04 LTS
MySQL 5.5.24
64-битный облачный сервер Amazon EC2.

Задний план: Попытка восстановить (или хотя бы восстановить данные из) системы, в которой это было сделано:

    chmod -R 777 /

Нет смысла беспокоиться о том, почему. Это был менеджер со слишком большим доступом и слишком маленьким опытом, который любит плавать в глубокой воде. Это была чистая случайность с его стороны, на самом деле он не имел в виду, когда он это сделал.

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

Уже сделали это:

    sudo chmod 644 my.cnf
    chown mysql:mysql my.cnf

В этот момент попытка запустить mysql:

    sudo service mysql start

Производит этот вывод в системном журнале:

    Apr 12 20:51:42 ip-10-10-25-143 kernel: [18632541.774742] type=1400 audit(1365799902.306:41): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=18210 comm="apparmor_parser"
    Apr 12 20:51:42 ip-10-10-25-143 kernel: [18632541.964496] init: mysql main process (18214) terminated with status 1
    Apr 12 20:51:42 ip-10-10-25-143 kernel: [18632541.964542] init: mysql main process ended, respawning
    Apr 12 20:51:43 ip-10-10-25-143 kernel: [18632542.959796] init: mysql post-start process (18215) terminated with status 1
    Apr 12 20:51:43 ip-10-10-25-143 kernel: [18632543.002041] type=1400 audit(1365799903.534:42): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=18238 comm="apparmor_parser"
    Apr 12 20:51:43 ip-10-10-25-143 kernel: [18632543.098490] init: mysql main process (18242) terminated with status 1
    Apr 12 20:51:43 ip-10-10-25-143 kernel: [18632543.098536] init: mysql main process ended, respawning
    Apr 12 20:51:43 ip-10-10-25-143 kernel: [18632543.140706] init: mysql post-start process (18244) terminated with status 1
    Apr 12 20:51:43 ip-10-10-25-143 kernel: [18632543.158681] type=1400 audit(1365799903.690:43): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=18258 comm="apparmor_parser"
    Apr 12 20:51:43 ip-10-10-25-143 kernel: [18632543.285087] init: mysql main process (18262) terminated with status 1
    Apr 12 20:51:43 ip-10-10-25-143 kernel: [18632543.285133] init: mysql respawning too fast, stopped

Я прочитал из этого, что mysql завершает работу со статусом 1, и он несколько раз зацикливается, пытаясь запустить, и останавливается от этого после слишком многих попыток. Я просмотрел статус 1, но не нашел подходящих решений.

  1. Создайте новый экземпляр виртуальной машины с той же версией ОС и версией MySQL.
  2. Запустите MySQL на новой виртуальной машине - он должен создать каталог данных MySQL без баз данных, но с правильными разрешениями - в /var/lib/mysql.
  3. Остановите MySQL на новой виртуальной машине.
  4. Копировать /var/lib/mysql на новой ВМ в /var/lib/mysql.empty.
  5. Копировать /var/lib/mysql со старой ВМ на /var/lib/mysql на новой ВМ.
  6. Установите вручную разрешения для всех файлов и каталогов в /var/lib/mysql на основе разрешений на /var/lib/mysql.empty.
  7. Краткая молитва избранному божеству теперь не помешала бы.
  8. Запустите MySQL на новой виртуальной машине.
  9. Я бы рекомендовал сбросить все данные с помощью mysqldump -A, воссоздавая новый, пустой каталог данных mysql и импортируя эти данные обратно на всякий случай.
  10. Когда вы уверены, что он работает и все ваши данные в целости, выключите старую виртуальную машину и заархивируйте ее образ диска. Гораздо меньше работы и гораздо безопаснее настроить новый сервер, чем пытаться восстановить его.

Переустановите систему и восстановите из резервной копии.