MySQL: Фатальна помилка: Не вдається відкрити та заблокувати таблиці привілеїв: Таблиця 'mysql.host' не існує [закрито]


9

Раптом мій локальний сервер MySQL 5.5 перестав працювати на моєму Windows XP SP3.

У мене також встановлені WAMP Apache і WAMP MySQL, але WAMP MySQL не працює. Показує журнал помилок:

  • Не вдається запустити сервер: Прив’язати до порту TCP / IP: Немає такого файлу чи каталогу
  • У вас вже є інший сервер mysqld, який працює на порту: 3306?

Я спробував змінити порт з 3306 на 3307, але служба все одно не запустилася, даючи помилку:

Переглядач подій показує:

  • Фатальна помилка: Не вдається відкрити та заблокувати таблиці привілеїв: Таблиця "mysql.host" не існує
  • Не вдається відкрити таблицю mysql.plugin. Для його створення запустіть mysql_upgrade.

Мабуть, я можу запустити mysql_upgrade лише у тому випадку, коли працює сервер. Як я можу створити "mysql.host", якщо послугу неможливо запустити?

Я видалив MySQL Server і перевстановив його, і під час встановлення майстра конфігурації після встановлення я отримую помилку: Службу не вдалося запустити. Помилка: 0.

Як мені вийти звідси?


Стів, ви це запускаєте в ОС Windows, BSD, Linux, OSX чи іншої ОС? Якщо ви запускаєте його в Windows, деталі для деяких кроків будуть іншими.
Рік Шнайдер

@Rik Schneider: Рік, я запускаю MySQL на своєму ноутбуці Windows. Дякую.
Стів

Відповіді:


9

Виконайте наступну команду

mysql_install_db

До речі, це необхідно при установці на (принаймні) Linux CentOS 7. Linux, інакше mysqld не запуститься. Я бачив це, коли бігавsystemctl status mysqld.service 2015-02-20 15:41:07 15160 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
Майк S

5

ініціалізувати mysql перед запуском у Windows.

mysqld --initialize

Я хотів би, щоб я міг підтримати це не раз. Я шукав це просте рішення. Дякую!
Schiavini

1

Перше, що вам потрібно зробити, це запустити ці команди:

use mysql
show tables;

Зверніть увагу на відмінності

MySQL 5.0 має 17 таблиць у схемі mysql

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| func                      |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| proc                      |
| procs_priv                |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

MySQL 5.1 має 23 таблиці в mysql-схемі

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

MySQL 5.5 має 24 таблиці в mysql-схемі

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

Зверніть увагу, що mysql.plugin не існує в MySQL 5.0. Дуже правдоподібно думати, що ви якось встановили MySQL 5.0 і змусили життєві таблиці для MySQL 5.5 зникнути.

Ось кілька хороших новин. Можна щось спробувати.

Для цього прикладу

  • ServerA - це місце, де живуть ваші дані MySQL 5.5
  • ServerB - це місце, де ви створите окреме середовище MySQL 5.5

Ось ваші кроки

  1. На ServerA mkdir / root / myusers
  2. На ServerA cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. Встановіть MySQL 5.5 на ServerB
  4. scp ServerB: / var / lib / mysql / mysql / * ServerA: / var / lib / mysql / mysql /.
  5. На ServerA cp /root/myusers/user.* / var / lib / mysql / mysql /.
  6. служба запуску mysql

Це воно.

Якщо ви запускаєте це в Windows, повинні застосовуватися ті самі принципи.

Спробувати !!!

ОНОВЛЕННЯ 2011-07-29 16:15 EDT

Якщо у ваших імен користувачів були привілеї для БД, ось ваші кроки

  1. На ServerA mkdir / root / myusers
  2. На ServerA cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. На ServerA cp /var/lib/mysql/mysql/db.* / root / myusers /.
  4. Встановіть MySQL 5.5 на ServerB
  5. scp ServerB: / var / lib / mysql / mysql / * ServerA: / var / lib / mysql / mysql /.
  6. На ServerA cp / root / myusers / * / var / lib / mysql / mysql /.
  7. служба запуску mysql

0

Службу не вдалося запустити. Помилка: 0.

Додати шлях MySQL до змінних середовища.


Дякую, але це вже було в змінній Path.
Стів

0

це схоже на те, що у вас вже працює mysql

спробуйте

ps ax|grep mysql

якщо ви бачите деякий вихід, ймовірно, вам потрібно зупинити його (або перезавантажити вікно).

якщо ви не бачите жодного виводу, спробуйте запустити mysqld без демонізації та побачити вихід.


0

Я додав тег Windows, щоб допомогти людям відповісти на питання.

Мій фон - це не вікна, а застосовуються принципи.

Чи вже запущений процес mysql? Якщо це так, вам потрібно буде вбити його перед видаленням. Якщо він все ще працював, коли ви намагалися видалити / перевстановити, у вас з'являться процеси та файли, що зависають, що не дозволяє повністю видалити їх.

Відкрийте вікно служб, шукайте що-небудь з mysql в імені та переконайтеся, що воно встановлено так, щоб не намагатися запустити перезавантаження. Потім відкрийте вкладку запущених процесів у вікні запущених програм (використовуйте CTRL-ALT-DEL для відкриття) і шукайте та вбивайте запущені процеси з mysql в імені.

Якщо ви впевнені, що більше немає запущених mysql-процесів, ви можете продовжити. Ви можете перезавантажитись, щоб бути впевненим, що більше не запущені mysql процеси не зависають.

У цей час ви повинні мати можливість перевстановити та запустити mysql.


0

Запустіть mysql-test-run і ви побачите такий вихід:

./mysql-test-run
Logging: ./mysql-test-run  
2013-09-14 03:39:32 2566 [Warning] Setting lower_case_table_names=2 because file system for /var/folders/fr/sn4l2f393_v_ytcwkb0lx7_40000gp/T/_M2mZFQPjV/ is case insensitive
2013-09-14 03:39:32 2566 [Note] Plugin 'FEDERATED' is disabled.
2013-09-14 03:39:32 2566 [Note] Binlog end
2013-09-14 03:39:32 2566 [Note] Shutting down plugin 'MyISAM'
2013-09-14 03:39:32 2566 [Note] Shutting down plugin 'CSV'
MySQL Version 5.6.13
Checking supported features...
 - SSL connections supported
Using suites: main,sys_vars,binlog,federated,rpl,innodb,innodb_fts,perfschema,funcs_1,opt_trace,parts,auth_sec
Collecting tests...
 - adding combinations for binlog



 - adding combinations for rpl
Removing old var directory...
Creating var directory '/Users/das/mysql/mysql-5.6.13-osx10.7-x86_64/mysql-test/var'...
Installing system database...
Using server port 50409

==============================================================================

TEST                                      RESULT   TIME (ms) or COMMENT
--------------------------------------------------------------------------

0

Якщо ви переміщуєте ваш datadir, вам не тільки потрібно надати нові дозволи на datadir, але вам потрібно забезпечити, щоб усі батьківські каталоги мали дозвіл.

Я перемістив свій datadir на жорсткий диск, встановлений в Ubuntu як:

/media/*user*/Data/

і мій datadir був Бази даних .

Мені довелося встановити дозволи на 771 для кожного з медіа, користувачів та каталогів даних:

sudo chmod 771 *DIR*

Якщо це не працює, інший спосіб ви можете змусити mysql працювати - це змінити користувача в /etc/mysql/my.cnf на root; хоча сумнівів у цьому немає з точки зору безпеки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.