数据库MySQL(四)数据库备份,完整备份,增量备份,差异备份
数据库备份,完整备份,增量备份,差异备份;percona-xtrabackup的安装及使用,这里使用的是percona-xtrabackup-24.x86_64 版本
目录
一、关于备份
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)
更多推荐
所有评论(0)