Percona 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
推荐阅读
-
mysql 开发进阶篇系列 44 物理备份与恢复( 热备份xtrabackup 工具介绍)
-
MySQL使用xtrabackup进行备份还原操作
-
MySQL使用xtrabackup进行备份还原操作
-
mysql 开发进阶篇系列 46 xtrabackup (选项说明,增加备份用户,完全备份案例)
-
mysql 开发进阶篇系列 47 xtrabackup (完全备份恢复,恢复后重启失败总结)
-
mysql 开发进阶篇系列 48 xtrabackup (增量备份与恢复)
-
MySQL-Xtrabackup备份还原
-
Percona XtraBackup 备份还原篇
-
xtrabackup备份还原MySQL数据库
-
mysql 开发进阶篇系列 46 xtrabackup (选项说明,增加备份用户,完全备份案例)