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, детали некоторых шагов будут другими.
Рик Шнайдер

@ Рик Шнайдер: Рик, я использую MySQL на своем ноутбуке с Windows. Спасибо.
Стив

Ответы:


9

Запустите следующую команду

mysql_install_db

Кстати, это необходимо при установке (по крайней мере) Linux CentOS 7. В противном случае 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
Майк С

5

инициализируйте mysql перед запуском на windows.

mysqld --initialize

Хотел бы я поднять это более одного раза. Я искал это простое решение. Спасибо!
Скьявини

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
  • На сервере B вы создадите отдельную среду MySQL 5.5

Вот ваши шаги

  1. На сервере А mkdir / root / myusers
  2. На сервере A, 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. На сервере A, cp /root/myusers/user.* / var / lib / mysql / mysql /.
  6. служба mysql start

Вот и все.

Если вы используете это в Windows, должны применяться те же принципы.

Попробуйте!

ОБНОВЛЕНИЕ 2011-07-29 16:15 ПО ВОСТОЧНОМУ ВРЕМЕНИ

Если ваши имена пользователей имеют особые привилегии БД, вот ваши шаги

  1. На сервере А mkdir / root / myusers
  2. На сервере A, cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. На сервере A, 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. На сервере А, cp / root / myusers / * / var / lib / mysql / mysql /.
  7. служба mysql start

0

Служба не может быть запущена. Ошибка: 0.

Добавьте путь MySQL к переменным среды.


Спасибо, но это уже было в переменной Path.
Стив

0

похоже у тебя уже запущен mysql

пытаться

ps ax|grep mysql

если вы видите какой-то вывод, вероятно, вам нужно остановить его (или перезагрузить окно).

если вы не видите никаких выходных данных, попробуйте запустить mysqld без demonize и посмотрите выходные данные.


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/

и мой датадир был Базы данных .

Мне пришлось установить разрешения на 771 для каждого из носителей, пользователей и каталогов данных:

sudo chmod 771 *DIR*

Если это не работает, другой способ заставить MySQL работать - изменить пользователя в /etc/mysql/my.cnf на root; хотя, несомненно, есть некоторые проблемы с этим с точки зрения безопасности.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.