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

MySQL: Неустранимая ошибка: не удается открыть и заблокировать таблицы привилегий: таблица 'mysql.host' не существует

Внезапно мой локальный сервер MySQL 5.5 перестал работать на моем Windows XP SP3.

У меня также установлены WAMP Apache и WAMP MySQL, но WAMP MySQL не работает. Журнал ошибок показывает:

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

Средство просмотра событий показывает:

Судя по всему, я могу запустить mysql_upgrade, только если сервер запущен. Как я могу создать mysql.host, если сервис не запускается?

Я удалил MySQL Server и переустановил его, и во время работы мастера настройки после установки я получаю сообщение об ошибке: не удалось запустить службу. Ошибка: 0.

Как мне действовать дальше?

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

mysql_install_db

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

mysqld --initialize

Первое, что вам нужно сделать, это выполнить следующие команды:

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.

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

похоже, у вас уже запущен mysql

пытаться

ps ax|grep mysql

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

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

Я добавил тег Windows, чтобы помочь людям ответить на вопрос.

Мой опыт - не окна, но принципы применимы.

Есть ли уже запущенный процесс mysql? В таком случае вам нужно будет убить его перед удалением. Если он все еще работал, когда вы пытались удалить / переустановить, у вас будут зависать процессы и файлы, которые мешают вам полностью удалить.

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

Если вы удовлетворены тем, что больше нет запущенных процессов mysql, вы можете продолжить. Вы можете перезагрузить компьютер, чтобы убедиться, что запущенные процессы mysql больше не работают.

В это время вы сможете переустановить и запустить mysql.

Запустите 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
--------------------------------------------------------------------------

Если вы перемещаете свой datadir, вам нужно не только предоставить новые разрешения datadir, но и убедиться, что все родительские каталоги имеют разрешение.

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

/media/*user*/Data/

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

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

sudo chmod 771 *DIR*

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