MySQL备份之xtrabackup

MySQL备份之xtrabackup

为什么要学这个工具

背景

一个合格的运维工程师或者dba工程师,如果有从事数据库方面的话,首先需要做的就是备份,如果没有备份,出现问题的话,你的业务就会出问题,你的工作甚至会。。。

所以备份是重要的,但光有备份还不行,备份后如果出现问题,你还得使用备份数据来恢复,但恢复数据的时间一般都是很长的,不符合业务需求,所以一个快速备份与恢复的软件就很有必要。

就像前文给大家看的微盟数据库被删。。最后是腾讯云的工程师协助进行数据恢复

xtrabackup工具

Percona-xtrabackup是 Percona公司开发的一个用于MySQL数据库物理热备的备份工具,支持MySQL、Percona server和MariaDB,开源免费,是目前较为受欢迎的主流备份工具。xtrabackup只能备份innoDB和xtraDB两种数据引擎的表,而不能备份MyISAM数据表。

特点

  • 物理备份工具,拷贝数据文件
  • 备份和恢复数据的速度非常快,安全可靠
  • 在备份期间执行的事务不会间断,备份innodb数据不影响业务
  • 备份期间不增加太多数据库的性能压力
  • 支持对备份的数据自动校验
  • 运行全量,增量,压缩备份及流备份
  • 支持在线迁移表以及快速创建新的从库
  • 运行几乎所有版本的mysqlmaridb

数据文件扩展名

.idb文件 以独立表空间存储的InnoDB引擎类型的数据文件扩展名
.ibdata文件 以共享表空间存储的InnoDB引擎类型的数据文件扩展名
.frm文件 存放于表相关的元数据(meta)信息及表结构的定义信息
.MYD文件 存放MyISAM引擎表的数据文件扩展名
.MYI文件 存放MyISAM引擎表的索引信息文件扩展名

事务型引擎的ACID特性

目前为止,我们还未学习mysql的引擎,会在后面讲解,大家先了解下对于mysql的引擎是InnoDB

数据库引擎,就像是摩托车的发动机,有各种品牌的发动机

有了发动机,我们可以将摩托车跑起来,且无序关心它是怎么制造动力的

对于数据库的引擎,就是开发人员写好的一种程序,能够让运维不用关心数据是如何增删改查到磁盘上的,通过SQL语句,就可以数据。

因此数据库引擎就是一个用于存储、处理、保护数据的程序。

mysql支持如下图中的几种引擎

image-20210421160920493

查看当前mysql用的哪一个引擎(哪一款发动机)

[root@mysql-server56 3307]# mysql -uroot -pyuchao7777 -P3307 -h127.0.0.1 -e 'show variables like "storage_engine%";'
Warning: Using a password on the command line interface can be insecure.
+----------------+--------+
| Variable_name  | Value  |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+
[root@mysql-server56 3307]#

ACID

在MySQL中,InnoDB和MariaDB中的XtraDB都是事务型引擎,事务型引擎的共同特征是具备事务的4个特性,这4个特性分别是:

原子性(atomicity)

一致性(consistency)

隔离性(isolation)

持久性(durability)

又称为ACID特性。

image-20210421162058802

InnoDB日志名词

有关innodb引擎原理的知识,后面专门学习,这里不需要关心太多

需要了解下InnoDB日志的原理词汇

  • redo日志 redo日志,也称事务日志,是innodb引擎的重要组成部分,作用是记录innodb引擎中每一个数据发生的变化信息。主要用于保证innodb数据的完整性,以及丢数据后的恢复,同时可以有效提升数据库的io等性能。redo日志对应的配置参数为innodb_log_file_sizeinnodb_log_files_in_group
  • Undo日志 Undo是记录事务的逆向逻辑操作或者向物理操作对应的数据变化的内容,undo日志默认存放在共享表空间里面的ibdata*文件,和redo日志功能不同undo日志主要用于回滚数据库崩溃前未完整提交的事务数据,确保数据恢复前后一致。
  • LSN LSN,全拼log sequence number,中文是日志序列号,是一个64位的整型数字,LSN的作用是记录redo日志时,使用LSN唯一标识一条变化的数据。
  • checkpoint 用来标识数据库崩溃后,应恢复的redo log的起始点

Xtrabackup备份原理

工作原理流程

xtrabackup软件基于innodb等事务引擎自带的redo日志和undo功能来保证备份、恢复的数据一致性,确保数据可靠

redo日志文件会存储每一个table中的数据修改记录

image-20210421164340821

