Я обновляюсь с MySQL 5.1 до 5.5, работаю mysql_upgrade
и получим этот результат:
# mysql_upgrade
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed
Есть идеи, где искать, что происходит (или не происходит?), Чтобы я мог исправить все, что не так, и запустить mysql_upgrade
?
Спасибо!
Больше вывода:
# mysql_upgrade --verbose
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed
# mysql_upgrade --debug-check --debug-info
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed
# mysql_upgrade --debug-info
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed
User time 0.00, System time 0.00
Maximum resident set size 1260, Integral resident set size 0
Non-physical pagefaults 447, Physical pagefaults 0, Swaps 0
Blocks in 0 out 16, Messages in 0 out 0, Signals 0
Voluntary context switches 9, Involuntary context switches 5
# mysql_upgrade --debug-check
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed
После выключения mysqld --skip-grant-tables
через mysqladmin shutdown
и перезапуск mysql через service mysql start
, журнал ошибок повторяет этот набор ошибок снова и снова:
130730 21:03:27 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Table 'mysql.plugin' doesn't exist
130730 21:03:27 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
130730 21:03:27 InnoDB: The InnoDB memory heap is disabled
130730 21:03:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130730 21:03:27 InnoDB: Compressed tables use zlib 1.2.3.4
130730 21:03:27 InnoDB: Initializing buffer pool, size = 20.0G
130730 21:03:29 InnoDB: Completed initialization of buffer pool
130730 21:03:30 InnoDB: highest supported file format is Barracuda.
InnoDB: Log scan progressed past the checkpoint lsn 588190222435
130730 21:03:30 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 588192055067
130730 21:03:30 InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percents: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 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 70 71 72 73 74 75 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: Apply batch completed
InnoDB: Last MySQL binlog file position 0 81298895, file name /var/log/mysql/mysql-bin.006008
130730 21:03:33 InnoDB: Waiting for the background threads to start
130730 21:03:34 InnoDB: 5.5.32 started; log sequence number 588192055067
130730 21:03:34 [Note] Recovering after a crash using /var/log/mysql/mysql-bin
130730 21:03:34 [Note] Starting crash recovery...
130730 21:03:34 [Note] Crash recovery finished.
130730 21:03:34 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
130730 21:03:34 [Note] - '0.0.0.0' resolves to '0.0.0.0';
130730 21:03:34 [Note] Server socket created on IP: '0.0.0.0'.
130730 21:03:34 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
Журнал MySQL при запуске через mysqld_safe --skip-grant-tables
130730 21:19:36 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
130730 21:19:36 [Note] Plugin 'FEDERATED' is disabled.
130730 21:19:36 InnoDB: The InnoDB memory heap is disabled
130730 21:19:36 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130730 21:19:36 InnoDB: Compressed tables use zlib 1.2.3.4
130730 21:19:37 InnoDB: Initializing buffer pool, size = 20.0G
130730 21:19:39 InnoDB: Completed initialization of buffer pool
130730 21:19:39 InnoDB: highest supported file format is Barracuda.
130730 21:19:42 InnoDB: Warning: allocated tablespace 566, old maximum was 0
130730 21:19:42 InnoDB: Waiting for the background threads to start
130730 21:19:43 InnoDB: 5.5.32 started; log sequence number 588192055067
130730 21:19:43 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
130730 21:19:43 [Note] - '0.0.0.0' resolves to '0.0.0.0';
130730 21:19:43 [Note] Server socket created on IP: '0.0.0.0'.
130730 21:19:43 [Warning] Can't open and lock time zone table: Table 'mysql.time_zone_leap_second' doesn't exist trying to live without them
130730 21:19:43 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_current' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_history' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_history_long' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'setup_consumers' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'setup_instruments' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'setup_timers' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'performance_timers' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'threads' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_summary_by_thread_by_event_name' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_summary_by_instance' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_summary_global_by_event_name' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'file_summary_by_event_name' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'file_summary_by_instance' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'mutex_instances' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'rwlock_instances' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'cond_instances' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'file_instances' has the wrong structure
130730 21:19:43 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.32-0ubuntu0.12.04.1-log' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Ubuntu)
Насколько я понимаю, все проблемы со структурой / существованием таблиц (поскольку они относятся к системным таблицам mysql) следует исправить, запустив mysql_upgrade
:
Я думаю, что для этого нужны логин и пароль
mysql_upgrade -u root -p
Если я их не передам, я получу вашу ошибку
редактировать: благодаря комментариям теперь я знаю, что есть и другие причины, может быть, реже, но о них тоже лучше знать
Итак, вы получите эту ошибку, когда
mysqld --skip-grant-table
)Я только что столкнулся с этими точными симптомами при обновлении с 5.5 до 5.6, и это оказалось проблемой доступности службы.
Несмотря на то, что клиент cli MySQL мог подключаться к моему локальному экземпляру БД с предоставленными только -u и -p, мне также нужно было указать -h 127.0.0.1 для mysql_upgrade, поскольку он пытался подключиться к файлу сокета и терпел неудачу в этой попытке.
Это похоже на сервер Plesk, при использовании Plesk для Mysql нет root, но администратор Mysql называется admin, поэтому эта команда должна работать в Plesk, как я пробовал раньше:
mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`
Та же проблема! Решение для меня пришло из http://www.freebsd.org/cgi/query-pr.cgi?pr=180624
Вкратце: ошибка вводит в заблуждение! бегать mysql_upgrade -u root -p
с БД в сети и укажите пароль root.
вы можете попробовать запустить их один за другим, чтобы увидеть, где это не удается:
mysql_upgrade выполняет следующие команды для проверки и восстановления таблиц и обновления системных таблиц:
mysqlcheck --all-databases --check-upgrade --auto-repair
mysql < fix_priv_tables
mysqlcheck --all-databases --check-upgrade --fix-db-names --fix-table-names
из http://dev.mysql.com/doc/refman/5.5/en/mysql-upgrade.html
Это очень общий вопрос, и я прошу прощения за это.
Я не смог найти прямую причину и решение возникшей у меня проблемы, поэтому прибег к повторной установке MySQL, чтобы посмотреть, сработает ли это. Оказывается, повторная установка сделала свое дело. Это был неудачный способ исправить это, но это был единственный вариант, который у меня оставался.
Многие другие ответы на этот вопрос - это проблемы, с которыми мне пришлось справиться, чтобы запустить mysql_upgrade изначально, но по какой-то причине - он не удался, поскольку он пытался выполнить некоторые автоматические запросы, и я не мог найти документацию, по которой запросы, которые он выполнял, чтобы я мог их исправить.
Вы должны проверить разрешение всех файлов под данными mysql. Это должен быть тот же владелец mysql PID (mysql или _mysql). Иногда это происходит из-за восстановления данных из файла без надлежащего разрешения. Например, если ваши данные mysql находятся в / var / lib / mysql
chown -R mysql /var/lib/mysql
Наш администратор базы данных удалил mysql версии 5.0.95 вместо того, чтобы просто обновиться до 5.5.39. При удалении была создана резервная копия /etc/my.cnf
к /etc/my.cnf.rpmsave
затем удалил его, и это помешало правильному запуску MySQL:
140902 15:00:57 [ERROR] Plugin 'InnoDB' init function returned error.
140902 15:00:57 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140902 15:00:57 [ERROR] Unknown/unsupported storage engine: InnoDB
140902 15:00:57 [ERROR] Aborting
Вы можете сделать любое из следующего:
Сравните файлы my.cnf вручную и перенесите соответствующие настройки конфигурации для InnoDB
Восстановить my.cnf.rpmsave
обратно к оригиналу (сначала проверьте новые настройки по умолчанию, которые вы должны добавить!)
Используйте инструмент сравнения, например vimdiff
сравнить my.cnf.rpmsave
к новому my.cnf
и вернул настройки, которые были внесены в конфигурацию MySQL, включая настройки InnoDB.
[root]# vimdiff /etc/my.cnf /etc/my.cnf.rpmsave
Я сделал последний вариант, после чего смог запустить MySQL:
root]# service mysqld start
Starting mysqld: [ OK ]
а теперь mysql_upgrade
отлично работает, используя mysql_upgrade -uroot -p
поэтому он попросил меня ввести пароль root.
[root]# mysql_upgrade -uroot -p
Enter password:
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
....
Надеюсь это поможет!
а также используя mysql_upgrade -uroot -p
не удалось, потому что для работы требуется MySQL!
Уроки выучены:
Была такая же проблема при обновлении с 5.1 до 5.5.
Это сработало для меня: sudo mysql_upgrade -S <path-to-socket> -u <myuser> -p<mypass>
Моя ошибка, вероятно, была вызвана разрешениями на путь к сокету, но у меня нет времени проверить, была ли причина.
У меня такая же проблема, но источником моих проблем был старый формат пароля. В то время как mysql может быть принудительно подключен с использованием старого формата с помощью "skip-secure-auth", mysql_upgrade не имеет этой опции. Сначала вам нужно обновить пароль root с новым форматом, а затем вы можете обновить свой mysql.
В моем случае у меня было несколько версий mysqld, работающих локально, что приводило к сбою mysql_upgrade с Ошибка: не удалось получить версию сервера! Может быть из-за несанкционированного доступа. ps aux | grep mysql
и убедитесь, что mysqld отключен. Затем заварите, удалите все версии, переустановите нужную версию. И после этого mysql_upgrade начал работать.
Я столкнулся с той же проблемой.
Я решил это, установив новую базу данных mysql_install_db --user=mysql
как описано в комментариях моего rc.mysql
файл в / etc.
Затем я смог запустить демон mysql и использовать mysql или что угодно, связанное с пакетом mysql.
У меня была эта проблема на руке Slackware, но, предположим, в данном случае это не имеет значения.
Я столкнулся с этой проблемой и выяснил, что
требовалось, чтобы служба MySQL работала
требуется имя пользователя и пароль
Я столкнулся с той же проблемой.
Я решил это, включив -S /path/to/mysql.sock
В моем конкретном случае вывод mysql_upgrade был:
Ищем mysql как: mysql
Ищем mysqlcheck как: mysqlcheck
ФАТИЧЕСКАЯ ОШИБКА: не удалось выполнить обновление.
Это бесполезно. --verbose не имело значения.
Я остановился на следующей команде, и она отлично сработала:
mysql_upgrade -S /var/lib/mysql/mysql.sock -uUSERNAME -p
Надеюсь, поможет.
Я только что столкнулся с этим после обновления моей системы с Mint 12 до Mint 15. Я заархивировал / var / lib / mysql и вернул его на место после обновления. Я побежал первым mysqlcheck
из комментария user16081, и он жаловался на mysql.sock.
Я запустил mysqld, используя /usr/sbin/mysqld &
и mysql_upgrade
работал нормально.
пытаться
mysql_upgrade --verbose
или, может быть, даже (или оба)
--debug-check --debug-info
Пользователь root для MySQL называется «admin», а не root. Правильная команда
mysql_upgrade -uadmin -p