DB 크래시 체크 및 복원, 백업 및 복원

(MySQL 테이블 손상 확인 및 복구 방법)

mysql> DB 이름 사용 -> 작업할 DB 선택
mysql> 테이블명 확인 -> 확인할 테이블 확인
mysql> DB 이름 사용 -> 작업할 DB 선택
mysql> 복구 테이블 tablename -> 복구할 복구 테이블
mysql> 테이블 최적화(테이블 이름); => 최적화할 테이블 최적화

(MySQL DB 손상 확인 명령어)

mysqlcheck -u root -p –check –database dbname
mysqlcheck -u 루트 -p 데이터베이스 이름

(MySQL은 주어진 DB의 모든 테이블을 확인하고 자동 복원)
cd (MySQL_HOME)/빈
=> MySQL 설치의 bin 폴더로 홈으로 이동

./mysqlcheck -u(DB 계정) -p(비밀번호) –auto-repair(DB 이름)
=> DB의 모든 테이블 확인 및 자동 복원

(MySQL 전용 DB의 모든 테이블 최적화)
cd (MySQL_HOME)/빈
=> MySQL 설치의 bin 폴더로 홈으로 이동

./mysqlcheck -u(DB 계정) -p(비밀번호) –optimize(DB 이름)
=> 이 DB의 모든 테이블 최적화

(crontab으로 주기적 백업)
mkdir -p /루트/빈/mysql_backup.sh
chmod 755 /루트/빈/mysql_backup.sh

vi /root/bin/mysql_backup.sh
================================================== ===================
#!
/빈/배시

# 필요한 변수 지정
backup_dir=”/usr/local/backup/mysql”
암호=”1234″

date=`날짜 +%Y%m%d`
mysqlshow=”/usr/local/mysql/bin/mysqlshow”
mysqldump=”/usr/local/mysql/bin/mysqldump”

# 오래된 백업 삭제, +1 3일
/usr/bin/find $backup_dir -ctime +7 -exec rm -rf {} \;

# DB 목록 추출 db_list=`$mysqlshow -u root -p$passwd | egrep -v “데이터베이스| 정보 스키마|테스트|^\+” | awk ‘{print $2}’`

# 백업 디렉토리 생성
/bin/mkdir -p $backup_dir/$date

# 압축 1은 압축, 0은 압축하지 않음
타르=”1″

# 시작 덤프 ~
$db_list의 db_list용; 하다
$mysqldump -u 루트 -p$passwd –skip-lock-tables $db_lists > $backup_dir/ $date/$db_lists.sql
완전한

# tar가 1(압축)인 경우,
if ( $tar = ‘1’ ); 그 다음에
cd $backup_dir
/bin/tar zcvfp $backup_dir/$date.tar.gz $날짜
/빈/rm -rf $날짜
다른
출구 0
파이
================================================== ===================
– 백업 스크립트 실행 권한 부여
chmod 755 /root/bin/mysql_backup.sh

– 크론탭 설정
이것을 /etc/crontab에 추가하십시오. 백업 스크립트는 오후 11시에 실행되도록 예약되어 있습니다.


백업이 시스템에 부담을 줄 수 있으므로 아침 일찍 스크립트를 실행하는 것이 좋습니다.

vi /etc/crontab
00 23 * * * 루트 /bin/sh /root/bin/mysql.sh

– crond 데몬 재시작
# /etc/init.d/crond 재부팅

– 확인
(root@localhost mysql)#ll
총 212
drwxr-xr-x 2 루트 루트 4096 2017-09-24 23:00 ./
drwxr-xr-x 3 루트 루트 4096 2017-09-24 22:18 ../
-rw-r–r– 1 루트 루트 207785 2017-09-24 23:00 20170924.tar.gz
23:00에 MySQL 백업이 생성된 것을 확인할 수 있습니다.


================================================== ===================

특정 DB 백업/복구 방법 – 논리적 백업/복구

(MySQL 백업)
mysqldump -u root -p 데이터베이스 이름 > backupfilename.sql

전체 데이터베이스 백업
mysqldump -u (사용자 ID) -p –all-databases > (덤프 이름).sql

특정 데이터베이스 백업
mysqldump -u(사용자 ID) -p –databases(dbname) > (dumpname).sql

특정 테이블 백업
mysqldump -u (userid) -p (dbname) (tablename) > (dumpname).sql
mysqldump -u(사용자 ID) -p -B dbname –tables 테이블 이름 1 테이블 이름 2 > (덤프 이름).sql

문자 집합 옵션으로 백업
mysqldump -u root -p –default-character-set=euckr dbname > filename.sql
(euckr, utf8 등이 있습니다.

)

테이블 구조만 백업
mysqldump -u root -p –no-data dbname > 파일 이름.sql

XML 파일로 백업
mysqldump -u 루트 -p –xml 데이터베이스 이름 > 파일 이름.sql

(MySQL 복구)
전체 데이터베이스 복구
mysql -u (사용자 ID) -p < (덤프 이름).sql

특정 데이터베이스 복원
mysql -u (사용자 ID) -p (dbname) < (dumpname).sql

특정 테이블 복원
mysql -u (사용자 ID) -p (dbname) < (tabledumpname).sql

문자 집합 옵션을 사용하여 백업 복원
mysqldump -u root -p –default-character-set=euckr dbname < 파일 이름.sql
(euckr, utf8 등이 있습니다.

)

(소스로 복원)
백업된 파일이 있는 디렉토리로 변경
예) cd /usr/local/backup
ls
alldatabase.sql(모두)
testdatabase.sql(데이터베이스 1개)
tabledatabase.sql(1개의 테이블 데이터)

mysql -u 루트 -p

연결 후
mysql> 쇼 데이터베이스; 로 데이터베이스 확인

전체 데이터베이스 소스 복원
mysql> 소스 alldatabase.sql

특정 데이터베이스 소스 복원
mysql> funshop_db 사용;
mysql> 소스 testdatabase.sql;

특정 테이블 데이터베이스 소스 복원
mysql> funshop_db 사용;
mysql> 소스 테이블 database.sql;

가능성
-d, –no-data : 스키마만 출력, 데이터 없음
-t, –no-create-info : 스키마 제외