1

Я не могу запустить mysql после перемещения данных на внешний жесткий диск.

Моя настройка (Распбиан):

  • Папка данных MySQL по умолчанию: /var /lib /mysql
  • Целевая папка данных MySQL: /media /exthdd /mysql_data

И вот как я попытался переместить мои данные MySQL:

  1. sudo service mysql stop
  2. sudo mkdir /media/exthdd/mysql_data
  3. sudo cp -adR /var/lib/mysql/ /media/exthdd/mysql_data
  4. sudo chown mysql:mysql -R /media/exthdd/mysql_data
  5. sudo chmod 771 -R /media/exthdd/mysql_data/
  6. sudo nano /etc/mysql/my.cnf
  7. datadir = /media/exthdd/mysql_data
  8. sudo service mysql start

Это ошибка, которую я получил потом:

Работа для mysql.service не удалась. Смотрите подробности в systemctl status mysql.service и journalctl -xn.

journalctl -xn я получил:

Файлы журнала не найдены.

Для systemctl status mysql.service

mysql.service - LSB: запуск и остановка демона сервера баз данных mysql

Загружен: загружен (/etc/init.d/mysql)

Активно: не удалось (Результат: код выхода) с сб. 2016-08-20 18:58:48 CST; 2мин 4с назад

Процесс: 27436 ExecStop =/etc/init.d/mysql stop (код = выход, статус = 0/ УСПЕХ)

Процесс: 373 ExecStart =/etc/init.d/mysql start (код = выход, статус = 1/ отказ)

И журнал ошибок sudo cat /var/log/mysql/error.log имеет следующее:

160820 19:05:50 mysqld_safe Запуск демона mysqld с базами данных из /media /exthdd /mysql_data

160820 19:05:50 [Предупреждение] Использование уникального префикса параметра key_buffer вместо key_buffer_size устарело и будет удалено в следующем выпуске. Пожалуйста, используйте полное имя вместо.

160820 19:05:50 [Примечание] /usr /sbin /mysqld (mysqld 5.5.49-0+deb8u1) запускается как процесс 2403 ...

160820 19:05:50 [Предупреждение] Использование уникального префикса параметра myisam-recovery вместо myisam-recovery-options устарело и будет удалено в следующем выпуске. Пожалуйста, используйте полное имя вместо.

160820 19:05:50 [Примечание] Плагин «FEDERATED» отключен. /usr /sbin /mysqld: таблица «mysql.plugin» не существует

160820 19:05:50 [ОШИБКА] Не удается открыть таблицу mysql.plugin. Пожалуйста, запустите mysql_upgrade, чтобы создать его.

160820 19:05:50 InnoDB: куча памяти InnoDB отключена

160820 19:05:50 InnoDB: мьютексы и rw_locks используют атомарные встроенные функции GCC

160820 19:05:50 InnoDB: сжатые таблицы используют zlib 1.2.8

160820 19:05:50 InnoDB: Использование встроенного в Linux AIO

160820 19:05:50 InnoDB: Инициализация пула буферов, размер = 128.0M

160820 19:05:50 InnoDB: завершена инициализация пула буферов

160820 19:05:50 InnoDB: самый высокий поддерживаемый формат файла - Barracuda. InnoDB: сканирование журнала прошло после контрольной точки lsn 49439

160820 19:05:50 InnoDB: База данных не была нормально закрыта! InnoDB: запуск восстановления после сбоя. InnoDB: чтение информации табличного пространства из файлов .ibd ... InnoDB: восстановление возможных полузаписанных страниц данных из буфера InnoDB: буфер с двойной записью ... InnoDB: Восстановление: отсканировано до лог-номера последовательности 1595675

160820 19:05:51 InnoDB: запуск применения пакета записей журнала к базе данных ... InnoDB: Прогресс в процентах: 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 71 71 72 73 74 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 InnoDB: применение партии завершено

160820 19:05:51 InnoDB: Ожидание запуска фоновых потоков

160820 19:05:52 InnoDB: 5.5.49 запущен; регистрационный номер 1595675

160820 19:05:52 [Примечание] Имя хоста сервера (bind-адрес): '127.0.0.1'; порт: 3306

160820 19:05:52 [Примечание] - «127.0.0.1» преобразуется в «127.0.0.1»;

160820 19:05:52 [Примечание] Серверный сокет, созданный для IP: «127.0.0.1».

160820 19:05:52 [ОШИБКА] Неустранимая ошибка: невозможно открыть и заблокировать таблицы привилегий: таблица «mysql.host» не существует

160820 19:05:52 mysqld_safe mysqld из файла pid /var/run/mysqld/mysqld.pid закончилась

[ОБНОВЛЕНИЕ] Я обновил mysql до 5.6.30-1, но проблема сохраняется (хотя ошибки теперь другие). Кроме того, не путайте, я сделал символическую ссылку из /var /lib /mysql -> /media /exthdd /mysql

orangepi @ OrangePI:/var/lib/mysql $ sudo служба mysql запускается orangepi @ OrangePI:/var/lib/mysql $ sudo служба mysql статус

● mysql.service - MySQL Community Server

Загружен: загружен (/lib/systemd/system/mysql.service; включен)

Активен: неактивен (мертв) с понедельника 2016-08-22 03:55:30 CST; 40 лет назад

Процесс: 8151 ExecStartPost =/usr/share/mysql/mysql-systemd-start post> (код = выход, статус = 0/ УСПЕХ)

