一、tar工具的使用

 1、备份

(1)停止服务,3306端口关闭

Linux环境下实现MariaDB数据库的三种备份和还原_数据库

(2)看下配置文件有没有关键日志存放于其它目录的,检查/etc/my.cnf,再检查下/etc/my.cnf.d/下有没有配置文件放置其他地方,有的话也需要一起拷贝归档

Linux环境下实现MariaDB数据库的三种备份和还原_还原_02

(3)建立备份目录,归档

Linux环境下实现MariaDB数据库的三种备份和还原_数据库_03

(4)开启服务,备份完成

2、还原

(1)这里有个不小心输入删重要mysql库的命令,开始还原

Linux环境下实现MariaDB数据库的三种备份和还原_还原_04

(2)关闭服务,systemctl stop mariadb

(3)一定要注意配置文件和备份前的配置是否一样,拷贝刚才归档文件并解压至库里

Linux环境下实现MariaDB数据库的三种备份和还原_还原_05

(4)解压后文件注意权限,务必确保mysql.mysql权限

Linux环境下实现MariaDB数据库的三种备份和还原_备份 _06

(4)开启服务,systemctl start mariadb

(5)进入数据库,查看数据库,mysql又回来了

Linux环境下实现MariaDB数据库的三种备份和还原_还原_07


二、LVM逻辑卷快照实现几乎热备(实质还是冷备):将数据库内容在很短时间用逻辑卷快照备份下,之后先将数据库推上线,再处理快照中的内容,结合二进制日志还原

1、备份

(1)新加硬盘并建立逻辑卷分区

开机添加硬盘扫描下,echo '- - -' > /sys/class/scsi_host/host0/scan,记得有每个host都需要扫描下Linux环境下实现MariaDB数据库的三种备份和还原_备份 _08

分区,分区时候记得更改硬盘分区文件系统,代码8e,Linux LVM

pvcreate /dev/sdb1

vgcreate vgdb /dev/sdb1

lvcreate -n lvdb -L +6G /dev/vgdb ----->建立逻辑卷用来放置数据库数据

lvcreate -n lvdb -L +4G /dev/vgbin ----->建立逻辑卷用来单独放置二进制日志

mkfs.xfg /dev/vgdb/lvdb

mkfs.xfg /dev/vgdb/lvbin

mkdir -pv /data/{mysql,binlog}

mount /dev/vgdb/lvdb /data/mysql

mount /dev/vgdb/lvbin /data/binlog

Linux环境下实现MariaDB数据库的三种备份和还原_备份 _09

(3)数据迁移,需要更改配置文件,开启二进制日志功能,确保权限正确

Linux环境下实现MariaDB数据库的三种备份和还原_备份 _10

注:如果重启服务后提示错误无法迁移,将原数据库内mysql库复制到新库中重启即可

Linux环境下实现MariaDB数据库的三种备份和还原_备份 _11

附:清除二进制日志指令:reset master

(4)基于快照备份

lvcreate -p -r -s -n snap_dbbak -L 2G /dev/vgdb/lvdb,设置了只读属性

Linux环境下实现MariaDB数据库的三种备份和还原_备份 _12

(5)对数据做出修改,产生二进制日志变动

create database chenux

use chenux

create table info (name char(10),age tinyint,job varchar(20))

alter table info add id tinyint primary key first

insert into info values (1,'chenux',24,'driver')

相比之前已经作出很多修改

Linux环境下实现MariaDB数据库的三种备份和还原_备份 _13

POS点变化,说明从328往后的数据点都是在变化

Linux环境下实现MariaDB数据库的三种备份和还原_备份 _14

(6)做完逻辑卷快照后,对数据的更改会影响服务器性能能,也就是说旧的内容会添加到逻辑卷快照中,因此我们需要把快照里的数据导出来,对逻辑卷快照挂载

直接挂载mount /dev/vgdb/snap_dbbak /mnt会报错,因为快照snap_dbbak的逻辑卷uuid和lvdb逻辑卷uuid一样,所以挂载输入指令mount -o nouuid,norecovery /dev/vgdb/snap_dbbak  /mnt

Linux环境下实现MariaDB数据库的三种备份和还原_数据库_15

(7)为确保数据安全性,可以挂载完成后将挂载目录里的数据存放至其它设备中,因为实验环境,依旧在本机上操作

Linux环境下实现MariaDB数据库的三种备份和还原_还原_16