xtrabackup备份流程原理

  • xtrabackup程序开始备份时,该软件记录当前redo日志的位置(对应的LSN)号,且在后台启动一个进程持续监视redo日志文件变化,将变化的信息,写入到xtrabackup_logfile中
  • 针对所有的innodb数据文件进行复制,待inndob数据文件备份完成后
  • 执行命令flush tables with read lock,对整个数据库锁表
  • 然后再复制myisam非事务引擎的数据文件
  • 待所有的数据文件全都备份完毕后,获取binlog位置信息,也就是当前数据写到哪了
  • 解锁表unlock tables,恢复数据库的读写
  • 备份完成

图解

image-20210421163622553

原理可能目前看的一头雾水,不慌,实际搭建完毕后,再回过头梳理下。

安装

超哥的环境

[root@mysql-server56 3307]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@mysql-server56 3307]#
[root@mysql-server56 3307]# uname -r
3.10.0-1160.11.1.el7.x86_64

yum安装基础环境

[root@mysql-server56 3307]# yum install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL -y

安装xtrabackup,centos7版本

[root@mysql-server56 mysql_script]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

# yum本地安装
[root@mysql-server56 mysql_script]# yum localinstall percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm -y

# 查看
[root@mysql-server56 mysql_script]# ls -l `which xtrabackup innobackupex`
lrwxrwxrwx 1 root root       10 Apr 21 13:54 /usr/bin/innobackupex -> xtrabackup
-rwxr-xr-x 1 root root 21659096 Nov 23  2017 /usr/bin/xtrabackup

应用实践

命令介绍

Xtrabackup中主要包含两个工具:
xtrabackup:是用于热备innodb,xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。
常用选项:  
   --host     指定主机
   --user     指定用户名
   --password    指定密码
   --port     指定端口
   --databases     指定数据库
   --incremental    创建增量备份
   --incremental-basedir   指定包含完全备份的目录
   --incremental-dir      指定包含增量备份的目录   
   --apply-log        对备份进行预处理操作             

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
   --redo-only      不回滚未提交事务
   --copy-back     恢复备份目录

参数 image-20210421184633961

Xtrabackup命令是专门用于对InnoDB和XtraDB等事务引擎的数据库热备份的工具,不能用于备份MyISAM等其他类型的引擎数据,其主要特点是备份数据时完全不用锁表。

Innobackupex命令是将上述Xtrabackup命令使用perl脚本进行二次封装的工具,除了可以用于InnoDB和XtraDB等引擎之外,还可以备份MyISAM及多种引擎混合使用的场景,该命令的主要特点是备份事务引擎数据而不用锁表,可以备份非事务引擎数据,但要锁表。

DBA用的最多的是Innobackupex命令备份恢复

创建数据备份用户

[root@mysql-server56 mysql_script]# mysql -uroot -pyuchao7777 -P3307 -h127.0.0.1
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 44
Server version: 5.6.40-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create user 'backup'@'localhost' identified by 'chaoge888';
Query OK, 0 rows affected (0.00 sec)

# 回收用户默认权限
mysql> REVOKE ALL PRIVILEGES ON *.* FROM 'backup'@'localhost';
Query OK, 0 rows affected (0.00 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.00 sec)

(忽略此步骤)

创建mysql日志文件目录

[root@mysql-server56 ~]# mkdir -p /xtrabackup/{log,cnf,data,mysql}
[root@mysql-server56 ~]# chown -R mysql.mysql /xtrabackup/
[root@mysql-server56 /]# ls -l /xtrabackup/
total 0
drwxr-xr-x 2 mysql mysql 6 Apr 21 14:56 cnf
drwxr-xr-x 2 mysql mysql 6 Apr 21 14:56 log

编写新配置文件

# egrep -v "#|^$" /xtrabackup/cnf/my.cnf
[client]
user=root
password=yuchao7777

[mysqld]
basedir = /xtrabackup/mysql                    #<==增加MySQL根目录。
datadir = /xtrabackup/data                     #<==MySQL数据目录,Xtrabackup
                                               恢复数据时需要这个目录。
###########binlog############
log_bin = /xtrabackup/logs/mysql-bin  #<==二进制日志路径调整,尽可能在装数据库前就调整好。

expire_logs_days = 7

###########slow log###########
slow-query-log = ON    # 慢查询日志
long_query_time = 2 # 查询阈值,超过了该阈值则记录到慢查询日志中
log_queries_not_using_indexes = ON # 记录所有未使用索引的SQL,无论是否超过long_query_time所设置的值。
slow-query-log-file = /xtrabackup/logs/slow.log  #&
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值