MySQL mysqldump 전용 계정 만들기



mysqldump 명령어 사용시 사용할 계정에 최소한의 필요한 권한만으로 계정을 만들어 보겠습니다.


우선 select 는 필수적으로 권한이 있어야 합니다.


그리고 show databases, 테이블락이 필요하다면 lock tables 도 필요합니다.


이렇게 세가지 권한으로 계정을 생성하면 됩니다.


GRANT SELECT, SHOW DATABASES, LOCK TABLES ON *.* TO '유저아이디'@'localhost' IDENTIFIED BY '비밀번호'


flush privileges 는 따로 안해줘도 됩니다.



이 정도 권한이면 굳이 root 계정이 아닌 덤프 전용 계정으로 백업을 진행하여도 되지 않을까 싶습니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL DB 데이터 덤프 쉘스크립트



마스터 서버의 DB data 를 슬래이브 서버에 백업하는 스크립트을 작성하고 크론에 등록하는 방법입니다.


실행 위치는 Slave 서버 기준입니다.


Master 에서 실행한다면 호스트 부분을 수정하여야 합니다.


--databases 옵션으로 데이터베이스명을 나열해서 백업할 수도 있겠지만 시간이 너무 올래걸리므로 아래처럼 분리를 해보았습니다.


#!/bin/sh


M_HOST="example.com"

M_USER="root"

M_PASS="password"

S_HOST="localhost"

S_USER="root"

S_PASS="password"

DBNAMES="

database1

database2

database3

"


for DBNAME in $DBNAMES

do

echo "mysqldump -h$M_HOST -u$M_USER -p$M_PASS act --opt | gzip > $DBNAME.sql.gz"

echo "gunzip < $DBNAME.sql.gz | mysql -h$S_HOST -u$S_USER -p$S_PASS $DBNAME"

done


위 파일을 /root/bin/dbdump.sh 로 저장합니다.


# chmod 700 /root/bin/dbdump.sh



크론에 등록해 놓으면 편하겠지요~


# vi /etc/cron.d/dbdump


30 03 * * * root /root/bin/dbdump.sh


매일 새벽 3시 30분에 실행한다는 의미입니다.



그리고 로컬이 아닌 다른 IP 에서 접근이 가능하게 하려면 미리 권한을 주어야 합니다.


GRANT ALL PRIVILEGES ON *.* TO 'root'@'접속허용아이피' identified by '비밀번호';


접속허용아이피에 % 를 주면 모든 ip에 대해서 허용한다는 의미입니다.


그리고 root 계정 보다는 다른 이름으로 만드는게 좋을 것 같습니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL mysqldump where option 백업받기



DB 데이터를 덤프 받을 때 특정 조건을 걸어서 백업을 받을 수 있습니다.


# mysqldump -u유저계정 -p비밀번호 database명 --where="조건식" > 덤프받을파일명


보통 rows index 나 날짜 컬럼을 조건으로 걸 수가 있습니다.


예)


--where="idx>10000"


또는


-w"idx>10000"



이렇게 조건을 걸어서 백업이 가능합니다.


테이블 마다 조건이 다르면 테이블 마다 조건을 걸어야 하지만,


테이블 마다 항상 공통적인 컬럼이 있다면 편하게 조건 백업을 받으면 됩니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL mysqldump 시 특정테이블만 백업 받는 방법



DB 테이블 덤프할 때 table_* 이런형태의 asterisk 별표를 사용한 특정 테이블만 받고 싶을때 사용할 수 있습니다.


방법은 여러가지가 있지만 아래처럼 하면 간단하게 백업을 받을 수 있습니다.


# mysqldump -u유저아이디 -p비밀번호 dbname table_* > backup.sql

mysqldump: Couldn't find table: "table_*"


이렇게 하면 에러가 나지요~



# mysqldump -u유저아이디 -p비밀번호 dbname $(mysql -u유저아이디 -p비밀번호 dbname -Bse "show tables like 'test_%'") > backup.sql


이런 방법으로 백업이 가능합니다.



$() 변수로 받는다는 의미입니다.


# mysql -u유저아이디 -p비밀번호 dbname -Bse "show tables like 'test_%'"


괄호 안에 있는 내용을 먼저 테스트 해보고 사용하면 됩니다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,