넷 백업 MySQL 데이터베이스의 종류 (백업의 기본적인 측면 아무 문제를) 알아보기

머리말

우리는 프로덕션 환경에서 가장 중요한 것이 무엇인지에 대해 생각하려고? 깨진 우리의 서버 하드웨어를 수리하거나 갱신 할 경우, 소프트웨어 문제는 수리하거나 다시 설치하지만, 데이터를하지 않았다 경우? 이것은 아마도 가장 끔찍한 일이다, 나는 이제 데이터보다 더 중요 할 수 없습니다. 어떻게 우리가 빨리 분실 복구 할 수 있습니다, 그 데이터가 손실되지 않도록하거나 이후 않는 프로덕션 환경에서 기분이? 그냥이 글을 읽고, 당신은 할 수 있어야합니다 MySQL특정 이해를 할 수있는 데이터 백업 및 복구를 얻을 수 있습니다.

이유는 데이터를 백업해야합니까?

사실, 前言또한 아마도 데이터를 백업 할 이유를 설명하지만, 특정 데이터 백업 왜 우리가 알아봐야

프로덕션 환경 데이터베이스에서 우리는 데이터의 손실, 대략 다음과 같은 범주로 나누어 원인이 사고의 다양한 발생할 수 있습니다.

  • 하드웨어 오류

  • 소프트웨어 오류

  • 자연 재해

  • 해커 공격

  • 오용 (가장 큰 비율)

따라서 순서대로 데이터 손실 후, 우리는 데이터를 정기적으로 백업해야 할 데이터를 복구 할 수 있도록, 백업 데이터 정책이 다른 애플리케이션 시나리오에 맞게 조정해야, 우리가 충족 특정 환경에 사용자 정의 할 수 있습니다 그래서이 값을 기준으로, 기본적으로 여러 참조 값이있는 데이터 백업 전략

  • 얼마나 많은 데이터 손실 허용 될 수

  • 그것은 데이터를 복구하는 데 걸리는 시간

  • 필요한 일부 데이터는 복원 할

데이터 백업의 유형

자체의 특성에 따라 백업 데이터의 형식은 다음 그룹으로 나누어

  • 전체 백업

  • 부분 백업

    전체 백업을 지칭는 백업 전체 데이터 세트 (즉, 전체 데이터베이스) , 부분 백업을 지칭 데이터 세트의 백업 부 (예 : 만 백업 테이블)

부분 백업은 다음의 두 가지로 나누어진다

  • 증분 백업

  • 차등 백업

    증분 백업 수단은 변화 사람 (증분 또는 전체) 마지막 백업 이후의 백업 데이터가 피처 : 문제 감소 공간을 절약 
    받는 지칭 차등 백업을 변경 마지막 전체 백업 보낸 마지막 백업 이후 데이터  공간의 낭비 : 특성 복원 증분 백업보다 간단

개략도

blob.png

MySQL의 백업 데이터

에서 MySQl우리는 일반적으로 데이터를 백업하는 방법에는 여러 가지가

  • 핫 백업

  • 예열 대기

  • 콜드 백업

    핫 백업 수단이 데이터베이스 백업,시  읽기 및 쓰기 작업이 영향을받는 데이터베이스 아닌 
    데이터베이스 백업, 따뜻한 백업 수단  데이터베이스의 읽기 작업을 수행 할 수 있지만 쓰기 작업을 수행 할 수 없습니다 
    콜드 백업 수단을 때 데이터베이스가 백업, 때  데이터베이스를 읽을 수없고 쓰기 작업, 즉 오프라인 데이터베이스에

