资讯专栏INFORMATION COLUMN

数据库备份之lvm快照热备

myeveryheart / 2480人阅读

摘要:采用缓冲方式将数据写入到文件中的。增删数据库时,文件不会自动收缩。单个数据库备份成为问题。所以在备份之前要查看后台进程状态,等没有写请求后再做备份。然后只需要将快照进行挂载,复制其中数据,在复制完成之后删除该快照即可备份学习参考

使用的是虚拟机环境,先在虚拟机中添加一块儿新的硬盘。然后给硬盘分区。注意给相关目录的权限,如果权限不够可能会报错。如/mnt,/var/lib/mysql

fdisk -l     #查看分区信息
pvcreate mysql_pv /dev/sdb #创建物理卷
vgcreate vgmysql /dev/sdb #创建卷组
lvcreate -L 3G -n lv0 vgmysql #创建逻辑卷
mkfs.ext4 /dev/vgmysql/lv0 #格式化挂载
mount /dev/vgmysql/lv0 /mnt #挂载逻辑卷
service mysqld stop #关闭mysql服务
cp -a /var/lib/mysql/* /mnt #将数据库数据拷贝到mnt目录下
umount /dev/vgmysql/lv0 #移除挂载信息
mount /dev/vgmysql/lv0 /var/lib/mysql/
service mysqld start #重启mysqld服务
mkdir /backup/mysql/binlog
mysql -uroot -p123456 -e "SHOW MASTER STATUS;" > /backup/mysql/binlog/binlog.pos

设置开机自动挂载,在/etc/fstab文件中配置。

最好不要采用在 /etc/fstab直接指定分区(如/dev/sdb1)的方法,因为设备的顺序编码在关闭或者开启服务器过程中可能发生改变,例如/dev/sdb1可能会变成/dev/sdb2。推荐使用UUID来配置自动挂载数据盘。

查询磁盘分区的UUID

blkid /dev/sdb1

UUID=一串数字:要挂载的磁盘分区的UUID

/var/lib/mysql:挂载目录

ext4:分区格式为ext4

defaults:挂载时所要设定的参数(只读,读写,启用quota等),输入defaults包括的参数有(rw、dev、exec、auto、nouser、async)
0:使用dump是否要记录,0为不需要,1为需要 2:2是开机时检查的顺序,boot系统文件为1,其他文件系统都为2,如不要检查就为0

**innodb表,一般情况下需要打开独立表空间模式innodb_file_per_table,将其值设为1.
检查独立表是否开启

mysql> show variables like "%per_table%";
Variable_name Value
innodb_file_per_table ON

1 row in set (0.00 sec)**

库名文件夹里面的表文件只是结构。而ibdata1文件才是数据库的真实数据存放文件。新版的Mysql默认引擎是innodb,所以默认会有ibdata1文件。
mysql采用缓冲方式将数据写入到ibdata1文件中的。当mysql运行时,对ibdata1进行拷贝会导致ibdata1文件中的数据出错。所以备份时要关闭mysql服务。
ibdata1文件会不断增大,无法向操作系统回收空间。容易导致线上出现过大的共享表空间文件,致使当前空间爆满。ibdata1文件达到一定程度时,会影响insert,update的速度。如果删表频繁的话,共享表空间产生的碎片会比较多。打开独立表空间,方便进行innodb表的碎片整理。
使用myISAM表引擎的数据库会分别创建3个文件:表结构,表索引,表数据空间。可以将某个数据库目录直接迁移到其他数据库也可以正常工作。
使用InnoDB时,默认将所有数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1文件。增删数据库时,ibdata1文件不会自动收缩。单个数据库备份成为问题。
因此设置innodb_file_per_table值为1,会修改innodb为独立表空间模式,使每个数据库的每个表都会生成一个数据空间。
在innodb表中,即使时请求到了读锁,InnoDB在后台依然可能会有事务进行读写操作。所以在备份之前要show engine innodb status;查看后台进程状态,等没有写请求后再做备份。

在给lv0做快照之前,先使用FLUSH TABLES和FLUSH TABLES WITH READ LOCK强行将所有OS的缓冲数据写入磁盘(类似于操作系统的sync命令),同时将数据库置为全局只读。并且要show engine innodb status.查看进程状态,没有请求后再进行备份。快照完成之后,再使用UNLOCK TABLES解锁。然后只需要将快照进行挂载,复制其中数据,在复制完成之后删除该快照即可

! /bin/bash

DATE=date +%Y%m%d
TIMESTAMP=date +%Y%m%d%H%M%S
HOSTNAME="127.0.0.1"
USERNAME="root"
PASSWORD=""
MYSQL="/usr/bin/mysql"
LVCREATE="/sbin/lvcreate"
LVREMOVE="/sbin/lvremove"
MOUNT="/bin/mount"
UMOUNT="/bin/umount"
TAR="/bin/tar"
SNAP_SIZE=0.3G
SNAP_MYSQL=mysql_snapshot
MOUNT_POINT=/mnt

EXEC_MySQL="
FLUSH TABLES;
FLUSH TABLES WITH READ LOCK;

FLUSH LOGS;
! $LVCREATE -s -L$SNAP_SIZE -n $SNAP_MYSQL /dev/vgmysql/lv0
UNLOCK TABLES;"

echo "$EXEC_MySQL" | $MYSQL -u$USERNAME -p$PASSWORD -h$HOSTNAME

if [ ! -d $MOUNT_POINT/$DATE ];then

mkdir $MOUNT_POINT/$DATE
chmod -R 777 $MOUNT_POINT/$DATE

fi

$MOUNT /dev/vgmysql/$SNAP_MYSQL $MOUNT_POINT/$DATE

cd /root
$TAR -zcvf ${TIMESTAMP}.tgz $MOUNT_POINT/$DATE

$UMOUNT $MOUNT_POINT/$DATE
$LVREMOVE -f /dev/vgmysql/$SNAP_MYSQL

mysql备份学习参考https://cloud.tencent.com/dev...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/46222.html

相关文章

  • 据库备份lvm快照热备

    摘要:采用缓冲方式将数据写入到文件中的。增删数据库时,文件不会自动收缩。单个数据库备份成为问题。所以在备份之前要查看后台进程状态,等没有写请求后再做备份。然后只需要将快照进行挂载,复制其中数据,在复制完成之后删除该快照即可备份学习参考 使用的是虚拟机环境,先在虚拟机中添加一块儿新的硬盘。然后给硬盘分区。注意给相关目录的权限,如果权限不够可能会报错。如/mnt,/var/lib/mysql f...

    yedf 评论0 收藏0
  • 据库备份lvm快照热备

    摘要:采用缓冲方式将数据写入到文件中的。增删数据库时,文件不会自动收缩。单个数据库备份成为问题。所以在备份之前要查看后台进程状态,等没有写请求后再做备份。然后只需要将快照进行挂载,复制其中数据,在复制完成之后删除该快照即可备份学习参考 使用的是虚拟机环境,先在虚拟机中添加一块儿新的硬盘。然后给硬盘分区。注意给相关目录的权限,如果权限不够可能会报错。如/mnt,/var/lib/mysql f...

    HtmlCssJs 评论0 收藏0
  • MySQL据库运维数据备份01

    摘要:注意,是大写的示例示例完成服务器上数据库实例的全量备份检查文件是否正常,这步很很很重要。 上篇文章介绍了MySQL主从复制中常见问题排查。在主从复制架构搭建完成之后,需要定期对数据进行备份,本篇文章开始就来介绍MySQL数据库的数据备份与恢复,由于备份及恢复内容较多,分多个小节介绍,本小节先来介绍MySQL数据库备份的相关概念及mysqldump逻辑备份工具。 1、备份类型(1)按照备...

    Simon 评论0 收藏0
  • MySQL据库运维数据备份03

    摘要:意思是逻辑卷管理,是环境下对磁盘分区进行管理的一种机制。假如实例已经使用了一段时间,新的数据已经在逻辑卷中了,现在需要备份。 上篇文章介绍了一下MySQL的数据备份与恢复第二部分内容,即使用Xtrabackup完成MySQL数据库的物理备份与恢复,但是Xtrabackup主要是针对于InnoDB表引擎格式的备份,其他存储引擎并不适用。本篇文章将介绍使用LVM完成MySQL的数据备份和恢...

    kgbook 评论0 收藏0
  • LVM、物理卷、逻辑卷、卷组、快照

    摘要:是什么关于简单的理解百度百科很详细,现在开发的一个项目,涉及到拍高清照片,项目盘很快被占满了,目前我想到的解决方式可能有虚拟目录指定到其他盘符或分区,但是还要修改项目中图片存放路径,很麻烦找一个分区到图片目录用先删除原有分区,再重建分区,起 LVM是什么 showImg(https://segmentfault.com/img/bVMXAo?w=350&h=237); 关于LVM简单...

    jeffrey_up 评论0 收藏0

发表评论

0条评论

myeveryheart

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<