使用LVM快照进行数据库备份
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用LVM快照进行数据库备份相关的知识,希望对你有一定的参考价值。
mysql> show global varibable like ‘%log%‘;
sql_log_bin 是否记录二进制日志
mysql> set sql_log_bin=off; 临时关闭二进制日志
mysql> show master status;查看二进制日志
mysql> show binlog events in ‘mysql-bin.000001‘; 查看指定二进制文件内容
还原数据库时先关闭二进制文件
mysql> set sql_log_bin=off;
mysql> \. /root/students.sql
mysqldump
--database DB1,DB2,...
--all-databases
MyISAM:温备份
--lock-all-tables
--lock-tables
InnoDB:热备份
--single-transaction
--flush-logs
--events 备份事件
--routines存储过程和存储函数
--triggers触发器
--master-data{0|1|2}
逻辑备份:
1.浮点数据丢失精度
2.备份出来的数据可能比原数据大,压缩以后可大大节省空间
3.不适合对大数据库做完全备份
--------------------------------------------------------
对InnoDB:温备
mysql> flush tables with read lock ;
等待后台同步到数据文件后
show engine innodb status; 查看后台数据同步情况 Ibuf:
mvcc,repeatable-read 多版本并发控制
--single-transaction
此还原不写入2进制日志:
-----------------------------------------------
select * into outfile ‘/tmp/t1.txt‘ from t1; 备份
create table t1s like t1;先创建一张表结构相同的空表
load data infile ‘/tmp/t1.txt‘into table t1s;还原
---------------------------------------------------
# mysqlbinlog ‘/mydata/data/mysql-bin.00001‘
#at 605
# mysqlbinlog --start-position=605 /mydata/data/mysql-bin.00001 > /root/a.sql 从605开始到结束 从新执行一遍 并保存下来
create table tutors like tutor; 创建一张新表
truncte table tutor;清空表里的数据
set sql_log_bin=0; 关闭二进制日志
# source /root/a.sql; 恢复
---------------------------------------------
几乎热备: LVM
snapshot:
前提:
1.数据文件要在逻辑卷上
2.此逻辑卷所在卷组必须有足够空间使用快照卷
3.数据文件和事务日志要在同一个卷上
步骤:
1.打开会话施加读锁名锁定所有表;
mysql> flush tables with read lock;
mysql> flush logs;
2.通过另一个终端,保存二进制日志文件及相关位置信息;
$ mysql -uroot -p -e `show master status\G` > /path/to/master.info
3.创建快照卷
#lvcreate -L # -s -p r -n LV_NAME /path/to/source_lv
4.释放锁
mysql> unlock tables;
5.挂载快照卷,备份
mount
cp
6.删除快照卷
7.增量备份二进制日志
load data infile ‘/tmp/tutor.txt‘ info table tutors;
start transaction 启动事务
use jiaowu;
desc tuors;
insert into tutors (Tname) value (‘stu001‘);
select @@tx_isolation; 查看隔离级别
commit;提交事务
flush tables with read lock; 刷新表,并以只读方式锁表
执行完以后
flush logs;刷新日志
show master status; 确保当前二进制文件信息的位置
# mysql -e ‘show master status\G‘ > /backup/master-`date +%F`.info
创建快照卷,只读,大小50M
# lvcreate -L 50M -s -p r -n mydata-snap /dev/myvg/mydata
unlock tables;释放锁
mount /dev/myvg/mydata/mydata-snap /mnt -o ro 挂载
mkdir /backup/full-backup-2016-10-21/
[[email protected] data]# cp -a ./* /backup/full-backup-2016-10-21
umount /mnt
lvremove --force /dev/myvg/mydata-snap 删除快照
删除备份文件里的二进制日志
cat /backup/master-2016-10-21.info
事件挂文件了 就要基于事件来做限定
mysqlbinlog --start-datetime=‘2016-10-21 11:10:10‘ mysql-bin.00003 mysql-bin.00004 > /backup/incremental-`date +%F-%H-%M-%S`.sql;
[[email protected] data]# rm -rf ./* 删除数据
# cp -a /backup/full-backup-2016-10-21/* /mydata/data
# server mysqld start
mysql > set sql_log_bin=0
mysql > soure /backup/incremental -...
本文出自 “运维成长路” 博客,谢绝转载!
以上是关于使用LVM快照进行数据库备份的主要内容,如果未能解决你的问题,请参考以下文章