MySQL다른 방법으로 백업 스토리지 엔진은 또한을 지원할지 여부를 고려

  • 의 MyISAM 

     핫 대기 ×

     따뜻한 대기 √

     콜드 대기 √

  • 이노

     핫 대기 √

     따뜻한 대기 √

     콜드 대기 √

    우리는 데이터베이스의 상태를 실행 한 후, 백업에서 데이터의 완료를 고려 또한 우리를 위해 고려해야 할 MySQL데이터베이스의 백업 데이터

    일반 물리적 백업은 을 통해 tar, cp다른 명령은 직접 복제 데이터베이스 데이터 파일이 패키지 백업 달성 
    일반적으로 논리적 백업 특정 도구와 백업 저장 데이터베이스에서 데이터를 내보내기 (백업 논리 잃게 데이터의 정밀도를)

    • 물리적 백업

    • 논리적 백업

백업 문제를 고려

전 사용자 정의 백업 전략은, 우리는 또한 문제의 수를 고려할 필요가

우리는 무엇을 백업 할?

정상적인 상황에서, 우리는 다음으로 나누어 데이터를 백업해야

  • 데이터

  • 바이너리 로그, InnoDB의 트랜잭션 로그

  • 코드 (저장 프로 시저, 저장 기능, 트리거, 이벤트 스케줄러)

  • 서버 구성 파일

백업 도구

여기에서 우리는 몇 가지 일반적인 백업 도구 등 
mysqldump 논리적 백업 모든 엔진에 대한 도구, 지원 온도 장비, 전체 백업에 대한 부분 백업 : 이노 스토리지 엔진을 지원하는 핫 백업 
cp, tar 等归档复制工具: 모든 엔진에 대한 물리적 백업 도구를 , 콜드 백업, 전체 백업, 부분 백업 
lvm2 snapshot: 거의 핫 백업, 백업을 위해 파일 시스템 관리 도구 
mysqlhotcopy: 도구의 이름의 가치없는, 거의 차가운 대기, 지원 단지 의 MyISAM 스토리지 엔진 
xtrabackup: 매우 강력한 이노 / XtraDB 핫 백업 도구, 로 전체 백업, 증분 백업을 지원 percona제공

적절한 백업 전략을 디자인

다른 시나리오의 경우, 우리는 다음과 같은 세 가지 일반을 위해, 정상적인 상황에서, 백업 정책을 데이터베이스 백업에 대한 다른 백업 전략을 개발해야

  • 직접 CP, 타르는 데이터베이스 파일을 복사합니다

  • mysqldump를 + BIN 로그를 복사

  • LVM2 BIN LOGS + 복사 스냅 샷

  • xtrabackup

몇 가지 솔루션은 다른 시나리오보다 구체적인이다

  1. 데이터의 양이 작은 경우, 직접 데이터베이스 파일을 복사 첫 번째 방법을 사용할 수 있습니다

  2. 데이터의 양이 괜찮다고하면 증분 백업을 달성하는 두 번째 방법, 처음 사용 mysqldump는 전체 데이터베이스 백업 한 후 정기적으로 백업 BINARY LOG를 사용할 수 있습니다

  3. 과도하게 사업 실행에 영향을주지 않고, 일반적으로 데이터의 양, 사용, 세 번째 방법을 사용하면 lvm2데이터 파일의 스냅 샷을 백업 한 다음 정기적으로 백업 바이너리 로그가 증분 백업을 달성하는

  4. 많은 양의 데이터가 과도하게 사업 실행에 영향을주지 않고, 당신은 사용하여 네 번째 방법을 사용할 수있는 경우 xtrabackup전체 백업, 정기적으로 사용 xtrabackup증분 또는 차등 백업을

실제 운동

백업 CP를 사용하여

우리는 냠 설치 여기에 사용하는 사용하는 mysql-5.1네트워크 데이터베이스에서 직원을 찾는 데 사용되는 데이터 세트의 버전을

보기 정보 데이터베이스

