Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

Ubuntu 16.04에서 MySQL 데이터 디렉토리 위치 변경하기 (단계별 가이드)

데이터베이스가 빠르게 증가하거나 보안상의 이유로 데이터 디렉토리를 다른 위치로 옮겨야 할 때가 있습니다. 이 글에서는 Ubuntu 16.04 환경에서 MySQL 데이터 디렉토리의 위치를 변경하고, 기존 데이터베이스를 새로운 위치로 이전하는 방법을 단계별로 알아보겠습니다.

사전 준비 사항

  • sudo 권한을 가진 일반 사용자 계정이 있는 Ubuntu 서버
  • 설치되어 정상 작동 중인 MySQL
  • 데이터를 이전할 새로운 볼륨 또는 저장 공간 (본 가이드에서는 /mnt/data_vol/mysql을 새 위치로 사용하며, data_vol은 서버에 연결된 새 볼륨입니다)

현재 데이터 디렉토리 확인

작업을 시작하기 전에 먼저 현재 MySQL 데이터 디렉토리의 위치를 확인해야 합니다. MySQL에 root 계정으로 접속합니다.

$ mysql -u root -p
Output:
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 472
Server version: 5.6.30-0ubuntu0.14.04.1 (Ubuntu)
mysql>

root 비밀번호를 입력한 후, 아래 명령어로 현재 데이터 디렉토리 경로를 확인합니다.

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

출력 결과에서 확인할 수 있듯이, MySQL은 기본적으로 /var/lib/mysql을 데이터 디렉토리로 사용합니다.

MySQL 서비스 중지 및 데이터 이전

데이터 무결성을 보장하기 위해 디렉토리 변경 전에 반드시 MySQL 서비스를 중지해야 합니다. 아래 명령어로 MySQL을 중지합니다.

$ sudo systemctl stop mysql

systemctl stop 명령어는 별도의 출력 없이 실행됩니다. 서비스가 정상적으로 중지되었는지 상태를 확인합니다.

$ sudo systemctl status mysql
Output:
mysql.service - MySQL Community Server
    Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
    Active: inactive (dead) since Mon 2016-09-12 13:57:43 IST; 1s ago
    Process: 17669 ExecStartPost=/usr/share/mysql/mysql-systemd-start post (code=exited, status=0/SUCCESS)
    Process: 17668 ExecStart=/usr/sbin/mysqld (code=exited, status=0/SUCCESS)
    Main PID: 17668 (code=exited, status=0/SUCCESS)

MySQL이 완전히 중지된 것을 확인했다면, rsync를 사용하여 데이터를 새 위치로 복사합니다. -a 옵션은 파일 권한과 소유권 등 속성을 그대로 유지하며, -v 옵션은 진행 과정을 자세히 출력해 줍니다.

$ rsync -av /var/lib/mysql /mnt/data_vol/
OutPut:
sending incremental file list
mysql/
mysql/auto.cnf
mysql/debian-5.7.flag
mysql/ib_buffer_pool
mysql/ib_logfile0
mysql/ib_logfile1
mysql/ibdata1
...
sent 199,384,083 bytes received 6,858 bytes 132,927,294.00 bytes/sec
total size is 199,307,568 speedup is 1.00

rsync로 데이터 복사가 완료되면, 안전을 위해 기존 데이터 디렉토리는 백업으로 이름을 변경해 둡니다. 새 위치의 데이터가 정상 작동하는 것을 확인할 때까지 원본을 보관하는 것이 좋습니다.

$ sudo mv /var/lib/mysql /var/lib/mysql_backup

MySQL 설정 파일 수정

이제 MySQL 설정 파일에서 데이터 디렉토리 경로를 변경합니다. Ubuntu에서는 /etc/mysql/mysql.conf.d/mysqld.cnf 파일을 편집하면 됩니다.

$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

파일 내에서 datadir 항목을 찾아 새로운 경로로 수정합니다.

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /mnt/data_vol/mysql/
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking

AppArmor 별칭(Alias) 설정 변경

Ubuntu는 AppArmor 보안 모듈을 통해 MySQL이 특정 디렉토리에만 접근하도록 제한합니다. 따라서 새 데이터 디렉토리를 사용하려면 AppArmor 설정도 함께 수정해야 합니다. /etc/apparmor.d/tunables/alias 파일을 엽니다.

$ sudo vi /etc/apparmor.d/tunables/alias

파일 맨 아래에 다음 별칭 규칙을 추가합니다.

alias /var/lib/mysql/ -> /mnt/data_vol/mysql,

설정 파일 편집이 끝나면 AppArmor를 재시작하여 변경 사항을 적용합니다.

기본 데이터 디렉토리를 변경했으므로, MySQL 시작 스크립트가 정상 동작할 수 있도록 최소한의 디렉토리 구조를 생성해 줍니다.

$ sudo mkdir /var/lib/mysql/mysql -p

MySQL 재시작 및 결과 확인

모든 설정이 완료되었으니 MySQL 서비스를 다시 시작합니다.

$ sudo systemctl start mysql

서비스 상태를 확인하여 정상적으로 실행 중인지 점검합니다.

$ sudo systemctl status mysql
Output:
mysql.service - MySQL Community Server
    Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
    Active: active (running) since Mon 2016-09-12 14:17:27 IST; 23s ago
    Main PID: 18480 (mysqld)
     Tasks: 28 (limit: 512)
     Memory: 137.3M
Sep 12 14:17:27 ubuntu-16 systemd[1]: Started MySQL Community Server.

마지막으로, 데이터 디렉토리가 실제로 변경되었는지 다시 한번 확인합니다.

$ mysql -uroot -p
Output:
Enter password:
Welcome to the MySQL monitor.
mysql> select @@datadir;
+----------------------+
| @@datadir            |
+----------------------+
| /mnt/data_vol/mysql/ |
+----------------------+
1 row in set (0.00 sec)

출력 결과가 새로운 경로(/mnt/data_vol/mysql/)로 표시되면 성공입니다. 데이터베이스가 새 위치에서 정상 작동하는 것을 충분히 확인한 후에는, 더 이상 필요 없는 기존 백업 디렉토리를 삭제하여 디스크 공간을 확보할 수 있습니다.

$ sudo rm -rf /var/lib/mysql_backup

이번 가이드에서는 Ubuntu 16.04에서 MySQL 데이터 디렉토리를 새로운 위치로 이전하는 전체 과정을 살펴보았습니다. 이 방법을 활용하면 용량이 큰 별도의 볼륨으로 데이터를 옮겨 저장 공간을 확장하거나, 보안 정책에 따라 데이터 위치를 조정할 수 있습니다.