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


70

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.


또한 아마도 가치가 없으며 옵션으로 mysqld실행 중입니다 --skip-grant-tables. mysql자격 증명없이 터미널을 통해 연결할 수 있으며 syslog 또는 실행시 볼 수있는 다른 곳을 통해 오류가 발생하지 않습니다.mysql_upgrade
Jim Rubenstein

MySQL의 참조 설명서는 꽤 잘 5.1에서 5.5로 업그레이드 커버. 여기의 모든 지시 사항을 따른다면 언급 할 가치가 있습니다. 당신이하지 않은 경우, 음 ...
아론 코플리

mysql 루트 사용자에게 암호가 없다면`mysql_upgrade -u root -p`에`-p`를 포함시키지 마십시오
Jeferex

답변:


95

사용자 이름과 비밀번호가 필요하다고 생각합니다

mysql_upgrade -u root -p

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

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

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

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

23
이것은 내가 가진 문제였습니다. 왜 "인증 할 수 없습니다"또는 "연결 오류"또는 다른 것으로 도대체 말할 수 없었습니까? 너무 화가 ...
les2

3
여러분, 암호도 틀리면 같은 오류가 발생합니다. 그러니 알려주십시오.
Yoosaf Abdulla

3
그리고 서버가 암호를 수락하는 것처럼 보이지만 서버가 실행되지 않으면 동일한 오류가 발생합니다.
Raman

1
데이터베이스 테이블이나 데이터베이스 형식도 깨져도 작동하지 않으면 "mysqld --skip-grant-tables"로 데몬을 시작하고 다른 터미널에서 mysql_upgrade를 실행해야합니다!
Henning

이것을 위해 +1. 내가 MySQL을 싫어하는 또 다른 이유
Excalibur

9

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

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


mysqld --skip-grant-tables --user = mysql
Rodo

9

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

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

이것은 나를 위해 완벽하게 작동했습니다
xarlymg89

5

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

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


1
그것에 대해 생각했지만 Privelege 테이블을 수정하기 위해 fix_priv_tables생성 된 스크립트입니다mysql_upgrade
Jim Rubenstein

좋은 지적, 아마도 첫 번째 mysqlcheck 라인을 사용해보십시오. bin 폴더에서 직접 실행 해보십시오. fwiw/usr/bin/mysql_upgrade
user16081-JoeT


3

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

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

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


그래, mysql의 데이터 디렉토리가 손상되면 할 수있는 일이 거의 없다
Krauser

2

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

chown -R mysql /var/lib/mysql

2

DBA는 5.5.39로 업그레이드하는 대신 mysql 버전 5.0.95를 제거했습니다. 설치 제거는 백업 /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원본을 다시 복원합니다 (추가해야 할 새 기본 설정이 있는지 먼저 확인하십시오).

  • diff 도구를 사용 하여 새로운 것과 vimdiff비교 하고 InnoDB 설정을 포함하여 MySQL 구성에 적용된 조정을 다시 가져옵니다.my.cnf.rpmsavemy.cnf

    [root]# vimdiff /etc/my.cnf /etc/my.cnf.rpmsave

마지막 옵션을 수행 한 다음 MySQL을 시작할 수있었습니다.

root]# service mysqld start
Starting mysqld:                                           [  OK  ]

이제는 mysql_upgrade잘 작동 mysql_upgrade -uroot -p하므로 루트 암호를 입력하라는 메시지가 표시됩니다.

