欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Percona XtraBackup 备份还原篇

程序员文章站 2022-12-25 08:12:44
Percona XtraBackup 安装介绍篇已经对Percona XtraBackup的功能和安装做了比较详细的介绍,那么本篇我们直接进入主题,如何使用XtraBackup做备份、还原,下面主要介绍XtraBackup备份还原操作的细节和场景,疏漏之处难免存在,如有不足,敬请指出。本篇暂时不做原... ......

 

已经对Percona XtraBackup的功能和安装做了比较详细的介绍,那么本篇我们直接进入主题,如何使用XtraBackup做备份、还原,下面主要介绍XtraBackup备份还原操作的细节和场景,疏漏之处难免存在,如有不足,敬请指出。本篇暂时不做原理介绍,后续篇章"Percona XtraBackup 原理分析篇"再做介绍。

 

 

 

 

XtraBackup完整备份

 

备份的权限

 

    使用XtraBack做备份,需要连接到数据库服务器并在服务器上有相关目录操作权限,所以必须要有数据库的相关操作权限以及相关目录执行READ、WRITE以及EXECUTE(执行innobackupex 或xtrabackup 命令)的系统权限。下面我们来简单介绍一下:

 

    数据库所需的一些权限请参考下面表格,细节部分可以参考官方文档。此处不详细阐述!

   

   

MySQL 数据库权限

 权限描述

RELOAD/ LOCK TABLES

RELOAD权限是管理员级别权限,用来执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables,flush-threads, refresh, reload等命令的权限。XtraBackup在复制文件之前,必须先执行

FLUSH TABLES WITH READ LOCK FLUSH ENGINE LOGS

REPLICATION CLIENT

此权限是为了获取二进制日志位置(Position

CREATE TABLESPACE

此权限是为了导入表

PROCESS

此权限是因为要运行SHOW ENGINE INNODB STATUS命令,以及查看服务器上所有运行的线程。

SUPER

此权限是为了开启、关闭复制环境中的slave threads

CREATE

不是必须,Percon Server数据库才需要的。创建PERCONA_SCHEMA.xtrabackup_history的需要

INSERT

不是必须,跟上面权限一样,需要往PERCONA_SCHEMA.xtrabackup_history插入记录

SELECT

不是必须,跟上面权限一样,需要查询ERCONA_SCHEMA.xtrabackup_history中的记录

   

 

当然所需的最小权限如下所示,注意:这个仅仅是最小权限,实际情况中最好根据实际需求授予最小权限。不要放大不必要的权限。

 

 

mysql> use mysql;
Database changed
mysql> CREATE USER 'backuser'@'localhost' IDENTIFIED BY 'kkk123456';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT RELOAD, LOCK TABLES,PROCESS, REPLICATION CLIENT ON *.* TO 'backuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)
 
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
 
mysql> 

 

 

如果上面的权限不够的话,可以使用下面授权语句。

 

 

GRANT RELOAD, LOCK TABLES,PROCESS, REPLICATION CLIENT, CREATE TABLESPACE,SUPER ON *.* TO 'backuser'@'localhost';

 

 

系统账号授权相关目录的操作权限。如下所示:

 

 

[root@DB-Server ~]# chown -R mysql:mysql /data
[root@DB-Server ~]# su - mysql
-bash-3.2$ 

 

 

 

完整备份

 

 

 常用的完整备份(全备)命令如下所示

 

innobackupex  --user=backuser --password=kkk123456  /u02/mysql_backup/full/
innobackupex  --user=root --password=123456  /u02/mysql_backup/full/
innobackupex --defaults-file=/usr/my.cnf --user=backuser --password=kkk123456  /u02/mysql_backup/full
innobackupex --defaults-file=/usr/my.cnf --socket=/var/lib/mysql/mysql.sock --user=backuser --password=kkk123456  /u02/mysql_backup/full
参数--no-timestamp 表示不生成带时间戳的目录
innobackupex  --user=backuser --password=kkk123456  /u02/mysql_backup/full/ --no-timestamp

 

 注意:如果你指定了参数--defaults-file,那么此参数就必须位于第一个,否则就会报--defaults-file must be specified first on the command line

 

 

 我们先在测试数据库MyDB创建一个测试表,插入几条数据,后面做还原测试验证使用。

 

mysql> use MyDB;
Database changed
 
mysql> create table test(id  int primary key);
Query OK, 0 rows affected (0.13 sec)
 
mysql> insert into test
    -> values(1000);
Query OK, 1 row affected (0.01 sec)
 
mysql> insert into test
    -> values(2000);
Query OK, 1 row affected (0.01 sec)
 
mysql> insert into test
    -> values(3000);
Query OK, 1 row affected (0.01 sec)
 
mysql> 

 

 我们使用下面命令对MySQL做了一个完整备份,那么默认就会在目录/u02/mysql_backup/full/下生成一个日期时间格式的全备文件2017-07-19_17-22-45

 

   $ innobackupex --defaults-file=/usr/my.cnf --user=backuser --password=kkk123456  /u02/mysql_backup/full

 

 

 

 

 那么备份出来的文件以及内容是什么样的呢? 如下所示,你可以检查xtrabackup_checkpoints、xtrabackup_binlog_info、xtrabackup_info三个文件了解备份的一些详细信息,例如备份类型、是否压缩等等。

 

 

[root@DB-Server 2017-07-19_17-39-56]# ls -lrt
total 12380
drwxr-x--- 2 mysql mysql     4096 Jul 19 17:39 test
drwxr-x--- 2 mysql mysql     4096 Jul 19 17:39 performance_schema
drwxr-x--- 2 mysql mysql     4096 Jul 19 17:39 mysql
drwxr-x--- 2 mysql mysql     4096 Jul 19 17:39 MyDB
-rw-r----- 1 mysql mysql 12582912 Jul 19 17:39 ibdata1
-rw-r----- 1 mysql mysql     2560 Jul 19 17:39 xtrabackup_logfile
-rw-r----- 1 mysql mysql      545 Jul 19 17:39 xtrabackup_info
-rw-r----- 1 mysql mysql      113 Jul 19 17:39 xtrabackup_checkpoints
-rw-r----- 1 mysql mysql       25 Jul 19 17:39 xtrabackup_binlog_info
-rw-r----- 1 mysql mysql      418 Jul 19 17:39 backup-my.cnf
[root@DB-Server 2017-07-19_17-39-56]# more xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 1637691
last_lsn = 1637691
compact = 0
recover_binlog_info = 0
[root@DB-Server 2017-07-19_17-39-56]# more xtrabackup_binlog_info 
DB-Server-bin.000001    871
[root@DB-Server 2017-07-19_17-39-56]# more xtrabackup_info 
uuid = cfb5c2d8-6cca-11e7-8113-b083fe5532e5
name = 
tool_name = innobackupex
tool_command = --defaults-file=/usr/my.cnf --user=backuser --password=... /u02/mysql_backup/full
tool_version = 2.4.6
ibbackup_version = 2.4.6
server_version = 5.6.20-enterprise-commercial-advanced-log
start_time = 2017-07-19 17:39:56
end_time = 2017-07-19 17:39:58
lock_time = 0
binlog_pos = filename 'DB-Server-bin.000001', position '871'
innodb_from_lsn = 0
innodb_to_lsn = 1637691
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N