mysql> SHOW DATABASES;    #查看当前的数据库, 我们的数据库为employees
+--------------------+
| Database           |
+--------------------+
| information_schema |
| employees          |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> USE employees;
Database changed
mysql> SHOW TABLES;         #查看当前库中的表
+---------------------+
| Tables_in_employees |
+---------------------+
| departments         |
| dept_emp            |
| dept_manager        |
| employees           |
| salaries            |
| titles              |
+---------------------+
6 rows in set (0.00 sec)

mysql> SELECT COUNT(*) FROM employees;   #由于篇幅原因, 我们这里只看一下employees的行数为300024
+----------+
| COUNT(*) |
+----------+
|   300024 |
+----------+
1 row in set (0.05 sec)

데이터베이스에 읽기 잠금을 적용

mysql> FLUSH TABLES WITH READ LOCK;    #向所有表施加读锁
Query OK, 0 rows affected (0.00 sec)

백업 데이터 파일

[root@node1 ~]# mkdir /backup   #创建文件夹存放备份数据库文件
[root@node1 ~]# cp -a /var/lib/mysql/* /backup     #保留权限的拷贝源数据文件
[root@node1 ~]# ls /backup   #查看目录下的文件
employees  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql.sock  test

아날로그 데이터 손실 및 복구

[root@node1 ~]# rm -rf /var/lib/mysql/*    #删除数据库的所有文件
[root@node1 ~]# service mysqld restart   #重启MySQL, 如果是编译安装的应该不能启动, 如果rpm安装则会重新初始化数据库


mysql> SHOW DATABASES;    #因为我们是rpm安装的, 连接到MySQL进行查看, 发现数据丢失了!
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

[root@node1 ~]# rm -rf /var/lib/mysql/*    #这一步可以不做
[root@node1 ~]# cp -a /backup/* /var/lib/mysql/    #将备份的数据文件拷贝回去
[root@node1 ~]# service mysqld restart  #重启MySQL


#重新连接数据并查看

mysql> SHOW DATABASES;    #数据库已恢复
+--------------------+
| Database           |
+--------------------+
| information_schema |
| employees          |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> USE employees;      

mysql> SELECT COUNT(*) FROM employees;    #表的行数没有变化
+----------+
| COUNT(*) |
+----------+
|   300024 |
+----------+
1 row in set (0.06 sec)


##完成

사용 mysqldump를 + 백업 복사본 바이너리 로그

우리는 냠 설치 여기에 사용하는 사용하는 mysql-5.1네트워크 데이터베이스에서 직원을 찾는 데 사용되는 데이터 세트의 버전을

우리는 다음 테이블의 데이터를 수정, mysqldump에 의해 전체 백업을 수행하고 바이너리 로그에서 복구  개방에 = 구성 파일에 MySQL 바이너리 로그에 log_bin 추가

mysqldump명령

mysqldump논리적 백업 도구의 클라이언트가, 원래 데이터베이스 및 테이블 작성 SQL 문의 재생을 생성 할 수 있나요, 뜨거운 대기에 대한 모든 스토리지 엔진, 이노 지원을 지원할 수

공식 문서 설명

#基本语法格式

shell> mysqldump [options] db_name [tbl_name ...]    恢复需要手动CRATE DATABASES
shell> mysqldump [options] --databases db_name ...   恢复不需要手动创建数据库
shell> mysqldump [options] --all-databases           恢复不需要手动创建数据库


其他选项:
     -E, --events: 备份事件调度器
     -R, --routines: 备份存储过程和存储函数
     --triggers: 备份表的触发器; --skip-triggers 
     --master-date[=value]  
         1: 记录为CHANGE MASTER TO 语句、语句不被注释
         2: 记录为注释的CHANGE MASTER TO语句
         基于二进制还原只能全库还原

     --flush-logs: 日志滚动
         锁定表完成后执行日志滚动

보기 정보 데이터베이스

