[server] `mysql_upgrade`는 아무런 이유도없이 실패

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 shutdownmysql을 통해 다시 시작 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

통과하지 못하면 오류가 발생합니다.

편집 : 의견 덕분에 다른 이유가 있다는 것을 알고 있습니다. 빈도가 적지 만 알고있는 것이 가장 좋습니다.

그래서 당신은 때 오류가 발생

  • 당신은 사용자 이름과 암호를 전달하지 않았습니다
  • 당신은 당신의 자격 증명을 통과했지만 잘못되었습니다
  • MySQL 서버가 실행되고 있지 않습니다
  • 권한 테이블이 망가졌습니다 (그리고 MySQL을 다시 시작해야합니다 mysqld --skip-grant-table)
  • mysql.plugin 테이블이 누락되었습니다 (MySQL을 시작할 때 실행을 제안하는 mysql_upgrade 오류가 표시됩니다. mysql_upgrade, 실패합니다. 아마도 my.cnf에 쓸모없는 구성이있을 것입니다)

답변

5.5에서 5.6으로 업그레이드 할 때 이러한 정확한 증상이 나타 났으며 서비스 도달 가능성 문제로 밝혀졌습니다.

cli MySQL 클라이언트는 -u 및 -p 만 제공하여 로컬 DB 인스턴스에 연결할 수 있지만 소켓 파일 연결을 시도하고 잘못 시도하여 mysql_upgrade에 대해 -h 127.0.0.1을 지정해야했습니다.


답변

Plesk 서버를 사용하는 경우에는 Plesk를 사용할 때 Mysql에 대한 루트가 없지만 Mysql 관리자는 admin이라고 불리는이 명령은 Plesk에서 작동해야합니다.

mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`


답변

다음을 하나씩 실행하여 실패한 곳을 확인할 수 있습니다.

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


답변

같은 문제! 나를위한 해결책은 http://www.freebsd.org/cgi/query-pr.cgi?pr=180624 에서 나왔습니다 .

간단히 : 오류가 잘못되었습니다! mysql_upgrade -u root -pDB 온라인으로 실행 하고 루트 암호를 제공하십시오.


답변

이 질문은 엄청나게 일반적이며, 죄송합니다.

내가 겪고 있었던 문제에 대한 직접적인 원인과 해결책을 찾을 수 없었기 때문에 MySQL을 다시 설치하여 문제가 해결되는지 확인했습니다. 다시 설치하면 문제가 해결되었습니다. 그것은 그것을 고칠 수있는 절름발이 방법이지만, 내가 남은 유일한 옵션이었습니다.

이 질문에 대한 다른 많은 대답은 mysql_upgrade를 처음 실행하기 위해 해결해야했던 문제이지만 어떤 이유로 든 자동화 된 쿼리를 실행하려고 시도했지만 실패한 문서가 없습니다. 쿼리가 실행 중이므로 수정할 수 있습니다.


답변

mysql 데이터에있는 모든 파일의 권한을 확인해야합니다. mysql PID (mysql 또는 _mysql)의 동일한 소유자 여야합니다. 적절한 권한없이 파일에서 데이터를 복원하기 때문에 언젠가 발생합니다. 예를 들어 mysql 데이터가 / var / lib / mysql 아래에있는 경우

chown -R mysql /var/lib/mysql