基于lvm热备的数据库备份
MySQL备份的常见方法
1、mysqldump命令
2、数据库文件拷贝命令
3、主从数据库备份
第一和第二种方法都会中断运行MySQL一段时间,尤其是在数据量比较大的时候,中断的时间会比较长,这样同时也会造成网站的中断。
第三种方法虽然不会中断数据库,但主从经常会出现数据不一致的情况,而且要同时维护一台slave数据库,成本比较高。
下面介绍一种利用LVM的快照功能做MySQL数据库备份的方法。
1:提前的准备
首先,需要将MySQL的数据库目录放到LVM中。可以通过更改my.cnf的datadir参数来实现,也可以不改参数,用 ln -s 创建符号链接的方法将某一个数据库指向LVM中。
然后创建逻辑卷,代码如下
lvcreate -L10G -n mysql-data vgmysql mkfs.ext3 /dev/vg01/mysql-data mkdir /mysql/data mkdir /mysql/logbin mkdir /mysql/backup mount /dev/vgmysql/lvmysql /mysql/dta mount /dev/vgmysql/lvmlogbin /mysql/logbin mount /dev/vgmysql/lvmbackup /mysql/backup chown -R mysql:mysql /home/mysqldata ln -s /home/mysqldata/YOUR-DB /var/lib/mysql/YOUR-DB
- 开始给逻辑卷备份
备份之前需要将数据库表锁定,并且查看当前二进制日志以便恢复。然后打开表的锁(速度要快防止数据库锁定时间过长)。
flush tables with read lock 给数据库上读锁
show master status 查看当前二进制日志
(2).给/dev/vg01/mysql-data创建一个快照卷(需要在另一个终端操作)
lvcreate -n lvdata_snap -L 0.5G -s -p r /dev/vgmysql/lvdata
(3)解锁
unlock tables; 将数据库的读锁取消
(4)挂载lvm快照,并通过cp将备份移走
mount -o nouuid,norecovery /dev/vgmysql/lvdata_snap /mysql/lvmbackup
cp -a /mysql/lvmbackup /mysql/backup/lvm_$(date +%F_%T)
(5)模拟数据库丢失
删除掉/mysql/data 数据库文件的删除
- 模拟数据恢复
(1)数据恢复
systemctl stop mariadb.service cp -a /mysql/backup/lvm_2018-10-10_15\:17\:14/* /mysql/data/
systemctl start mariadb.service
(2)关闭远程访问,避免数据错误丢失
vim /etc/my.cnf
skip_networking
(3)恢复二进制日志
mysqlbinlog --start-position=245 /mysql/logbin.000004 > /root/bin.sql mysqlbinlog /mysql/logbin.000005 >> /root/bin.sql mysqlbinlog /mysql/logbin.000006 >> /root/bin.sql mysql < /root/bin.sql 数据恢复成功。
(4) 开启数据库访问
vim /etc/my.cnf
注释或删除该行skip_networking