mysql 增量备份_云计算-开源数据库-备份
关于备份:
备份原因;怕丢,怕被误删。
备份目标:数据的一致性,服务的可用性。
备份技术:物理备份/冷备份
直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。
tar,cp,scp
拷贝数据, 优点快,缺点服务停止。
逻辑备份/热备份
备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库。
mysqldump,mydumper
效率相对较低
备份种类: 完全备份
增量备份
连续回复
特点:因每次仅备份自上一次备份(注意是上一次,不是第一次)以来有变化的文件,所 以备份体积小,备份速度快,但是恢复的时候,需要按备份时间顺序,逐个备份版本进行恢复,恢复时间长。
差异备份
跳跃恢复
特点:占用空间比增量备份大,比完整备份小,恢复时仅需要恢复第一个完整版本和最后 一次的差异版本(包含所有的差异),恢复速度介于完整备份和增量备份之间。
percona-xtrabackup
官方下载软件包
安装:
安装yum仓库。安装percona需要的mysql包
mysql官方源
yum install -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
yum工具
yum install -y yum-utils
查看mysql可用版本
yum repolist all | grep mysql
禁用80
yum-config-manager --disable mysql80-community
启用57
yum-config-manager --enable mysql57-community
yum install mysql-community-libs-compat -y
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
YUM安装percona-xtrabackup
yum -y install percona-xtrabackup-24.x86_64
安装percona
本地RPM
percona-xtrabackup24.rpm.zip
查询安装结果
rpm -ql percona-xtrabackup-24
准备备份:1-1 完全备份流程
innobackupex --user=root --password='QianFeng@123' /xtrabackup/full
连接数据库,开始备份。
请注意备份结果是否完成
xtrabackup: Transaction log of lsn (74182721) to (74182730) was copied.
171127 15:04:12 completed OK!
ls /xtrabackup/full/
查看备份目录。数据库,配置文件,日志文件
ls /xtrabackup/full/2017-08-01_00-00-02/
观看二进制日志位置
cat /xtrabackup/full/2017-08-01_00-00-18/xtrabackup_binlog_info
1-2 完全恢复流程
停止数据库
systemctl stop mysqld
清理环境(模拟损坏)
rm -rf /var/lib/mysql/*
rm -rf /var/log/mysqld.log
生成回滚日志
innobackupex --apply-log /xtrabackup/full/2017-08-01_00-00-18/
指定备份点
恢复文件
innobackupex --copy-back /xtrabackup/full/2017-08-01_00-00-18/
登陆验证
ls /var/lib/mysql
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
mysql -uroot -p'QianFeng@123'
2-1 增量备份流程
准备工作
使用指定的数据库
create database testdb;
use testdb;
create table test(id int);
insert into test values (1);
select * from test;
mysql> select * from test;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
完整备份:周一
rm -rf /xtrabackup/*
date 09010000
时间建议靠后设置。
innobackupex --user=root --password='QianFeng@123' /xtrabackup
ll /xtrabackup/
2017-09-01_00-00-04
请问数据库中的记录是多少?
1
增量备份:周二
date 09020000
更新时间
mysql -uroot -p'QianFeng@123' -e 'insert into testdb.test values (2)'
[root@localhost ~]# mysql -uroot -p'QianFeng@123' -e 'select * from testdb.test'
innobackupex --user=root --password='QianFeng@123'
--incremental /xtrabackup/
--incremental-basedir=/xtrabackup/2017-09-01_00-00-04
basedir基于周一的备份。
会生成一个今天的。
ls /xtrabackup/
2017-09-01_00-00-04
2017-09-02_00-00-58
增量备份:周三
date 09030000
mysql -uroot -p'QianFeng@123' -e 'insert into testdb.test values (3)'
innobackupex --user=root --password='QianFeng@123'
--incremental /xtrabackup/
--incremental-basedir=/xtrabackup/2017-09-02_00-00-26
basedir基于周2的备份。
会生成一个今天的。
ls /xtrabackup/
2017-09-01_00-00-04
2017-09-02_00-00-58
2017-09-03_00-00-36
周四。。周五。。周六
2-2 增量恢复流程
停止数据库
systemctl stop mysqld
清理环境
rm -rf /var/lib/mysql/*
周一
innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04
回滚合并
周二
innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04
--incremental-dir=/xtrabackup/2017-09-02_00-00-26
恢复
innobackupex --copy-back /xtrabackup/2017-09-01_00-00-06
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
登陆查询记录。请思考记录是第几天的。
想回复3,怎么办
systemctl stop mysqld
innobackupex --apply-log --redo-only /xtrabackup/2017-09-01_00-00-04
--incremental-dir=/xtrabackup/2017-09-03_00-00-27
# rm -rf /var/lib/mysql/*
innobackupex --copy-back /xtrabackup/2017-09-01_00-00-04
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
mysql -uroot -p'QianFeng@123' -e 'select * from testdb.test'
请思考,如何一次性把数据,周一,周二,周三恢复出来?
mysqldump + binlog
优势
1 自动记录日志position位置。
(show master statusG;)
2 可用性,一致性
锁表机制。
语法
mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
参数说明
库的范围
-A, --all-databases 所有库
school 数据库名
school stu_info t1 是指school数据库的表stu_info、t1
-B, --databases bbs test mysql 多个数据库
--single-transaction #InnoDB 一致性 服务可用性
--master-data=1|2 #该选项将会记录binlog的日志位置与文件名并追加到文件中,或添加注释
高级选项
--opt #同时启动各种高级选项
-R, --routines #备份存储过程和存储函数
-F, --flush-logs #备份之前刷新日志,截断日志。备份之后新binlog。
--triggers #备份触发器
帮助
mysqldump --help
备份实战
请准备两套root密码
密码1
QianFeng@123
配置到当前数据库中。
密码2
QianFeng@1234
备用
准备库1
注意
请清理掉之前的test库。实验后半部分,需要继续创建test库,避免混淆。
testdb1.t1
mysql> select * from testdb1.t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
执行备份
[root@localhost ~]# mysqldump -p'QianFeng@123'
--all-databases --single-transaction
--master-data=2
--flush-logs
> /backup/`date +%F-%H`-mysql-all.sql
master-data=2 注释掉日志记录
观察备份细节
vim /backup/2016-11-25-14-mysql-all.sql
LOCK TABLES `user` WRITE;
观察各种锁机制,用来保证数据一致性
22 CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.000004', MASTER_LOG_POS=154;
二进制日志截断位置。第22行
业务正常推进...
备份后的,数据变更行为
在testdb2.t2 中插入数据1,2,3;
创testdb3库
切断二进制日志(重启数据库)
在testdb2.t2 中插入数据4;
删testdb3库
在testdb2.t2 中插入数据5;
mysql> select * from testdb2.t2;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| testdb1 |
| testdb2 |
+--------------------+
12 rows in set (0.00 sec)
mysql>
恢复实战
1 备份二进制日志文件
cp /var/lib/mysql/*bin* ~
2. 停止数据库
systemctl stop mysqld
3. 清理环境
rm -rf /var/lib/mysql/*
4.启动数据库
systemctl start mysqld
grep 'password' /var/log/mysqld.log
找密码,再改一下密码。请使用密码2
Kyzw;u2dq<mh
mysqladmin -uroot -p'Kyzw;u2dq<mh' password 'QianFeng@1234'
注意
语法要求password后面有空格。
5.mysql恢复数据
mysql -p'QianFeng@1234' < /backup/2016-12-08-04-mysql-all.sql
mysql -p'QianFeng@1234' -e 'flush privileges'
请使用备份时密码
登陆并验证数据恢复结果。请思考恢复的数据库有几个?
1个
6.二进制日志恢复
观察二进制截取记录
vim /backup/2016-11-25-14-mysql-all.sql
CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.0000010', MASTER_LOG_POS=154;
mysqlbinlog localhost-bin.000002 localhost-bin.000003
--start-position=154 | mysql -p'QianFeng@123'
注意后续有多少日志,要跟多少日志名字。
7.观察数据
请思考数据是否恢复完整。
是完整的。
8.请思考误删除的问题
如何保留testdb3库
[root@localhost ~]#mysqlbinlog localhost-bin.00004 ......005.....006...... > 1.txt
删除1.txt中不需要的at(比如test3库是误操作)
cat 1.txt | mysql -p'QianFeng@123'
课后题:是否可以通过mysqlbinlog start 和stop 命令解决。
9.关于数据恢复时的多余日志。
方法一
原因
每次还原数据库都会增加日志的体积。但这些都是还原操作。恢复数据库的日志占用了存储空间。
mysql> set sql_log_bin =0
再mysql> source /backup/*.sql
观察
二进制日志并没有发生变化。
方法2
在备份文件中,加入关闭二进制日志。
mysql 增量备份_云计算-开源数据库-备份相关推荐
- mysql2005备份_创建完整数据库备份 - SQL Server | Microsoft Docs
完整数据库备份Create a Full Database Backup 09/12/2019 本文内容 适用于:Applies to: SQL ServerSQL Server(所有支持的版本)SQ ...
- mysql如何用jsp代码进行数据库备份_mysql如何用jsp代码进行数据库备份
mysql如何用jsp代码进行数据库备份 //导出 String mysql="mysqldump -uroot -proot --opt databasename > d:/test ...
- mysql navicat报表_使用Navicat定时备份mysql数据库和创建报表并邮件自动发送
数据库备份在现代计算机高速发展的今日变得日益重要,程序员往往因为不重视而忽略备份数据,导致数据丢失,造成非常严重的后果.定时备份无疑是解决备份的最好的途径,本文主要使用Navicat来自动备份数据库和 ...
- 用来mysql备份的是什么意思_什么是数据库备份
展开全部 对于MySQL数据库,备份与恢复62616964757a686964616fe58685e5aeb931333433646436相关的术语包括:备份(backup).还原(restore). ...
- 如何查看mysql备份的情况_MySQL数据库备份详解(示例代码)
原文:MySQL数据库备份详解 对于任何数据库来说,备份都是非常重要的 数据库复制不能取代备份的作用 比如我们由于误操作,在主数据库上删除了一些数据,由于主从复制的时间很短,在发现时,从数据库上的数据 ...
- mysql数据库备份方案_MySQL平台数据库备份方案详细说明
在数据库表丢失或损坏的情况下,备份你的数据库是很重要的.如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态.有时,正是MySQL管理员造成破坏.管理员已经知道表已破坏,用 ...
- 【MySQL命令】远程连接、数据库备份
[1] 远程连接命令 确保远程MySQL数据库可以连接: mysql -u {user} -h {host} -p 其中: user:用户名: host:主机ip地址: 示例: [2] ...
- mysql 5.7 备份innodb_mysql5.7 innodb数据库备份工具Xtrabackup的安装
mysql5.7 innodb数据库备份工具Xtrabackup的安装 wgetmhttps://www.percona.com/downloads/XtraBackup/Percona-XtraBa ...
- 2压缩备份数据库_达梦数据库备份与还原
达梦数据库的备份与还原 使用CONSOLE工具进行备份还原 1.备份操作. 点击"开始-所有程序-达梦数据库-客户端-DM控制台工具". 使用CONSOLE工具进行备份还原操作时, ...
最新文章
- java基础提升篇:Static关键字
- java jna_Java中jna的用法
- 【完结】AutoML如何应用于模型优化,这些文章可以作为一个参考
- windows2003的一些设置之一
- IDFA的值什么时候会发生改变
- 中山服务器维修点,中山存储服务器
- 我看ITIL在中国(六):如何建立有中国特色的IT运维管理平台【二】
- 数据结构——基于 Dijsktra 算法的最短路径求解
- JAVA 成员访问权限修饰符
- 一个网页设计师应该考虑的9件事
- 2019 高考填报志愿建议
- php获取网页内容方法总结
- git 理解 HEAD^与HEAD~
- BZOJ 1006: [HNOI2008]神奇的国度( MCS )
- 电商工具箱之阿里巴巴获取商品
- 课题申报书范文_2018年课题立项申报书范文
- Linux查看日志的几种方式
- Python爬虫系列之得物小程序data算法
- cmd命令行常用指令
- 打开.mpp文件有感