mysql> SHOW DATABASES;    #查看当前的数据库, 我们的数据库为employees
+--------------------+
| Database           |
+--------------------+
| information_schema |
| employees          |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> USE employees;
Database changed
mysql> SHOW TABLES;         #查看当前库中的表
+---------------------+
| Tables_in_employees |
+---------------------+
| departments         |
| dept_emp            |
| dept_manager        |
| employees           |
| salaries            |
| titles              |
+---------------------+
6 rows in set (0.00 sec)

mysql> SELECT COUNT(*) FROM employees;   #由于篇幅原因, 我们这里只看一下employees的行数为300024
+----------+
| COUNT(*) |
+----------+
|   300024 |
+----------+
1 row in set (0.05 sec)

사용하여 mysqldump백업 데이터베이스를

[root@node1 ~]# mysql -uroot -p -e 'SHOW MASTER STATUS'   #查看当前二进制文件的状态, 并记录下position的数字
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      106 |              |                  |
+------------------+----------+--------------+------------------+

[root@node1 ~]# mysqldump --all-databases --lock-all-tables  > backup.sql   #备份数据库到backup.sql文件中

mysql> CREATE DATABASE TEST1;   #创建一个数据库
Query OK, 1 row affected (0.00 sec)

mysql> SHOW MASTER STATUS;   #记下现在的position
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      191 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

[root@node1 ~]# cp /var/lib/mysql/mysql-bin.000003 /root  #备份二进制文件
[root@node1 ~]# service mysqld stop   #停止MySQL
[root@node1 ~]# rm -rf /var/lib/mysql/*   #删除所有的数据文件
[root@node1 ~]# service mysqld start    #启动MySQL, 如果是编译安装的应该不能启动(需重新初始化), 如果rpm安装则会重新初始化数据库


mysql> SHOW DATABASES;   #查看数据库, 数据丢失!
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

mysql> SET sql_log_bin=OFF;   #暂时先将二进制日志关闭  
Query OK, 0 rows affected (0.00 sec)


mysql> source backup.sql  #恢复数据,所需时间根据数据库时间大小而定

mysql> SET sql_log_bin=ON; 开启二进制日志

mysql> SHOW DATABASES;   #数据库恢复, 但是缺少TEST1
+--------------------+
| Database           |
+--------------------+
| information_schema |
| employees          |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

[root@node1 ~]# mysqlbinlog --start-position=106 --stop-position=191 mysql-bin.000003 | mysql employees #通过二进制日志增量恢复数据

mysql> SHOW DATABASES;    #现在TEST1出现了!
+--------------------+
| Database           |
+--------------------+
| information_schema |
| TEST1              |
| employees          |
| mysql              |
| test               |
+--------------------+
5 rows in set (0.00 sec)



#完成

LVM2를 사용하여 스냅 샷 백업 데이터

실험을 수행하기 전에 우리는 먼저 살펴 lvm2-snapshot지식

LVM원본 파일이 변경되지 않은 경우 스냅 샷을 저장하는 시간에 간단하게 모든 파일 지점의 원본 파티션 메타 데이터의 스냅 샷입니다, 직접 원본 파티션에 소스 파일의 다음 해당 파일 액세스 스냅 샷 볼륨은 소스 파일이 변경되는 경우, 해당 파일의 스냅 샷 볼륨이 변경되지 않습니다. 스냅 샷 볼륨은 주로 차 백업 파일에 사용됩니다. 여기에 단지 간단한 소개를, 여기를 클릭

LVM 배포 환경

添加硬盘; 这里我们直接实现SCSI硬盘的热插拔, 首先在虚拟机中添加一块硬盘, 不重启

[root@node1 ~]# ls /dev/sd*   #只有以下几块硬盘, 但是我们不重启可以让系统识别新添加的硬盘
/dev/sda  /dev/sda1  /dev/sda2

[root@node1 ~]# echo '- - -' > /sys/class/scsi_host/host0/scan 
[root@node1 ~]# echo '- - -' > /sys/class/scsi_host/host1/scan 
[root@node1 ~]# echo '- - -' > /sys/class/scsi_host/host2/scan 

