>  기사  >  데이터 베이스  >  mysqldump를 사용한 MySQL 데이터 백업

mysqldump를 사용한 MySQL 데이터 백업

黄舟
黄舟원래의
2016-12-13 15:10:261106검색

1. 다양한 사용법

A. 가장 간단한 사용법:

mysqldump -uroot -pPassword [database name] 
> [dump file]

위 명령은 지정된 데이터베이스를 다음과 같은 덤프 파일(dump 파일)로 백업합니다.

mysqldump -uroot -p123 test > test.dump

생성된 test.dump 파일에는 테이블 생성 문(데이터베이스 구조 생성용)과 데이터 삽입을 위한 삽입 문이 포함되어 있습니다.

B. --opt

--opt 매개변수를 추가하면 생성되는 덤프 파일이 약간 달라집니다.

. 명령문 tableName

이 있는 경우 삭제 테이블을 포함합니다. 삽입 전 잠금 테이블 문을 포함하고, tableName 쓰기 잠금 테이블을 포함하며, 삽입 후 잠금 해제를 포함합니다. 테이블


C. 교차 호스트 백업

targetDb 데이터베이스가 호스트2 호스트에 생성된 경우 다음 명령을 사용하여 호스트1의 sourceDb를 호스트2의 targetDb로 복사합니다.

mysqldump --host=host1 --opt sourceDb| mysql --host=host2 -C targetDb

-C는 호스트 간 데이터 전송이 데이터 압축을 사용함을 나타냅니다. 🎜>

D. 테이블 구조만 백업

mysqldump --no-data --databases mydatabase1 mydatabase2 mydatabase3 > test.dump
은 테이블 구조만 백업합니다. --databases는 백업할 호스트의 데이터베이스를 나타냅니다. MySQL 호스트의 모든 데이터베이스를 백업하려면 다음과 같이 --all-databases 옵션을 사용할 수 있습니다.

mysqldump --all-databases
> test.dump
E. 백업 파일에서 데이터베이스를 복원합니다

mysql [database name] < [backup file name]
2. Linux의 cron 명령 조합으로 예약 백업 구현

예를 들어 매일 오전 1시 30분에 특정 호스트의 모든 데이터베이스를 백업하고 덤프 파일을 gz 형식으로 압축해야 하는 경우 /etc/crontab 구성 파일에 다음 코드 줄을 추가할 수 있습니다.

30 1 * * * root mysqldump -u root -pPASSWORD --all-databases | gzip > /mnt/disk2/database_`date &#39;+%m-%d-%Y&#39;`.sql.gz
이전 5 매개변수는 각각 분, 시, 일, 월, 연을 나타내고 별표는 임의를 나타냅니다. date '+%m-%d-%Y'는 현재 날짜를 MM-DD-YYYY 형식으로 가져옵니다.

3. MySQL 데이터베이스 백업을 위한 전체 쉘 스크립트 예시

#vi /backup/backup.sh

#!bin/bash
cd /backup
echo "You are in backup dir"
mv backup* /oldbackup
echo "Old dbs are moved to oldbackup folder"
File = backup-$Now.sql
mysqldump -u user -p password database-name > $File
echo "Your database backup successfully completed"
위 스크립트 파일은 backup.sh로 저장되며, 두 개의 디렉토리가 생성되었습니다. 시스템/olcbackup 및 /backup에 있습니다. backup.sh가 실행될 때마다 /backup 디렉터리에서 이름이 backup으로 시작하는 모든 파일이 /oldbackup 디렉터리로 이동됩니다.

위 스크립트에 대한 실행 계획을 다음과 같이 개발합니다.

#crontab -e30 1 * * * /backup.sh
4. mysqldump 전체 백업 + mysqlbinlog 바이너리 로그 증분 백업

mysqldump 백업 파일에서 데이터를 복원하면 백업 지점부터 업데이트된 데이터가 손실되므로 mysqlbinlog 바이너리 로그 증분 백업도 결합해야 합니다. my.ini 또는 my.cnf에 바이너리 로깅 또는 mysqld를 활성화하려면 다음 구성이 포함되어 있는지 확인하세요. ---log-bin:

[mysqld]
log-bin=mysql-bin
mysqldump 명령은 --flush-logs 옵션을 가져와서 새 바이너리 로그 파일을 생성해야 합니다.

mysqldump --single-transaction --flush-logs --master-data=2 > backup.sql
다음에서 생성된 증분 바이너리 예를 들어 로그 파일이 mysql-bin.000003인 경우 데이터 복구는 다음과 같습니다.


shell> mysql -uroot -pPwd < backup_sunday_1_PM.sql 
shell> mysqlbinlog mysql-bin.000003 | mysql -uroot -pPwd
또한 mysqlbinlog는 --start-date를 지정할 수도 있습니다. -stop-date, --start-position 및 --stop-position 매개변수는 데이터를 특정 순간까지 정확하게 복원하거나 중간에 특정 문제 기간을 건너뛰어 데이터를 복원하는 데 사용됩니다. MySQL 문서에서 관련 내용을 다음과 같이 직접 발췌합니다. 다음:

5.9.3.1. 指定恢复时间
对于MySQL 4.1.4,可以在mysqlbinlog语句中通过--start-date和--stop-date选项指定DATETIME格式的起止时间。举例说明,假设在今天上午10:00(今天是2005年4月20日),执行SQL语句来删除一个大表。要想恢复表和数据,你可以恢复前晚上的备份,并输入:
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 \
     | mysql -u root -pmypwd
该命令将恢复截止到在--stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句,可能你想要恢复后面发生的活动。根据这些,你可以用起使日期和时间再次运行mysqlbinlog:

mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 \
     | mysql -u root -pmypwd \
在该行中,从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。

5.9.3.2. 指定恢复位置
也可以不指定日期和时间,而使用mysqlbinlog的选项--start-position和--stop-position来指定日志位置。它们的作用与起止日选项相同,不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法,特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号,可以运行mysqlbinlog寻找执行了不期望的事务的时间范围,但应将结果重新指向文本文件以便进行检查。操作方法为:
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" \
      /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
该命令将在/tmp目录创建小的文本文件,将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件,寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作,应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后,你应从命令行输入下面内容:

mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \
    | mysql -u root -pmypwd 
 
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \
    | mysql -u root -pmypwd \ 
上面的第1行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句,恢复的数据和相关MySQL日志将反应事务执行的原时间。


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.