[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 -pMySQL을 실행해야하기 때문에 사용 하지 못했습니다!

교훈:

  • 업그레이드하기 전에 my.cnf를 백업하십시오. 실제로 제거 대신 새 위치로 업그레이드 한 다음 최신 버전을 설치하십시오.
  • mysql_upgrade를 사용할 수 있도록 MySQL을 실행하십시오.
  • 이익.

1

나에게도 같은 문제이지만 내 문제의 원인은 이전 암호 형식이었습니다. myski는 "skip-secure-auth"를 사용하여 이전 형식을 사용하여 강제로 연결할 수 있지만 mysql_upgrade에는이 옵션이 없습니다. 먼저 새로운 형식으로 루트 비밀번호를 업데이트 한 다음 mysql을 업그레이드 할 수 있습니다.


1

동일한 문제를 5.1에서 5.5로 업그레이드했습니다.

이것은 나를 위해 일했다 : sudo mysql_upgrade -S <path-to-socket> -u <myuser> -p<mypass>

소켓 경로에 대한 권한으로 인해 오류가 발생했을 수 있지만 원인인지 확인하는 데 시간이 없었습니다.


나는 한때 DataDir을 옮겼습니다. 그것이 소켓으로가는 경로가 필요한 이유입니다.
zzapper

0

내 시스템을 Mint 12에서 Mint 15로 업그레이드 한 후에이 문제가 발생했습니다. / var / lib / mysql을 아카이브하고 업그레이드 후 다시 설치했습니다. mysqlcheckuser16081의 의견에서 첫 번째 를 실행했으며 mysql.sock에 대해 불평했습니다.

나는 mysqld를 사용하여 시작 /usr/sbin/mysqld &하고 mysql_upgrade잘 돌아갔다.


그것은 MySQL을 업그레이드하는 데 꽤 무서운 방법이지만, 그것이 당신을 위해 일하게되어 기쁩니다.
Aaron Copley

@ aaron-copley : 실제로 완전히 작동하지 않았습니다. MySQL 5.5.32는 많은 InnoDB 테이블을 부분적으로 무시하고 있습니다. 에 표시 SHOW TABLES되지만 존재하지 않습니다. 현재 mysql-utilities를 작동 시키려고하지만 파이썬 모듈이 누락되었다는 불만이 있습니다.
마티 밴스

0

나는 같은 문제를 겪었다.
-S /path/to/mysql.sock을 포함하여 해결했습니다.

내 특별한 경우 mysql_upgrade의 출력은 다음
과 같습니다. 'mysql'을
찾는 방법 : mysql 'mysqlcheck'를 찾는 방법 : mysqlcheck
치명적 오류 : 업그레이드 실패

꽤 쓸모가 없습니다. --verbose는 아무런 차이가 없었습니다.

플러그를
꽂으 면 다음 명령을 사용하고 매력처럼 작동했습니다. mysql_upgrade -S /var/lib/mysql/mysql.sock -uUSERNAME -p

도움이 되길 바랍니다.


0

나는이 문제에 직면했고, 그것을 발견했다.

  1. MySQL 서비스를 실행해야했습니다.

  2. 사용자 이름과 비밀번호가 필요했습니다


0

같은 문제가 발생했습니다.

/ etc의 파일 mysql_install_db --user=mysql주석에 설명 된 대로 새 데이터베이스를 설치하여이 문제를 해결했습니다 rc.mysql.

그런 다음 mysql 데몬을 시작하고 'mysql'또는 mysql 패키지와 연결하려는 것을 사용할 수있었습니다.

slackware arm 에서이 문제가 있었지만이 경우 중요하지 않다고 가정하십시오.


0

내 경우에는 로컬로 실행중인 mysqld의 몇 가지 버전이있어 mysql_upgrade가 실패했습니다 . 서버 버전을 가져 오는 동안 오류가 발생했습니다 ! 무단 액세스로 인한 것일 수 있습니다. ps aux | grep mysqlmysqld가 모두 종료되었는지 확인하십시오. 그런 다음 모든 버전을 제거하고 올바른 버전을 다시 설치하십시오. 그리고 그 후 mysql_upgrade가 작동하기 시작했습니다.


-1

시험

mysql_upgrade --verbose 

또는 아마도 (또는 둘 다)

--debug-check --debug-info

유용한 정보가없는 것을 시도했습니다.
Jim Rubenstein

다시 시작하여 오류 로그 정보를 붙여 넣었습니다. \; 왜 같은 오류가 계속 반복되는지 확실하지 않습니다.
Jim Rubenstein

당신이 거기에 오류가있는 것 같습니다- 130730 21:03:34 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist그것이 모든 것을 실패하게하는 것이라고 생각합니다.
alexus

그러나 그 전에 mysql_upgrade --version을 시도하고 그 결과를 제공하십시오.
alexus

mysql_upgrade --version버전 출력을 생성하지 않습니다 (FATAL ERROR 오류 만). mysql --versionreadline 6.2를 사용하는 debian-linux-gnu (x86_64)의 경우 mysql Ver 14.14 Distrib 5.5.32이고 mysqld 버전은 5.5입니다.
Jim Rubenstein

-3

MySQL의 루트 사용자 이름은 root가 아니라 "admin"입니다. 올바른 명령은

mysql_upgrade -uadmin -p

이것은 절대적으로 잘못입니다. MySQL의 루트 사용자는 root입니다.
dr01
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.