JeeGit 官方论坛

找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

1

收听

0

听众

196

主题
发表于 2023-4-13 16:29:06 | 查看: 515| 回复: 0
https://blog.csdn.net/A66C19/article/details/127227114


数据库MySQL(四)数据库备份,完整备份,增量备份,差异备份

数据库MySQL(四)数据库备份,完整备份,增量备份,差异备份


Lxiyue888


已于 2022-10-12 23:31:22 修改


949
收藏 6
文章标签: 数据库 mysql sql
版权
目录


一、关于备份


1、备份原因和目标


2、备份技术


3、备份方式:完全备份、增量备份、差异备份


二、percona-xtrabackup


1、简介


2、获得软件包


3、安装


4、完全备份


5、增量备份


6、差异备份


一、关于备份
1、备份原因和目标
备份原因:丢、删


备份目标:数据的一致性、服务的可用性


2、备份技术
物理备份/冷备份:直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL。tar,cp,scp


逻辑备份/热备份:备份是建表、建库、插入等操作所执行的SQL语句(DDL DML DCL),适用于中小型数据库。mysqldump,mydumper


3、备份方式:完全备份、增量备份、差异备份
完全备份:
       每次对数据进行完整的备份,即对整个数据库的备份、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础。


增量备份
        只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。以上次完整备份或上次的增量备份的时间为时间点,仅备份这之间的数据变化,因而备份的数据量小,占用空间小,备份速度快。但恢复时,需要从上一次的完整备份起到最后一次增量备份依次恢复,如中间某次的备份数据损坏,将导致数据的丢失。


差异备份
        备份那些自从上次完全备份之后被修改过的所有文件,备份的时间起点是从上次完整备份起,备份数据量越来越大。恢复数据时,只需恢复上次的完全备份与最近的一次差异备份。


二、percona-xtrabackup
1、简介
        它是开源免费的支持 MySQL 数据库热备份的软件,它能对InnoDB 和 XtraDB 存储引擎的数据库非阻塞地备份。它不暂停服务创建 Innodb 热备份;为 mysql 做增量备;在 mysql 服务器之间做在线表迁移;使创建 replication 更加容易;备份 mysql 而不增加服务器的负载。
         percona 是一家老牌的 mysql 技术咨询公司。它不仅提供 mysql 的技术支持、培训、咨询,还发布了 mysq 的分支版本﹣ percona Server 。并围绕percona Server 还发布了一系列的 mysql 工具。


2、获得软件包
官方站点:https:www.percona.com


选择版本


















3、安装
安装yum仓库


[root@localhost ~]# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
YUM安装percona-xtrabackup


[root@localhost ~]# ls /etc/yum.repos.d/   
CentOS-Base.repo                mysql-community-source.repo
epel.repo                       percona-original-release.repo
mysql-community-debuginfo.repo  percona-prel-release.repo
mysql-community.repo

//这里看一下percona-xtrabackup的安装包有什么版本
[root@localhost ~]# yum list | grep percona-xtrabackup
percona-xtrabackup.x86_64                2.3.10-1.el7                  percona-release-x86_64
percona-xtrabackup-22.x86_64             2.2.13-1.el7                  percona-release-x86_64
percona-xtrabackup-22-debuginfo.x86_64   2.2.13-1.el7                  percona-release-x86_64
percona-xtrabackup-24.x86_64             2.4.26-1.el7                  percona-release-x86_64
percona-xtrabackup-24-debuginfo.x86_64   2.4.26-1.el7                  percona-release-x86_64
percona-xtrabackup-80.x86_64             8.0.29-22.1.el7               percona-release-x86_64
percona-xtrabackup-80-debuginfo.x86_64   8.0.29-22.1.el7               percona-release-x86_64
percona-xtrabackup-debuginfo.x86_64      2.3.10-1.el7                  percona-release-x86_64
percona-xtrabackup-test.x86_64           2.3.10-1.el7                  percona-release-x86_64
percona-xtrabackup-test-22.x86_64        2.2.13-1.el7                  percona-release-x86_64
percona-xtrabackup-test-24.x86_64        2.4.26-1.el7                  percona-release-x86_64
percona-xtrabackup-test-80.x86_64        8.0.29-22.1.el7               percona-release-x86_64

//这里我数据库的版本是57的
[root@localhost ~]# yum install -y percona-xtrabackup-24.x86_64
[root@localhost ~]# yum list | grep percona-xtrabackup    //看一下安装是否成功,有@就是已经安装了
percona-xtrabackup-24.x86_64             2.4.26-1.el7                  @percona-release-x86_64


percona-xtrbackup安装成功之后就是备份啦


4、完全备份
完全备份流程


