MySQL를 운영하다 보면 DIsk 교체나 특정이유로 인해 데이터 디렉터리 경로를 변경하는 경우가 있습니다.
오늘은 데이터 디렉토리를 변경하는 방법에 대해 포스팅해 보겠습니다~
■ 현재 Datadir 확인
1. MYSQL 들어가서 확인
mysql> select @@datadir;
+-------------+
| @@datadir |
+-------------+
| /data/data/ |
+-------------+
1 row in set (0.00 sec)
2.ps로 확인
[root@maria ~]# ps -ef | grep mysql
root 6412 1 0 Feb20 ? 00:00:00 /bin/sh /mysql/bin/mysqld_safe --user=mysql
mysql 6959 6412 0 Feb20 ? 00:01:32 /mysql/bin/mysqld --basedir=/mysql --datadir=/data/data --plugin-dir=/mysql/lib/plugin --user=mysql --log-error=/data/log/mariadb.log --open-files-limit=8192 --pid-file=/data/log/mariadb.pid --socket=/tmp/mysql.sock
root 27554 27473 0 08:11 pts/1 00:00:00 grep --color=auto mysql
3.my.cnf 확인
[root@maria ~]# cat /etc/my.cnf | grep datadir
datadir=/data/data
■ DB Shutdown
Datadir을 변경하기 이전에 MySQL Database를 종료해야 된다.
1.mysqladmin 명령어 사용
[root@maria ~]# mysqladmin -uroot -proot shutdown
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
2.Service 등록되어있는 경우
[root@maria ~]# systemctl stop mysql.service
■ To-Be 경로 생성 및 CP
- 새로운 경로 생성과 이전 경로의 데이터를 CP 나 MV 명령어를 이용하여 이동시켜 준다.
- CP시 -pr 옵션을 사용하여 권한과 디렉터리까지 모두 복사한다.
1. Directory 생성
[root@maria ~]# mkdir -p /data/lee
[root@maria ~]# chown -R mysql.mysql /data/lee
2. CP
[root@maria ~]# cp -pr /data/data/* /data/lee/
[root@maria ~]# ls -l /data/lee
total 1115340
-rw-r----- 1 mysql mysql 56 Feb 20 16:22 auto.cnf
-rw------- 1 mysql mysql 1676 Feb 20 16:22 ca-key.pem
-rw-r--r-- 1 mysql mysql 1112 Feb 20 16:22 ca.pem
-rw-r--r-- 1 mysql mysql 1112 Feb 20 16:22 client-cert.pem
-rw------- 1 mysql mysql 1676 Feb 20 16:22 client-key.pem
-rw-r----- 1 mysql mysql 589824 Feb 20 19:53 #ib_16384_0.dblwr
-rw-r----- 1 mysql mysql 8978432 Feb 20 16:22 #ib_16384_1.dblwr
-rw-r----- 1 mysql mysql 4465 Feb 21 08:13 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Feb 21 08:13 ibdata1
-rw-r----- 1 mysql mysql 536870912 Feb 20 19:53 ib_logfile0
-rw-r----- 1 mysql mysql 536870912 Feb 20 16:22 ib_logfile1
drwxr-x--- 2 mysql mysql 6 Feb 21 08:13 #innodb_temp
drwxr-x--- 2 mysql mysql 143 Feb 20 16:22 mysql
-rw-r----- 1 mysql mysql 179 Feb 20 16:22 mysql-bin.000001
-rw-r----- 1 mysql mysql 996 Feb 20 16:26 mysql-bin.000002
-rw-r----- 1 mysql mysql 203 Feb 20 19:53 mysql-bin.000003
-rw-r----- 1 mysql mysql 179 Feb 21 08:13 mysql-bin.000004
-rw-r----- 1 mysql mysql 76 Feb 20 19:53 mysql-bin.index
-rw-r----- 1 mysql mysql 25165824 Feb 20 16:26 mysql.ibd
drwxr-x--- 2 mysql mysql 8192 Feb 20 16:22 performance_schema
-rw------- 1 mysql mysql 1680 Feb 20 16:22 private_key.pem
-rw-r--r-- 1 mysql mysql 452 Feb 20 16:22 public_key.pem
-rw-r--r-- 1 mysql mysql 1112 Feb 20 16:22 server-cert.pem
-rw------- 1 mysql mysql 1676 Feb 20 16:22 server-key.pem
drwxr-x--- 2 mysql mysql 28 Feb 20 16:22 sys
-rw-r----- 1 mysql mysql 10485760 Feb 20 16:28 undo_001
-rw-r----- 1 mysql mysql 10485760 Feb 20 16:28 undo_002
■ MySQL 환경 설정 파일 my.cnf 변경
- /etc/my.cnf 에서 datadir값을 To-Be 디렉터리로 변경
[root@maria ~]# vim /etc/my.cnf
[mysqld]
default_time_zone = '+09:00'
basedir=/mysql
datadir=/data/lee
(생략)
■ DB 재기동
[root@maria lee]# mysqld_safe --user=mysql &
[1] 30796
[root@maria lee]# 2023-02-20T23:26:50.994129Z mysqld_safe Logging to '/data/log/mariadb.log'.
2023-02-20T23:26:51.029978Z mysqld_safe Starting mysqld daemon with databases from /data/lee
■ Datadir 확인
mysql> select @@datadir;
+------------+
| @@datadir |
+------------+
| /data/lee/ |
+------------+
1 row in set (0.00 sec)