专职DBA-Xtrabackup物理备份恢复

专职DBA-Xtrabackup物理备份恢复

Xtrabackup是Percona公司专门针对MySQL数据库开发的一款开源免费的物理热备工具。
可以对InnoDB和XtraDB事物引擎的数据库实现非阻塞(即不锁表)方式备份。
可以对MyISAM非事物引擎实现锁表方式备份。

1.Xtrabackup的主要特点:
直接复制物理文件,备份恢复数据速度快,安全可靠。
备份期间执行的事物不会间断,备份InnoDB数据不会影响业务。
备份期间不会增加太多数据库的性能压力。
支持对备份的数据进行自动校验。
支持全量、增量、压缩备份及流备份。
支持在线迁移表以及快速创建新的从库。
支持几乎所有版本的MySQL分支。

2.首先你要理解数据库里面的几个数据文件:
.idb文件    以独立表空间存储的InnoDB引擎类型的数据文件。
.ibdata文件 以共享表空间存储的InnoDB引擎类型的数据文件。
.frm文件    存放与表相关的元数据(meta)信息以及表结构的定义信息。
.MYD文件    存放MyISAM引擎表的数据文件。
.MYI文件    存放MyISAM引擎的索引信息文件。

3.事务型引擎的ACID特性
MySQL的InnoDB是事务型引擎。
MariaDB的XtraDB是事务型引擎。

事务型引擎的共同特性:4个
原子性:事务的所有SQL语句操作,要么全部成功,要么全部失败。
一致性:事务开始之前和结束之后,数据库应保证数据的完整性不被破坏。
隔离性:当多个事务并发访问同一个数据源时,数据库能够保持每个访问的事务之间是隔离的,互不影响的。
持久性:事务处理完成之后,事务所做的更改都会是持久化存储,不会丢失数据。

4.InnoDB引擎内部知识
InnoDB的表空间分为:共享表空间和独立表空间。

tablespace表空间:是一个逻辑的概念,表空间里存放的是表的数据和索引,这些表的数据和索引又有不同的存储方式,表空间最终体现的是磁盘上数据库的各种物理数据文件。

independent tablespaces独立表空间:在开启InnoDB的innodb_file_per_table=on这个参数(5.6版本以后默认开启)之后,对于每一个新建的InnoDB表,数据库目录下都会多出来一个对应的存放该表数据的.ibd文件(老表不会)。

shared tablespaces共享表空间:5.6版本以前,MySQL的默认配置就是共享表空间模式,即所有表的数据都会在一个或几个大数据文件中存放。

page页:MySQL的每个表空间都是由若干个页组成的,且每个实例里的每个表空间内都有相同的页大小,默认值是16KB,可以通过innodb_page_size调整页的大小,每个页中都包含了表的数据。组成表空间数据的最小单位是页。

extent区段:在表空间中,系统会把每若干个页进行分组管理,这个组就叫作区段,默认一个区段的大小是64个页。

segments段:段是由多个不同的区组成的更大的分组。当一个段增加的时候,InnoDB第一次分配32个页给这个段,此后,InnoDB开始分配整个区段给这个段,InnoDB可以一次性添加4个区段给一个大的段,从而确保数据存储时能有一个良好的顺序性。

5.InnoDB备份相关名词
redo日志:redo日志,也叫事务日志,作用是记录InnoDB引擎中每一个数据发生的变化信息。主要用于保证InnoDB数据的完整性,以及丢失数据后的恢复。同时还可以有效的提升数据库的IO等性能。
redolog对应的配置参数是:
innodb_log_file_size和innodb_log_files_in_group
mysql> show global variables like "innodb_log%";
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| innodb_log_buffer_size      | 16777216 |
| innodb_log_checksums        | ON       |
| innodb_log_compressed_pages | ON       |
| innodb_log_file_size        | 50331648 |
| innodb_log_files_in_group   | 2        |
| innodb_log_group_home_dir   | ./       |
| innodb_log_write_ahead_size | 8192     |
+-----------------------------+----------+
7 rows in set (0.00 sec)

