본문 바로가기
Development/Database

mysql 데몬 실행에러 - Table 'mysql.host' doesn't exist

by 버들도령 2020. 2. 18.
728x90

mysql 데몬 실행에러 - Table 'mysql.host' doesn't exist

- 작업환경 -
Database Version : MySQL 5.0.19
OS : Solaris 8. 2/02
 (mysql 설치 디렉토리가 /usr/local/mysql 이라고 가정)

- 사례
 ⓐ MySQL을 정상적으로 설치후 데몬을 실행하려했으나 아래와 같은 에러를 발생시키며 데몬이 실행이 안될때.
 ⓑ MySQL을 정상적으로 사용하던중 비정상적으로 서버가 죽은 뒤에 재부팅한 후 데몬을 실행하려 했으나 아래와 같은 에러를 발생시키며 데몬이 실행이 안될때.

- 현상 (앞으로 더 추가 예정)
ⓐ 데몬을 실행시키려 했으나 아래와 같은 에러를 발생시키며 데몬이 실행이 안될때.
shell> bin/mysqld_safe --user=mysql &

[1] 555
shell> Starting mysqld daemon with databases from /usr/local/mysql/data
STOPPING server from pid file /usr/local/mysql/data/vfms.pid
060323 17:24:19  mysqld ended
[1]  + done       ../bin/mysqld_safe --user=mysql
shell>

- 확인사항
ⓐ MySQL설치시 mysql_install_db --user=mysql 명령을 실행하였나?
  <소스로 설치한 경우>
    shell> ./scripts/mysql_install_db --user=mysql
  <pkg로 설치한 경우>
    shell> ./bin/mysql_install_db --user=mysql

 ⓑ  기본 DB들의 데이터가 존재하는가? mysql과 test 디렉토리
   <소스로 설치한 경우> shell> ls ./var
   <pkg로 설치한 경우>  shell> ls ./data

    shell> ls ./var 혹은 ls ./data
    ib_logfile0       mysql-bin.000001  mysql
    ib_logfile1       mysql-bin.000002  test
    ibdata1           mysql-bin.index   host명.err

 ⓒ mysql 의 Error 로그를 기록하는 host명.err 파일의 내용을 확인해 보았는가?
     shell> vi ./var/host명.err
.
.
060323 17:24:18  mysqld started
060323 17:24:19  InnoDB: Started; log sequence number 0 43655
060323 17:24:19 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
060323 17:24:19  mysqld ended

 ⓓ 위에서 확인한 결과 mysql과 test() 디렉토리는 존재하지만 mysql의 디렉토리 내부에는 아무런 데이터가 없지 않은가? (단, test 디렉토리내에는 아무런 화일이 없어도 무관)

아래와 같이 테이블명.MYD, 테이블명.MYI, 테이블명.frm 등의 파일들이 존재해야한다.

shell> ls ./data/mysql
columns_priv.MYD               proc.frm
columns_priv.MYI               procs_priv.MYD
columns_priv.frm               procs_priv.MYI
db.MYD                         procs_priv.frm
db.MYI                         tables_priv.MYD
db.frm                         tables_priv.MYI
func.MYD                       tables_priv.frm
func.MYI                       time_zone.MYD
func.frm                       time_zone.MYI
help_category.MYD              time_zone.frm
help_category.MYI              time_zone_leap_second.MYD
help_category.frm              time_zone_leap_second.MYI
help_keyword.MYD               time_zone_leap_second.frm
help_keyword.MYI               time_zone_name.MYD
help_keyword.frm               time_zone_name.MYI
help_relation.MYD              time_zone_name.frm
help_relation.MYI              time_zone_transition.MYD
help_relation.frm              time_zone_transition.MYI
help_topic.MYD                 time_zone_transition.frm
help_topic.MYI                 time_zone_transition_type.MYD
help_topic.frm                 time_zone_transition_type.MYI
host.MYD                       time_zone_transition_type.frm
host.MYI                       user.MYD
host.frm                       user.MYI
proc.MYD                       user.frm
proc.MYI

 - 해결 방법
설치시 기본 DB의 테이블들이 제대로 생성되지 않았거나 불완전한 mysql의 종료로 인해 지워진 경우 이므로 정상적으로 설치된 mysql의 기본 DB관련 파일들을 복사해서 덮어쓰기하면 된다.

블로그에 첨부된 파일은 MySQL 5.0.19의 기본 DB(mysql)의 데이터들을 tar로 묶은 것이다.

해당 파일들을 내려받은 후 mysql의 var/mysql 혹은 data/mysql 디렉토리에 복사한다.

이전에 등록된 사용자들의 계정과 비밀번호들은 당연히!! 존재하지 않을 것이며, 최초 설치시에 존재하는 root 계정만이 존재할 것이다. 또한 root 의 비밀번호도 초기화되어 있을 것이다.

또한 mysql DB의 user 테이블에 등록된 Host의 이름(현재는 'CHANGE'로 세팅)을 자신의 서버 명으로 바꿔주도록 하세요. ^^*

 

shell> cd /usr/local/mysql/var
shell> tar -xvf mysql_5.0.19.pkg_data.tar
..
.
shell> ../bin/mysqld_safe --user=mysql &
[1] 596
shell> Starting mysqld daemon with databases from /usr/local/mysql/data      <--- 지그시 Enter를 눌러준다. ^^*
---------------------------------------------------------------------------------------

제가 위에 적은 방법대로 모두들 해결되길 바랄께요~~ ^^*

728x90

댓글