MySQL8.4 LTS - data 디렉토리 변경 (Ubuntu)

data 폴더 위치를 변경해 이동한다.

  • rsync 를 사용해서 복사한다.

위치 이동

my.cnf 에 있는 기본 디렉토리를 /data 폴더로 변경하고 적용한다.

  1. 기본 data 디레토리 확인

my.cnf 에서 datadir 로 지정된 항목을 찾아 보자.

1
2
~$ grep datadir /etc/mysql/mysql.conf.d/mysqld.conf
/etc/mysql/mysql.conf.d//mysqld.conf:#datadir = /var/lib/mysql

기본으로 Ubuntu 종류에서는 /var/lib/mysql 를 기본 데이터 디렉토리로 지정하고 있다.

  1. data 디렉토리를 /data/mysql 로 변경한다.

mysqld.conf 를 수정해서 /data로 변경하자

1
2
3
4
5
[mysqld]
#datadir = /var/lib/mysql
socket = /data/mysql/mysqld.sock
datadir = /data/mysql
log-error = /var/log/mysql/error.log

mysql.conf

1
2
[client]
socket = /data/mysql/mysqld.sock
  1. data 폴더 권한

mysqld / mariadbd 데몬은 mysql 사용자, mysql 그룹으로 사용권이 실행되고 있다. 데이터베이스에서 접근하는 모든 자원(폴더, 파일, 로그 등등)은 mysql 사용자로 접근이 가는해야 한다. 그래서 /data 디렉토리 권한을 변경한다.

mysql 사용자와 그룹 확인한다.

1
2
3
4
5
$ grep mysql /etc/passwd
mysql:x:111:117:MySQL Server,,,:/nonexistent:/bin/false

$ grep mysql /etc/group
mysql:x:117:

소유권을 mysql 사용자로 변경한다.

1
2
3
4
5
$ sudo chown -R mysql:mysql /data/mysql
[sudo] 암호:
$ ls -al /data/mysql
drwxr-xr-x 3 mysql mysql 4096 5월 6 22:35 .
drwxr-xr-x 20 root root 4096 5월 6 17:15 ..
  1. data 이동

rsync 를 사용해서 /var/lib/mysql 데이터를 /data 아래로 복사한다.

1
$ sudo rsync -avzph /var/lib/mysql/ /data/mysql/
  1. apparmor 변경

Ubuntu 24.04 는 apparmor 를 실행하고 있다. mysql 관련 권한을 지정해 주어야 한다.

1
2
3
4
5
# Allow data dir access
# /var/lib/mysql/ r,
# /var/lib/mysql/** rwk,
/data/mysql/ r,
/data/mysql/** rwk,
1
$ sudo systemctl restart apparmor
  1. mysqld 데몬을 재시작하고 확인한다.
1
2
3
4
$ sudo systemctl restart mysql
$ sudo systemctl status mysql

● mariadb.service - MariaDB 10.11.2 database server

데이터베이스에 접속해 데이터를 확인해 보자. @@datadir 환경변수를 출력해서 /data 가 출력되면 my.cnf 의 설정이 잘 구성된 상태를 확인할 수 있다.

1
2
3
4
5
6
7
8
$ sudo mysql -u root -p

> select @@datadir;
+-----------+
| @@datadir |
+-----------+
| /data/ |
+-----------+

rsync 로 복사한 실제 데이터들은 각 스키마에서 확인해 보자.

mysql client 접속시 다음 에러가 발생해


ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)


사용자와 bind

1
2
[mysqld]
bind-address = 0.0.0.0

mysql>
mysql> create user ‘root‘@’%’ identified by ‘rkdxo!0615’;
Query OK, 0 rows affected (0.36 sec)

mysql> grant privileges on . to ‘root‘@’%’;
ERROR 1149 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
mysql> grant all privileges on . to ‘root‘@’%’;
Query OK, 0 rows affected (0.11 sec)

mysql>
mysql>
mysql> flush privileges;

MySQL8.4 LTS - data 디렉토리 변경 (Ubuntu)

https://thinkbee.github.io/mysql8-install-datadir-8e465f35d820/

Author

Gangtai Goh

Posted on

2025-09-07

Updated on

2025-09-07

Licensed under