CentOS의 MySQL이 서비스를 시작할 수 없습니다

CentOS의 MySQL이 서비스를 시작할 수 없습니다

서버를 재부팅한 후 mysql을 시작할 수 없습니다.

$ sudo service mysql start $ Starting MySQL. ERROR! Manager of pid-file quit without updating file.

"/var/log/mysqld.log"에 다음이 표시됩니다. 150225 21:39:49 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 150225 21:39:49 [Note] Plugin 'FEDERATED' is disabled. /usr/local/mysql/bin/mysqld: Table 'mysql.plugin' doesn't exist 150225 21:39:49 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 150225 21:39:49 InnoDB: Initializing buffer pool, size = 8.0M 150225 21:39:49 InnoDB: Completed initialization of buffer pool InnoDB: Log scan progressed past the checkpoint lsn 0 37356 150225 21:39:49 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 0 44233 150225 21:39:49 InnoDB: Starting an apply batch of log records to the database... InnoDB: Progress in percents: 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 150225 21:39:49 InnoDB: Started; log sequence number 0 44233 150225 21:39:49 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist 150225 21:39:49 mysqld_safe mysqld from pid file /var/lib/mysql/iZ23aa67ovhZ.pid ended 내 하드 드라이브가 가득 차지 않았습니다.

여기 /var/lib/mysql의 상태가 있습니다. drwxrwxrwx 2 mysql root 4096 Feb 26 16:43 . drwxr-xr-x. 21 root root 4096 Feb 25 19:38 .. -rw-rw---- 1 mysql mysql 10485760 Feb 25 19:38 ibdata1 -rw-rw---- 1 mysql mysql 5242880 Feb 26 16:43 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 Feb 25 19:38 ib_logfile1 여기가 /etc/my.cnf입니다. [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 그리고 서버에 mysql_install_db가 없습니다. bash: mysql_install_db: command not found 그리고 mysql_safe를 실행하면 다음과 같이 표시됩니다. 150226 16:58:50 mysqld_safe Logging to '/var/log/mysqld.log'. 150226 16:58:50 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 150226 16:58:50 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

정말 감사합니다!

답변1

150225 21:39:49 [ERROR] 치명적인 오류: 권한 테이블을 열고 잠글 수 없습니다: 'mysql.host' 테이블이 존재하지 않습니다.

이 문제를 해결하려면 기본 설치가 이동되지 않은 위치를 mysql에 알려주기만 하면 됩니다. 다음을 사용하여 그렇게 할 수 있습니다.

mysql_install_db –user=mysql –ldata=/newlocation

그렇게 하면 mysql을 다시 시작할 수 있습니다

/etc/init.d/mysqld restart

도움이 되지 않는다면:

  1. 다음을 사용하여 mysql을 제거했습니다.yum remove mysql*
  2. 반복적으로 삭제 /usr/bin/mysql되었으며/var/lib/mysql
  3. 파일도 삭제했어요/etc/my.cnf.rmp
  4. ps -emysql이 아직 실행되고 있지 않은지 확인하기 위해 프로세스를 확인하는 데 사용됩니다 .
  5. 다음을 사용하여 서버를 재부팅했습니다.reboot
  6. yum install mysql-server. 이것은 또한 mysql 클라이언트를 종속성으로 설치하는 것 같습니다.
  7. mysql 소유권과 그룹 권한을 chown -R mysql /var/lib/mysqlchgrp -R mysql /var/lib/mysql
  8. MySQL 데몬을 시작하는 데 사용됩니다 service mysqld start.

150225 21:39:49 InnoDB: 데이터베이스가 정상적으로 종료되지 않았습니다! InnoDB: 충돌 복구를 시작합니다. InnoDB: .ibd 파일에서 테이블스페이스 정보를 읽는 중... InnoDB: 이중 쓰기 InnoDB: 버퍼에서 반쯤 쓰여진 데이터 페이지를 복원하는 중...

이는 충돌 후 정상적인 출력입니다. InnoDB는 이러한 경우 자동으로 복구하도록 설계되었지만 시간이 다소 걸릴 수 있습니다. 일반적으로 몇 분 정도 걸리지만 메모리에 수천 페이지의 수정된 데이터가 있고 디스크 속도가 느린 경우 충돌이 발생한 경우 몇 시간이 걸릴 수도 있습니다.

InnoDB는 대부분의 경우 데이터 손실 없이 자체적으로 복구할 수 있습니다.

복구를 시작하려면 먼저 /etc/my.cnf 내에서 'innodb_force_recovery' 지시문을 사용해야 합니다. 이에 대해 잘 모르신다면 다음 문서를 읽어보시기 바랍니다.http://dev.mysql.com/doc/refman/5.0/en/forcing-innodb-recovery.html. 익숙하신 분들은 계속 진행해주세요.

때때로 InnoDB는 약간만 손상되어 자체적으로 복구될 수 있습니다. /etc/my.cnf의 [mysqld] 섹션 아래에 있는 새 줄에 "innodb_force_recovery = #"을 추가합니다. #을 필요한 복구 규모로 바꾸십시오.규모 4를 초과하는 것을 사용하려고 시도하면 추가 손상이 발생할 위험이 매우 크며, 이는 귀하의 시간과 노력이 아무 소용이 없음을 의미합니다.이 경우 자체 복구를 시도 중이므로 1 또는 2만 사용하십시오. 새 줄을 추가한 후 MySQL 서버를 다시 시작하고 로그(/var/lib/mysql/server.hostname.com.err)를 확인하십시오. 인스턴스가 성공적으로 복구되었는지 확인합니다.

관련 정보