MySQL 데이터베이스 : 백업 어떤 형태의 일에
전제 조건은 실행하는 시스템의 성능을 방해하지 않고 작업을 완료하거나 사용자를 방해하는 일의 이상적인 시간을 찾는 것입니다. 이 메모에서 데이터베이스의 크기는 드라이브의 I/O 속도와 함께 고려해야합니다. 데이터베이스가 커질수록 기하 급수적으로 중요해질 것입니다 (드라이브의 수는 데이터베이스가 저장되어 있지 않은 대체 드라이브는 읽기와 쓰기 모두를 수행하지 않는 헤드로 인해 속도가 빨라집니다.)이 읽기 가능한 상태로 유지하려면 데이터베이스가 관리 가능한 크기 (100MB)이고 작업 환경은 오전 9 시부 터 오후 5 시까 지 일하며 실제 근무 시간이없는 스트레스 또는 기타 시스템이 없습니다.
첫 번째 단계는 루트 권한으로 로컬 컴퓨터에 로그인하는 것입니다. 루트 셸에서 MySQL 사용자는 읽기 전용 권한으로 만들어야합니다. 이렇게하려면 다음 명령을 사용하여 MySQL의 쉘을 입력
mysql -uroot -ppassword
다음, 사용자가 백업 할 필요가있는 데이터베이스에 대한 읽기 전용 권한으로 생성해야합니다. 이 경우 나중에 스크립트 나 프로세스를 사용할 경우 특정 데이터베이스를 사용자에게 할당 할 필요가 없습니다. MySQL의 쉘에서 다음 명령을, 전체 읽기 권한이있는 사용자를 작성하려면 다음을 입력하십시오 만든 MySQL 사용자와
grant SELECT on *.* TO [email protected] IDENTIFIED BY ' backuppassword';
FLUSH PRIVILEGES;
를, 그것은 MySQL의 쉘을 종료하고 종료를 사용하여 루트 쉘로 다시 떨어 안전합니다. 여기에서 백업 명령을 실행하려는 스크립트를 만들어야합니다. BASH를 사용하여 쉽게 수행 할 수 있습니다. 이 스크립트는 밤에 스크립트를 실행하기 위해 cron 작업을 사용하므로 어디에서나 저장할 수 있습니다.이 예제에서는 "backupscripts"라는 새 디렉토리에 스크립트를 배치합니다. 이 디렉토리를 만들려면 루트 쉘에서 다음 명령을 사용하십시오.
mkdir /backupscripts
또한 백업을 로컬로 저장하기 위해 디렉토리를 만들어야합니다. 이 디렉토리의 이름을 "backuplogs"로 지정합니다. 디렉토리를 작성 루트 쉘에서이 명령을 실행하면 :
useradd -c "backup user" -p backuppassword backupuser
:
mkdir /backuplogs
다음 단계는 루트 자격 증명을 사용하여 원격 시스템에 로그인하여 명령으로 "백업 사용자"를 생성하는 것
백업에 대한 디렉토리를 만듭니다
mkdir /backuplogs/
을 로그 아웃하기 전에 명령을 사용하여 나중에 참조 할 수 있도록 원격 호스트의 IP 주소를 잡아 :
ifconfig -a
eth0는 유선 네트워크 연결을위한 표준 인터페이스입니다. 이 IP_ADDR에 유의하십시오.
마지막으로 원격 서버에서 로그 아웃하고 원래 호스트로 돌아갑니다.
다음은 원격이 아닌 호스트 로컬 시스템에서 스크립트 파일을 생성합니다. 우리는 VIM을 사용할 것입니다. (nano 나 emacs 팬이라면 저를 붙들어서는 안됩니다.하지만 VIM을 사용하여 여기에서 파일을 편집하는 방법을 나열하지 않을 것입니다.) 먼저 파일을 만들고 mysqldump를 사용하십시오 , 데이터베이스를 백업하십시오. 또한 scp를 사용합니다. 데이터베이스를 만든 후 저장 용으로 파일을 압축합니다. 지시 사항을 충족 시키려면 파일을 STDOUT으로 읽으십시오. 마지막으로 7 일이 지난 파일을 확인하십시오. 그들을 제거하십시오. 이렇게하려면 스크립트가 다음과 같이 표시됩니다 우리는 암호 우리의 스크립트가 실행될 때마다 입력하라는 메시지하지 않을 수 있도록
vim /backupscripts/mysqldbbackup.sh
#!/bin/sh
# create a temporary file for the schema to be stored
BACKUPDIR = /backuplogs/
TMPFILE = tmpout.sql
CURRTIME = $(date +%Y%m%d).tgz
#backup your database
mysqldump -ubackupdbuser -pbackuppassword databasename > $BACKUPDIR$TMPFILE
#compress this file and store it locally with the current date
tar -zvcf /backuplogs/backupdb-$CURRTIME $BACKUPDIR$TMPFILE
#per instructions - cat the contents of the SQL file to STDOUT
cat $BACKUPDIR$TMPFILE
#cleanup script
# remove files older than 7 days old
find $BACKUPDIR -atime +7 -name 'backup-db-*.tgz' -exec rm {} \;
#remove the old backupdirectory from the remote server
ssh [email protected] find /backuplogs/ -name 'backup-db-*.tgz' -exec rm {} \;
#copy the current backup directory to the remote server using scp
scp -r /backuplogs/ [email protected]:/backuplogs/
#################
# End script
#################
를 장소에이 스크립트, 우리는 설정 SSH 키를해야합니다. 우리는 SSH-keygen과 명령을 통해 이것을 할 것입니다 :
ssh-keygen -t rsa
프롬프트에 암호를 입력하십시오 - 이것은 개인 키를 생성합니다. 이것을 공유하지 마십시오.
공유해야하는 파일은 공개 키이며 current_home/.ssh/id_rsa.pub 파일에 저장되어 있습니다. 다음 단계는이 공개 키를 원격 호스트로 전송하는 것입니다. 키를 가져 오려면 다음 명령을 사용하십시오.
cat current_home/.ssh/id_rsa.pub
파일에 문자열을 복사하십시오. 명령을 사용하여 원격 서버에 다음 SSH :
ssh [email protected]
비밀번호를 입력 한 다음 파일 /.ssh/authorized_keys을 편집 할 수 있습니다. id_rsa.pub 파일에서 가져온 문자열을 authorized_keys 파일에 붙여 넣습니다. 편집기를 사용하여 변경 사항을 파일에 기록하고 편집기를 종료하십시오. 원격 서버에서 로그 아웃하고 이전 ssh 명령을 사용하여 원격 서버에 다시 로그인하여 RSA 키가 작동했는지 테스트합니다. 암호를 묻지 않으면 제대로 작동합니다. 원격 서버에서 다시 로그 아웃합니다.
우리가해야 할 마지막 일은 사용자가 로그 오프 한 후 매일 실행하기 위해 cron 작업을 생성하는 것입니다. crontab을 사용하여 모든 권한 문제를 피하기 위해 현재 사용자 파일 (루트)을 편집합니다. * 참고 - 데이터 삭제, 보안 취약점 등 스크립트에 오류가있는 경우 심각한 영향을 미칠 수 있습니다. 모든 작업을 다시 확인하고 자신의 시스템을 신뢰할 수 있는지 확인하십시오. 사용 권한은 현재 서버 *에서 설정해야합니다. 현재의 crontab을 편집하려면 우리는 명령을 실행합니다 :
crontab -e
은 crontab 편집기에서 (이 기본 텍스트 편집기에서 열 수 있습니다)하지만, 우리는 12에서 매일 밤을 실행하기 위해 스크립트를 설정하는거야 : 30am.
30 0 * * * bash는 /backupscripts/mysqldbbackup.sh
이 파일을 저장하고 편집기를 종료 : 에디터에 새 줄을 입력합니다. cronjob을 제대로 실행하려면 crond 서비스를 다시 시작해야합니다. 이렇게하려면 다음 명령을 실행하십시오.
/etc/init.d/crond restart
이 같은 질문은 http://dba.stackexchange.com/에 속해 있다고 생각합니다. 마이그레이션을 진행할 예정이지만 담당자는 없습니다. http://www.Superuser.com하지만 전 데이터베이스의 특정 이후 의심 스럽다. – Jordan