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 서버를 제거했다가 다시 설치했으며 설치 후 구성 마법사 중에 오류가 발생합니다. 서비스를 시작할 수 없습니다. 오류 : 0

여기서 어떻게 진행합니까?


Steve 당신은 이것을 Windows, BSD, Linux, OSX 또는 다른 OS에서 실행하고 있습니까? Windows에서 실행중인 경우 일부 단계에 대한 세부 사항이 다릅니다.
Rik Schneider

@Rik Schneider : Rick, 저는 Windows 랩톱에서 MySQL을 실행하고 있습니다. 감사.
Steve

답변:


9

다음 명령을 실행하십시오

mysql_install_db

BTW, 이것은 적어도 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
Mike S

5

Windows에서 시작하기 전에 mysql을 초기화하십시오.

mysqld --initialize

나는 이것을 두 번 이상 공표 할 수 있기를 바랍니다. 이 간단한 솔루션을 찾고 있습니다. 감사!
Schiavini 2016 년

1

가장 먼저해야 할 일은 다음 명령을 실행하는 것입니다.

use mysql
show tables;

차이점에 유의하십시오

MySQL 5.0에는 mysql 스키마에 17 개의 테이블이 있습니다.

+---------------------------+
| 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에는 mysql 스키마에 23 개의 테이블이 있습니다.

+---------------------------+
| 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에는 MySQL 스키마에 24 개의 테이블이 있습니다.

+---------------------------+
| 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. ServerB에 MySQL 5.5 설치
  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

사용자 이름에 DB 특정 권한이있는 경우 다음 단계를 수행하십시오.

  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. ServerB에 MySQL 5.5 설치
  5. scp ServerB : / var / lib / mysql / mysql / * ServerA : / var / lib / mysql / mysql /.
  6. ServerA에서 cp / root / myusers / * / var / lib / mysql / mysql /.
  7. 서비스 MySQL 시작

0

서비스를 시작할 수 없습니다. 오류 : 0

환경 변수에 MySQL 경로를 추가하십시오.


고맙지 만 이미 Path 변수에있었습니다.
Steve

0

그것은 이미 mysql을 실행하고있는 것처럼 보입니다.

시험

ps ax|grep mysql

출력이 보이면 중지해야합니다 (또는 재부팅 상자).

출력이 보이지 않으면 demonize없이 mysqld를 실행하고 출력을 참조하십시오.


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을 하드 드라이브로 옮기고 우분투에 다음과 같이 마운트했다.

/media/*user*/Data/

내 datadir은 Databases 였습니다 .

각 미디어, 사용자 및 데이터 디렉토리 에 대한 권한을 771로 설정해야했습니다 .

sudo chmod 771 *DIR*

이것이 작동하지 않으면 mysql을 작동시킬 수있는 또 다른 방법은 /etc/mysql/my.cnf의 사용자를 root로 변경하는 것입니다. 보안 관점에서이를 수행하는 데는 몇 가지 문제가있을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.