MariaDb 10/ MySQL 8 - data 디렉토리 변경 (Ubuntu)

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

  • 여기서는 MariaDB 를 사용하고 있다.
  • rsync 를 사용해서 복사한다.

위치 이동

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

  1. 기본 data 디레토리 확인

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

1
2
~$ grep datadir /etc/mysql/mariadb.conf.d/*
/etc/mysql/mariadb.conf.d/50-server.cnf:#datadir = /var/lib/mysql

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

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

my.cnf 를 수정해서 /data로 변경하자

1
~$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
  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
[sudo] 암호:
$ ls -al /data
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/
  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 로 복사한 실제 데이터들은 각 스키마에서 확인해 보자.

[git] Sparse Checkout

git checkout 은 보통 브랜치의 모든 구조를 가져온다. checkout 은 다음 링크 설명을 보고 이해해 보자,

Sparse checkout 은 checkout 전체 대상중 일부 만을 checkout 할 수 있다.

git sparse checkout 기능은 Git 2.25.0 이상부터 사용이 가능하다.

Sparse checkout 이해

git 블로그 글 Bring your monorepo down to size with sparse-checkout 의 그림 설명을 빌려오자.

다음 원격 레포지토리가 있다고 가정하자

전체 디렉토리 중에서 client/android 부분만 checkout 을 하고 싶다.

다음 같이 클론을 하고 sparse-checkout 을 초기화 한 후에 대상인 client/android 디렉토리를 sparse-checkout 하면 해당 디렉토리만 다운로드한다.

1
2
3
4
git clone https://github.com/tensorflow/examples.git
cd examples
git sparse-checkout init --cone
git sparse-checkout set client/android

sparse-checkout 을 수행하면 해당 디렉토리 컨텐츠만 남게 된다.

사용 방법

사용시 몇가지 사례가 있다.

방법1

첫번째 방법으로 git 레포지토리를 pull로 clone 한 후에 sparse-checkout 대상 파일/폴더를 지정하고 sparse-checkout 을 수행한다.

1
git clone https://github.com/tensorflow/examples.git

spase-checkout 을 수행하기 위해서 초기화 하고 대상이 되는 파일/폴더를 지정한다.

1
2
3
4
cd examples
git config core.sparseCheckout true
git sparse-checkout set lite/examples/object_detection/android_play_services
git pull origin master

희소 체크아웃을 사용하도록 git 인스턴스를 구성하면 지정한 파일/폴더만 남게 된다.

저장소에서 config core.sparseCheckout true 대신 git sparse-checkout init --cone 를 이용해도 된다.

방법2

레포지토리를 클론하지 않고 클라이언트에서 초기화 후 sparse-checkout 으로 대상 디렉토리를 지정한 후에 pull 을 수행한다.

원격 레포지토리를 지정한다.

1
2
3
4
mkdir <repo>
cd <repo>
git init
git remote add -f origin <url>

spase-checkout 을 수행하기 위해서 초기화 하고 대상이 되는 파일/폴더를 set 으로 지정한다. 여러 파일/디렉토리를 추가할 수 있다.

1
2
git config core.sparseCheckout true
git sparse-checkout set lite/examples/object_detection/android

pull 을 수행한다.

1
2
3
4
git pull origin master
From https://github.com/tensorflow/examples
* branch master -> FETCH_HEAD
Updating files: 100% (61/61), done.

저장소에서 config core.sparseCheckout true 대신 git sparse-checkout init --cone 를 이용해도 된다.

방법3

방법2와 동일하지만 설정 파일을 통해서 수행하는 점만 다르다.

1
2
3
4
mkdir <repo>
cd <repo>
git init
git remote add -f origin <url>

원격 레포지토리를 지정하고 git 설정에 추가한다.

1
git config core.sparseCheckout true

checkout 하려는 파일과 폴더를 sparse-checkout 파일에 추가한다. 여러 파일/디렉토리를 추가할 수 있다.

1
2
echo "lite/examples/object_detection/android" >> .git/info/sparse-checkout
echo "lite/examples/bert_qa/android" >> .git/info/sparse-checkout

pull 을 수행한다.

1
git pull origin master

함께 보면 유용한 git 명령

간단하게 빌드/테스트 를 하기위해 저장소의 특정 폴더만 clone 할 때 Swallow Clone 을 함께 이용해도 좋을 것 이다.

[git] Swallow clone



- 참고