MySQL-- 백업 및 복구를 얻기

서문 : 

이전 기사, 우리는 다양한 MySQL의 문 구문 및 사용자 권한 지식의 사용을 소개합니다. 이 문서는 주로 논리적 백업에 초점을 주요 MySQL 데이터베이스 백업 및 복구 관련 지식을 설명하고, mysqldump는 도구 복구 방법의 사용을 소개합니다.

여기에 단순히 물리적 인 백업 및 논리적 백업의 개념 미만 :
물리적 백업 : 디렉토리에 데이터베이스 실제 파일을 데이터 파일을 백업 덤프. 물리적 백업 및 복구 속도,하지만 공간은 MySQL은 물리적 백업 도구를 xtrabackup 사용할 수 있습니다, 상대적으로 크다.
논리적 백업 : 도구를 사용하여 데이터베이스 개체 백업 파일로 작업 집계를 내 보냅니다. 논리 백업 및 복구 느리지 만 작은 풋 프린트와 더 유연. MySQL의 백업 도구는 일반적으로 mysqldump에 로직을 사용했다.

1 위로 전체 데이터베이스를 백업

전체 백업 mysqldump를 예제를 사용하려면 사용할 수 있습니다 --all-databases 또는 -A 매개 변수 :

mysqldump -uroot -pxxxxxx --all-databases > /tmp/all_database.sql
mysqldump -uroot -pxxxxxx -A > /tmp/all_database.sql

2. 위로 데이터베이스 부분까지

백업이 어떤 라이브러리를 필요에 때때로 우리는이 우리가 사용할 수있는 시간이 필요하여 발생할 --databases 또는 -B 여러 데이터베이스 사이에 공백으로 구분 매개 변수, 데이터베이스 이름 뒤에 매개 변수를.

mysqldump -uroot -pxxxxxx --databases testdb1 testdb2 > /tmp/testdb.sql
mysqldump -uroot -pxxxxxx -B testdb1 testdb2 > /tmp/testdb.sql

표 3. 백업 섹션

일반적으로 우리가 변화하기 전에 테이블의 백업을, 예를 들어, 테이블의 수요 일부를 백업해야 할 것이다, 우리는이 작업을 수행 할 수 있습니다

#只备份testdb库中的test_tb表
mysqldump -uroot -pxxxxxx testdb test_tb > /tmp/test_tb.sql
#备份多张表
mysqldump -uroot -pxxxxxx testdb tb1 tb2 tb3 > /tmp/tb.sql

4. 백업 유닛 테이블 데이터의 일부

때로는 테이블에 많은 양의 데이터, 우리는 단지 데이터의 일부가 필요하고 그것을 어떻게 할까? 이 시간은 당신이 사용할 수 --where 의 옵션을 선택합니다. 다시 단서을 충족하는 경우. 예를 들면 : 우리는 단지 TB1 테이블에 데이터보다 큰 2019년 8월 1일 CREATE_TIME이 필요합니다, 당신은이를 내보낼 수 있습니다 :

mysqldump -uroot -pxxxxxx testdb tb1 --where=" create_time >= '2019-08-01 00:00:00' " > /tmp/tb1.sql

5. 파생 테이블을 제외

우리가 라이브러리를 백업 할하지만, 일부 테이블이나 중소 기업과 관련된 많은 양의 데이터를,이 시간이이 테이블, 같은를 제외하는 것으로 간주 될 수있는 경우, 옵션은 --ignore-table 이 기능을 수행 할 수 있습니다.

mysqldump -uroot -pxxxxxx testdb --ignore-table=testdb.tb1 > /tmp/testdb.sql

6. 만 백업 구성 데이터를 백업하거나

그런 다음 사용할 수있는 유일한 구조 백업 --no-data 짧게 -d 옵션, 백업 데이터 만 사용할 수 있습니다 --no-create-info 짧은에 대한 -t 옵션을 제공합니다.

