Mysql的备份和恢复
备份之前应该了解的知识:
1:确定要备份的表的存储引擎是事务的还是非事务的,两种不同的引擎备份的方式在处理数据一致性方面是不太一样的.'
2:确定是要做增量备份还是全备份,增量备份只是备份每天增加的日志.优点是备份时间短,对负载压力也小,缺点是恢复的时候需要全备份加上增量备份的所有日志,恢复的时间比较长.全备份的优点是备份保持最新的备份,恢复的时候需要的时间也相对比较小,缺点是如果数据量比较大,则备份将花费很多的时间,对系统造成很大的压力.
3:备份必须确定MySql开启了log-bin选项,只有了bin-log,MySql才可以在必必要的时候做出完整的恢复,或者基于时间点的恢复,或者基于位置的恢复.
1:逻辑备份(温备)和物理备份(热备和冷备):
1>逻辑备份就是将数据库中的数据备份作为一个文本文件,可以用来查看和备份.常用的mysqldump,为了保证数据的一致性,MyISAM存储引擎在备份的时候需要加上-l参数,表示将所有的表的加上锁.在备份期间,所有的表只能读而不能进行数据更新.
mysqldump -uroot -p --all-database> all.sql 备份所有的数据库;
mysqldump -uroot -p test > test.sql 备份test这个数据库
mysqldump -uroot -p test emp dept > emp.sql 备份test数据库下的emp和dept这两个表
2>导入的方法
1>在数据库中使用source来直接导入.
2>使用mysql -uroot -p < all.sql直接导入,但是要确定数据库是否建立,可能有的数据库并没有建立,可能会出错的.
1:备份的方法:
1>hot backup (热备):在数据库运行中直接进行备份,对正在运行的数据库没有任何影响.
2>cold backup(冷备):在数据库停止时进行备份,拷贝对应的物理文件即可.
3>warm backup(温备):同样在数据库运行的时候进行,但是会对当前数据库操作有所影响,例如加一个全局读锁以保证备份数据的一致性.
2:hot backup热备的方法:
1>使用xtrabackup热备工具,xtrbackup只能备份InnoDB和XtraDB两种数据库,innobackupex支持同事备份InnoDB和MyISAM,但是在对MyISAM备份的时候需要加一个全局的读锁.
2>全备份的过程,备份开始时首先会开启一个后台检测进程,实时检测mysql redo的变化,一旦发现redo中有新日志写入,立即将日志记入后台日志文件xtrabackup_log中,之后复制InnoDB的数据文件和系统表控件文件ibdata1,待复制结束之后,执行flush tables with read lock操作,复制.frm,.MYI,.MYD等文件(执行flush tables with read lock的目的是为了防止数据库发生DDL操作,并在这一个时刻获得binlog的位置),最后发出unlock tables,把表设置为可读写状态,最终停止xtrabackup_log.
3>增量备份的过程,增量备份过程中增量处理,其实主要是相对innoDB而言,对MyISAM和其他引擎而言,它仍然是一个全拷贝.增量备份的过程主要是通过拷贝InnoDB中有变更的页(这些变更的数据页指的是页的LSN大于xtrabackup_checkpoints中给定的LSN),增量备份是基于全备份的,第一次增备的数据必须要基于上一次的全备,之后的每次都是基于上一次的增倍.最终达到一致性的增备.
3:使用xtrabackup备份的方法
1>全备份:innobackupex --user=root --password= --dafaults-file= database= test /mysql/backup ;
innobackupex --apply-log --use-mempry=20G /data/base //回滚那些没有提交的数据
--default-file指定数据库的配置文件,--database是指定要备份的数据库,默认是备份所有的数据库
2>全备份的恢复:innobackupex --defaults-file=/tmp/my.cnf --copy-back -rsync /data/mysql;
恢复备份到mysql数据文件的目录,这一过程要先关闭mysql数据库(shutdown),重命名原数据库文件目录(mv),在创建一个新的数据文件目录(mkdir),将备份的数据复制到新的数据文件目录下,赋权(chown -R mysql:mysql /data),启动mysql数据库.
3>增量备份:innobackupex --user --password --defaults --incremental /data/hotbackup/incremental_one --incremental-basedir=/data/backup/hotbackup/base
4>增量恢复:(1)恢复基础备份,(2)恢复增量备份到基础备份(开始恢复的增量备份要添加--redo-only参数,到最后一个增量备份去掉--redo-only参数)(3):对整体的基础备份进行恢复,回滚那些未提交的数据.
innobackupex --apply-log --redo-only --use-memory=20G /data/base //恢复基础备份
innobackupex --apply-log --redo-only --use-memory=20G /data/base --incremental-dir=/data/incremental_one/ //恢复增量备份到基础备份
innobackupex --apply-log --redo-only --use-memory=20G /data/base --incremental-dir=/data/incremental_two/ //恢复增量备份到基础备份
innobackupex --apply-log --user-memory=20G /data/base //对整体基础备份进行恢复,回滚那些没有提交的数据,
然后进行全备份的恢复.