undo日志:undo log记录事务的逆向逻辑操作或者逆向物理操作对应的数据变化的内容,undo日志默认存放在共享表空间ibdata*文件中,与redo日志功能不同的是undo日志主要用于回滚数据库崩溃前未完整提交的事务数据,确保数据恢复前后是一致的。

LSN:Log Sequence Number是指日志序列号,是一个64位的整型数字。LSN的作用是当记录redo日志时,使用LSN唯一标识一条变化的数据。

checkpoint:用来标识数据库崩溃后,应恢复的redo日志的起始点。

6.Xtrabackup恢复的工作原理
(1).Percona Xtrabackup软件是基于InnoDB等事务引擎自带的redo和undo功能来保持备份和恢复前后数据一致性的,从而确保数据库的数据安全可靠。
(2).redo会存储每一个innodb表中的数据修改记录。
(3).当innodb数据库启动时,会检查数据文件和redo日志文件,将已经提交到redo中的数据应用(提交)到数据文件并保存。
(4).然后根据undo信息将修改过但没有提交的数据记录进行回滚(不提交到数据文件中)。

7.Xtrabackup执行全备的原理过程
(1).当执行innobackupex开始备份时,XBK首先会记录当前redo日志的位置(就是对应的LSN号),同时还会在后台启动一个进程持续监视redo日志文件的变化,并将变化的信息都记录到xtrabackup_logfile中。
(2).开始复制InnoDB对应的物理数据文件(*.ibd和*.ibdataN),备份完毕之后。
(3).执行flush tables with read lock;命令对整个数据库进行锁表。
(4).开始复制MyISAM对应的物理数据文件(.FRM,.MYD,.MYI),备份完毕之后。
(5).获取binlog二进制日志位置点信息。
(6).停止记录xtrabackup_logfile,并执行unlock tables;解锁,恢复整个数据库的可读可写状态。
(7).备份完成。

8.Xtrabackup执行全备恢复的过程
(1).用XBK恢复数据时,要经过准备恢复prepare和实际恢复restore两个步骤。
(2).在准备恢复过程结束后,InnoDB表的数据(即备份的物理文件)就恢复到了复制InnoDB文件结束时的时间点。
(3).这个时间点也是全库锁表复制MyISAM引擎数据时的起点,所以最终恢复的数据和数据库的数据是一致的。
(4).全备的数据有两部分,一部分是全备的物理文件,一部分是Xtrabackup-log日志文件。

9.Xtrabackup执行增量备份的过程
(1).Innobackupex增量备份的就是对复制全备之后的InnoDB中变更的“页”数据。
(2).增量复制时会以全备中xtrabackup_checkpoints logfile文件对应的LSN号为依据。
(3).将大于给定的LSN号的页数据(就是增量数据)进行备份复制InnoDB的redo日志到xtrabackup_logfile。
(4).以后的每一次增量备份都要基于上一次的增量备份,最终实现备份的数据都是连续的、无缺失的。
针对MyISAM引擎的备份依然是锁表备份。
增量备份仅复制InnoDB中变化的页数据,而非所有的物理文件。

总结:增量备份过程:
(1).记录LSN并监控redo日志的变化,且将变化实时记录到xtrabackup_logfile。
(2).开始复制*.ibd和*.ibdataN中变化的页数据。
(3).执行flush tables with read lock;命令。
(4).开始复制MyISAM对应的物理数据文件.FRM .MYD .MYI。
(5).获取二进制日志binlog位置信息。
(6).停止记录xtrabackup_logfile并执行unlock tables;解锁。
(7).增量备份完成。

10.Xtrabackup执行增量恢复的过程
(1).增量恢复是以全备数据为基础的,增量恢复的数据主要涉及全备数据、增量数据、Xtrabackup_log日志文件。
(2).先将增量备份中变化的页数据应用到全备数据中。
(3).读取Xtrabackup_log应用redo数据到全备数据中,同时回滚未提交的事务。

