시스템관리자의 쉼터 커피닉스 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

가입없이 누구나 글을 쓸 수 있습니다. 공지사항에 대한 댓글까지도..




BBS >> 설치, 운영 Q&A | 네트웍, 보안 Q&A | 일반 Q&A || 정보마당 | AWS || 자유게시판 | 구인구직 || 공지사항 | 의견제시
mysqldump를 이용한 remote 백업

 
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> *NIX / IT 정보
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
jjun



가입: 2009년 12월 10일
올린 글: 8

올리기올려짐: 2011.4.11 월, 1:11 pm    주제: mysqldump를 이용한 remote 백업 인용과 함께 답변

* 목표
MySQL 5.1.x 를 서비스중인 db 서버에서 백업용도의 db3 서버로 remote 자동백업 실시


* 사전 준비
1. 각 서버간 ssh key 인증 설정(db에서 db3로)
2. db, db3서버의 MySQL 자동 로그인 설정(~/.my.cnf)

root@db:~# cat ~/.my.cnf
코드:

[client]
user = root
host = localhost
password = 암호



* 스크립트 작성

1. DB list에서 목록을 가져와 백업서버인 db3에 Database를 생성한다.
2. mysqldump로 목록에 있는 순서대로 백업한 후, 파이프라인과 ssh를 이용하여 백업서버인 db3로 넘긴다.
3. db3에서는 ssh로 넘어오는 data를 받아 바로 백업한다.
4. 모든 결과는 log로 남긴다.

root@db:~# cat dbbackup-from-filelist.sh
코드:
export LOGFILE=/root/dbbackup4.log;
for db in $(cat /root/backuplist);
do echo "Database: $db" >> $LOGFILE;
ssh root@db3 "mysql -e 'create database IF NOT EXISTS $db'";
echo "Start time: `date '+2011%m%d_%H%M'`" >> $LOGFILE;
mysqldump -v --databases --opt $db --log-error=$LOGFILE | ssh root@db3 'mysql $db' 2>> $LOGFILE;
echo "End time: `date '+2011%m%d_%H%M'`" >> $LOGFILE;
echo "---------------------------------------------------" >> $LOGFILE; done



* 백업 대상 Database list 작성
root@db:~# cat backuplist
코드:

DB_1
DB_2
DB_3
DB_4


* 전체 DB인 경우라면
코드:

mysql -N -B -e 'show databases;' | egrep -v "information_schema|mysql" > backuplist

로 생성한다.


* 백그라운드로 실행
root@db:~# nohup dbbackup-from-filelist.sh &


* 로그 확인
root@db:~# tail -f dbbackup4.log
코드:

Database: DB_1
Start time: 20110411_0739

-- Connecting to localhost...
-- Retrieving table structure for table DB1_table1...
-- Sending SELECT query...
-- Retrieving rows...
-- Retrieving table structure for table DB1_table2...
-- Sending SELECT query...
-- Retrieving rows...
-- Disconnecting from localhost...
End time: 20110411_0926
---------------------------------------------------
Database:  DB_2
Start time: 20110411_0926
-- Connecting to localhost...
-- Retrieving table structure for table DB2_table1...



* 문제해결
코드:

mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table 'DB_1' at row: 339

와 같이 백업 중간에 에러가 나면서 중단된다면, 다음과 같이 양쪽 서버에서 명령한다. 미리 변경해주는게 좋겠다.

기본값이 60초인 timeout값을 늘려준다.

코드:

mysql -e "set global net_read_timeout=10800;"
mysql -e "set global net_write_timeout=10800;"



참고 : http://blog.naver.com/junix/80128043759

전체 1.5TB 용량의 총 303개의 MySQL Database를 원격지에 1차 백업하기 위해 작업한 내용입니다. 또한 현재 InnoDB를 MyISAM으로도 변환하고요.

더 좋은 방안을 알고 계시면 댓글 부탁드립니다 ^^
위로
사용자 정보 보기 비밀 메시지 보내기
jjun



가입: 2009년 12월 10일
올린 글: 8

올리기올려짐: 2011.10.13 목, 10:15 am    주제: mysqldump 약간 더 업그레이드 인용과 함께 답변

이번에는 파이프라인을 통해 MyISAM을 InnoDB로 변환하여 덤프를 받고, 이를 다시 파이라인을 통해 SSH로 전송하되, 암호(압축)알고리즘을 변경하여 전송속도 향상을 꽤한 방법입니다.

코드:

LOGFILE=/root/db_backup_$(date '+2011%m%d_%H%M').log;
for db in $(cat /root/db_backup.list);
do echo "Database: $db" >> $LOGFILE;
ssh root@db3 "mysql -e 'create database IF NOT EXISTS $db'";
echo "Start time: $(date '+2011%m%d_%H%M')" >> $LOGFILE;
mysqldump -v -c --add-drop-database --add-drop-table --databases --opt $db --log-error=$LOGFILE | sed -r s/MyISAM/InnoDB/g | ssh root@db3 -p 22 -c arcfour,blowfish-cbc 'mysql $db' 2>> $LOGFILE;
echo "End time: $(date '+2011%m%d_%H%M')" >> $LOGFILE;
echo "---------------------------------------------------" >> $LOGFILE; done


1.1G용량의 MyISAM(MySQL 5.1)을 remote의 InnoDB(MySQL 5.5)로 restore하는데 약 30분 소요됨. 1Gb NIC, SATA RAID 10.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> *NIX / IT 정보 시간대: GMT + 9 시간(한국)
페이지 1 중 1

 
건너뛰기:  
새로운 주제를 올릴 수 있습니다
답글을 올릴 수 있습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB © 2001, 2005 phpBB Group