MySQL备份与恢复

# 备份过程中注意目录读写权限
1.使用xtrabackup备份mysql
1.1全量备份
全量备份
innobackupex --user=root --password='123456' /xtrabackup/full

恢复备份
innobackupex --apply-log /xtrabackup/full/2020-1-0
innobackupex --copy-back /xtrabackup/full/2020-1-0

1.2增量备份
首先全量备份一次
innobackupex --user=root --password='123456' /xtrabackup/
假设全量生成的备份包为2020-1-0
第一次增量备份
innobackupex --user=root --password='123456' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2020-1-0/ # 基于全量的包
假设第一次增量生成的包为 2020-1-1
第二次增量备份
innobackupex --user=root --password='123456' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2020-1-1/ # 基于第一次增量包
假设第二次增量生成的包为 2020-1-2
第三次增量备份
innobackupex --user=root --password='123456' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2020-1-2/ # 基于第二次增量包
假设第三次增量生成的包为 2020-1-3

先回滚全量的包
innobackupex --apply-log --redo-only /xtrabackup/2020-1-0
回滚第一次增量包
innobackupex --apply-log --redo-only /xtrabackup/2020-1-0 --incremental-dir=/xtrabackup/2020-1-1
回滚第二次增量包
innobackupex --apply-log --redo-only /xtrabackup/2020-1-0 --incremental-dir=/xtrabackup/2020-1-2
回滚第三次增量包
innobackupex --apply-log --redo-only /xtrabackup/2020-1-0 --incremental-dir=/xtrabackup/2020-1-3
恢复回滚好的第一次全量包
innobackupex --copy-back /xtrabackup/2020-1-0

1.3差异备份
首先进行一次完全备份
innobackupex --user=root --password='123456' /xtrabackup
假设完全备份的包是2020-1-0
进行第一次差异备份
innobackupex --user=root --password='123456' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-1-0 # 基于第一次的全备
假设第一次差异备份包是2020-1-1
进行第二次差异备份
innobackupex --user=root --password='123456' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-1-1 # 还是基于第一次的全备
假设第二次差异备份的包是2020-1-2
进行第三次差异备份
innobackupex --user=root --password='123456' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-1-1 # 还是基于第一次的全备
假设第三次差异备份的包是2020-1-3
进行第四次差异备份
innobackupex --user=root --password='123456' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-1-1 # 还是基于第一次的全备
假设第四次差异备份的包是2020-1-4

假设恢复到第三次差异备份的数据
我们回滚时候只需要回滚完全备份包和第三次差异包备份即可
回滚全量备份包
innobackupex --apply-log --redo-only /xtrabackup/2020-1-0
回滚第三次差异备份包
innobackupex --apply-log --redo-only /xtrabackup/2020-1-0--incremental-dir=/xtrabacku/2020-1-3
恢复回滚好的第一次全量包
innobackupex --copy-back /xtrabackup/2020-1-0

2.使用mysqldump备份mysql
mysqldump -uroot -p'123456' --all-databases --single-transaction --master-data=2 --flush-logs > /backup/2020-01-01-01-mysql-all.sql
mysqldump -uroot -p'123456' < /backup/2020-01-01-01-mysql-all.sql

不记录恢复操作(或在my.conf中关闭log_bin)
mysql> set sql_log_bin=0;
mysql> source 2020-01-01-01-mysql-all.sql
mysql> set sql_log_bin=1;

3.二进制日志恢复
查看二进制截取记录
cat /xtrabackup/full/2020-1-0/xtrabackup_binlog_info
cat /backup/2020-01-01-01-mysql-all.sql
从记录中的截断位置之后的数据内容恢复
mysqlbinlog localhost-bin.000002 localhost-bin.000003 localhost-bin.000004 --start-position=154 | mysql -uroot -p'123456'
从记录中的截断位置之后的数据内容保存在文本中
mysqlbinlog localhost-bin.000002 localhost-bin.000003 localhost-bin.000004 --start-position=154 > binlog.txt

4.记录的导入和导出
vim /etc/my.cnf
[mysqld]
secure-file-priv=/backup

SELECT ... INTO OUTFILE ...
mysql> select * from testdb.t1 into outfile '/backup/testdb.t1.txt'

使用mysql命令导出
mysql -uroot -p'123456' -e 'select * from testdb.t2' > /backup/testdb.t2.txt
mysql -uroot -p'123456' --xml -e 'select * from testdb.t2' > /backup/testdb.t2.xml
mysql -uroot -p'123456' --html -e 'select * from testdb.t2' > /backup/testdb.t2.html

LOAD DATA INFILE ... INTO ...
mysql> load data infile '/backup/testdb.t3.txt' into table testdb.t3;

 

上一篇:xtrabackup备份Mysql


下一篇:阿里云|腾讯云MySQL备份文件一键恢复工具