안녕하세요 이번글에서는 mysql의 소켓, 데이터 위치 변경 방법에 대해 작성하겠습니다.
mysql을 설치후 별도의 설정을 하지 않았다면 소켓, 데이터의 위치는 기본적으로 /var/lib/mysql/ 에 위치하게 됩니다.
해당 위치는 너무 잘 알려져 있기 때문에 보안상 좋지 않습니다.
[ 테스트 환경 ]
OS : CentOS 7
DB : MariaDB 5.5.68
DB 설치
모든 접속 허용은 보안상 좋지 않기 때문에 bind-address = 127.0.0.1 설정을 통해 로컬에서만 접속이 가능하게 끔 설정하겠습니다.
로컬 접속만 허용
# vi /etc/my.cnf
mysqld 카테고리에 bind-address = 127.0.0.1 을 설정하신후 DB재시작을 통해 로컬 접속으로 변경하실 수 있습니다.
현재 소캣,데이터 위치 입니다. 아래의 쿼리로 확인 가능합니다.
해당 위치들을 변경후 다시 접속해보겠습니다.
기존 /var/lib/mysql -> 변경 /srv/mysql
# cp -arp /var/lib/mysql /srv/
소캣 , 데이터 위치 변경
# vi /etc/my.cnf
※변경시 주의사항 mysql 상위 디렉토리에는 mysql 유저와 그룹 권한이 있어야 합니다.
보안상 권장되지는 않지만 예시를 보여드리자면 아래처럼 root 디렉토리 아래에 mysql 디렉토리를 위치시킨다면
DB가 시작되지 않을것입니다.
# cp -arp /var/lib/mysql /root/
이 에러가 뜨는 이유는 권한 때문입니다. root의 권한이 750 이기 때문에 유저 root 그룹 root 말고는 접근을 할수가 없는 것입니다.
만약 755로 권한을 변경해주었다면 정상적으로 실행이 될것입니다. 아래의 사진과 같이 권한 변경후 정상적으로 시작되는 모습입니다.
다른방법으로는 유저와 그룹을 mysql로 변경해줘도 실행이 될테지만 해당 디렉토리의 유저와 그룹을 변경해주는일은 심사숙고 후에 변경해줘야 합니다. 이처럼 소켓,데이터 의 위치를 변경하고자 할때는 위치와 권한 모두가 올바른지 확인후 변경해야 합니다.
그럼 다시 원래 주제로 돌아와서 기존 /var/lib/mysql -> 변경 /srv/mysql 로 변경이 된 상태이며 my.cnf 파일에서도 수정 작업을 마쳤습니다.
이후에 mysql -u root -p 로 로그인시
# mysql -u root -p
소캣의 위치가 다르다며 로그인이 되지 않는 모습입니다. 해당 해결 방법으로는 2가지가 있습니다.
-
임시 – 1회 로그인에 한하여 -S 옵션을 통해 소캣위치를 지정합니다.
-
영구 – my,cnf 파일에서 로그인시 기본적으로 불러올 소캣 위치를 변경합니다.
-
임시
아래는 -S 옵션 사용 예시 입니다.
2. 영구
# vi /etc/my.cnf
클라이언트에서 접속시 소캣 위치를 지정하는 방식입니다.
!주의 my.cnf 파일 변경시 DB재시작을 해줘야 적용됩니다.
DB 재시작
# systemctl restart mariadb
평소대로 로그인시 정상 로그인이 됩니다. 클라이언트 로그인시 소캣 경로가 /srv/mysql/mysql.sock 로 변경되었기 때문입니다.
아래는 소캣,데이터 가 변경된 사진입니다. 이제부터 데이터가 쌓일시 /srv/mysql/ 경로에 쌓이게 됩니다.
실제 데이터가 해당 위치에 쌓이는지 테스트를 진행해 보겠습니다.
테스트 테이블을 하나 생성하였습니다.
데이터를 한개 삽입하였습니다.
아래와 같이 데이터가 쌓인것을 확인 할 수 있습니다.
이상입니다.