MySQL 데이터 경로 변경하는 방법

MySQL의 데이터가 저장되는 경로는 기본적으로 /var/lib/mysql에 저장이 됩니다. 하지만 다른 추가적인 HDD에 저장을 하고 싶을때는 데이터가 저장될 경로를 변경하시면 됩니다.


데이터 저장소 생성하기

/var/lib/mysql의 기존 경로를 /media/hdd/mysql로 변경하는 방법입니다. 시작을 하기 전에 mysql server를 stop을 합니다.

$ sudo service mysql stop
stop mysql Create the new directory:

새롭게 데이터가 저장될 경로를 생성합니다.

$ mkdir /media/hdd/mysql

기존의 /var/lib/mysql의 정보를 새로운 경로인 /media/hdd/mysql로 복사를 합니다.

$ cp -R /var/lib/mysql /array2/mysql


데이터 저장소 연결하기

기존의 경로인 /var/lib/mysql을 /media/hdd/mysql로 변경하는 방법입니다.

$ sudo vi /etc/mysql/my.cnf
[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3307
basedir         = /usr
#datadir                = /var/lib/mysql
datadir         = /media/hdd/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql

새롭게 저장할 폴더의 권한을 mysql:mysql로 변경을 합니다.

$ chown -R mysql:mysql /media/hdd/mysql

기존의 mysql폴더를 backup을 한 뒤에 생성한 mysql의 폴더를 기존의 mysql로 연결을 해줍니다.

$ mv /var/lib/mysql /var/lib/mysql-old
$ ln -s /media/hdd/mysql /var/lib/mysql 

AppArmor에 datadir을 등록한 뒤에, apparmor profiles을 다시 로딩을 합니다.

$ echo "alias /var/lib/mysql/ -> /your/new/datadir/," >> /etc/apparmor.d/tunables/alias
$ sudo /etc/init.d/apparmor reload

mysql서버를 재시작해주면 이제 datadir이 변경된 것을 확인할 수 있습니다.

$ sudo service mysql restart


  1. hada 2018.01.25 15:34

    기존의 /var/lib/mysql의 정보를 새로운 경로인 /media/hdd/mysql로 복사를 합니다.

    $ cp -R /var/lib/mysql /array2/mysql

    이부분에서 복사경로가 /media/hdd/mysql이게 아닌데 오타인가요????

  2. 궁금 2018.04.10 01:35

    도움이 되었습니다.

    그런데 변경된 디렉토리로 심볼릭링크를 만들었는데 굳이 my.cnf 에서 datadir 을 수정할 필요가 있나요?
    해보니 my.cnf 를 수정하지 않아도 되긴한데, 어떤 차이가 있어서 그렇게 하신건지 궁금해서 글 남겨봅니다.

    전 centos 에서 작업을 했는데, 마지막 mysql 실행시에 permission denied 오류가 발생하더군요.
    구글링 해보니 selinux 때문인데, selinux 를 permissive 시키니 정상 작동하네요.
    https://blogs.oracle.com/jsmyth/selinux-and-mysql

    감사합니다.

  3. 나그네 2019.02.08 13:07

    순서대로 진행했는데, Error가 났습니다. systemctl mysql status or journalctl -xe 확인하라고 해서 systemctl 확인했는데,

    active : failed(results : exit-code) ~~~
    process : 9377 ExecStart=/usr/sbin/mysqld --demonize --pid-file=/run/mysqld/mysqld.pid ( code=exited, status=1/FAILURE)

    ~~~~~
    Failed to start MYSQL Community Server.

    이렇게 에러가 뜨는데 혹시 무슨 문제인지 아신다면 해결책 좀 부탁드리겠습니다(비밀글로했더니 안보이네요ㅠ)

    • 쌍쌍바나나 2019.02.08 13:39 신고

      일단 mysql이 제대로 시작하는지 확인이 필요하겠네요! 설치경로가 동일한가요? 동일하게 이전에 시작이 되었던건데 경로변경하고 다시시작이 안되는거라면 전체 로그부탁드려요!

+ Recent posts