mysqldump -uroot -pxxxxxx testdb --no-data > /tmp/testdb_jiegou.sql
mysqldump -uroot -pxxxxxx testdb --no-create-info > /tmp/testdb_data.sql

7. 백업이 저장 프로 시저, 함수, 이벤트가 포함

mysqldump를 백업 기본 저장 프로 시저, 사용자 정의 함수 및 이벤트를 포함하지 않는 것입니다. 우리는 사용 --routines 또는 -R 옵션은 저장 프로 시저 및 함수 사용 백업 --events 또는 -E 이벤트를 백업하는 인수를. 예를 들어 우리는 저장 프로 시저 및 이벤트를 포함하는 전체 TESTDB 라이브러리를 백업하려면 :

mysqldump -uroot -pxxxxxx -R -E --databases testdb > /tmp/testdb.sql

거래의 형태 (8)로 돌아 가기

우리는 덤프 과정에서 데이터의 일관성을 보장 잠금 테이블을 줄이려면, 당신은 사용할 수 있습니다 --single-transaction InnoDB의 데이터 테이블에 대한 옵션이 유용하고, 테이블을 잠그지 않습니다.

mysqldump -uroot -pxxxxxx --single-transaction --databases testdb > /tmp/testdb.sql

9. 전체 백업 복구

우리가 지금 어제의 전체 백업을 가지고, 지금은 전체를 복원하려는 경우, 당신은이 작업을 수행 할 수 있습니다 :

mysql -uroot -pxxxxxx < /tmp/all_database.sql

의 단일 데이터베이스 전체 백업 10. 복구

예를 들어, 우리는 하나의 라이브러리를 복원하려는, 그러나 우리는 우리가 전체 백업에서 고립 된 단일 라이브러리 백업 생각할 수 없다이 때, 전체 인스턴스의 백업이 같은 요구가있을 수 있습니다, 대답은 '예, 다음과 같은 간단한이다 오 쉘은 당신을 도울 수 있습니다 :

sed -n '/^-- Current Database: `testdb`/,/^-- Current Database: `/p' all_databases.sql > testdb.sql

#分离完成后我们再导入testdb.sql即可恢复单个库

11. 하나의 데이터베이스 백업에서 하나의 테이블을 복원

수요는 단일 라이브러리 또는 서비스에 관련된 전액을 복원, 이상, 결국, 여전히 상대적으로 일반적입니다, 복구 시간, 예를 들어, 우리는 테이블을 오용 알고, 상대적으로 긴, 우리는 복구 할 수있는 방법으로 하나의 테이블을 복원 할 수 있습니다. 예를 들어 우리는 지금 전체 라이브러리 TESTDB 백업을 가지고 있지만 인해 오용 TB1 테이블,이 테이블을 복원 할 필요성을 분리, 우리는이 작업을 수행 할 수 있습니다

cat testdb.sql | sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `tb1`/!d;q' > /tmp/tb1_jiegou.sql 
cat testdb.sql | grep --ignore-case  'insert into `tb1`' > /tmp/tb1_data.sql

#用shell语法分离出创建表的语句及插入数据的语句后 再依次导出即可完成恢复

요약 : 

이 문서에서는 백업을 제공하고 다른 시나리오의 복원 방법, 생산 또한 더 복잡한 시나리오가있을 수 있습니다, 우리는 유연해야합니다. 이 시점에서,이 때문에 기사가 흥미 작성에 깊이 아니지만 "얻기 MySQL은"시리즈는 종료하지만, 우리는 여전히 후 MySQL을의 지식 기반을 가지고 읽기를 바랍니다. 여기에 또 다시 읽고 다시 전원을 적어 내게 할 수 있다는 것입니다, 읽어 주셔서 감사드립니다! 내가 MySQL의 후속 관련 기사를 공유, 당신이 초점을 계속하겠습니다.

추천

출처blog.51cto.com/10814168/2436443