mysqldump 를 database 별로 하지 않고 table 별로 받고 싶을 경우,

개별 테이블별로 명령어를 날리기 귀찮다면?


구글링을 해보니 좋은 예제가 나왔지만

완벽하게 입맛에 맞는 것은 아니어서 조금 수정한 소스.


1. Backup

   1) mysql 에서 직접 table 목록을 query 해 와서 각 테이블별로 파일로 저장해 준다. (빨간색 부분만 수정해서 쓰면 OK)

   3) mysqldump 참고 옵션

       (1) --routines : procedure 와 function 까지 함께 백업

       (2) --trigger : trigger 도 같이 백업


#!/bin/sh

DBTODUMP=mydatabase

DBUSER=myid

DBPASS=mypassword

SQL="SET group_concat_max_len = 10240;"

SQL="${SQL} SELECT GROUP_CONCAT(table_name separator ' ')"

SQL="${SQL} FROM information_schema.tables WHERE table_schema='${DBTODUMP}'"

#SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"

TBLIST=`/usr/local/mysql/bin/mysql -u${DBUSER} -p${DBPASS} -AN -e"${SQL}"`

for curtable in $TBLIST

do

  echo $curtable

  /usr/local/mysql/bin/mysqldump -u${DBUSER} -p${DBPASS} --routines ${DBTODUMP} ${curtable} > tbl_${curtable}.sql

#  break

done 



2. Restore

   1) 각 파일별로 저장된 테이블 파일 목록을 읽어와서 Restore 한다.

   2) 약간의 시간 텀(10초)을 두고 loop


#!/bin/sh

DBTODUMP=mydatabase

DBUSER=myid

DBPASS=mypassword

TBLIST=`ls tbl_*.sql`

for curfile in $TBLIST

do

  echo $curfile

  sleep 10

  mysql -u${DBUSER} -p${DBPASS} ${DBTODUMP} < ${curfile}

#  break

done 




Posted by 얼랄라