- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章mysql备份的三种方式详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、备份的目的 。
做灾难恢复:对损坏的数据进行恢复和还原 需求改变:因需求改变而需要把数据还原到改变以前 测试:测试新功能是否可用 。
2、备份需要考虑的问题 。
可以容忍丢失多长时间的数据; 恢复数据要在多长时间内完; 恢复的时候是否需要持续提供服务; 恢复的对象,是整个库,多个表,还是单个库,单个表.
3、备份的类型 。
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、二进制日志 。
5、备份和恢复的实现 。
1、利用select into outfile实现数据的备份与还原 1.1把需要备份的数据备份出来 。
。
。
注意:
备份的目录路径必须让当前运行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 先给数据库做完全备份:
。
--single-transaction: 基于此选项能实现热备InnoDB表;因此,不需要同时使用--lock-all-tables; --master-data=2 记录备份那一时刻的二进制日志的位置,并且注释掉,1是不注释的 --databases hellodb 指定备份的数据库 。
。
然后回到mysql服务器端, 。
2.4回到mysql服务器端更新数据 。
。
。
2.5先查看完全备份文件里边记录的位置:
。
。
2.6 在回到服务器端:
。
。
2.7做增量备份 。
。
。
2.8再回到服务器 。
。
。
2.9导出这次得二进制日志:
。
。
2.10先让mysql离线 。
回到服务器端:
。
。
2.11模拟数据库损坏 。
。
。
2.12开始恢复数据:
。
。
验证完成,显示结果为我们预想的那样 。
注:
1、真正在生产环境中,我们应该导出的是整个mysql服务器中的数据,而不是单个库,因此应该使用--all-databases 2、在导出二进制日志的时候,可以直接复制文件即可,但是要注意的是,备份之前滚动下日志。 3、利用lvm快照实现几乎热备的数据备份与恢复 。
3.1策略:
完全备份+二进制日志; 。
3.2准备:
注:事务日志必须跟数据文件在同一个LV上; 。
3.3创建lvm Lvm的创建这里就不多说了 。
3.4 修改mysql主配置文件存放目录内的文件的权限与属主属组,并初始化mysql 。
。
。
3.5修改配置文件:
。
。
3.6 启动服务 。
。
。
3.7回到mysql服务器:
。
。
3.8导出二进制文件,创建个目录单独存放 。
。
。
3.9为数据所在的卷创建快照:
。
。
回到服务器端,释放读锁 。
。
。
3.10更新数据库的数据,并删除数据目录先的数据文件,模拟数据库损坏 。
。
。
3.11测试 。
启动服务 。
。
。
注:此方式实现了接近于热备的方式备份数据文件,而且数据文件放在lvm中可以根据数据的大小灵活改变lvm的大小,备份的方式也很简单.
4、基于Xtrabackup做备份恢复 。
官方站点:www.percona.com 。
优势:
1、快速可靠的进行完全备份 2、在备份的过程中不会影响到事务 3、支持数据流、网络传输、压缩,所以它可以有效的节约磁盘资源和网络带宽。 4、可以自动备份校验数据的可用性.
安装Xtrabackup 。
。
。
其最新版的软件可从 http://www.percona.com/software/percona-xtrabackup/ 获得 。
注意:在备份数据库的时候,我们应该具有权限,但需要注意的是应该给备份数据库时的用户最小的权限,以保证安全性, 。
4.1前提:
应该确定采用的是单表一个表空间,否则不支持单表的备份与恢复。 在配置文件里边的mysqld段加上 。
innodb_file_per_table = 1 。
4.2备份策略 完全备份+增量备份+二进制日志 4.3准备个目录用于存放备份数据 。
。
。
4.4做完全备份:
。
。
注:
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服务器端对数据进行更新操作 。
。
。
4.6增量备份 。
。
。
4.7第二次增量 。
先去修改数据 。
。
。
4.8最后一次对数据更改但是没做增量备份 。
。
。
4.9把二进制日志文件备份出来,(因为最后一次修改,没做增量备份,要依赖二进制日志做时间点恢复) 。
。
。
4.10模拟数据库崩溃 。
。
。
恢复前准备 。
4.11对完全备份做数据同步 。
。
。
4.12对第一次增量做数据同步 。
。
。
4.13对第二次增量做数据同步 。
。
。
注:
对于xtrabackup来讲,它是基于事务日志和数据文件备份的,备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据库文件中的事务,还应该对其做预处理,把已提交的事务同步到数据文件,未提交的事务要回滚。因此其备份的数据库,不能立即拿来恢复.
预处理的过程:
首先对完全备份文件只把已提交的事务同步至数据文件,要注意的是有增量的时候,不能对事务做数据回滚,不然你的增量备份就没有效果了.
然后把第一次的增量备份合并到完全备份文件内, 。
以此类推,把后几次的增量都合并到前一次合并之后的文件中,这样的话,我们只要拿着完全备份+二进制日志,就可以做时间点恢复.
4.14数据恢复 。
。
。
4.15检测:
。
。
检测结果数据正常.
本文出自 “遗失ぜ的ァ美好~” 博客 。
最后此篇关于mysql备份的三种方式详解的文章就讲到这里了,如果你想了解更多关于mysql备份的三种方式详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
目前我正在构建相当大的网络系统,我需要强大的 SQL 数据库解决方案。我选择 Mysql 而不是 Postgres,因为一些任务需要只读(MyISAM 引擎)而其他任务需要大量写入(InnoDB)。
我在 mysql 中使用如下命令。当它显示表格数据时,它被格式化为一个非常干净的表格,间距均匀且 |作为列分隔符。 SELECT * FROM TABLE_NAME; 当我从 CLI 运行命令时,如下
我知道这个问题之前已经被问过好几次了,我已经解决了很多问题,但到目前为止没有任何效果。 MySQL 试图将自身安装到的目录 (usr/local/mysql) 肯定有问题。关于我的错误的奇怪之处在于我
以下是我的 SQL 数据结构,我正在尝试如下两个查询: Select Wrk_ID, Wrk_LastName, Skill_Desc from Worker, Skill where
我们有一个本地 mysql 服务器(不在公共(public)域上),并希望将该服务器复制到我们拥有的 google 云 sql 实例。我的问题是:1.这可能吗?2.我们的本地服务器只能在本地网络上访问
我有一个表(test_table),其中一些字段值(例如字段 A、B 和 C)是从外部应用程序插入的,还有一个字段(字段 D),我想从现有表(store_table)插入其值,但在插入前者(A、B 和
我想创建一个 AWS RDS 实例,然后使用 terraform 管理数据库用户。因此,首先,我创建了一个 RDS 实例,然后使用创建的 RDS 实例初始化 mysql 提供程序,以进一步将其用于用户
当用户在我的网站上注册时,他们会在我的一个数据库中创建自己的表格。该表存储用户发布的所有帖子。我还想做的是也为他们生成自己的 MySql 用户——该用户仅有权从他们的表中读取、写入和删除。 创建它应该
我有一个关于 ColdFusion 和 Mysql 的问题。我有两个表:PRODUCT 和 PRODUCT_CAT。我想列出包含一些标记为:IS_EXTRANET=1 的特殊产品的类别。所以我写了这个
我想获取 recipes_id 列的值,以获取包含 ingredient_id 的 2,17 和 26 条目的值。 假设 ingredient_id 2 丢失则不获取记录。 我已经尝试过 IN 运算符
在 Ubuntu 中,我通常安装两者,但 MySQL 的客户端和服务器之间有什么区别。 作为奖励,当一个新语句提到它需要 MySQL 5.x 时,它是指客户端、服务器还是两者兼而有之。例如这个链接ht
我重新访问了我的数据库并注意到我有一些 INT 类型的主键。 这还不够独特,所以我想我会有一个指导。 我来自微软 sql 背景,在 ssms 中你可以 选择类型为“uniqeidentifier”并自
我的系统上有 MySQL,我正在尝试确定它是 Oracle MySQL 还是 MySQL。 Oracle MySQL 有区别吗: http://www.oracle.com/us/products/m
我是在生产 MySQL 中运行的应用程序的新维护者。之前的维护者已经离开,留下的文档很少,而且联系不上了。 我面临的问题是执行以下请求大约需要 10 秒: SELECT COUNT(*) FROM `
我有两个位于不同机器上的 MySQL 数据库。我想自动将数据从一台服务器传输到另一台服务器。比方说,我希望每天早上 4:00 进行数据传输。 可以吗?是否有任何 MySQL 内置功能可以让我们做到这一
有什么方法可以使用 jdbc 查询位于 mysql 根目录之外的目录中的 mysql 表,还是必须将它们移动到 mysql 根目录内的数据库文件夹中?我在 Google 上搜索时没有找到任何东西。 最
我在 mysql 数据库中有两个表。成员和 ClassNumbers。两个表都有一个付费年份字段,都有一个代码字段。我想用代码数字表中的值更新成员表中的付费年份,其中成员中的代码与 ClassNumb
情况:我有 2 台服务器,其中一台当前托管一个实时 WordPress 站点,我希望能够将该站点转移到另一台服务器,以防第一台服务器出现故障。传输源文件很容易;传输数据库是我需要弄清楚如何做的。两台服
Phpmyadmin 有一个功能是“复制数据库到”..有没有mysql查询来写这个函数?类似于将 db A 复制到新的 db B。 最佳答案 首先创建复制数据库: CREATE DATABASE du
我有一个使用 mySQL 作为后端的库存软件。我已经在我的计算机上对其进行了测试,并且运行良好。 当我在计算机上安装我的软件时,我必须执行以下步骤: 安装 mySQL 服务器 将用户名指定为“root
我是一名优秀的程序员,十分优秀!