Процесс: 8150 ExecStart =/usr/ bin/mysqld_safe (код = выход, статус = 0/ УСПЕХ)

Процесс: 8148 ExecStartPre =/usr/share/mysql/mysql-systemd-start pre> (код = выход, статус = 0/ УСПЕХ) Основной PID: 8150 (код = выход, статус = 0/ УСПЕХ)

22 августа, 03:55:00 OrangePI mysqld_safe [8150]: 160822 03:55:00 mysqld_safe Невозможно войти в журнал ошибок и системный журнал одновременно. Удалить все --log-error configura ... ke эффект.

22 августа, 03:55:00 OrangePI mysqld_safe [8150]: 160822 03:55:00 mysqld_safe Ведение журнала в /var/log/mysql/error.log.

22 августа 03:55:00 OrangePI mysqld_safe [8150]: 160822 03:55:00 mysqld_safe Запуск демона mysqld с базами данных из /var/lib/mysql

22 августа, 03:55:00 OrangePI mysqld_safe [8150]: 160822 03:55:00 mysqld_safe mysqld из файла pid /var/run/mysqld/mysqld.pid завершен

22 августа, 03:55:30. OrangePI systemd [1]: запущен MySQL Community Server. Подсказка: некоторые строки были эллиптическими, используйте -l, чтобы показать их полностью.

И снова журнал ошибок:

orangepi @ OrangePI:/var/lib/mysql $ sudo cat /var/log/mysql/error.log

160822 03:55:00 mysqld_safe Запуск демона mysqld с базами данных из /var/lib/mysql

2016-08-22 03:55:00 0 [Предупреждение] Использование уникального префикса параметра key_buffer вместо key_buffer_size устарело и будет удалено в следующем выпуске. Пожалуйста, используйте полное имя вместо.

2016-08-22 03:55:00 0 [Warning] TIMESTAMP с неявным значением DEFAULT устарела. Пожалуйста, используйте опцию сервера --explicit_defaults_for_timestamp (более подробную информацию смотрите в документации).

2016-08-22 03:55:00 0 [Примечание] /usr /sbin /mysqld (mysqld 5.6.30-1) запускается как процесс 8516 ...

2016-08-22 03:55:00 8516 [Предупреждение] Не удается создать тестовый файл /var/lib/mysql/OrangePI.lower-test

2016-08-22 03:55:00 8516 [Предупреждение] Не удается создать тестовый файл /var/lib/mysql/OrangePI.lower-test /usr /sbin /mysqld: Невозможно изменить dir на '/var/lib/mysql /'(Errcode: 13 - В доступе отказано)

2016-08-22 03:55:00 8516 [ОШИБКА] Отмена

2016-08-22 03:55:00 8516 [Примечание] Конец бинлога

2016-08-22 03:55:00 8516 [Примечание] /usr /sbin /mysqld: завершение работы завершено

160822 03:55:00 mysqld_safe mysqld из файла pid /var/run/mysqld/mysqld.pid закончилась

Он говорит, что не может создать тестовый файл, но mysql имеет все разрешения и владеет всеми папками / файлами mysql.

2 ответа2

1

Ваша проблема в том, что таблица mysql из основной базы данных mysql отсутствует или повреждена. Скорее всего, это не скопировать. Рассматриваемая таблица mysql.host

поэтому сначала убедитесь, что скопированы все файлы в /var/lib/mysql , в частности файлы и каталоги, которые не являются частью созданных вами баз данных. Так как вы используете MySQL 5.5.49, которая является старой версией. Я рекомендую обновить ваш сервер до более стабильной версии. Текущая стабильная версия - 5.7.14.

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

Но если по какой-то причине вы должны использовать версии MySQL 5.5, существует MySQL 5.5.51, которая является последней стабильной версией ветви 5.5. Есть несколько вариантов, которые вы можете попробовать. Вы можете использовать mysql_install_db чтобы попытаться воссоздать базу данных MySQL. Или, если это не сработает, вам придется удалить базу данных MySQL, а затем переустановить сервер, чтобы он восстановил эти таблицы.

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

0

Решено!

Это был не apparmor (SELinux, ни разрешения для /temp , это были разрешения для родительской папки моего внешнего жесткого диска).

Итак, чтобы быть ясным для будущих читателей:

Я хотел переместить данные mysql из /var/lib/mysql в /media/exthdd/mysql_data .

После того, как я переместил данные, я правильно установил разрешения mysql для папки mysql_data

drwxrwx --- 7 mysql mysql 4096 22 августа 20:52 mysql_data

НО разрешения родительской папки /media/exthdd исключены mysql .

drwxrwx --- 4 orangepi www-data 4096 22 августа 20:28 owncloud

Так что теперь у меня было 2 варианта:

  1. Разрешить доступ к exthdd для всех пользователей (chmod 777)
  2. Добавьте mysql в группу www-data (каталогу www-data принадлежит каталог)

Я пошел со вторым вариантом:

sudo usermod -a -G www-data mysql

И альт!

sudo service mysql start

sudo service mysql status

mysql.service - MySQL Community Server

Загружен: загружен (/lib/systemd/system/mysql.service; включен)

Активен: активен (работает) с понедельника 2016-08-22 21:03:52 CST; 3 с. Назад

(Поскольку @Frostalf был самым полезным, я принял его ответ)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .