LVM实现数据库备份还原,结合binlog恢复至最新状态

备份过程

1.实现LVM

fdisk  /dev/sdb                   #给硬盘分区
pvcreate  /dev/sdb1           #创建物理卷
vgcreate  vg0  /dev/sda1     #创建卷组
lvcreate -L  5G  -n lv_mysql  vg0   #创建逻辑卷
lvcreate -L  5G  -n lv_binlog  vg0
mkfs.xfs  /dev/vg0/lv_mysql      #格式化
mkfs.xfs  /dev/vg0/lv_binlog
mkdir -pv /data/{mysql,binlog}  #创建两个文件存放数据库和 二进制
vim /etc/fstab    #永久挂载

mount -a    #使挂载生效
chown -R mysql.mysql   /data/    #修改文件权限

vim /etc/my.cnf   #修改数据库配置文件 迁移数据库                 
	datadir=/data/mysql
	log_bin=/data/binlog/mysql-bin

systemctl restart mariadb  #重启服务使配置文件生效        
2.
mysql>flush  tables with  read lock;   加读锁 暂时锁定数据库 不允许数据库进行写操作
mysql>flush logs    生成新的切换日志
mysql>show master logs 记录日志文件名和position.如mysql-bin.000004,245  做完快照时当前的状态mysql-bin.000004-245
mysql>flush logs   记录二进制日志 生成新的日志


3.对数据库数据做快照

lvcreate -L 1G -n lv_mysql_snap -s -p r   /dev/vg0/lv_mysql
4. 解锁  用户在访问,又生成新的日志文件
mysql>unlock tables;

5.备份快照的内容,挂载快照 备份结束用户可正常访问了

mount  -o nouuid,norecovery  /dev/vg0/lv_mysql_snap   /mnt
df #查看挂载

ls  /mnt/  #查看数据库文件


cp -a  /mnt/*  /backup/   #用cp备份文件
umount  /mnt    #取消挂载
lvremove  /dev/vg0/lv_mysql_snap   #删除快照

---------------------------------------------------------------------------------------------------------

还原过程

1.还原备份的数据文件

cp -av  /backup/*  /data/mysql/
systemctl start maraidb

2.利用二进制还原到数据库最新状态



flush table  with read lock;数据库暂时不能修改
mysqlbinlog  --start-position=245  mysql-bin.00004 >/backup/bin.sql
mysqlbinlog  mysql-bin.00005 >> /backup/bin.sql
3.
.vim /etc/my.cnf   临时暂时禁止用户连接
skip_networking    #加入此行
systemctl restart maraidb   #重启服务
mysql </backup/binlog    #恢复binlog中最新日志到数据库中 

4.恢复用户访问

vim /etc/my.cnf    
skip_networking   #删除此行
systemctl  restart   mariadb  #重启服务  还原数据库就要重启服务





猜你喜欢

转载自blog.csdn.net/weixin_41979048/article/details/80717809