MySQL数据库备份以及常⽤备份⼯具集合
⼀、数据库备份种类
按照数据库⼤⼩备份,有四种类型,分别应⽤于不同场合,下⾯简要介绍⼀下:
1.1完全备份
这是⼤多数⼈常⽤的⽅式,它可以备份整个数据库,包含⽤户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多的时间和空间,所以,⼀般推荐⼀周做⼀次完全备份。
1.2事务⽇志备份
事务⽇志是⼀个单独的⽂件,它记录数据库的改变,备份的时候只需要复制⾃上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性,推荐每⼩时甚⾄更频繁的备份事务⽇志。
1.3差异备份
也叫增量备份。它是只备份数据库⼀部分的另⼀种⽅法,它不使⽤事务⽇志,相反,它使⽤整个数据库的⼀种新映象。它⽐最初的完全备份⼩,因为它只包含⾃上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。推荐每天做⼀次差异备份。
1.4⽂件备份
mysql视图和存储过程数据库可以由硬盘上的许多⽂件构成。如果这个数据库⾮常⼤,并且⼀个晚上也不能将它备份完,那么可以使⽤⽂件备份每晚备份数据库的⼀部分。由于⼀般情况下数据库不会⼤到必须使⽤多个⽂件存储,所以这种备份不是很常⽤。
按照数据库的状态可分为三种:
1.冷备份,此时数据库处于关闭状态,能够较好的保证数据库的完整性。
2.热备份,数据库正处于运⾏状态,这种⽅法依赖于数据库的[1] ⽇志⽂件进⾏备份。
3.逻辑备份,使⽤软件从数据库中提取数据并将结果写到⼀个⽂件上。
⼆、备份⼯具简介
mysql按照备份恢复⽅式分为逻辑备份和物理备份。逻辑备份是备份sql语句,在恢复的时候执⾏备份的sql语句实现数据库数据的重现,物理备份就是备份数据⽂件了,⽐较形象点就是cp下数据⽂件,但真正备份的时候⾃然不是的cp这么简单。
这2种备份各有优劣,⼀般来说,物理备份恢复速度⽐较快,占⽤空间⽐较⼤,逻辑备份速度⽐较慢,占⽤空间⽐较⼩。
2.1 mysqldump⼯具
Mysqldump是mysql⾃带的备份⼯具,⽬录在bin⽬录下⾯:/usr/local/mysql/bin/mysqldump,⽀持基于innodb的热备份。但是由于是逻辑备份,所以速度不是很快,适合备份数据⽐较⼩的场景。Mysqldump完全备份+⼆进制⽇志可以实现基于时间点的恢复。
对myisam存储引擎的表,只能使⽤温备份,这个时候要防⽌数据的写⼊,所以先加上读锁。这个时候也可以进⼊数据库⼿动加读锁,不过这样⽐较⿇烦,可以在mysqldump⼯具中直接有⼀个加锁的选择,就是 --lock-all-tables ,例如mysqldump --databases test --lock-all-tables --flush-logs > /tmp/backup_test_`date+%F-%H-%M`.sql。
如果是备份单张表,直接在库名字test后⾯加上表名字即可。
对于innodb存储引擎表,可以热备,不必对数据库进⾏加锁的操作,加⼀个选项可以进⾏热备份,--single-transaction,例如:mysqldump --databases test --single-transaction --flush-logs--master-data=2> /tmp/backup_test_`date +%F-%H-
%M`.sql。
PS:注意点,恢复的时候记得关闭⼆进制⽇志:
mysql> set sql_log_bin=0;
因为这是基于逻辑备份⽅式,所以执⾏sql会插⼊数据,会记录到⼆进制⽇志⾥⾯去,因为这事恢复,所以插⼊的⼆进制⽇志基本没有啥意思,可以关闭掉,缩短恢复时间。
2.2基于LVM快照备份
在物理备份中,有基于⽂件系统的物理备份(LVM的快照),也可以直接⽤tar之类的命令对整个数据库⽬录进⾏打包备份,
但是这些只能进⾏泠备份,不同的存储引擎备份的也不⼀样,myisam⾃动备份到表级别,⽽innodb不开启独⽴表空间的话只能备份整个数据库。
下⾯就介绍下使⽤LVM的快照功能进⾏备份为了安全,⾸先在数据库上施加读锁
mysql>FLUSH TABLES WITH READ LOCK
刷新⼀下⼆进制⽇志,便于做时间点恢复
mysql>FLUSH LOGS
然后创建快照卷
lvcreate –L 1G –s –n data-snap –p –r/dev/myvg/mydata
最后进⼊数据库释放读锁
UNLOCK TABLES
挂载快照卷进⾏备份
mount –r /dev/myvg/data-snap /mnt/snap
然后对/mnt/snap下的⽂件进⾏打包备份
还原的时候,关闭mysqld,然后备份⼆进制⽇志后将原来备份的⽂件还原进去,然后通过⼆进制⽇志还原到出错的时间点(通过⼆进制还原时间点的时候不要忘了暂时关闭⼆进制⽇志)
在2010年到2012年之间,mysql数据库部署在亚马逊的云环境中,他们提供了LVM快照,蛮⽅便快捷的,使⽤lvm快照,在亚马逊的万兆⽹络下,恢复起来也迅速⽆⽐。
2.3 tar包备份
0,准备从库第⼀次数据备份,临时锁所有表,开启窗⼝1
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+++++
| File | Position | Binlog_Do_DB |Binlog_Ignore_DB |
| mysql-bin.000003 | 194554 | | |
1 row in set (0.00 sec)
PS:这个窗⼝不能exit,要⼀直保持知道tar完包为⽌。
--重新开⼀个shell窗⼝,去数据⽂件⽬录tar包
开启窗⼝2
[root@myfstv_21_11 data]# tar -zcvf mysqla
tar -zcvf mysqla 压缩完毕
切换到窗⼝1,执⾏解锁命令
mysql> unlocktables;
Query OK, 0 rows affected (0.00 sec)
mysql>
copy tar包到另外⼀个mysql库服务器上⾯,覆盖data⽬录,然后重启mysql数据库服务。
2.4 percona提供的xtrabackup⼯具
⽀持innodb的物理热备份,⽀持完全备份,增量备份,⽽且速度⾮常快,⽀持innodb存储引起的数据在
不同数据库之间迁移,⽀持复制模式下的从机备份恢复备份恢复,为了让xtrabackup⽀持更多的功能扩展,可以设⽴独⽴表空间,打开innodb_file_per_table功能,启⽤之后可以⽀持单独的表备份。
⽀持在线热备与恢复
⼤数据量的时候,备份恢复都⽐较快。
xtrabackup可以实现完全备份,增量备份,以及部分备份。
xtrabackup备份原理
xtraBackup基于InnoDB的crash-recovery功能。它会复制innodb的data file,由于不锁表,复制出来的数据是不⼀致的,在恢复的时候使⽤crash-recovery,使得数据恢复⼀致。
InnoDB维护了⼀个redo log,⼜称为transaction log,事务⽇志,它包含了innodb数据的所有改动情况。当InnoDB启动的时候,它会先去检查data file和transaction log,并且会做⼆步操作:
xtraBackup在备份的时候,⼀页⼀页地复制innodb的数据,⽽且不锁定表,与此同时,XtraBackup还有另外⼀个线程监视着transactions log,⼀旦log发⽣变化,就把变化过的log pages复制⾛。为什么要急着复制⾛呢?因为transactions log⽂件⼤⼩有限,写满之后,就会从头再开始写,所以新数据可能会覆盖到旧的数据。
在prepare过程中,XtraBackup使⽤复制到的transactionslog对备份出来的innodb data file进⾏crash recovery。
国内windows服务器⽤户可以使⽤:
以上就是MySQL数据库备份以及常⽤备份⼯具汇总,希望⼤家可以喜欢。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。