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

1、tar工具的使用mysql

 一、备份sql

(1)中止服务,3306端口关闭
数据库

image.png

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

image.png

(3)创建备份目录,归档服务器

image.png

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

二、还原ide

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

image.png

(2)关闭服务,systemctl stop mariadb性能

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

image.png

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

image.png

(4)开启服务,systemctl start mariadb

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

image.png


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

一、备份

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

开机添加硬盘扫描下,echo '- - -' > /sys/class/scsi_host/host0/scan,记得有每一个host都须要扫描下image.png

分区,分区时候记得更改硬盘分区文件系统,代码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

image.png

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

image.png

注:若是重启服务后提示错误没法迁移,将原数据库内mysql库复制到新库中重启便可

image.png

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

(4)基于快照备份

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

image.png

(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')

相比以前已经做出不少修改

image.png

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

image.png

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

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

image.png

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

image.png

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

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

lvremove /dev/vgdb/snap_dbbak

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

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

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

image.png

(11)此时发现只有逻辑卷快照时的备份,后面的增删改没有了,因此这里须要引入二进制日志。在利用二进制还原时候,要避免其余用户链接数据库产生数据变动,此处须要使用防火墙或者其它策略确保数据库只有本身一我的操做

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

image.png

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

image.png

往下翻

image.png

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

mysqlbinlog mysql-bin.000002 >> bl.sql

image.png

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

image.png

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

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


三、mysqldump的备份和误删除操做后的还原

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

image.png

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

image.png

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

image.png

(3)开始备份

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

image.png

(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');

最后表

image.png

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

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

mysql > set sql_log_bin=off;

      source /backups/db.sql;

此时完成彻底备份的还原

image.png

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

image.png

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

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

image.png

完成后,若是后续还有其它二进制日志,将其它二进制日志也追加到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这一步就够了

image.png

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

set sql_log_bin=off;

source  /data/incr.sql

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

image.pngimage.png

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

相关文章
相关标签/搜索