一、备份的目的 做灾难恢复:对损坏的数据进行恢复和还原 需求改变:因需求改变而需要把数据还原到改变以前 测试:测试新功能是否可用 二、备份需要考虑的问题 可以容忍丢失多长时间的数据; 恢复数据要在多长时间内完; 恢复的时候是否需要持续提供服务;
一、备份的目的
做灾难恢复:对损坏的数据进行恢复和还原
需求改变:因需求改变而需要把数据还原到改变以前
测试:测试新功能是否可用
二、备份需要考虑的问题
可以容忍丢失多长时间的数据;
恢复数据要在多长时间内完;
恢复的时候是否需要持续提供服务;
恢复的对象,是整个库,多个表,还是单个库,单个表。
三、备份的类型
1、根据是否需要数据库离线
冷备(cold backup):需要关mysql服务,读写请求均不允许状态下进行;
温备(warm backup): 服务在线,但仅支持读请求,不允许写请求;
热备(hot backup):备份的同时,业务不受影响。
注:
1、这种类型的备份,取决于业务的需求,而不是备份工具
2、MyISAM不支持热备,InnoDB支持热备,但是需要专门的工具
2、根据要备份的数据集合的范围
完全备份:full backup,备份全部字符集。
增量备份: incremental backup 上次完全备份或增量备份以来改变了的数据,不能单独使用,要借助完全备份,备份的频率取决于数据的更新频率。
差异备份:differential backup 上次完全备份以来改变了的数据。
建议的恢复策略:
完全+增量+二进制日志
完全+差异+二进制日志
3、根据备份数据或文件
物理备份:直接备份数据文件
优点:
备份和恢复操作都比较简单,能够跨mysql的版本,
恢复速度快,属于文件系统级别的
建议:
不要假设备份一定可用,要测试
mysql>check tables;检测表是否可用
逻辑备份: 备份表中的数据和代码
优点:
恢复简单、
备份的结果为ASCII文件,可以编辑
与存储引擎无关
可以通过网络备份和恢复
缺点:
备份或恢复都需要mysql服务器进程参与
备份结果占据更多的空间,
浮点数可能会丢失精度
还原之后,缩影需要重建
四:备份的对象
1、 数据;
2、配置文件;
3、代码:存储过程、存储函数、触发器
4、os相关的配置文件
5、复制相关的配置
6、二进制日志
五、备份和恢复的实现
1、利用select into outfile实现数据的备份与还原
1.1把需要备份的数据备份出来
复制代码代码如下:
mysql> use hellodb; //打开hellodb库
mysql> select * from students; 查看students的属性
mysql> select * from students where Age > 30 into outfile ‘/tmp/stud.txt' ; //将年龄大于三十的同学的信息备份出来
注意:
备份的目录路径必须让当前运行mysql服务器的用户mysql具有访问权限
备份完成之后需要把备份的文件从tmp目录复制走,要不就失去备份的目的了
回到tmp目录下查看刚才备份的文件
[root@www ~]# cd /tmp
[root@www tmp]# cat stud.txt
3Xie Yanke53M216
4Ding Dian32M44
6Shi Qing46M5\N
13Tian Boguang33M2\N
25Sun Dasheng100M\N\N
[root@www tmp]#
你会发现是个文本文件。所以不能直接导入数据库了。需要使用load data infile 恢复
回到mysql服务器端,删除年龄大于30的用户,模拟数据被破坏
mysql> delete from students where Age > 30;
mysql> load data infile '/tmp/stud.txt' into table students;
2、利用mysqldump工具对数据进行备份和还原
mysqldump 常用来做温备,所以我们首先需要对想备份的数据施加读锁,
2.1 施加读锁的方式:
1.直接在备份的时候添加选项
--lock-all-tables 是对要备份的数据库的所有表施加读锁
--lock-table 仅对单张表施加读锁,即使是备份整个数据库,它也是在我们备份某张表的时候才对该表施加读锁,因此适用于备份单张表
2、在服务器端书写命令,
mysql> flush tables with read lock; 施加锁,表示把位于内存上的表统统都同步到磁盘上去,然后施加读锁
mysql> flush tables with read lock;释放读锁
但这对于InnoDB存储引擎来讲,虽然你也能够请求道读锁,但是不代表它的所有数据都已经同步到磁盘上,因此当面对InnoDB的时候,我们要使用mysql> show engine innodb status; 看看InnoDB所有的数据都已经同步到磁盘上去了,才进行备份操作。
2.2备份的策略:
完全备份+增量备份+二进制日志
演示备份的过程;
2.3 先给数据库做完全备份:
复制代码代码如下:
[root@www ~]# mysqldump -uroot --single-transaction --master-data=2 --databases hellodb > /backup/hellodb_`date +%F`.sql
--single-transaction: 基于此选项能实现热备InnoDB表;因此,不需要同时使用--lock-all-tables;
--master-data=2 记录备份那一时刻的二进制日志的位置,并且注释掉,1是不注释的
--databases hellodb 指定备份的数据库
然后回到mysql服务器端,
2.4回到mysql服务器端更新数据
复制代码代码如下:
mysql> create table tb1(id int); 创建表
mysql> insert into tb1 values (1),(2),(3); 插入数据,这里只做演示,随便插入了几个数据
2.5先查看完全备份文件里边记录的位置:
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000013', MASTER_LOG_POS=15684; 记录了二进制日志的位置
2.6 在回到服务器端:
复制代码代码如下:
mysql> show master status; 显示此时的二进制日志的位置
从备份文件里边记录的位置到我们此时的位置,即为增量的部分
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 15982 | | |
+------------------+----------+--------------+------------------+
2.7做增量备份
复制代码代码如下:
[root@www backup]# mysqlbinlog --start-position=15694 --stop-position=15982
/mydata/data/mysql-bin.000013 > /backup/hellodb_`date +$F_%H`.sql
2.8再回到服务器
复制代码代码如下:
mysql> insert into tb1 values (4),(5); 在插入一些数值
mysql> drop database hellodb; 删除hellodb库
2.9导出这次得二进制日志:
[root@www backup]# mysqlbinlog --start-position=15982 /mydata/data/mysql-bin.000013 查看删除操作时二进制日志的位置
[root@www backup]# mysqlbinlog --start-position=15982 --stop-position=16176 /mydata/data/mysql-bin.000013 > /tmp/hellodb.sql //导出二进制日志
2.10先让mysql离线
回到服务器端:
复制代码代码如下:
mysql> set sql_log_bin=0; 关闭二进制日志
mysql> flush logs; 滚动下日志
2.11模拟数据库损坏
复制代码代码如下: mysql> drop database hellodb;
2.12开始恢复数据:
复制代码代码如下:
[root@www ]# mysql [root@www ]# mysql [root@www ]# mysql
验证完成,显示结果为我们预想的那样
注:
1、真正在生产环境中,我们应该导出的是整个mysql服务器中的数据,而不是单个库,因此应该使用--all-databases
2、在导出二进制日志的时候,可以直接复制文件即可,但是要注意的是,备份之前滚动下日志。
3、利用lvm快照实现几乎热备的数据备份与恢复
3.1策略:
完全备份+二进制日志;
3.2准备:
注:事务日志必须跟数据文件在同一个LV上;
3.3创建lvm Lvm的创建这里就不多说了,想了解话点击http://www.jb51.net/LINUXjishu/105937.html
3.4 修改mysql主配置文件存放目录内的文件的权限与属主属组,并初始化mysql
复制代码代码如下:
[root@www ~]# mkdir /mydata/data //创建数据目录
[root@www ~]# chown mysql:mysql /mydata/data //改属组属主
[root@www ~]#
[root@www ~]# cd /usr/local/mysql/ //必须站在此目录下
[root@www mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data //初始化mysql
3.5修改配置文件:
复制代码代码如下:
vim /etc/my.cof
datadir=/mydata/data 添加数据目录
sync_binlog = 1 开启此功能
3.6 启动服务
复制代码代码如下:
[root@www mysql]# service mysqld start
mysql> set session sql_log_bin=0; 关闭二进制日志
mysql> source /backup/all_db_2013-09-08.sql 读取备份文件
3.7回到mysql服务器:
复制代码代码如下:
mysql> FLUSH TABLES WITH READ LOCK; 请求读锁
注:不要退出,另起一个终端:
mysql> SHOW MASTER STATUS; 查看二进制文件的位置
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 107 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> FLUSH LOGS; 建议滚动下日志。这样备份日志的时候就会很方便了
3.8导出二进制文件,创建个目录单独存放
复制代码代码如下:
[root@www ~]# mkdir /backup/limian
[root@www ~]# mysql -e 'show master status;' > /backup/limian/binlog.txt
[root@www ~]#
3.9为数据所在的卷创建快照:
复制代码代码如下: [root@www ~]# lvcreate -L 100M -s -p r -n mysql_snap /dev/myvg/mydata
回到服务器端,释放读锁
复制代码代码如下:
mysql> UNLOCK TABLES;
[root@www ~]# mount /dev/myvg/mysql_snap /mnt/data
[root@www data]# cp * /backup/limian/
[root@www data]#lvremove /dev/myvg/mylv_snap
3.10更新数据库的数据,并删除数据目录先的数据文件,模拟数据库损坏
复制代码代码如下:
mysql> create table limiantb (id int,name CHAR(10));
mysql> insert into limiantb values (1,'tom');
[root@www data]# mysqlbinlog --start-position=187 mysql-bin.000003 > /backup/limian/binlog.sql
[root@www backup]# cd /mydata/data/
[root@www data]# rm -rf *
[root@www ~]# cp -a /backup/limian/* /mydata/data/
[root@www data]# chown mysql:mysql *
3.11测试
启动服务
复制代码代码如下:
[root@www data]# service mysqld start
[root@www data]# mysql 登陆测试
mysql> SHOW DATABASES;
mysql> SET sql_log_bin=0
mysql> source/backup/limian/binlog.sql; #二进制恢复
mysql> SHOW TABLES; #查看恢复结果
mysql> SET sql_log_bin=1; #开启二进制日志
注:此方式实现了接近于热备的方式备份数据文件,而且数据文件放在lvm中可以根据数据的大小灵活改变lvm的大小,备份的方式也很简单。
4、基于Xtrabackup做备份恢复
官方站点:www.percona.com
优势:
1、快速可靠的进行完全备份
2、在备份的过程中不会影响到事务
3、支持数据流、网络传输、压缩,所以它可以有效的节约磁盘资源和网络带宽。
4、可以自动备份校验数据的可用性。
安装Xtrabackup
复制代码代码如下:
[root@www ~]# rpm -ivh percona-xtrabackup-2.1.4-656.rhel6.i686.rpm
其最新版的软件可从 http://www.percona.com/software/percona-xtrabackup/ 获得
注意:在备份数据库的时候,我们应该具有权限,但需要注意的是应该给备份数据库时的用户最小的权限,以保证安全性,
4.1前提:
应该确定采用的是单表一个表空间,否则不支持单表的备份与恢复。
在配置文件里边的mysqld段加上
innodb_file_per_table = 1
4.2备份策略
完全备份+增量备份+二进制日志
4.3准备个目录用于存放备份数据
复制代码代码如下:
[root@www ~]# makdir /innobackup
4.4做完全备份:
复制代码代码如下:
[root@www ~]# innobackupex --user=root --password=mypass /innobackup/
注:
1、只要在最后一行显示 innobackupex: completed OK!,就说明你的备份是正确的。
2、另外要注意的是每次备份之后,会自动在数据目录下创建一个以当前时间点命名的目录用于存放备份的数据,那我们去看看都有什么
[root@www 2013-09-12_11-03-04]# ls
backup-my.cnf ibdata1 performance_schema xtrabackup_binary xtrabackup_checkpoints
hellodb mysql test xtrabackup_binlog_info xtrabackup_logfile
[root@www 2013-09-12_11-03-04]#
xtrabackup_checkpoints :备份类型、备份状态和LSN(日志序列号)范围信息;
xtrabackup_binlog_info :mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
xtrabackup_logfile :非文本文件,xtrabackup自己的日志文件
xtrabackup_binlog_pos_innodb :二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。
backup-my.cnf :备份时数据文件中关于mysqld的配置
4.5回到mysql服务器端对数据进行更新操作
复制代码代码如下:
mysql> use hellodb;
mysql> delete from students where StuID>=24;
4.6增量备份
复制代码代码如下:
innobackupex --user=root --password=mypass --incremental /innobackup/--incremental-basedir=/innobackup/2013-09-12_11-03-04/
--incremental 指定备份类型
--incremental-basedir= 指定这次增量备份是基于哪一次备份的,这里是完全备份文件,这样可以把增量备份的数据合并到完全备份中去
4.7第二次增量
先去修改数据
复制代码代码如下:
mysql> insert into students (Name,Age,Gender,ClassID,TeacherID) values ('tom',33,'M',2,4);
innobackupex --user=root --password=mypass --incremental /innobackup/ --incremental-basedir=/innobackup/2013-09-12_11-37-01/
这里只须要把最后的目录改为第一次增量备份的数据目录即可
4.8最后一次对数据更改但是没做增量备份
复制代码代码如下: mysql> delete from coc where id=14;
4.9把二进制日志文件备份出来,(因为最后一次修改,没做增量备份,要依赖二进制日志做时间点恢复)
复制代码代码如下: [root@www data]# cp mysql-bin.000003 /tmp/
4.10模拟数据库崩溃
复制代码代码如下:
[root@www data]# service mysqld stop
[root@www data]# rm -rf *
恢复前准备
4.11对完全备份做数据同步
复制代码代码如下: [root@www ~]# innobackupex --apply-log --redo-only /innobackup/2013-09-12_11-03-04/
4.12对第一次增量做数据同步
复制代码代码如下:
innobackupex --apply-log --redo-only /innobackup/2013-09-12_11-03-04/ --incremental-basedir=/innobackup/2013-09-12_11-37-01/
4.13对第二次增量做数据同步
复制代码代码如下:
innobackupex --apply-log --redo-only /innobackup/2013-09-12_11-03-04/ --incremental-basedir=/innobackup/2013-09-12_11-45-53/
--apply-log 的意义在于把备份时没commit的事务撤销,已经commit的但还在事务日志中的应用到数据库
注:
对于xtrabackup来讲,它是基于事务日志和数据文件备份的,备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据库文件中的事务,还应该对其做预处理,把已提交的事务同步到数据文件,未提交的事务要回滚。因此其备份的数据库,不能立即拿来恢复。
预处理的过程:
首先对完全备份文件只把已提交的事务同步至数据文件,要注意的是有增量的时候,不能对事务做数据回滚,不然你的增量备份就没有效果了。
然后把第一次的增量备份合并到完全备份文件内,
以此类推,把后几次的增量都合并到前一次合并之后的文件中,这样的话,我们只要拿着完全备份+二进制日志,就可以做时间点恢复。
4.14数据恢复
复制代码代码如下:
[root@www ~]# service mysqld stop
[root@www data]# rm -rf * 模拟数据库崩溃
[root@www ~]# innobackupex --copy-back /innobackup/2013-09-12_11-03-04/
--copy-back数据库恢复,后面跟上备份目录的位置
4.15检测:
复制代码代码如下:
[root@www ~]# cd /mydata/data/
[root@www data]# chown mysql:mysql *
[root@www data]#service mysqld start

ThinkPHP6数据备份与恢复:保障数据的安全性随着互联网的快速发展,数据已成为一项极其重要的资产。因此,数据的安全性备受关注。在Web应用开发中,数据备份与恢复是确保数据安全的重要一环。在本文中,我们将介绍如何使用ThinkPHP6框架进行数据备份与恢复,以保障数据的安全性。一、数据备份数据备份是指将数据库中的数据以某种方式进行复制或存储。这样即使在数据

在网站运营过程中,备份是一项非常重要的任务。如果网站有数据丢失或者损失,备份可以为恢复网站提供便利。PHP是一种常用的服务器端编程语言,可以通过编写PHP脚本实现网站的备份功能。本文将介绍如何使用PHP实现网站备份功能。一、备份文件的类型在备份网站的时候,需要备份数据库和网站文件。通常网站文件包括静态文件、程序文件、图片和上传的附件等,而数据库则包含网站的所

在进行Web开发的过程中,数据的存储和备份无疑是非常重要的一环。面对万一出现的数据丢失或恢复需要,备份是非常必要的。对于PHP这种开源的后端语言,数据的备份同样也有许多可选的方案,下面我们就来详细了解一下PHP中的数据备份。一、数据库备份1.1MYSQLdump工具MYSQLdump是一个备份MYSQL数据库的命令行工具,它通过执行SQL语句将整个数据库或

如何使用Java编写CMS系统的数据备份功能在一个内容管理系统(ContentManagementSystem,CMS)中,数据备份是一个非常重要且必不可少的功能。通过数据备份,我们可以保证系统中的数据在遭受损坏、丢失或错误操作等情况下能够及时恢复,从而确保系统的稳定性和可靠性。本文将介绍如何使用Java编写CMS系统的数据备份功能,并提供相关的代码示

使用PHP和SQLite实现数据备份和恢复策略备份和恢复是数据库管理中非常重要的一个环节,它可以保护我们的数据免受意外损坏或丢失的影响。本文将介绍如何使用PHP和SQLite实现数据备份和恢复的策略,帮助我们更好地管理和保护数据库中的数据。首先,我们需要创建一个使用SQLite的数据库,并建立一些测试数据以便后续操作。下面是一个简单的例子:<?php

随着数据量的不断增大,数据库备份的难度也越来越大。而备份不仅要求数据的完整性和一致性,还要求备份速度和备份文件大小均能满足实际需求。数据压缩备份技术因此应运而生,成为数据库备份必不可少的一种技术手段之一。MySQL是目前最流行的关系型数据库之一,其官方提供的备份工具mysqldump并不能满足压缩备份的需求。因此,本文将介绍使用Linux系统上的压缩命令ta

PHP表单处理:表单数据备份与恢复引言在网站开发过程中,表单是非常常见的交互方式,用户通过填写表单将数据提交给服务器端处理。然而,有时候用户可能会因为网络问题、浏览器崩溃或其他意外情况导致表单数据丢失,这会给用户的使用体验带来困扰。因此,为了提升用户体验,我们可以通过PHP实现表单数据的自动备份与恢复功能,以确保用户填写的数据不会丢失。表单数据备份当用户在表

TiDB和MySQL的数据备份与恢复策略对比引言:在互联网时代,数据成为了企业最重要的资产之一,因此数据备份与恢复策略显得尤为重要。TiDB和MySQL作为常用的关系型数据库管理系统,具备了高性能和可靠性等特点,但在数据备份和恢复方面还是有所差异。本文将针对TiDB和MySQL的数据备份与恢复策略进行比较,并提供相关的代码示例进行解析。一、数据备份策略比较T


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

メモ帳++7.3.1
使いやすく無料のコードエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール
