웹사이트 검색

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 세션을 시작하여 현재 위치를 확인합니다.

  1. mysql -u root -p

프롬프트가 표시되면 MySQL 루트 비밀번호를 제공하십시오. 그런 다음 MySQL 프롬프트에서 데이터 디렉터리를 선택합니다.

  1. select @@datadir;
Output
+-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+ 1 row in set (0.00 sec)

이 출력은 MySQL이 기본 데이터 디렉터리인 /var/lib/mysql/,을 사용하도록 구성되어 있으므로 이 디렉터리를 이동해야 함을 확인합니다. 확인했으면 exit를 입력하고 "ENTER\를 눌러 모니터를 종료합니다.

  1. exit

데이터의 무결성을 보장하기 위해 실제로 데이터 디렉토리를 변경하기 전에 MySQL을 종료합니다.

  1. sudo systemctl stop mysqld

systemctl은 모든 서비스 관리 명령의 결과를 표시하지 않으므로 성공했는지 확인하려면 다음 명령을 사용하십시오.

  1. 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 디렉토리로 전송하는 대신 마운트 지점으로 덤프합니다.

  1. sudo rsync -av /var/lib/mysql /mnt/volume-nyc1-01

rsync가 완료되면 현재 폴더의 이름을 .bak 확장자로 변경하고 이동이 성공했음을 확인할 때까지 유지합니다. 이름을 바꾸면 새 위치와 이전 위치 모두에 있는 파일에서 발생할 수 있는 혼동을 피할 수 있습니다.

  1. sudo mv /var/lib/mysql /var/lib/mysql.bak

이제 구성에 관심을 돌릴 준비가 되었습니다.

2단계 - 새 데이터 위치 지정

MySQL에는 구성 값을 재정의하는 여러 가지 방법이 있습니다. 기본적으로 datadir/etc/my.cnf 파일에서 /var/lib/mysql로 설정됩니다. 새 데이터 디렉터리를 반영하도록 이 파일을 편집합니다.

  1. 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을 시작하고 작업을 확인할 준비가 되었습니다.

  1. sudo systemctl start mysqld
  2. sudo systemctl status mysqld

새 데이터 디렉토리가 실제로 사용 중인지 확인하려면 MySQL 모니터를 시작하십시오.

  1. mysql -u root -p

데이터 디렉터리의 값을 다시 확인합니다.

  1. 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 데이터 디렉토리
  • 여러 데이터 디렉토리 설정