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数据备份还原的主要内容,如果未能解决你的问题,请参考以下文章

mysql 使用sqldump来进行数据库还原

PHP备份/还原MySQL数据库的代码

[知了堂学习笔记]_Java代码实现MySQL数据库的备份与还原

linux中怎么查看mysql数据库版本

求大神告知 linux系统下,JAVA如何操作mysql备份和还原。求源代码~~~~测试通过的加分。

MySQL如何备份与还原