【数据库运维】MYSQL备份恢复管理(下)

目录

五,mysql备份策略

3,策略三:mydumper备份数据库

案例一:备份数据库sc的信息

4,策略四:lvm快照从物理角度实现几乎热备的完全备份,配合二进制日志备份实现增量备份

案例:lvm备份

5,策略五:xtrabackup 备份数据库,实现完全热备份与增量热备份

案例一:完全备份

案例二:增量备份


五,mysql备份策略

3,策略三:mydumper备份数据库

(1)Mydumper安装

[root@node1 ~]# rz -E
rz waiting to receive.
[root@node1 ~]# ll

【数据库运维】MYSQL备份恢复管理(下)_第1张图片

[root@node1 ~]# yum localinstall mydumper-0.10.5-1.el7.x86_64.rpm

【数据库运维】MYSQL备份恢复管理(下)_第2张图片

(2)安装完后,查看产生了哪些文件

[root@node1 ~]# rpm -ql mydumper

/usr/bin/mydumper              备份

/usr/bin/myloader                 恢复

【数据库运维】MYSQL备份恢复管理(下)_第3张图片

案例一:备份数据库sc的信息

(1)查看数据库sc的详细信息

mysql8.0.30 [it]>select * from sc;

【数据库运维】MYSQL备份恢复管理(下)_第4张图片

备份

(1)备份数据库sc的信息

-B   指定数据路

-S    套接字

-o    指定备份的路径

[root@node1 ~]# mydumper -u root -p 123456 -B it -S /tmp/mysql.sock -o /backup/db/it

(2)上述命令备份的为目录,查询目录结构

[root@node1 ~]# tree /backup/db/it

【数据库运维】MYSQL备份恢复管理(下)_第5张图片

(3)查看文件metadata;

metadata:元数据 记录备份开始和结束时间,以及binlog日志文件位置

[root@node1 ~]# more /backup/db/it/metadata

【数据库运维】MYSQL备份恢复管理(下)_第6张图片

破坏数据库it

mysql8.0.30 [it]>drop database it;
mysql8.0.30 [(none)]>show databases;

【数据库运维】MYSQL备份恢复管理(下)_第7张图片

恢复

(1)恢复数据库it

[root@node1 ~]# myloader -u root -p 123456 -S /tmp/mysql.sock -d /backup/db/it -B it

(2)此时查看数据库it,发现已经恢复

mysql8.0.30 [(none)]>show databases;

【数据库运维】MYSQL备份恢复管理(下)_第8张图片

(3)查看it数据库中的信息,也已经被恢复

mysql8.0.30 [it]>select * from it;

【数据库运维】MYSQL备份恢复管理(下)_第9张图片

4,策略四:lvm快照从物理角度实现几乎热备的完全备份,配合二进制日志备份实现增量备份

速度快适 合比较烦忙的数据库

前提:

数据文件要在逻辑卷上;

此逻辑卷所在卷组必须有足够空间使用快照卷;

数据文件和事务日志要在同一个逻辑卷上;

前提:MySQL数据lv和将要创建的快照要在同一vg,vg要有足够的空间存储

优点

几乎是热备(创建快照前把表上锁,创建完毕后立即释放)

支持所有的存储引擎

备份速度快

无需使用昂贵的商业软件(操作系统级别的)

缺点

可能需要部门协调(使用操作系统级别的命令,DBA一般没有权限)

无法预计服务停止时间

数据如果分布在多个卷上比较麻烦

操作流程

1)锁表 flush table with read lock

2)查看position号并记录,便于后期恢复 show master status

3)创建snapshot快照 create snapshop

4)解表 unlock tables

5)挂载snapshot

6)拷贝snapshot数据,进行备份。备份整个数据库之前,要关闭mysql服务(保护ibdata1文件)

7)卸载

8)移除快照

案例:lvm备份

准备工作如下:

(1)添加一块新的硬盘,大小为12G

【数据库运维】MYSQL备份恢复管理(下)_第10张图片

