mysql数据备份还原
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据备份还原相关的知识,希望对你有一定的参考价值。
mysqldump
备份工具mysqldump,建议使用在10g以下的数据进行备份,是mysql数据库的逻辑备份。
MyISAM存储引擎:支持温备,备份时要锁定表;
InnoDB存储引擎:支持温备和热备;
参数说明
-x, --lock-all-tables:锁定所有库的所有表,读锁;
-l, --lock-tables:锁定指定库所有表;
--single-transaction:创建一个事务,基于此快照执行备份; 只作用域innodb做热备
-R, --routines:存储过程和存储函数;
--triggers 触发器
-E, --events 事件
--flush-logs:锁定表完成后,即进行日志刷新
--master-data[=#]
|----1:记录为CHANGE MASTER TO语句,此语句不被注释;
|---- 2:记录为CHANGE MASTER TO语句,此语句被注释; 用来记录
一次完整的备份还原
1、备份
[[email protected] data]# mysqldump -uroot -hlocalhost -p -l -R --triggers -E --master-data=2 --flush-logs -B hellodb > hellodb-fullback-$(date +%F).sql
2、查看二进制日志
还原时候:--flush-logs,这里只要查看从哪个文件开始就可以了,每次滚动后都是从154开始,前面还有4,123两个操作,4做回滚,123是个空命令
CHANGE MASTER TO MASTER_LOG_FILE=‘master-bin.000023‘, MASTER_LOG_POS=154;
3、导出二进制日志
[[email protected] data]# cp /www/data/mysql/log-bin/master-bin.00002{3,4} ./
[[email protected] data]# mysqlbinlog master-bin.000023 >tmp.sql #如有有必要,参考mysqlbinlog
[[email protected] data]# mysqlbinlog master-bin.000024 >>tmp.sql
4、还原数据
mysql> set @@session.sql_log_bin=OFF;
mysql> source /root/data/hellodb-fullback-2018-06-20.sql
mysql> source /root/data/tmp.sql
mysql> set @@session.sql_log_bin=ON;
Xtrabackup
Xtrabackup 是由percona提供的mysql数据库备份工具,是一个开源的工具,能够对innodb和xtradb数据库进行热备和增量备份,对于MyISAM, 仅支持到温备,对MyISAM使用增量备份时,其实是完全备份。Xtrabackup使用简单,功能强大。Xtrabackup具备的特点:(1)备份过 程快速、可靠;(2)备份过程不会打断正在执行的事务;(3)能够基于压缩等功能节约磁盘空间和流量;(4)自动实现备份检验;(5)还原速度快;
安装
[[email protected] ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.11/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm
[[email protected] ~]# yum install percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm
全量备份(各种引擎都支持)
1、全量备份
[[email protected] data]# innobackupex --defaults-file=/www/server/mysql/my.cnf --user=root --password=111111 -Hlocalhost --socket=/tmp/mysql.sock ./
2、备份资料查看
#用户增量合并信息
[[email protected] 2018-06-20_14-11-46]# cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 886153284
last_lsn = 886153293
compact = 0
recover_binlog_info = 0
#可以用于还原二进制数据
[[email protected] 2018-06-20_14-11-46]# cat xtrabackup_binlog_info
master-bin.000028 10232
3、准备数据,回滚未提交数据 (在另外机器上做还原)
[[email protected] data]# innobackupex --apply-log 2018-06-20_14-11-46/
4、还原数据流程大概就是将 备份数据复制到mysql数据目录下
[[email protected] data]# rm -fr /www/data/mysql/data/* #注意尽量不要删二进制日志
#把准备的好的数据复制到mysql数据目录下
[[email protected] data]# innobackupex --defaults-file=/www/server/mysql/my.cnf --copy-back 2018-06-20_14-11-46/
[[email protected] data]# chown -R mysql.mysql /www/data/mysql/data/
增量备份(只作用innodb表)
备份过程
全量 -> 增量1(incremental-basedir=全量) -> 增量2(incremental-basedir=增量1) -> 增量3(incremental-basedir=增量2)
1、在上述的全量备份上,创建一个增量
[[email protected] data]# innobackupex --defaults-file=/www/server/mysql/my.cnf --user=root --password=111111 -Hlocalhost --socket=/tmp/mysql.sock --incremental ./ --incremental-basedir=2018-06-20_14-11-46/
2、查看最后一个增量备份的二进制日志最后位置
[[email protected] data]# cat 2018-06-20_15-05-08/xtrabackup_binlog_info
master-bin.000028 11092
3、导出最后一个备份后面所有的二进制数据(可能是多个)
[[email protected] log-bin]# mysqlbinlog -j 11092 master-bin.000028 -vv --base64-output=decode-rows
[[email protected] log-bin]# mysqlbinlog -j 11092 master-bin.000028 >/root/data/bin.log
4、合并增量
增量合并过程:以全量为根本,按顺序,分次将增量合并到全量上。
合并过程中的事务处理,--redo-only表示合并,不做回滚,最后一次记得不要添加,让其回滚那些没提交的事务[[email protected] data]# innobackupex --apply-log --redo-only 2018-06-20_14-11-46/
最后一次合并(不做回滚,如果不是最后,请添加--redo-only)
[[email protected] data]# innobackupex --apply-log 2018-06-20_14-11-46 --incremental-dir=2018-06-20_15-05-08/
5、增量合并完毕,第一份全量就是真正的全量量(复制数据到mysql数据目录下)
[[email protected] data]# innobackupex --defaults-file=/www/server/mysql/my.cnf --copy-back 2018-06-20_14-11-46/
6、最后执行二进制日志,增量未执行的部分
mysql> set @@session.sql_log_bin=OFF;
mysql> source /root/data/bin.log;
mysql> set @@session.sql_log_bin=ON;
以上是关于mysql数据备份还原的主要内容,如果未能解决你的问题,请参考以下文章
[知了堂学习笔记]_Java代码实现MySQL数据库的备份与还原