innobackupex --user=root --password='Qian@123' /xtrabackup/full    //把备份点数据放在/xtrabackup/full目录下
ls /xtrabackup/full/    //查看备份目录,数据库,配置文件,日志文件
2022-10-12_09-07-58(这个是我们备份的时间)
[root@localhost ~]# cd /xtrabackup/full/2022-10-12_09-07-58/
[root@localhost 2022-10-12_09-07-58]# ls(可以看到我们备份的内容都在这了,可以提前看一下数据库的内容,是否和我们备份的内容一样,以免有些内容备份失败)
backup-my.cnf   ibdata1             sys                     xtrabackup_info
hhh             mysql               test1                   xtrabackup_logfile
ib_buffer_pool  performance_schema  xtrabackup_checkpoints

cat /xtrabackup/full/2022-10-09_16-02-34/xtrabackup_binlog_info  //查看二进制日志位置
//这里要开启binlog才能看得见,登录数据库,看一下binlog开了没有,OFF就是没开
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | OFF   |
+---------------+-------+
1 row in set (0.01 sec)
//去/etc/my.cnf里面开启二进制


完全恢复流程


systemctl stop mysqld    //停止数据库
rm -rf /var/lib/mysql/*    //清理环境(模拟损坏)
rm -rf /var/log/mysqld.log
innobackupex --apply-log /xtrabackup/full/2022-10-09_16-02-34/  //生成回滚日志,指定备份点
innobackupex --copy-back /xtrabackup/full/2022-10-09_16-02-34/  //恢复文件

//登录验证
[root@localhost ~]# ls -l /var/lib/mysql/
total 122920
drwxr-x---. 2 root root       20 Oct 12 09:48 hhh
-rw-r-----. 1 root root      436 Oct 12 09:48 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Oct 12 09:47 ibdata1
-rw-r-----. 1 root root 50331648 Oct 12 09:47 ib_logfile0
-rw-r-----. 1 root root 50331648 Oct 12 09:47 ib_logfile1
-rw-r-----. 1 root root 12582912 Oct 12 09:48 ibtmp1
drwxr-x---. 2 root root     4096 Oct 12 09:48 mysql
drwxr-x---. 2 root root     8192 Oct 12 09:48 performance_schema
drwxr-x---. 2 root root     8192 Oct 12 09:48 sys
drwxr-x---. 2 root root       20 Oct 12 09:48 test1
-rw-r-----. 1 root root      427 Oct 12 09:48 xtrabackup_info
-rw-r-----. 1 root root        1 Oct 12 09:48 xtrabackup_master_key_id
[root@localhost ~]# chown -R mysql.mysql /var/lib/mysql //修改属主和属组
[root@localhost ~]# ls -l /var/lib/mysql/
total 122920
drwxr-x---. 2 mysql mysql       20 Oct 12 09:48 hhh
-rw-r-----. 1 mysql mysql      436 Oct 12 09:48 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 Oct 12 09:47 ibdata1
-rw-r-----. 1 mysql mysql 50331648 Oct 12 09:47 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 Oct 12 09:47 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 Oct 12 09:48 ibtmp1
drwxr-x---. 2 mysql mysql     4096 Oct 12 09:48 mysql
drwxr-x---. 2 mysql mysql     8192 Oct 12 09:48 performance_schema
drwxr-x---. 2 mysql mysql     8192 Oct 12 09:48 sys
drwxr-x---. 2 mysql mysql       20 Oct 12 09:48 test1
-rw-r-----. 1 mysql mysql      427 Oct 12 09:48 xtrabackup_info
-rw-r-----. 1 mysql mysql        1 Oct 12 09:48 xtrabackup_master_key_id

systemctl start mysqld
mysql -uroot -p'Qian@123'


5、增量备份
增量备份流程


//准备一个数据库,写点内容
mysql> create database testdb;
Query OK, 1 row affected (0.00 sec)

mysql> use testdb;
Database changed

mysql> create table test(id int);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into test values(1);
Query OK, 1 row affected (0.01 sec)

mysql> select * from test;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)
[root@localhost ~]# rm -rf /xtrabackup/*
[root@localhost ~]# date 10110000    //修改一下时间(模拟)
[root@localhost ~]# innobackupex --user=root --password='Qian@123' /xtrabackup/    //做一次完整备份
[root@localhost ~]# ls /xtrabackup/
2022-10-11_00-00-51

[root@localhost ~]# date 10122207    //更新时间
[root@localhost ~]# mysql -uroot -p'Qian@123'    //更新数据库,再写点内容
mysql> insert into testdb.test values (2);
Query OK, 1 row affected (0.01 sec)
mysql> select * from testdb.test;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)
//basedir基于2022-10-11_00-00-51的备份会生成一个今天的备份
[root@localhost ~]# innobackupex --user=root --password='Qian@123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2022-10-11_00-00-51
221012 22:15:19 completed OK!    //完成备份
[root@localhost ~]# ls /xtrabackup/
2022-10-11_00-00-51  2022-10-12_22-15-17
//下一次的备份就可以基于2022-10-12_22-15-17的备份来完成备份


增量恢复流程


[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# ls /xtrabackup/2022-10-11_00-00-51/
backup-my.cnf   ibdata1             sys     xtrabackup_checkpoints
hhh             mysql               test1   xtrabackup_info
ib_buffer_pool  performance_schema  testdb  xtrabackup_logfile
[root@localhost ~]# rm -rf /var/lib/mysql/*
//回滚合并,这里只是2022-10-11_00-00-51的
[root@localhost ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-10-11_00-00-51

//回滚合并,这里是2022-10-12_22-15-17
[root@localhost ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-10-11_00-00-51 --incremental-dir=/xtrabackup/2022-10-12_22-15-17

//恢复备份,这里直接用2022-10-11_00-00-51,后面的备份已经跟他合并在一起了,直接恢复完整备份就可以了
[root@localhost ~]# innobackupex --copy-back /xtrabackup/2022-10-11_00-00-51/
[root@localhost ~]# chown -R mysql.mysql /var/lib/mysql/
[root@localhost ~]# ls -l /var/lib/mysql/
total 12328
drwxr-x---. 2 mysql mysql       20 Oct 12 22:33 hhh
-rw-r-----. 1 mysql mysql      436 Oct 12 22:33 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 Oct 12 22:33 ibdata1
drwxr-x---. 2 mysql mysql     4096 Oct 12 22:33 mysql
drwxr-x---. 2 mysql mysql     8192 Oct 12 22:33 performance_schema
drwxr-x---. 2 mysql mysql     8192 Oct 12 22:33 sys
drwxr-x---. 2 mysql mysql       20 Oct 12 22:33 test1
drwxr-x---. 2 mysql mysql       52 Oct 12 22:33 testdb
-rw-r-----. 1 mysql mysql      497 Oct 12 22:33 xtrabackup_info
-rw-r-----. 1 mysql mysql        1 Oct 12 22:33 xtrabackup_master_key_id
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# mysql -uroot -p'Qian@123'    //可以看到数据已经恢复了
mysql> select * from testdb.test;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.01 sec)




6、差异备份
差异备份流程


//更新一下数据库的内容,方便做测试
mysql> use testdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> create table test2(id int);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into test2 values(1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from test2;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)


//改一下时间,做一下完整备份
[root@localhost ~]# date 10090101
[root@localhost ~]# innobackupex --user=root --password='Qian@123' /xtrabackup
221009 01:01:10 completed OK!
[root@localhost ~]# ls /xtrabackup/
2022-10-09_01-01-07
//改个时间
[root@localhost ~]# date 10100000
//在表中再插个数据
[root@localhost ~]# mysql -uroot -p'Qian@123' -e 'insert into testdb.test2 values(2)'
//备份
[root@localhost ~]# innobackupex --user=root --password='Qian@123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2022-10-09_01-01-07
[root@localhost ~]# ls /xtrabackup/
2022-10-09_01-01-07  2022-10-10_00-06-54

[root@localhost ~]# date 10111111
[root@localhost ~]# mysql -uroot -p'Qian@123' -e 'insert into testdb.test2 values(3)'
[root@localhost ~]# innobackupex --user=root --password='Qian@123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2022-10-09_01-01-07
[root@localhost ~]# ls /xtrabackup/
2022-10-09_01-01-07  2022-10-10_00-06-54  2022-10-11_11-13-05



差异恢复流程


[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# rm -rf /var/lib/mysql/*
[root@localhost ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-10-09_01-01-07/
221011 11:16:11 completed OK!

[root@localhost ~]# innobackupex --apply-log --redo-only /xtrabackup/2022-10-09_01-01-07 --incremental-dir=/xtrabackup/2022-10-11_11-13-05
[root@localhost ~]# innobackupex --copy-back /xtrabackup/2022-10-09_01-01-07/
[root@localhost ~]# chown -R mysql.mysql /var/lib/mysql
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# mysql -uroot -p'Qian@123'
mysql> select * from testdb.test2;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.02 sec)


————————————————
版权声明:本文为CSDN博主「Lxiyue888」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/A66C19/article/details/127227114





您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|小黑屋|JeeGit 官方论坛 ( 吉ICP备19001578号-2|吉B2-20200006 )

GMT+8, 2024-5-20 12:58 , Processed in 0.039389 second(s), 17 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表