[root@node1 ~]# ls /dev/sd*    #看!sdb识别出来了
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb


[root@node1 ~]# fdisk /dev/sdb   #分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xd353d192.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +15G

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
You have new mail in /var/spool/mail/root
[root@node1 ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1

##创建逻辑卷
[root@node1 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
[root@node1 ~]# vgcreate myvg /dev/sdb1 
  Volume group "myvg" successfully created
[root@node1 ~]# lvcreate -n mydata -L 5G myvg 
  Logical volume "mydata" created.

[root@node1 ~]# mkfs.ext4 /dev/mapper/myvg-mydata   #格式化
[root@node1 ~]# mkdir /lvm_data
[root@node1 ~]# mount /dev/mapper/myvg-mydata /lvm_data  #挂载到/lvm_data


[root@node1 ~]# vim /etc/my.cnf    #修改mysql配置文件的datadir如下

datadir=/lvm_data

[root@node1 ~]# service mysqld restart  #重启MySQL

####重新导入employees数据库########略过####

보기 정보 데이터베이스

mysql> SHOW DATABASES;    #查看当前的数据库, 我们的数据库为employees
+--------------------+
| Database           |
+--------------------+
| information_schema |
| employees          |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> USE employees;
Database changed
mysql> SHOW TABLES;         #查看当前库中的表
+---------------------+
| Tables_in_employees |
+---------------------+
| departments         |
| dept_emp            |
| dept_manager        |
| employees           |
| salaries            |
| titles              |
+---------------------+
6 rows in set (0.00 sec)

mysql> SELECT COUNT(*) FROM employees;   #由于篇幅原因, 我们这里只看一下employees的行数为300024
+----------+
| COUNT(*) |
+----------+
|   300024 |
+----------+
1 row in set (0.05 sec)

스냅 샷 볼륨 및 백업 만들기

mysql> FLUSH TABLES WITH READ LOCK;     #锁定所有表
Query OK, 0 rows affected (0.00 sec)

[root@node1 lvm_data]# lvcreate -L 1G -n mydata-snap -p r -s /dev/mapper/myvg-mydata   #创建快照卷
  Logical volume "mydata-snap" created.

mysql> UNLOCK TABLES;  #解锁所有表
Query OK, 0 rows affected (0.00 sec)

[root@node1 lvm_data]# mkdir /lvm_snap  #创建文件夹
[root@node1 lvm_data]# mount /dev/myvg/mydata-snap /lvm_snap/  #挂载snap
mount: block device /dev/mapper/myvg-mydata--snap is write-protected, mounting read-only

[root@node1 lvm_data]# cd /lvm_snap/
[root@node1 lvm_snap]# ls
employees  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql-bin.000001  mysql-bin.000002  mysql-bin.000003  mysql-bin.index  test
[root@node1 lvm_snap]# tar cf /tmp/mysqlback.tar *  #打包文件到/tmp/mysqlback.tar

[root@node1 ~]# umount /lvm_snap/  #卸载snap
[root@node1 ~]# lvremove myvg mydata-snap  #删除snap


데이터 복구

[root@node1 lvm_snap]# rm -rf /lvm_data/*
[root@node1 ~]# service mysqld start    #启动MySQL, 如果是编译安装的应该不能启动(需重新初始化), 如果rpm安装则会重新初始化数据库


mysql> SHOW DATABASES;   #查看数据库, 数据丢失!
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

[root@node1 ~]# cd /lvm_data/
[root@node1 lvm_data]# rm -rf * #删除所有文件
[root@node1 lvm_data]# tar xf /tmp/mysqlback.tar     #解压备份数据库到此文件夹 
[root@node1 lvm_data]# ls  #查看当前的文件
employees  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql-bin.000001  mysql-bin.000002  mysql-bin.000003  mysql-bin.index  test

mysql> SHOW DATABASES;  #数据恢复了
+--------------------+
| Database           |
+--------------------+
| information_schema |
| employees          |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)


##完成

사용 Xtrabackup 백업

더 설명하기 위해, 우리가 사용하는 mariadb-5.5사용 버전을 xtrabackup자사의 효과를 극대화 할 수있는 이노를, 그리고 각 테이블의 InnoDB하지만 별도의 테이블 공간을 사용합니다, 우리는 구성 파일에 추가해야  innodb_file_per_table = ON 개방에

다운로드 및 설치xtrabackup

我们这里通过wget percona官方的rpm包进行安装
[root@node1 ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.4/binary/redhat/6/x86_64/percona-xtrabackup-2.3.4-1.el6.x86_64.rpm   
[root@node1 ~]# yum localinstall percona-xtrabackup-2.3.4-1.el6.x86_64.rpm   #需要EPEL源

xtrabackup소개

Xtrabackup그것은되어 percona제공되는 mysql세계 유일의 오픈 소스 데이터베이스와 xtradb 데이터베이스 백업 도구의 핫 백업 이노을위한 도구가 될 수 있습니다 공식 보고서에 따르면. 특징 :

  1. 백업 프로세스의 빠르고 안정적인;

  2. 백업 프로세스는 트랜잭션이 실행되지 않습니다 인터럽트;

  3. 디스크 공간과 트래픽을 기반 압축 기능을 저장할 수;

  4. 자동 백업 테스트;

  5. 속도를 복원;

마르코에서 가져온 문서

xtrabackup전체 백업을 달성

여기에 우리가 사용하는 xtrabackup프런트 엔드 구성 도구를 innobackupex데이터베이스의 전체 백업을 달성하기 위해

를 사용하여 innobackupex백업이 호출되는 xtrabackup모든 백업 이노 테이블은 모두에게 관련 테이블 구조 정의 (.FRM)에 문서뿐만 아니라 복사 의 MyISAM , MERGE , CSV , 그리고 ARCHIVE 관련 문서의 테이블을, 또한 데이터베이스 트리거와 프로필 정보를 백업 관련 파일은,이 파일은 디렉토리 이름이 시간에 저장됩니다.

백업 과정

[root@node1 ~]# mkdir /extrabackup  #创建备份目录
[root@node1 ~]# innobackupex --user=root /extrabackup/ #备份数据
###################提示complete表示成功*********************

[root@node1 ~]# ls /extrabackup/  #看到备份目录
2016-04-27_07-30-48 

일반적으로 백업은 데이터 백업은 트랜잭션이 제출되지 않았거나 제출되었지만 아직 데이터 파일 거래에 동기화되지 포함 할 수 있으므로 데이터는 복구 작업에 사용할 수 없습니다, 완료됩니다. 우리는 전체 백업을 "준비"할 필요 그러므로,이 시간에 데이터 파일은 여전히 ​​일관성이

[root@node1 ~]# innobackupex --apply-log /extrabackup/2016-04-27_07-30-48/  #指定备份文件的目录

#一般情况下下面三行结尾代表成功*****************
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 369661462
160427 07:40:11 completed OK!

[root@node1 ~]# cd /extrabackup/2016-04-27_07-30-48/
[root@node1 2016-04-27_07-30-48]# ls -hl  #查看备份文件
total 31M
-rw-r----- 1 root root  386 Apr 27 07:30 backup-my.cnf
drwx------ 2 root root 4.0K Apr 27 07:30 employees
-rw-r----- 1 root root  18M Apr 27 07:40 ibdata1
-rw-r--r-- 1 root root 5.0M Apr 27 07:40 ib_logfile0
-rw-r--r-- 1 root root 5.0M Apr 27 07:40 ib_logfile1
drwx------ 2 root root 4.0K Apr 27 07:30 mysql
drwx------ 2 root root 4.0K Apr 27 07:30 performance_schema
drwx------ 2 root root 4.0K Apr 27 07:30 test
-rw-r----- 1 root root   27 Apr 27 07:30 xtrabackup_binlog_info
-rw-r--r-- 1 root root   29 Apr 27 07:40 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root  117 Apr 27 07:40 xtrabackup_checkpoints
-rw-r----- 1 root root  470 Apr 27 07:30 xtrabackup_info
-rw-r----- 1 root root 2.0M Apr 27 07:40 xtrabackup_logfile

데이터 복구

[root@node1 ~]# rm -rf /data/*   #删除数据文件

***不用启动数据库也可以还原*************

[root@node1 ~]# innobackupex --copy-back /extrabackup/2016-04-27_07-30-48/   #恢复数据, 记清使用方法

#########我们这里是编译安装的mariadb所以需要做一些操作##########
[root@node1 data]# killall mysqld

[root@node1 ~]# chown -R mysql:mysql ./* 
[root@node1 ~]# ll /data/      #数据恢复
total 28704
-rw-rw---- 1 mysql mysql    16384 Apr 27 07:43 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Apr 27 07:43 aria_log_control
-rw-rw---- 1 mysql mysql 18874368 Apr 27 07:43 ibdata1
-rw-rw---- 1 mysql mysql  5242880 Apr 27 07:43 ib_logfile0
-rw-rw---- 1 mysql mysql  5242880 Apr 27 07:43 ib_logfile1
-rw-rw---- 1 mysql mysql      264 Apr 27 07:43 mysql-bin.000001
-rw-rw---- 1 mysql mysql       19 Apr 27 07:43 mysql-bin.index
-rw-r----- 1 mysql mysql     2166 Apr 27 07:43 node1.anyisalin.com.err


[root@node1 data]# service mysqld restart
MySQL server PID file could not be found!                  [FAILED]
Starting MySQL..                                           [  OK  ]

MariaDB [(none)]> SHOW DATABASES;  #查看数据库, 已经恢复
+--------------------+
| Database           |
+--------------------+
| information_schema |
| employees          |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec

증분 백업

#########创建连两个数据库以供测试#####################
MariaDB [(none)]> CREATE DATABASE TEST1;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE DATABASE TEST2;
Query OK, 1 row affected (0.00 sec)

[root@node1 ~]# innobackupex --incremental /extrabackup/ --incremental-basedir=/extrabackup/2016-04-27_07-30-48/ 

[root@node1 ~]# ls /extrabackup/2016-04-27_07-57-22/ #查看备份文件
total 96
-rw-r----- 1 root root   386 Apr 27 07:57 backup-my.cnf
drwx------ 2 root root  4096 Apr 27 07:57 employees
-rw-r----- 1 root root 49152 Apr 27 07:57 ibdata1.delta
-rw-r----- 1 root root    44 Apr 27 07:57 ibdata1.meta
drwx------ 2 root root  4096 Apr 27 07:57 mysql
drwx------ 2 root root  4096 Apr 27 07:57 performance_schema
drwx------ 2 root root  4096 Apr 27 07:57 test
drwx------ 2 root root  4096 Apr 27 07:57 TEST1
drwx------ 2 root root  4096 Apr 27 07:57 TEST2
-rw-r----- 1 root root    21 Apr 27 07:57 xtrabackup_binlog_info
-rw-r----- 1 root root   123 Apr 27 07:57 xtrabackup_checkpoints
-rw-r----- 1 root root   530 Apr 27 07:57 xtrabackup_info
-rw-r----- 1 root root  2560 Apr 27 07:57 xtrabackup_logfile

BASEDIR는 전체 백업이 명령의 실행 후 디렉토리를 가리 킵니다 innobackupex명령 할 /extrabackup모든 증분 백업 데이터를 저장하는 디렉토리시라는 새 디렉터리를 만듭니다. 또한, 이후 다시 한 번 증분 백업을 증분 백업을 수행 --incremental-basedir위치한 최종 증가 백업의 디렉토리를 지정해야합니다.

또, 주목해야 증분 백업에만 적용될 수 있거나 XtraDB 이노 테이블은 MyISAM 테이블의 경우, 실제로 증분 백업이 때 전체 백업을 수행 행한다.

마무리 증분 백업

[root@node1 ~]# innobackupex --apply-log --redo-only /extrabackup/2016-04-27_07-30-48/
[root@node1 ~]# innobackupex --apply-log --redo-only /extrabackup/2016-04-27_07-30-48/ --incremental-dir=/extrabackup/2016-04-27_07-5
7-22/

데이터 복구

[root@node1 ~]# rm -rf /data/*   #删除数据

[root@node1 ~]# innobackupex --copy-back /extrabackup/2016-04-27_07-30-48/     #整理增量备份之后可以直接通过全量备份还原

[root@node1 ~]# chown -R mysql.mysql /data/
[root@node1 ~]# ls /data/ -l
total 28732
-rw-rw---- 1 mysql mysql     8192 Apr 27 08:05 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Apr 27 08:05 aria_log_control
drwx------ 2 mysql mysql     4096 Apr 27 08:05 employees
-rw-r----- 1 mysql mysql 18874368 Apr 27 08:05 ibdata1
-rw-r----- 1 mysql mysql  5242880 Apr 27 08:05 ib_logfile0
-rw-r----- 1 mysql mysql  5242880 Apr 27 08:05 ib_logfile1
drwx------ 2 mysql mysql     4096 Apr 27 08:05 mysql
-rw-rw---- 1 mysql mysql      245 Apr 27 08:05 mysql-bin.000001
-rw-rw---- 1 mysql mysql       19 Apr 27 08:05 mysql-bin.index
-rw-r----- 1 mysql mysql     1812 Apr 27 08:05 node1.anyisalin.com.err
-rw-rw---- 1 mysql mysql        5 Apr 27 08:05 node1.anyisalin.com.pid
drwx------ 2 mysql mysql     4096 Apr 27 08:05 performance_schema
drwx------ 2 mysql mysql     4096 Apr 27 08:05 test
drwx------ 2 mysql mysql     4096 Apr 27 08:05 TEST1
drwx------ 2 mysql mysql     4096 Apr 27 08:05 TEST2
-rw-r----- 1 mysql mysql       29 Apr 27 08:05 xtrabackup_binlog_pos_innodb
-rw-r----- 1 mysql mysql      530 Apr 27 08:05 xtrabackup_info

MariaDB [(none)]> SHOW DATABASES;  #数据还原
+--------------------+
| Database           |
+--------------------+
| information_schema |
| TEST1              |
| TEST2              |
| employees          |
| mysql              |
| performance_schema |
| test               |
+--------------------+
7 rows in set (0.00 sec)

#关于xtrabackup还有很多强大的功能没有叙述、有兴趣可以去看官方文档

개요

백업 방법 백업 속도 복구 속도 편의 기능 일반적으로 사용
CP 빠른 빠른 일반적으로, 낮은 유연성 약한 데이터 백업 소량
mysqldump는 천천히 천천히 일반적으로, 당신은 스토리지 엔진의 차이를 무시할 수 있습니다 일반 소형 데이터 백업 매체 량
LVM2 스냅 샷 빠른 빠른 일반적으로, 지원은 빠르고 거의 상시 대기하다 일반 소형 데이터 백업 매체 량
xtrabackup 빠른 빠른 핫 스탠바이 달성 이노, 메모리는 엔진에 의해 필요한 강한 대규모 백업

사실, 우리는 할 수있는 Master-Slave Replication 백업.

HTTP : //www.cnblogs.com/liangshaoye/p/5464794.html에서 이동

게시 15 개 원래 기사 · 원 찬양 7 ·은 10000 +를 볼

추천

출처blog.csdn.net/J_M_S_H_T/article/details/87626716