참고

rsync 기본

  • 파일 크기, 수정시간 비교해 전송한다.
    • 이 방법은 양단간에 블럭 크기, 시간 등이 다르면 실수를 발생할 수 있다.
  • --checksum 옵션은 파일 속성의 체크섬을 사용하여 좀 더 정밀하게 전송 결정을 판단할 수 있다. 단 느릴 수 있다.
  • 또한 전송할 파일 전체를 전송하지 않고 chunk 단위로 나누고 각 chunk의 checksum을 계산해 전송한다.
  • 즉 incremental 전송을 할 수 있다.

주요 옵션:

  • a 복사 파일의 속성값들을 유지한다. (권한, 심볼릭링크 등)
  • v : 복사 항목을 출력한다.
  • z : 압축을 하여 전송함으로서 대역폭 및 시간을 절약한다.
  • h : 진행 결과를 보기좋게 출력한다.

패턴 포함

$ rsync -zarv –prune-empty-dirs –include=”/“ –include=”.pdf” –exclude=”*” “$from” “$to”

패턴 무시

rsync -Paz –exclude /Downloads –exclude ‘/Pictures’ –exclude .cache
/home/chris/ admin@192.168.1.65:LinuxHome

무시 파일 목록

rsync -Paz –exclude-from ‘rsync-exclude.txt’ / admin@192.168.1.65:`

symbolic link 처리Link to symbolic link 처리
심블릭 링크의 경우 link 로 처리(–link)하거나 원본을 따라가서 원본을 복사(-L), 또는 제외(–no-links)하는 3가지 옵션이 있다.

링크

rsync -avz –link –progress lesstif@example.com:/home/lesstif/data /home/lesstif/backup/

참조하는 원본 복사

rsync -avz -L –progress lesstif@example.com:/home/lesstif/data /home/lesstif/backup/

파일이 존재할 경우 덮어쓰기(overwrite)
rsync 는 파일이 목적지에 존재할 경우 생성 시간과 크기를 비교해서 동일할 경우 건너뜀.

-I, –ignore-times 옵션을 주면 생성 시간을 확인하지 않으므로 덮어쓰기와 동일한 효과 발생

rsync -avz -I –progress lesstif@example.com:/home/lesstif/data /home/lesstif/backup/

모두 삭제

삭제$ mkdir empty빈 디렉터리 생성$ rsync -a –delete ./empty/ ./destination/destination 디렉터리를 empty 디렉터리와 동기화한다.empty가 비어 있으므로 destination 디렉터리 안의 모든 내용은 삭제된다.디렉터리를 비운후 디텍터리로 날리려면 아래와 같이 센스를 발휘하자…$ rsync -a –delete ./empty/ ./destination/ ; rm -rf destination참고자료- http://www.joinc.co.kr/w/Site/Tip/Rsync

MariaDb 10 이전하기

기존 MariaDB 10 에서 다른 서버로 데이터/사용자 등을 이전하기. 이전은 2가지 방법을 제시한다.

  1. 데이터베이스 덤프만 이전: mysqldump 이용
  2. 데이터베이스 데이터 폴더 복제: rsync 이용

준비

  1. 기존서버: 현재 운영중인 mariadb 데이터베이스
  2. 대상서버: 새로 설치한 mariadb 데이터베이스

양쪽 서버의 mariadb 를 모두 종료한다.

1
2
3
4
5
$ systemctl stop mariadb

OR

$ systemctl stop mysql

데이터베이스 덤프만 이전

데이터베이스 시스템의 데이터베이스를 덤프를 통해서 백업하고 리스토어한다.

- 기존 데이터베이스 덤프

모든 데이터베이스를 덤프해서 사용.

1
$ mysqldump -u [user] -p --all-databases > all_databases.sql

지정한 데이터베이스만 덤프하려면

1
mysqldump -u root -p --opt [database name] > database_name.sql

덤프 후에 덤프 파일을 대상 서버에 이전한다.

1
2
$ scp all_databases.sql user@192.168.1.10:~/
$ scp database_name.sql user@192.168.1.10:~/

- 대상 서버에서 갱신

덤프 파일을 데이터베이스에 리스토어 한다.

1
2
$ mariadb -u [user] -p --all-databases < all_databases.sql  # 모든 데이터베이스
$ mariadb -u [user] -p newdatabase < database_name.sql # 단일 파일

덤프 파일을 리스토어 한 후에 접속해서 데이터베이스가 들어 있는지 확인.

1
2
$ mysql -u user -p
> show databases;

대상 서버에 사용자 허용 범위 설정

1
2
3
4
> SELECT User, Host FROM mysql.user WHERE Host <> 'localhost';


> SELECT User, Host FROM mysql.user WHERE Host <> 'localhost';
1
2
> GRANT ALL PRIVILEGES ON *.* TO 'user'@'192.168.1.%' 
IDENTIFIED BY 'password' WITH GRANT OPTION;

데이터베이스, 사용자와 권한을 모두 옮기기

기존 데이터베이스 서버의 데이터베이스, 사용자, 권한과 데이터 구조 등을 모두 새 서버에 이전하려고 하면 데이터베이스 시스템이 다루고 있는 모든 파일 시스템을 대상 서버에 복제를 하면 된다. 보통 rsync 를 통해서 모든 파일을 소스에서 타겟 서버로 이전을 한다.

  1. 대상서버 데이터 폴더 준비
  2. 기존서버에서 rsync 로 대상서버로 데이터 폴더 전송
  3. 대상서버 mariadb 종료 및 my.cnf 에 데이터 폴더 위치 확인
  4. 대상서버 데이터 폴더 권한을 mysql 로 변경

1. 대상 서버 데이터 폴더와 복사

옮기는 서버가 192.168.1.10 이고 사용자 계정 user 를 사용한다고 가정하자.

기존서버에서 mariadb 를 종료한다.

1
$ susdo systemctl stop mariadb

먼저 대상서버의 data 폴더를 준비하고 사용자 계정 user 가 사용할 수 있게 한다.

1
2
$ sudo mkdir -p /data/maria_db
$ sudo chown user:user /data/maria_db

2. 기존서버에서 대상서버로 데이터 폴더 복제

기존서버에서 mariadb 를 종료한다.

1
$ susdo systemctl stop mariadb

기존서버 데이터 폴더를 대상서버로 모두 복제한다.

1
$ rsync -avz /var/lib/mysql/* user@192.168.1.10:/data/maria_db/ 

3. 대상서버 폴더 권한 및 시작

1
$ sudo chown mysql:mysql -R /data/maria_db

/etc/mysql/my.cnf 의 데이터 폴더 위치를 조정한다.

mariadb 를 재시작한다.

1
$ susdo systemctl start mariadb

에러가 없이 잘 시작되면 데이터 폴더 이전이 잘 된것으로 보인다.

4. 확인

클라이언트로 mariadb 에 root 계정으로 접속해 본다. 이 계정의 비밀번호는 이전서버의 root 계정과 비밀번호일 것이다.

1
$ mariadb -u root -p

기존 서버의 데이터베이스 계정 student 가 있다고 가정하고 클라이언트로 접속해 본다.

1
$ mariadb -u student -p