ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • mysql 재시작 오류 - datadir 변경
    프로그래밍/DB 2015. 7. 15. 19:27
    반응형




    참고)  mysql 기본 파일/ 디렉토리 위치  

    로그 위치  -  /var/log/mysqld.log 

    conf 파일 위치  -   /etc/my.cnf 

    DB 디렉토리(datafile) - /var/lib/mysql




    새 서버를 받아서 예전 서버의 DB를 dump하는 중에 이상하게 오래 멈춰 있어서

    작업을 중지하고 mysql을 실행하니 아래와 같은 에러가 발생하였다.  



    shell> mysql -u root -p

    Enter password:

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)



    mysqld 서비스를 재시작해보았으나 재시작도 실패. 


    shell> service mysqld restart

    mysqld 를 정지 중:                                         [  OK  ]

    Timeout error occurred trying to start MySQL Daemon.

    mysqld (을)를 시작 중:                                     [실패]



    mysql 로그(/var/log/mysqld.log) 를 확인해보았다. 

    참고로 mysql 로그 기본 위치는 /var/log/mysqld.log 이다.  

    빈 공간이 없어 PID를 생성하지 못해 서버를 실행하지 못한다고 한다. 




    vi /var/log/mysqld.log


    150713 17:01:11 [ERROR] /usr/libexec/mysqld: Error writing file '/var/run/mysqld/mysqld.pid' (Errcode: 28)

    150713 17:01:11 [ERROR] Can't start server: can't create PID file: No space left on device




    mysqld 설정 파일을 확인해보자. 
    mysql conf 파일 기본 위치: /etc/my.cnf 
    데이터 디렉토리는 mysql 기본설정인 /var/lib/mysql 로 되어있다. 

    [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 데이터 파일이 있는 /var 폴더에 20기가 밖에 할당이 되어있지 않아 

    용량이 많은 /home/ 디렉토리에 새로 폴더를 생성하여 새로운 mysql 데이터 디렉토리로 설정하도록 변경한다. 




    shell>  df -h

    Filesystem      Size  Used Avail Use% Mounted on

    /dev/sda5       9.8G  391M  8.9G   5% /

    tmpfs           1.9G     0  1.9G   0% /dev/shm

    /dev/sda1       190M   57M  124M  32% /boot

    /dev/sda8       855G  7.4G  804G   1% /home

    /dev/sda7       4.8G   11M  4.6G   1% /tmp

    /dev/sda2        20G  1.9G   17G  10% /usr

    /dev/sda3        20G   19G     0 100% /var



    우선 새로 사용할 데이터 디렉토리를 생성하고 디렉토리 생성 및 오너 지정한다.

    datafile의 패스에 있는 디렉토리 권한도 읽기 및 쓰기 권한을 추가 한다. 

    참고로 아래와 같은 읽기 권한 오류가 발생하여 home 의 권한을 기존 700에서 755로 변경하였다.  


    150713 18:08:24 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

    150713 18:08:24 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

    150713 18:54:38 mysqld_safe Starting mysqld daemon with databases from /home/mysql

    /usr/libexec/mysqld: Table 'plugin' is read only

    150713 18:54:38 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.



    mysql 정지시키고 기존 폴더에 있던 기존 /var/lib/mysql에 있던 모든 파일을 이동한다. 



    shell> mkdir mysql
    shell> chown mysql:mysql mysql 
     
    shell> chmod -R 775 home

    shell> service mysqld stop 
    shell> mv /var/lib/mysql/* /home/mysql/



    /etc/init.d/mysqld 에서 datadir을 새로 사용할 데이터 디렉토리로 변경한다.  



    get_mysql_option mysqld datadir "/home/mysql"

    datadir="$result"





    conf파일에서  datadir 디렉토리를 새로 사용할 데이터 디렉토리로 변경한다. 



    [mysqld]

    datadir=/home/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을 다시 시작한다. 

    shell> service mysqld start 



    참고: http://woong.koong.net/index.php?MenuID=4&cat=Linux&mode=view&idx=925






    728x90
    반응형
Designed by Tistory.