(2)查看是否识别

[root@node1 ~]# lsdlk

【数据库运维】MYSQL备份恢复管理(下)_第11张图片

把这5G做成逻辑卷,并把数据迁移

一、数据迁移到逻辑卷上

环境:数据文件不在逻辑卷上,那么需要将数据文件迁移到逻辑卷上

1、创建一个逻辑卷

(1)创建卷组名为msyql的逻辑卷

[root@node1 ~]# vgcreate mysql /dev/sdc

【数据库运维】MYSQL备份恢复管理(下)_第12张图片

(2)从mysql中创建6G的逻辑卷

[root@node1 ~]# lvcreate -n mysql_lv -L 6G mysql

(3)格式化为ext4格式

[root@node1 ~]# mkfs.ext4 /dev/mysql/mysql_lv

【数据库运维】MYSQL备份恢复管理(下)_第13张图片

2、将当前的mysql数据库迁移到逻辑卷上

(1)停止mysql服务

[root@node1 ~]# systemctl stop mysqld

(2)备份/usr/local/mysql所有的数据文件到指定的地方 (需要短暂的等待)

[root@node1 mysql]# tar czf /backup/db/all_db.tar.gz *

(3)挂载逻辑卷到当前mysql的数据目录里

[root@node1 mysql]# mount /dev/mysql/mysql_lv /usr/local/mysql

(4)挂载后,此目录下为空,所以需要提前备份

[root@node1 data]# ls /usr/local/mysql

(5)将刚刚备份的数据解压到数据目录里

[root@node1 ~]# tar xf /backup/db/all_db.tar.gz -C /usr/local/mysql/

查看解压后的数据

[root@node1 ~]# ll /usr/local/mysql/

【数据库运维】MYSQL备份恢复管理(下)_第14张图片

(6)启动数据库

[root@node1 ~]# systemctl start mysqld

此处如果启动失败,原因/data/DB/数据目录的权限变成了root,需要更改权限重新启动

[root@Admin ~]# chown mysql. -R /data/DB/ && service mysqld start

二、快照备份数据库

1、给数据库加读锁 ,保证了数据的一致性

2、给mysql的数据库所在的逻辑卷创建快照

3、解锁数据库

以上1-3需要在一个会话完成

[root@node1 ~]# echo "flush tables with read lock; system  lvcreate -n mysql_s -L 2G -s /dev/mysql/mysql_lv;unlock tables;" |mysql -uroot -p123456

[root@node1 ~]# lvs

【数据库运维】MYSQL备份恢复管理(下)_第15张图片

4、将快照挂载到临时目录里

(1)创建临时目录

[root@node1 ~]# mkdir /mnt/mysql

(2)将快照挂载到临时目录里

[root@node1 ~]# mount -o nouuid /dev/mysql/mysql_lv /mnt/mysql

(3)查看挂载目录/mnt/mysql

[root@node1 ~]# ll /mnt/mysql

【数据库运维】MYSQL备份恢复管理(下)_第16张图片

5、备份数据

(1)安装rsync

[root@node1 ~]# yum install rsync -y

【数据库运维】MYSQL备份恢复管理(下)_第17张图片

(2)创建/dbbackup目录

[root@node1 ~]# mkdir /dbbackup

(3)验证备份是否可用

[root@node1 ~]# rsync -av /mnt/mysql/ /dbbackup/

【数据库运维】MYSQL备份恢复管理(下)_第18张图片

修改配置文件

[mysqld]

#datadir=/usr/local/mysql/data     

#socket=/tmp/mysql.sock

basedir=/dbbackup

datadir=/dbbackup/data

【数据库运维】MYSQL备份恢复管理(下)_第19张图片

重启服务

[root@node1 ~]# systemctl restart mysqld

登录数据库查看是否能够看到数据库的信息

mysql [(none)]>select * from it.sc;

【数据库运维】MYSQL备份恢复管理(下)_第20张图片

将配置文件改回去

[mysqld]

