您的位置:首页 > 数据库 > MySQL

基于mysqldump及lvm snapshot备份mysql数据库

2014-04-22 21:38 615 查看
mysql备份类型主要有一下三种:
热备份:备份时服务照常在线,读写都不受影响;
温备份:备份时仅可进行读操作,需要申请锁;
冷备份:也叫离线备份,读写操作必须中止;
不同的存储引擎对备份的支持也是不一样的,MyISAM存储引擎可以使用LVM快照功能配合实现热备份,如果没有LVM,则只能实现温备份。而InnoDB则可以完全支持热备,可使用的热备工具有:xtrabackup, mysqldump等根据需要备份的数据集,备份方式有以下三种: 完全备份:备份全部需要备份的数据 增量备份:仅备份上次完全备份或增量备份以后变化的数据 差异备份:仅备份上次完全备份依赖变化的数据根据备份的方法,分为物理备份和逻辑备份 物理备份:直接cp数据文件,速度比较快; 逻辑备份:将数据导出至文本文件中,方便使用文本处理工具直接对其处理、可移植能力强;数据量过大时备份速度很慢;下面介绍mysqldump和snapshot用法备份数据库中的所有库:--all-databases
[root@localhost ~]# mysqldump -uroot -hlocalhost -p --all-databases > /tmp/all.sql
备份指定单个或多个库:--databases
[root@localhost ~]# mysqldump -uroot -hlocalhost -p --databases testdb test > /tmp/mult.sql
为了防止备份数据库时,某个用户正在往某个表里插入数据,需要在备份数据库对所有表加锁:--lock-all-tables,其他用户的读写会被阻塞
[root@localhost ~]# mysql -uroot -hlocalhost -p --databases --lock-all-tables hellodb > /tmp/hdb.sql
其他常用选项: --single-transaction: 如果某个表使用的存储引擎是Innodb存储引擎,能够对存储引擎实现热备,不能与--lock-all-tables同时使用 --events:备份事件调度器代码 --routines:备份存储过程或存储函数代码 --triggers:备份触发器 --flush-logs:备份前,请求到锁之后滚动日志 --master-data:备份时指定二进制日志文件及位置mysqldump的完整用法: 1、先使用--lock-all-tables请求锁或--single-transaction进行Innodb热备 2、滚动日志:--flush-logs 3、指定备份的数据库:--databases
[root@localhost ~]# mysqldump -uroot -hlocalhost -p --lock-all-tables --flush-logs --databases hellodb > /tmp/hdb.sql (温备)
[root@localhost ~]# mysqldump -uroot -hlocalhost -p --single-transaction --flush-logs --databases hellodb > /tmp/hdb.sql (对Innodb存储引擎做热备)
使用mysqldump+二进制文件进行时间点恢复 先备份testdb库
[root@localhost ~]# mysqldump -uroot -hlocalhost -p --lock-all-tables --flush-logs --databases testdb --master-data=2 > /tmp/hdb.sql
使用vim打开/tmp/hdb.sql查看当前二进制日志位置

之后在testdb数据库中再创建一个新表,加入两行数据
mysql> create table t1(Name char(30));
mysql> insert into t1 values ('lucy'),('tom');
然后再删除testdb数据库
mysql> drop database testdb;
查看删除testdb数据库之前的操作在二进制文件的位置
mysqlbinlog --start-position=106 mysql-bin.000002


[root@localhost mysql]# mysqlbinlog --start-position=106 --stop-position=470 mysql-bin.000002 > /tmp/hdb.1.inc.sql
mysql> set session sql_log_bin=0;(进入mysql,关闭二进制文件记录)
mysql> source /tmp/hdb.sql(导入testdb数据库完整备份)
mysql> source /tmp/hdb.1.inc.sql(恢复至删除testdb数据之前的数据)
验证数据库完整备份及完整备份后的数据是否恢复

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息