11.Xtrabackup工具安装
[[email protected] ~]# yum -y install perl perl-devel perl-Time-HiRes perl-DBD-MySQL libaio libaio-devel

[[email protected] ~]# rm -rf /etc/my*

https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.15/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm
[[email protected] ~]# cd /disk/
[[email protected] /disk]# wget https://mirrors.cloud.tencent.com/percona/centos/7Server/RPMS/x86_64/percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm

[[email protected] /disk]# yum -y install percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm

[[email protected] ~]# ls -l `which xtrabackup innobackupex`
lrwxrwxrwx 1 root root       10 Sep  2 00:12 /usr/bin/innobackupex -> xtrabackup
-rwxr-xr-x 1 root root 21730616 Jul  5 15:59 /usr/bin/xtrabackup

创建用于Xtrabackup备份数据的用户
[[email protected] ~]# mysql -S /data/mysql/3306/mysql.sock -p

mysql> create user ‘backup‘@‘localhost‘ identified by ‘123‘;
Query OK, 0 rows affected (0.01 sec)

mysql> grant reload,lock tables,process,replication client on *.* to ‘backup‘@‘localhost‘;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

Xtrabackup软件主要包含两个命令工具
Xtrabackup:InnoDB、XtraDB
Innobackupex 推荐:InnoDB、XtraDB、MyISAM。事务引擎数据不用锁表,非事务引擎数据需要锁表。

12.全备与恢复全备实验
数据准备
[[email protected] ~]# mysql -S /data/mysql/3306/mysql.sock -p

mysql> use app;
Database changed

mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|       29 |
+----------+
1 row in set (0.00 sec)