datadir=/usr/local/mysql/data     

socket=/tmp/mysql.sock

#basedir=/dbbackup

#datadir=/dbbackup/data

【数据库运维】MYSQL备份恢复管理(下)_第21张图片

并重启服务

[root@node1 data]# systemctl restart mysqld

6、卸载快照并删除

[root@node1 data]# umount /mnt/mysql
[root@node1 data]# ll /mnt/mysql

【数据库运维】MYSQL备份恢复管理(下)_第22张图片

[root@node1 data]# lvremove /dev/mysql/mysql_lv

5,策略五:xtrabackup 备份数据库,实现完全热备份与增量热备份

(MyISAM是温备份,InnoDB是热备 份)Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。

Xtrabackup有两个主要的工具:xtrabackup、innobackupex

xtrabackup 只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表。

innobackupex 是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚

本封装,封装了xtrabackup。主要是为了方便的同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢复后作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。

支持完全备份和增量备份

备份过程快速、可靠;

备份过程不会打断正在执行的事务;

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

自动实现备份检验;

还原速度快;

使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。

(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。

(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。

(4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

(5)backup-my.cnf —— 备份命令用到的配置选项信息;

下载percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm安装包

安装percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

[root@node1 ~]# yum localinstall percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

【数据库运维】MYSQL备份恢复管理(下)_第23张图片

案例一:完全备份

(1)查看当前所有的数据库信息

mysql [(none)]>show databases;

【数据库运维】MYSQL备份恢复管理(下)_第24张图片

(2)创建目录/server/bakcup

[root@node1 ~]# mkdir -p /server/backup

(3)将所有的数据库信息备份到目录/server/backup/下

[root@node1 ~]# innobackupex --user=root --password=123456 --socket=/tmp/mysql.sock /server/backup/

【数据库运维】MYSQL备份恢复管理(下)_第25张图片

(4)查看备份的结果,备份到了/server/backup/2023-04-06_11-02-29文件中

[root@node1 ~]# ll /server/backup

(5)查看文件/server/backup/2023-04-06_11-02-29,能看l到备份的数据库,gtid,日志文件等

[root@node1 ~]# ll /server/backup/2023-04-06_11-02-29

【数据库运维】MYSQL备份恢复管理(下)_第26张图片

(6)完全备份中恢复数据

--apply-log  应用日志

[root@node1 ~]# innobackupex --apply-log /server/backup/2023-04-06_11-02-29

【数据库运维】MYSQL备份恢复管理(下)_第27张图片

(7)停止数据库

[root@node1 ~]# systemctl stop mysqld

(8)清空目录/usr/local/mysql/data/*

[root@node1 ~]# rm -rf /usr/local/mysql/data/*

【数据库运维】MYSQL备份恢复管理(下)_第28张图片

(9)还原数据库到默认目录

--copy-back  还原

[root@node1 ~]# innobackupex --copy-back /server/backup/2023-04-06_11-02-29

【数据库运维】MYSQL备份恢复管理(下)_第29张图片

(10)恢复后的权限变为root,此时无法启动mysqld服务,需要修改权限为mysqld

[root@node1 ~]# ll /usr/local/mysql/data

【数据库运维】MYSQL备份恢复管理(下)_第30张图片

(11)修改数据文件属主属组

[root@node1 ~]# chown -R mysql.mysql /usr/local/mysql/data/

(12)启动数据库

[root@node1 ~]# systemctl restart mysqld

(13)此时查看数据库的所有信息如下所示:

[root@node1 ~]# mysql -uroot -p123456 -e 'show databases'

【数据库运维】MYSQL备份恢复管理(下)_第31张图片

(14)去掉时间戳,用自己给定的名称备份到目录/server/backup/下

--no-timestamp

[root@node1 backup]# innobackupex --user=root --password=123456 --socket=/tmp/mysql.sock  --no-timestamp /server/backup/full_`date +%F`

【数据库运维】MYSQL备份恢复管理(下)_第32张图片

(15)在目录/server/backup下面查看备份好的文件

[root@node1 backup]# ll

【数据库运维】MYSQL备份恢复管理(下)_第33张图片

案例二:增量备份

必须要有未压缩的全量备份文件目录,先全量再增量,此次使用前面全量备份

插入数据,增量备份

(1)此时的数据库it中的表sc的信息如下图所示:

mysql [it]>select * from sc;

【数据库运维】MYSQL备份恢复管理(下)_第34张图片

(2)给数据库it 中的表增加数据

mysql [it]>insert into sc values(2),(3),(4);
mysql [it]>select * from sc;

【数据库运维】MYSQL备份恢复管理(下)_第35张图片

(3)备份第一次的增量

指定备份类型的增量

--incremental

--incremental-basedir 指定完全备份的路径

[root@node1 backup]# innobackupex --incremental --user=root --password=123456 --socket=/tmp/mysql.sock /server/backup/incr_1 --no-timestamp --incremental-basedir=/server/backup/full_2023-04-06/

(4)此时在目录/server/back下面查看创建的增量备份文件incr_1

[root@node1 backup]# ll

【数据库运维】MYSQL备份恢复管理(下)_第36张图片

(5)再次插入数据,第二次增量备份

mysql [it]>insert into sc values(5),(6),(7);
mysql [it]>select * from sc;

【数据库运维】MYSQL备份恢复管理(下)_第37张图片

(6)在目录/server/backup下面备份第二次增量文件/incr_2

[root@node1 backup]# innobackupex --incremental --user=root --password=123456 --socket=/tmp/mysql.sock /server/backup/incr_2 --no-timestamp --incremental-basedir=/server/backup/incr_1/

【数据库运维】MYSQL备份恢复管理(下)_第38张图片

(7)查看第二次的增量文件

[root@node1 backup]# ll

【数据库运维】MYSQL备份恢复管理(下)_第39张图片

恢复数据

(1)首先恢复全备

[root@node1 backup]# innobackupex --apply-log --redo-only /server/backup/full_2023-04-06/

【数据库运维】MYSQL备份恢复管理(下)_第40张图片

(2)恢复第一次增量备份

[root@node1 backup]# innobackupex --apply-log --redo-only /server/backup/full_2023-04-06 --incremental-dir=/server/backup/incr_1

【数据库运维】MYSQL备份恢复管理(下)_第41张图片

(3)恢复第二次增量备份

[root@node1 backup]# innobackupex --apply-log --redo-only /server/backup/full_2023-04-06 --incremental-dir=/server/backup/incr_2

(4)停止数据库

[root@node1 backup]# systemctl stop mysqld

(5)模拟数据丢失

[root@node1 backup]# rm -rf /usr/local/mysql/data/*

(6)还原数据库到默认目录

[root@node1 backup]# innobackupex --copy-back /server/backup/full_2023-04-06

【数据库运维】MYSQL备份恢复管理(下)_第42张图片

(7)修改数据文件属主属组

[root@node1 backup]# chown -R mysql.mysql /usr/local/mysql/data/*

(8)启动数据库

[root@node1 backup]# systemctl restart mysqld

(9)查看数据是否恢复

[root@node1 backup]# mysql -uroot -p123456 -e 'use it;show tables;select * from sc'

【数据库运维】MYSQL备份恢复管理(下)_第43张图片

--stream=tar  压缩

--stream=tar  指定路径 | gzip    >  压缩路径

完全备份full_1并压缩到/server/backup/full_1.tar.gz

[root@node1 backup]# innobackupex --user=root --password=123456 --socket=/tmp/mysql.sock  --no-timestamp /server/backup/full_1 | gzip - > /server/backup/full_1.tar.gz

【数据库运维】MYSQL备份恢复管理(下)_第44张图片

[root@node1 backup]# ll

【数据库运维】MYSQL备份恢复管理(下)_第45张图片

你可能感兴趣的:(运维,数据库,mysql,服务器)