mysql备份工具Xtrabackup(五)

mysql和mariadb 关系 自行百度吧 

mysql和mariadb 关系 自行百度吧 

mysql和mariadb 关系 自行百度吧 

Xtrabackup介绍

Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁);mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适合。

Xtrabackup优点  

       1)备份速度快,物理备份可靠

  2)备份过程不会打断正在执行的事务(无需锁表)

  3)能够基于压缩等功能节约磁盘空间和流量

  4)自动备份校验

  5)还原速度快

  6)可以流传将备份传输到另外一台机器上

  7)在不增加服务器负载的情况备份数据

  8)物理备份工具,在同级数据量基础上,都要比逻辑备份性能要好的多。几十G到不超过TB级别的条件下。但在同数据量级别,物理备份恢复数据上有一定优势。

安装

下载 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  安装 rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm  下载安装的依赖 wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/libev-4.15-7.el7.x86_64.rpm  rpm -ivh libev-4.15-7.el7.x86_64.rpm  yum install perl-DBI yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL  yum -y install perl-Digest-MD5  rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm  rpm -ql percona-xtrabackup-24  发现 /usr/bin/innobackupex  #xtrabackup 的软连接

常用参数

1.命令格式  innobackupex <选项>


2.innobackupex命令
常用选项                     含义
--host                        主机名
--user                        用户名
--port                        端口号
--password               密码
--databases              数据库名
--no-timestamp       不用日期命名备份文件存储的子目录名

--databases=”库名”           //1个库
--databases=”库1  库2”  //多个库
--databases=”库1.表”     //1张表

常用选项                          含义
--redo-only                     日志合并
--apply-log                     准备恢复数据
--copy-back                    拷贝数据
--incremental  目录名      增量备份
--incremental-basedir=目录名    增量备份时,指定上一次备份数据存储的目录名
--incremental-dir=目录名            准备恢复数据时,指定增量备份数据存储的目录名

这里别搞混淆了 要懂 不然后面就迷糊了
--export                          导出表信息
import                            导入表空间

配置文件

不一定适合你的mysql 毕竟我yum安装的mariadb服务

不一定适合你的mysql 毕竟我yum安装的mariadb服务

不一定适合你的mysql 毕竟我yum安装的mariadb服务

相比二进制日志备份 这里做了修改 不把二进制放进data目录 直接放在mysql安装目录得了