cp -a /mnt/* /backups,此处用cp -a,保留权限,此时相当于备份完成

(8)备份完成后,删除快照

lvremove /dev/vgdb/snap_dbbak

(9)模拟损坏,删库,之后跑路,不过被抓了回来需要负责到底

(10)还原开始,停止服务,拷贝原数据库内容到数据库存放目录,再开放数据库

systemctl stop mariadb;cp -av /backups/* mysql/

Linux环境下实现MariaDB数据库的三种备份和还原_还原_17

(11)此时发现只有逻辑卷快照时的备份,后面的增删改没有了,所以这里需要引入二进制日志。在利用二进制还原时候,要避免其他用户连接数据库产生数据变更,此处需要使用防火墙或者其它策略确保数据库只有自己一个人操作

引用之前的图片,此时利用二进制日志工具可以还原

Linux环境下实现MariaDB数据库的三种备份和还原_还原_18

mysqlbinlog --start-position=328 mysql-bin.000001,可以查看到内容

Linux环境下实现MariaDB数据库的三种备份和还原_备份 _19

往下翻

Linux环境下实现MariaDB数据库的三种备份和还原_还原_20

mysqlbinlog --start-position=328 mysql-bin.000001 > bl.sql

mysqlbinlog mysql-bin.000002 >> bl.sql

Linux环境下实现MariaDB数据库的三种备份和还原_数据库_21

导入后再打开二进制日志功能,发现数据回来了

Linux环境下实现MariaDB数据库的三种备份和还原_数据库_22

(12)还原后记得之前设置的防火墙或者其它拒绝访问策略再取消掉,完成

注意:如果删库用的是drop,不像实验中rm指令删除的,mybinlog BINLOG > *.sql,编辑该sql文件,将drop命令那行注释掉,再mysql < *.sql


3、mysqldump的备份和误删除操作后的还原

(1)准备环境,条件允许情况下,将二进制日志文件和数据库存放目录放到不同的磁盘中,而且二进制日志文件最好单独放在一个分区中

Linux环境下实现MariaDB数据库的三种备份和还原_还原_23

(2)加个数据库作为准备环境

Linux环境下实现MariaDB数据库的三种备份和还原_还原_24

做点修改,二进制日志产生变化

Linux环境下实现MariaDB数据库的三种备份和还原_数据库_25

(3)开始备份

mysqldump -A -F --single-transacation --master-data=2 | gzip > /backupsq/db.sql.gz

Linux环境下实现MariaDB数据库的三种备份和还原_还原_26

(4)备份完,继续修改点小数据,再删个表之后继续做点修改,此时模仿环境中数据库时时刻刻都有增删改操作,不能说是因为删了某个表就停止了其他增删改

修改:alter table students add job varchar(20);、update students set job='nurse' where stuid=1;

删除:drop tables teachers;

再修改:insert into students values(26,'Yang Guo',28,'M',NULL,NULL,'CEO');

最后表

Linux环境下实现MariaDB数据库的三种备份和还原_还原_27

(5)开始还原,还原过程中利用防火墙不允许其他人访问数据库

进入数据库,先暂时关闭临时会话的二进制日志,避免二进制日志重复记录导入过程

mysql > set sql_log_bin=off;

      source /backups/db.sql;

此时完成完全备份的还原

Linux环境下实现MariaDB数据库的三种备份和还原_数据库_28

(6)开始还原修改的数据,less /backups/db.sql,查看CHANGE MASTER TO信息

Linux环境下实现MariaDB数据库的三种备份和还原_还原_29

(7)利用工具将该日志导成sql数据库文件,并查找删除关键表的指令

mysqlbinlog /data/binlog/mysql-bin.000003 > /data/incr.sql

Linux环境下实现MariaDB数据库的三种备份和还原_还原_30

完成后,如果后续还有其它二进制日志,将其它二进制日志也追加到incr.sql:

mysqlbinlog /data/binlog/mysql-bin.000004 >> /data/incr.sql

mysqlbinlog /data/binlog/mysql-bin.000005 >> /data/incr.sql等等

不过我这里由于增删改不多,就mysqlbinlog /data/binlog/mysql-bin.000003 > /data/incr.sql这一步就够了

Linux环境下实现MariaDB数据库的三种备份和还原_备份 _31

(8)导入数据,不过导入之前需要关闭临时会话中的sql_log_bin,避免出现二进制日志重复记录的现象

set sql_log_bin=off;

source  /data/incr.sql

这下我们的teachers表回来了,修改的students表也还原了

Linux环境下实现MariaDB数据库的三种备份和还原_备份 _32Linux环境下实现MariaDB数据库的三种备份和还原_数据库_33

 (9)关闭之前的拒绝用户访问策略,完成