리눅스서버

[문제해결 일지] systemctl start mariadb 실행시 Failed to issue method call: No such file or directory. 에러


1. 발생

centos 7부터는 서비스를 실행할때 systemctl 명령을 사용하게 된다. 하지만 mariadb의 서비스를 실행시킬때는 에러가 난다. 


# systemctl start mariadb

Failed to issue method call: No such file or directory.


찾아본 결과 일반적인 경우에서는 이런에러가 나오지않고, 정상적으로 실행된다고 했다. 하지만 내 서버에서는 이 에러가 나온다. 구글링해봐도 증상은 비슷한데.. 내 경우와 다른경우가 많았다. 마땅한 해결책은 나오지않았다.


더군다나 재설치를 몇번이나 재시도해봐도 결과는 같았다.



2. 원인 분석

Failed to issue method call: No such file or directory. 이 에러의 원인은 간단했다. mariadb 서비스파일이 마땅히 있어야 할 곳에 없었기때문이다.


systemd에서 관리하는 서비스파일들은 모두 /usr/lib/systemd/system 디렉토리에 모여있었다. 일반적으로 프로그램 설치할때 /usr/lib/systemd/system 디렉토리에 자신의 서비스파일을 복사하는 과정이 있다. 하지만 내 경우의 mariadb 설치에는 그 과정이 없었나보다.


그런데 엉뚱하게도 /etc/rc.d/init.d/mysql 파일이 발견되었다. /etc/rc.d/init.d 디렉토리는 centos 7 이전에 사용했던 init의 서비스 디렉토리였다. centos 7부터는 systemd로 대체 되긴했지만 예전에 쓰던 service 명령어로 mysql 서비스를 시작해보니까 (service start mysql) 실행되는 것이다.


그래서 내 추측은 아마 설치과정에서 centos 6으로 오인하고 파일을 잘못복사 한게 아닐까 싶다. 충분히 그럴 수 있는 것이 난 7로 새로설치를 하지않고, centos 6에서 centos 7 로 업그레이드한 사용자였기때문이다. 업그레이드 도중 무슨 문제(표시되않는)라도 발생했다면 충분히 그럴 수도 있겠다.



3. 해결

서비스파일 새로 만들어주는 수밖에 없을 것 같다.


# vi /usr/lib/systemd/system/mariadb.service


[Unit]

Description = MySQL Server

After = network.target


[Service]

Type = forking

ExecStart = /etc/rc.d/init.d/mysql start

ExecStop = /etc/rc.d/init.d/mysql stop


[Install]

WantedBy = multi-user.target


* 서비스 파일 재로드

이렇게 수동으로 서비스 파일을 만들어준다음 서비스들을 재로드한다.


# systemctl daemon-reload


chkconfig에서 제거

chkconfig에서 서비스를 시작시킬 필요없으니까 제거해줍니다.


# chkconfig --del mysql



마지막으로 서비스를 시작시키면 된다.


# systemctl start mariadb


?