[mysqld] basedir=/var/lib/mysql datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 log_bin=/var/lib/mysql/mysql-bin [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid  !includedir /etc/my.cnf.d

xtrabackup实践操作

全量备份

1  全量备份(所有数据库)

innobackupex  --defauults-file=/etc/my.cnf --user=root --password=123456 --backup /backup/  [root@tff_128 backup]#  [root@tff_128 backup]#  [root@tff_128 backup]#  [root@tff_128 backup]# pwd /backup [root@tff_128 backup]# ll 总用量 0 drwxr-x---. 6 root root 215 5月   9 20:28 2022-05-09_20-28-26 [root@tff_128 backup]#

2  删除某个数据库的表个别数据 

MariaDB [tff]> select * from bptest;             +------+------+ | id   | name | +------+------+ |    1 | d    | |    2 | d    | +------+------+ 2 rows in set (0.00 sec)  MariaDB [tff]> delete from bptest where id =1;      Query OK, 1 row affected (0.00 sec)  MariaDB [tff]> select * from bptest;           +------+------+ | id   | name | +------+------+ |    2 | d    | +------+------+ 1 row in set (0.00 sec)  MariaDB [tff]> 

3  执行回滚操作

innobackupex --apply-log /backup/2022-05-09_20-28-26/

4  停止服务

systemctl stop mariadb.service

5  移动数据

(保持数据库目录为空就行) 

个人建议数据先别删除 万一报错 还可以解决的

[root@tff_128 mysql]#  [root@tff_128 mysql]# pwd /var/lib/mysql [root@tff_128 mysql]# ll 总用量 98364 -rw-rw----. 1 mysql mysql    16384 5月   9 18:38 aria_log.00000001 -rw-rw----. 1 mysql mysql       52 5月   9 18:38 aria_log_control -rw-r-----. 1 mysql mysql 77594624 5月   9 18:44 ibdata1 -rw-r-----. 1 mysql mysql  5242880 5月   9 18:44 ib_logfile0 -rw-r-----. 1 mysql mysql  5242880 5月   9 07:37 ib_logfile1 -rw-r-----. 1 mysql mysql 12582912 5月   9 07:37 ibtmp1 drwxr-x---. 2 mysql mysql     4096 5月   9 07:35 mysql -rw-rw----. 1 mysql mysql      636 5月   9 18:38 mysql-bin.000001 -rw-rw----. 1 mysql mysql      993 5月   9 18:44 mysql-bin.000002 -rw-rw----. 1 mysql mysql       64 5月   9 18:38 mysql-bin.index srwxrwxrwx. 1 mysql mysql        0 5月   9 18:38 mysql.sock drwxr-x---. 2 mysql mysql     4096 5月   9 07:35 performance_schema drwxr-x---. 2 mysql mysql       38 5月   9 07:37 tff -rw-r-----. 1 mysql mysql       37 5月   9 07:37 xtrabackup_binlog_pos_innodb -rw-r-----. 1 mysql mysql      524 5月   9 07:37 xtrabackup_info drwxr-x---. 2 mysql mysql     8192 5月   9 07:35 zabbix [root@tff_128 mysql]# mkdir /tmp/mmmysql/ [root@tff_128 mysql]# mv * /tmp/mmmysql/ [root@tff_128 mysql]# ll 总用量 0 [root@tff_128 mysql]#

6  执行全量备份恢复

[root@tff_128 backup]# ll 总用量 4 drwxr-x---. 6 root root 4096 5月   9 20:29 2022-05-09_20-28-26 [root@tff_128 backup]#  innobackupex --defauults-file=/etc/my.cnf --copy-back /backup/2022-05-09_20-28-26/

7  防止服务启动失败

[root@tff_128 mysql]# ll 总用量 98332 -rw-r-----. 1 root root 77594624 5月   9 18:54 ibdata1 -rw-r-----. 1 root root  5242880 5月   9 18:54 ib_logfile0 -rw-r-----. 1 root root  5242880 5月   9 18:54 ib_logfile1 -rw-r-----. 1 root root 12582912 5月   9 18:54 ibtmp1 drwxr-x---. 2 root root     4096 5月   9 18:54 mysql drwxr-x---. 2 root root     4096 5月   9 18:54 performance_schema drwxr-x---. 2 root root       38 5月   9 18:54 tff -rw-r-----. 1 root root       36 5月   9 18:54 xtrabackup_binlog_pos_innodb -rw-r-----. 1 root root      507 5月   9 18:54 xtrabackup_info drwxr-x---. 2 root root     8192 5月   9 18:54 zabbix [root@tff_128 mysql]# pwd /var/lib/mysql [root@tff_128 mysql]# chown mysql:mysql -R /var/lib/mysql [root@tff_128 mysql]# ll 总用量 98332 -rw-r-----. 1 mysql mysql 77594624 5月   9 18:54 ibdata1 -rw-r-----. 1 mysql mysql  5242880 5月   9 18:54 ib_logfile0 -rw-r-----. 1 mysql mysql  5242880 5月   9 18:54 ib_logfile1 -rw-r-----. 1 mysql mysql 12582912 5月   9 18:54 ibtmp1 drwxr-x---. 2 mysql mysql     4096 5月   9 18:54 mysql drwxr-x---. 2 mysql mysql     4096 5月   9 18:54 performance_schema drwxr-x---. 2 mysql mysql       38 5月   9 18:54 tff -rw-r-----. 1 mysql mysql       36 5月   9 18:54 xtrabackup_binlog_pos_innodb -rw-r-----. 1 mysql mysql      507 5月   9 18:54 xtrabackup_info drwxr-x---. 2 mysql mysql     8192 5月   9 18:54 zabbix [root@tff_128 mysql]#

8  重新登录数据库 

查看数据 发现删除的数据回来了

[root@tff_128 mmmysql]# systemctl start mariadb.service  [root@tff_128 backup]# mysql -uroot -p123456 -e use tff;select * from bptest; +------+------+ | id   | name | +------+------+ |    1 | d    | |    2 | d    | +------+------+ [root@tff_128 backup]# 

增量备份

全量备份上面有了

全量备份上面有了

[root@tff_128 backup]# ll 总用量 4 drwxr-x---. 6 root root 4096 5月   9 20:29 2022-05-09_20-28-26

1  先往表里增加数据

MariaDB [tff]> insert into bptest values(3,'d'); ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id:    3 Current database: tff  Query OK, 1 row affected (0.01 sec)  MariaDB [tff]> insert into bptest values(4,'d'); Query OK, 1 row affected (0.01 sec)  MariaDB [tff]> select * from bptest;             +------+------+ | id   | name | +------+------+ |    1 | d    | |    2 | d    | |    3 | d    | |    4 | d    | +------+------+ 4 rows in set (0.00 sec)

2  第一次增量备份

--incremental-basedir=/backup/2022-05-09_20-28-26

innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/backup/2022-05-09_20-28-26 --incremental /backup/

第一次增量备份产生了

第一次增量备份产生了

[root@tff_128 backup]# ll 总用量 4 drwxr-x---. 6 root root 4096 5月   9 20:39 2022-05-09_20-28-26 全量备份 drwxr-x---. 6 root root  241 5月   9 20:50 2022-05-09_20-50-26 增量备份1 [root@tff_128 backup]#

3  先往表里再增加一些数据

MariaDB [tff]> insert into bptest values(5,'d'); Query OK, 1 row affected (0.00 sec)  MariaDB [tff]> insert into bptest values(6,'d'); Query OK, 1 row affected (0.00 sec)  MariaDB [tff]> select * from bptest;             +------+------+ | id   | name | +------+------+ |    1 | d    | |    2 | d    | |    3 | d    | |    4 | d    | |    5 | d    | |    6 | d    | +------+------+ 6 rows in set (0.00 sec)  MariaDB [tff]> 

4  第二次增量备份

--incremental-basedir=/backup/2022-05-09_20-50-26

innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/backup/2022-05-09_20-50-26 --incremental /backup/

第二次增量备份产生了

第二次增量备份产生了

[root@tff_128 backup]# ll 总用量 4 drwxr-x---. 6 root root 4096 5月   9 20:39 2022-05-09_20-28-26 全量备份 drwxr-x---. 6 root root  241 5月   9 20:50 2022-05-09_20-50-26 增量备份1 drwxr-x---. 6 root root  241 5月   9 20:51 2022-05-09_20-51-57 增量备份2 [root@tff_128 backup]#

5  执行回滚操作 

(最后一次不用加--redo-only)

innobackupex --apply-log --redo-only /backup/2022-05-09_20-28-26   innobackupex --apply-log --redo-only /backup/2022-05-09_20-28-26  --incremental-dir=/backup/2022-05-09_20-50-26  innobackupex --apply-log  /backup/2022-05-09_20-28-26 --incremental-dir=/backup/2022-05-09_20-51-57

6  往表里删除一些数据

MariaDB [tff]> select * from bptest; +------+------+ | id   | name | +------+------+ |    1 | d    | |    2 | d    | |    3 | d    | |    4 | d    | |    5 | d    | |    6 | d    | +------+------+ 6 rows in set (0.00 sec)  MariaDB [tff]> delete from bptest where id =6;   Query OK, 1 row affected (0.00 sec)  MariaDB [tff]> delete from bptest where id =4; Query OK, 1 row affected (0.01 sec)  MariaDB [tff]> select * from bptest;           +------+------+ | id   | name | +------+------+ |    1 | d    | |    2 | d    | |    3 | d    | |    5 | d    | +------+------+ 4 rows in set (0.00 sec)

7  停止服务 移动数据

(保持data目录为空就行)

 个人建议数据先别删除 万一报错 还可以解决的

systemctl stop mariadb.service  rm -rf /tmp/mmmysql/* mv /var/lib/mysql/* /tmp/mmmysql/

8  执行增量恢复

innobackupex --copy-back /backup/2022-05-09_20-28-26/

9   防止服务启动失败

chown -R mysql:mysql /var/lib/mysql/

10  重新登录数据库

查看数据 发现数据回来了

[root@tff_128 mysql]# systemctl start mariadb.service [root@tff_128 mysql]# mysql -uroot -p123456 -e use tff;select * from bptest; +------+------+ | id   | name | +------+------+ |    1 | d    | |    2 | d    | |    3 | d    | |    4 | d    | |    5 | d    | |    6 | d    | +------+------+ [root@tff_128 mysql]# 

注意点:

1 第n次增量备份  

--incremental-basedir=/backup/时间(这里时间都在变化 都是相对的上一次备份的时间)

 

2 执行回滚操作 

innobackupex --apply-log --redo-only /backup/2022-05-09_20-28-26 (--redo-only /backup/时间 (时间都是全量备份的时间))