CentOS 7에서 MySQL 데이터 디렉토리를 새 위치로 변경하는 방법
소개
데이터베이스는 시간이 지남에 따라 증가하며 때로는 파일 시스템의 공간보다 커집니다. 나머지 운영 체제와 동일한 파티션에 있는 경우에도 I/O 경합이 발생할 수 있습니다. RAID, 네트워크 블록 스토리지 및 기타 장치는 중복성 및 기타 바람직한 기능을 제공할 수 있습니다. 더 많은 공간을 추가하거나, 성능을 최적화하는 방법을 평가하거나, 다른 스토리지 기능을 활용하려고 할 때 이 튜토리얼은 MySQL의 데이터 디렉토리를 재배치하는 과정을 안내합니다.
전제 조건
이 가이드를 완료하려면 다음이 필요합니다.
sudo
권한이 있고 MySQL이 설치된 루트가 아닌 사용자가 있는 CentOS 7 서버. CentOS 7에 MySQL을 설치하는 방법 가이드에서 이러한 권한을 가진 사용자를 설정하는 방법에 대해 자세히 알아볼 수 있습니다.
이 예에서는 데이터를 /mnt/volume-nyc1-01
에 마운트된 블록 스토리지 장치로 이동합니다. DigitalOcean에서 Block Storage를 사용하는 방법 가이드에서 설정 방법을 배울 수 있습니다.
어떤 기본 스토리지를 사용하든 이 가이드는 데이터 디렉터리를 새 위치로 이동하는 데 도움이 될 수 있습니다.
1단계 - MySQL 데이터 디렉토리 이동
MySQL의 데이터 디렉터리 이동을 준비하기 위해 관리 자격 증명을 사용하여 대화형 MySQL 세션을 시작하여 현재 위치를 확인합니다.
- mysql -u root -p
프롬프트가 표시되면 MySQL 루트 비밀번호를 제공하십시오. 그런 다음 MySQL 프롬프트에서 데이터 디렉터리를 선택합니다.
- select @@datadir;
Output+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)
이 출력은 MySQL이 기본 데이터 디렉터리인 /var/lib/mysql/,
을 사용하도록 구성되어 있으므로 이 디렉터리를 이동해야 함을 확인합니다. 확인했으면 exit
를 입력하고 "ENTER\를 눌러 모니터를 종료합니다.
- exit
데이터의 무결성을 보장하기 위해 실제로 데이터 디렉토리를 변경하기 전에 MySQL을 종료합니다.
- sudo systemctl stop mysqld
systemctl
은 모든 서비스 관리 명령의 결과를 표시하지 않으므로 성공했는지 확인하려면 다음 명령을 사용하십시오.
- sudo systemctl status mysqld
출력의 마지막 줄에 서버가 중지되었다고 표시되면 종료된 것입니다.
Output. . .
Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.
이제 서버가 종료되었으므로 rsync
를 사용하여 기존 데이터베이스 디렉토리를 새 위치에 복사합니다. -a
플래그를 사용하면 권한 및 기타 디렉토리 속성이 유지되는 반면, -v
는 자세한 출력을 제공하므로 진행 상황을 확인할 수 있습니다.
참고: 탭 완성을 사용하는 경우 추가될 수 있는 디렉토리에 후행 슬래시가 없는지 확인하십시오. 뒤에 슬래시가 있으면 rsync
는 디렉토리의 내용을 포함하는 mysql
디렉토리로 전송하는 대신 마운트 지점으로 덤프합니다.
- sudo rsync -av /var/lib/mysql /mnt/volume-nyc1-01
rsync
가 완료되면 현재 폴더의 이름을 .bak 확장자로 변경하고 이동이 성공했음을 확인할 때까지 유지합니다. 이름을 바꾸면 새 위치와 이전 위치 모두에 있는 파일에서 발생할 수 있는 혼동을 피할 수 있습니다.
- sudo mv /var/lib/mysql /var/lib/mysql.bak
이제 구성에 관심을 돌릴 준비가 되었습니다.
2단계 - 새 데이터 위치 지정
MySQL에는 구성 값을 재정의하는 여러 가지 방법이 있습니다. 기본적으로 datadir
은 /etc/my.cnf
파일에서 /var/lib/mysql
로 설정됩니다. 새 데이터 디렉터리를 반영하도록 이 파일을 편집합니다.
- sudo vi /etc/my.cnf
[mysqld]
블록에서 datadir=
로 시작하는 행을 찾으십시오. 이 행은 여러 주석이 있는 블록 제목과 구분됩니다. 새 위치를 반영하도록 다음 경로를 변경합니다. 또한 소켓은 이전에 데이터 디렉토리에 있었으므로 새 위치로 업데이트해야 합니다.
[mysqld]
. . .
datadir=/mnt/volume-nyc1-01/mysql
socket=/mnt/volume-nyc1-01/mysql/mysql.sock
. . .
기존 줄을 업데이트한 후 mysql
클라이언트에 대한 구성을 추가해야 합니다. 파일 하단에 다음 설정을 삽입하여 [mysqld]
블록의 지시문을 분할하지 않도록 합니다.
[client]
port=3306
socket=/mnt/volume-nyc1-01/mysql/mysql.sock
완료되면 ESCAPE
를 누른 다음 :wq!
를 입력하여 파일을 저장하고 종료합니다.
3단계 - MySQL 재시작
이제 새 위치를 사용하도록 구성을 업데이트했으므로 MySQL을 시작하고 작업을 확인할 준비가 되었습니다.
- sudo systemctl start mysqld
- sudo systemctl status mysqld
새 데이터 디렉토리가 실제로 사용 중인지 확인하려면 MySQL 모니터를 시작하십시오.
- mysql -u root -p
데이터 디렉터리의 값을 다시 확인합니다.
- select @@datadir;
Output+----------------------------+
| @@datadir |
+----------------------------+
| /mnt/volume-nyc1-01/mysql/ |
+----------------------------+
1 row in set (0.01 sec)
이제 MySQL을 다시 시작하고 새 위치를 사용하고 있음을 확인했으므로 데이터베이스가 완전히 작동하는지 확인하십시오. 기존 데이터의 무결성을 확인한 후에는 sudo rm -Rf /var/lib/mysql.bak
를 사용하여 백업 데이터 디렉토리를 제거할 수 있습니다.
결론
이 자습서에서는 MySQL의 데이터 디렉터리를 새 위치로 이동하고 조정을 수용하도록 SELinux를 업데이트했습니다. 우리는 Block Storage 장치를 사용하고 있었지만 여기에 있는 지침은 기본 기술에 관계없이 데이터 디렉토리의 위치를 재정의하는 데 적합해야 합니다.
MySQL의 데이터 디렉토리 관리에 대한 자세한 내용은 공식 MySQL 문서에서 다음 섹션을 참조하십시오.
- MySQL 데이터 디렉토리
- 여러 데이터 디렉토리 설정