开始全备
[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=root --password=123 --socket=/data/mysql/3306/mysql.sock --no-timestamp /backup/mysql/3306/full

[[email protected] ~]# ls -lh /backup/mysql/3306/full/
total 13M
drwxr-x--- 2 root root   48 Sep  2 02:18 app 备份生产库
drwxr-x--- 2 root root   20 Sep  2 02:18 app01 备份生产库
-rw-r----- 1 root root  492 Sep  2 02:18 backup-my.cnf 配置文件备份
-rw-r----- 1 root root  739 Sep  2 02:18 ib_buffer_pool
-rw-r----- 1 root root  12M Sep  2 02:18 ibdata1 共享表空间备份
drwxr-x--- 2 root root 4.0K Sep  2 02:18 mysql 备份mysql数据库
drwxr-x--- 2 root root 8.0K Sep  2 02:18 performance_schema
drwxr-x--- 2 root root 8.0K Sep  2 02:18 sys
-rw-r----- 1 root root   64 Sep  2 02:18 xtrabackup_binlog_info binlog位置信息
-rw-r----- 1 root root  135 Sep  2 02:18 xtrabackup_checkpoints checkpoints信息
-rw-r----- 1 root root  643 Sep  2 02:18 xtrabackup_info xtrabackup信息
-rw-r----- 1 root root 2.5K Sep  2 02:18 xtrabackup_logfile xtrabackup日志文件

[[email protected] /backup/mysql/3306/full]# cat xtrabackup_binlog_info
mysql-bin.000006        838     a3ad97d4-b449-11e9-97c5-000c290c6b6c:1-151

[[email protected] /backup/mysql/3306/full]# cat xtrabackup_checkpoints
backup_type = full-backuped  #备份类型
from_lsn = 0                    #checkpoints起始点
to_lsn = 4024638               #checkpoints结束点
last_lsn = 4024647
compact = 0
recover_binlog_info = 0
flushed_lsn = 4024647

回滚未提交的事物日志数据
[[email protected] ~]# innobackupex --apply-log --use-memory=50M /backup/mysql/3306/full/

利用全备开始恢复数据
[[email protected] ~]# mysqladmin -S /data/mysql/3306/mysql.sock -p shutdown

[[email protected] ~]# netstat -tunlpa | grep mysql
[[email protected] ~]# ps -ef | grep mysql
root      7360  6721  0 02:30 pts/0    00:00:00 grep --color=auto mysql

模拟数据删除
[[email protected] ~]# mv /data/mysql/3306/data /data/mysql/3306/data_rm

[[email protected] ~]# mkdir -p /data/mysql/3306/data

[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --copy-back --rsync /backup/mysql/3306/full/
或者# mv /backup/mysql/3306/full/* /data/mysql/3306/data/

[[email protected] ~]# chown -R mysql:mysql /data/mysql/3306/data

[[email protected] ~]# mysqld --defaults-file=/data/mysql/3306/my.cnf &

[[email protected] ~]# ps -ef | grep mysql
mysql     6289  6721  1 02:38 pts/0    00:00:00 mysqld --defaults-file=/data/mysql/3306/my.cnf
root      6518  6721  0 02:38 pts/0    00:00:00 grep --color=auto mysql
[[email protected] ~]# netstat -tunlpa | grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      7489/mysqld

[[email protected] ~]# mysql -S /data/mysql/3306/mysql.sock -p -e "select count(*) from app.t1;"
Enter password:
+----------+
| count(*) |
+----------+
|       29 |
+----------+
恢复成功

13.增量备份与增量恢复
第一次增量备份是基于全备进行的。
之后的增量备份是基于上一次的增量。

先进行全备:
[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=root --password=123 --socket=/data/mysql/3306/mysql.sock --no-timestamp /backup/base_full

增加模拟数据,然后做增量备份
[[email protected] ~]# mysql -S /data/mysql/3306/mysql.sock -p

mysql> use app;

mysql> insert into t1 values(30,‘zhouwanchun‘);
Query OK, 1 row affected (0.01 sec)

mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|       30 |
+----------+
1 row in set (0.00 sec)

开始做第一次增量备份
[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=root --password=123 --socket=/data/mysql/3306/mysql.sock --no-timestamp --incremental-basedir=/backup/base_full --incremental /backup/one_inc

再次模拟增加数据,然后做第二次增量备份。
mysql> use app;

mysql> insert into t1 values(31,‘zhouwanchun‘);
Query OK, 1 row affected (0.01 sec)

mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|       31 |
+----------+
1 row in set (0.00 sec)

[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=root --password=123 --socket=/data/mysql/3306/mysql.sock --no-timestamp --parallel=3 --incremental-basedir=/backup/one_inc --incremental /backup/two_inc

开始做增量数据恢复
先恢复全备--再恢复第一次增量--然后再恢复第二次增量--以此类推

应用redo日志恢复全备数据
非最后一次合并增量数据一定要加--redo-only参数,就是应用redo日志恢复数据,而不执行undo回滚未提交的数据。等到最后一次增量合并完成后再进行undo回滚数据。
[[email protected] ~]# innobackupex --apply-log --use-memory=32M --redo-only /backup/base_full/

合并第一次的增量数据到全备数据目录
[[email protected] ~]# innobackupex --apply-log --use-memory=32M --redo-only --incremental-dir=/backup/one_inc /backup/base_full/

合并第二次的增量数据到全备数据目录
[[email protected] ~]# innobackupex --apply-log --use-memory=32M --incremental-dir=/backup/two_inc /backup/base_full/

对最后的全量数据做redo日志应用,执行undo回滚数据
[[email protected] ~]# innobackupex --apply-log --use-memory=32M /backup/base_full/
[[email protected] ~]# mkdir -p /data/mysql/3306/data

开始恢复数据
[[email protected] ~]# mysqladmin -S /data/mysql/3306/mysql.sock -p shutdown
[[email protected] ~]# netstat -lnp | grep mysql
[[email protected] ~]# mv /data/mysql/3306/data /data/mysql/3306/data_rm2

[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --copy-back --rsync /backup/base_full/

[[email protected] ~]# chown -R mysql.mysql /data/mysql/3306/data
[[email protected] ~]# mysqld --defaults-file=/data/mysql/3306/my.cnf &

[[email protected] ~]# mysql -S /data/mysql/3306/mysql.sock -p -e "select count(*) from app.t1;"
Enter password:
+----------+
| count(*) |
+----------+
|       31 |
+----------+

中小型企业MySQL Xtrabackup物理增量恢复实战
完整物理恢复数据库数据,必要条件:
1.有XBK全备。
2.有全备之后所有的XBK增量。
3.有最后一次XBK增量以后的所有binlog日志文件。
[[email protected] ~]# mysql -S /data/mysql/3306/mysql.sock -p

mysql> use app01;

mysql> create table t1(id int not null primary key auto_increment,name varchar(64) not null);

mysql> insert into t1(name) values(‘zhouwanchun‘);
mysql> insert into t1(name) values(‘zhouwanchun‘);
mysql> insert into t1(name) values(‘zhouwanchun‘);

mysql> select * from t1;
+----+-------------+
| id | name        |
+----+-------------+
|  1 | zhouwanchun |
|  2 | zhouwanchun |
|  3 | zhouwanchun |
+----+-------------+
3 rows in set (0.00 sec)

先模拟3月21日0点开始对数据库进行全备
[[email protected] ~]# date -s "2018-03-21"
[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=root --password=123 --socket=/data/mysql/3306/mysql.sock --no-timestamp /backup/new_base_full

然后模拟3月21日0点全备之后(0:00-24:00)用户继续写入数据
mysql> use app01;
mysql> insert into t1(name) values(‘zhouwanchun‘);
mysql> insert into t1(name) values(‘zhouwanchun‘);
mysql> insert into t1(name) values(‘zhouwanchun‘);

mysql> select * from t1;
+----+-------------+
| id | name        |
+----+-------------+
|  1 | zhouwanchun |
|  2 | zhouwanchun |
|  3 | zhouwanchun |
|  4 | zhouwanchun |
|  5 | zhouwanchun |
|  6 | zhouwanchun |
+----+-------------+
6 rows in set (0.00 sec)

然后在3月22日0点做增量备份
[[email protected] ~]# date -s "2018-03-22"
[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=root --password=123 --socket=/data/mysql/3306/mysql.sock --no-timestamp --incremental-basedir=/backup/new_base_full --incremental /backup/new_one_inc

模拟在3月22日0点增量备份之后(0:00-24:00)用户继续写入数据
mysql> use app01;
mysql> insert into t1(name) values(‘zhouwanchun‘);
mysql> insert into t1(name) values(‘zhouwanchun‘);
mysql> insert into t1(name) values(‘zhouwanchun‘);

mysql> select * from t1;
+----+-------------+
| id | name        |
+----+-------------+
|  1 | zhouwanchun |
|  2 | zhouwanchun |
|  3 | zhouwanchun |
|  4 | zhouwanchun |
|  5 | zhouwanchun |
|  6 | zhouwanchun |
|  7 | zhouwanchun |
|  8 | zhouwanchun |
|  9 | zhouwanchun |
+----+-------------+
9 rows in set (0.00 sec)

模拟3月22日上午10:00管理员误删app01数据库
[[email protected] ~]# date -s "2018-03-22 10:00"

mysql> drop database app01;

这时候app01对应的业务瘫痪,经过排查发现app01数据库不复存在了。

移走binlog增量文件,防止二次破坏。
[[email protected] ~]# mkdir -p /backup/binlog
[[email protected] ~]# cp -a /data/mysql/3306/logs/ /backup/binlog/

开始合并之前全备和增量
[[email protected] ~]# innobackupex --apply-log --use-memory=32M --redo-only /backup/new_base_full/

[[email protected] ~]# innobackupex --apply-log --use-memory=32M --incremental-dir=/backup/new_one_inc /backup/new_base_full/

然后应用redo,回滚undo
[[email protected] ~]# innobackupex --apply-log --use-memory=32M /backup/new_base_full/

开始恢复binlog日志数据
因为3月22日0点-10点之间的所有数据,并不在全备里,也不在增量里。而是在binlog文件里。
[[email protected] ~]# cat /backup/new_one_inc/xtrabackup_binlog_info
mysql-bin.000009        2462    a3ad97d4-b449-11e9-97c5-000c290c6b6c:1-151,
af771b85-cce7-11e9-9e4c-000c290c6b6c:1-6,
e2333e39-d63d-11e9-a0de-000c290c6b6c:1-9

[[email protected] ~]# ls -l /backup/binlog/logs/
total 800
-rw-r----- 1 mysql mysql   1797 Aug 29  2019 mysql-bin.000001
-rw-r----- 1 mysql mysql    241 Aug 29  2019 mysql-bin.000002
-rw-r----- 1 mysql mysql    217 Aug 29  2019 mysql-bin.000003
-rw-r----- 1 mysql mysql 780070 Aug 29  2019 mysql-bin.000004
-rw-r----- 1 mysql mysql    217 Aug 29  2019 mysql-bin.000005
-rw-r----- 1 mysql mysql    861 Sep  2  2019 mysql-bin.000006
-rw-r----- 1 mysql mysql    217 Sep  2  2019 mysql-bin.000007
-rw-r----- 1 mysql mysql   1813 Sep 13  2019 mysql-bin.000008
-rw-r----- 1 mysql mysql   3432 Mar 22 10:00 mysql-bin.000009
-rw-r----- 1 mysql mysql    351 Sep 13  2019 mysql-bin.index

mysql> show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000009
         Position: 3432
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set: a3ad97d4-b449-11e9-97c5-000c290c6b6c:1-151,
af771b85-cce7-11e9-9e4c-000c290c6b6c:1-6,
e2333e39-d63d-11e9-a0de-000c290c6b6c:1-13
1 row in set (0.00 sec)

mysql> show binlog events in ‘mysql-bin.000009‘;

[[email protected] ~]# mysqlbinlog -d app01 --skip-gtids --include-gtids=‘e2333e39-d63d-11e9-a0de-000c290c6b6c:9-13‘ --exclude-gtids=‘e2333e39-d63d-11e9-a0de-000c290c6b6c:13‘ /backup/binlog/logs/mysql-bin.000009 > 1.sql

根据业务要么停库处理,要么对外禁止访问数据库。
[[email protected] ~]# iptables -I INPUT -p tcp --dport 3306 ! -s 10.0.0.11 -j DROP

进行全备和增量恢复
[[email protected] ~]# mysqladmin -S /data/mysql/3306/mysql.sock -p shutdown
[[email protected] ~]# netstat -lnp | grep mysql
[[email protected] ~]# mv /data/mysql/3306/data /data/mysql/3306/data_rm3

[[email protected] ~]# mkdir -p /data/mysql/3306/data
[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --copy-back --rsync /backup/new_base_full/

[[email protected] ~]# chown -R mysql.mysql /data/mysql/3306/data
[[email protected] ~]# mysqld --defaults-file=/data/mysql/3306/my.cnf &

[[email protected] ~]# mysql -S /data/mysql/3306/mysql.sock -p -e "select * from app01.t1;"
Enter password:
+----+-------------+
| id | name        |
+----+-------------+
|  1 | zhouwanchun |
|  2 | zhouwanchun |
|  3 | zhouwanchun |
|  4 | zhouwanchun |
|  5 | zhouwanchun |
|  6 | zhouwanchun |
+----+-------------+

最后恢复3月22日0点到10点的增量数据
[[email protected] ~]# mysql -S /data/mysql/3306/mysql.sock -p

mysql> set sql_log_bin=0;
mysql> source /root/1.sql;
mysql> set sql_log_bin=1;

mysql> select * from app01.t1;
+----+-------------+
| id | name        |
+----+-------------+
|  1 | zhouwanchun |
|  2 | zhouwanchun |
|  3 | zhouwanchun |
|  4 | zhouwanchun |
|  5 | zhouwanchun |
|  6 | zhouwanchun |
|  7 | zhouwanchun |
|  8 | zhouwanchun |
|  9 | zhouwanchun |
+----+-------------+
9 rows in set (0.00 sec)

使用XBK物理分库分表备份
必须开启独立表空间模式
mysql> show global variables like "innodb_file_per_table";
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.01 sec)

备份单个库app01
[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=root --password=123 --socket=/data/mysql/3306/mysql.sock --no-timestamp --databases="app01" /backup/app01_full

备份多个库
[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=root --password=123 --socket=/data/mysql/3306/mysql.sock --no-timestamp --databases="app app01" /backup/app_app01_full

备份单个表
[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=root --password=123 --socket=/data/mysql/3306/mysql.sock --no-timestamp --databases="app01.t1" /backup/app01_t1

备份多个表
[[email protected] ~]# innobackupex --defaults-file=/data/mysql/3306/my.cnf --user=root --password=123 --socket=/data/mysql/3306/mysql.sock --no-timestamp --databases="app01.t1 app.t1" /backup/app01_t1_app_t1
也可以使用--tables-file、--include参数等

使用XBK物理分库分表的恢复
[[email protected] ~]# innobackupex --apply-log --export /backup/app01_t1/

初始化一个数据库3307
[[email protected] ~]# mysqld --defaults-file=/data/mysql/3307/my.cnf --initialize-insecure
[[email protected] ~]# cat /data/mysql/3307/error.log
确保没有报错信息

[[email protected] ~]# cp -a /backup/app01_t1/* /data/mysql/3307/data/
cp: overwrite ‘/data/mysql/3307/data/ib_buffer_pool’? y
cp: overwrite ‘/data/mysql/3307/data/ibdata1’? y
cp: overwrite ‘/data/mysql/3307/data/ib_logfile0’? y
cp: overwrite ‘/data/mysql/3307/data/ib_logfile1’? y

[[email protected] ~]# chown -R mysql.mysql /data/mysql/3307/data
[[email protected] ~]# mysqld --defaults-file=/data/mysql/3307/my.cnf &

[[email protected] ~]# ps -ef | grep mysql
[[email protected] ~]# netstat -lnp | grep mysql

[[email protected] ~]# mysql -S /data/mysql/3307/mysql.sock

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| app01              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use app01;
Database changed

mysql> show tables;
+-----------------+
| Tables_in_app01 |
+-----------------+
| t1              |
+-----------------+
1 row in set (0.00 sec)

mysql> select * from t1;
+----+-------------+
| id | name        |
+----+-------------+
|  1 | zhouwanchun |
|  2 | zhouwanchun |
|  3 | zhouwanchun |
|  4 | zhouwanchun |
|  5 | zhouwanchun |
|  6 | zhouwanchun |
|  7 | zhouwanchun |
|  8 | zhouwanchun |
|  9 | zhouwanchun |
+----+-------------+
9 rows in set (0.00 sec)

如果有需要,可以通过mysqldump导出后恢复到生产库。

原文地址:https://www.cnblogs.com/zhouwanchun/p/11517528.html

时间: 2024-10-13 00:13:43

专职DBA-Xtrabackup物理备份恢复的相关文章

利用XtraBackup实现MySQL物理备份恢复

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠: (2)备份过程不会打断正在执行的事务: (3)能够基于压缩等功能节约磁盘空间和流量: (4)自动实现备份检验: (5)还原速度快: Xtrabackup中主要包含两个工具: xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构: in

XtraBackup物理备份(未测试)

XtraBackup物理备份 Percona XtraBackup是世界上唯一的开源,免费的MySQL热备份软件,为InnoDB和XtraDB 数据库执行非阻塞备份.使用Percona XtraBackup,可以实现以下优势: 快速可靠地完成的备份 备份期间的不间断事务处理 节省磁盘空间和网络带宽 自动备份验证 创建热InnoDB备份,而不暂停数据库 对MySQL进行增量备份 将压缩的MySQL备份压缩到另一个服务器 在MySQL服务器之间移动表 轻松创建新的MySQL主从 备份MySQL,而不

XtraBackup物理备份 阿里云的Mysql备份方案

XtraBackup物理备份 Percona XtraBackup是世界上唯一的开源,免费的MySQL热备份软件,为InnoDB和XtraDB 数据库执行非阻塞备份.使用Percona XtraBackup,可以实现以下优势: 快速可靠地完成的备份 备份期间的不间断事务处理 节省磁盘空间和网络带宽 自动备份验证 创建热InnoDB备份,而不暂停数据库 对MySQL进行增量备份 将压缩的MySQL备份压缩到另一个服务器 在MySQL服务器之间移动表 轻松创建新的MySQL主从 备份MySQL,而不

MariaDB xtrabackup物理备份与还原

xtrabackup物理备份 1.1 安装xtraback 安装依赖: [[email protected] ~]# yum install -y perl-DBD-MySQL perl-DBI perl-Time-HiRes libaio* 安装: [[email protected] ~]# rpm -ivh percona-xtrabackup-2.1.5-680.rhel6.x86_64.rpm Preparing... #################################

MySQL生产库之Xtrabackup物理备份

在生产环境中,我们一般采取mysqldump全库备份,但这对于大型数据库是不可用的,因为mysqldump是逻辑备份,备份和恢复的效率缓慢,根据个人经验给出一个临界值的话,500G以下的数据库可以用mysqldump来进行全库备份,500G以上的数据库则需要物理全库备份,甚至是增量备份.Xtrabackup是物理备份,其备份速度也因其物理特性远超逻辑备份的速度,而且Xtrabackup就是为了逻辑备份而生的,接下来演示一下Xtrabackup是如何完成对数据库的全备和增备的. 一:首先我们安装x

【MySQL】【备份】使用XtraBackup物理备份MySQL的流程

简介: ? XtraBackup包含两个主要的工具即:xtrabackup和innobackupex ? xtrabackup:只能备份InnoDB和XtraDB两种事务引擎的表,不支持备份非事务引擎的表. ? innobackupex:封装了xtrabackup的perl脚本,支持在全局读锁下的非事务表备份,支持无全局读锁下的事务表. 安装: ? 推荐安装percona公司的源然后yum安装 yum -y install https://www.percona.com/redir/downlo

mysql 开发进阶篇系列 47 xtrabackup (完全备份恢复,恢复后重启失败总结)

一. 完全备份恢复说明 xtrabackup二进制文件有一个xtrabackup --copy-back选项,它将备份复制到服务器的datadir目录下.下面是通过 --target-dir 指定完全备份文件的目录,还原到datadir目录下. xtrabackup --copy-back --target-dir=/data/backups/ 可以使用xtrabackup --move-back选项恢复备份.这个选项类似于xtrabackup --copy-back,唯一的区别是它将文件移动到

MySQL数据库之xtrabackup物理备份(一)

前言:说到数据库备份,我们知道可以用来对数据库进行备份的工具有mysqldump.mydumer.mysqlpump等等,实际工作中,机器上的数据库不大的话,都是用mysqldump工具来备份,这些备份工具各有优缺点,这里不详细介绍,今天分享另一个数据库备份工具,叫XtraBackup. 一.Xtrabackup介绍 1.官网说明 Percona XtraBackup可以在不阻止用户查询的情况下实现MySQL备份,因此非常适合拥有大数据集和无法承受长时间停机的关键任务应用程序的公司.作为开源解决

xtrabackup增量备份恢复

一.安装percona-xtrabackup 1.下载软件 percona-xtrabackup-2.2.10.tar.gz 下载网址 http://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.2.10/source/ 2.修改profile export LD_LIBRARY_PATH=/opt/mysql/lib 3.编译安装 tar zxvf percona-xtrabackup-2.2.10.tar.gz cd pe