MySQL备份恢复第一篇

今天学习了下MySQL的备份恢复内容,也算是对之前的 数据导入导出的一个细化内容。备份恢复的内容其实还是蛮复杂的,一般网站上提到的备份恢复也基本都是逻辑备份恢复的内容。对于更为高效的备份mysqlbackup和恢复的内容提到的很少,mysqlbackup是需要Licence,需要单独收费的,这也算是向oracle产品线的一个靠拢了。
首先我们还是走走老路,来看看最基本的逻辑备份恢复吧。我们模拟了3万多条的数据。然后尝试恢复回来。
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select count(*)from  new_test;
+----------+
| count(*) |
+----------+
|    32046 |
+----------+
1 row in set (0.02 sec)

mysql> select current_timestamp();   --在删除数据之前,我们先来看看时间戳。
+---------------------+
| current_timestamp() |
+---------------------+
| 2015-04-13 14:52:27 |
+---------------------+
1 row in set (0.00 sec)

然后使用经典工具mysqldump来导出 test的数据。
[mysql@oel1 ~]$ mysqldump -u test --databases test > exp_test.log
然后我们直接运行exp_test.log文件
[mysql@oel1 ~]$ mysql -u test
[mysql@oel1 ~]$ 

mysql> use information_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> 
mysql> select table_schema,table_name,table_type,engine,create_time from tables where table_schema='test';
+--------------+-------------+------------+--------+---------------------+
| table_schema | table_name  | table_type | engine | create_time         |
+--------------+-------------+------------+--------+---------------------+
| test         | innodb_test | BASE TABLE | InnoDB | 2015-04-13 14:54:09 |
| test         | myisam_test | BASE TABLE | MyISAM | 2015-04-13 14:54:09 |
| test         | new_test    | BASE TABLE | InnoDB | 2015-04-13 14:54:09 |
+--------------+-------------+------------+--------+---------------------+
3 rows in set (0.01 sec)
记录时间戳的目的就是可以看到表new_test的创建时间是在恢复之后,也就是说在恢复的时候也是删除了表,然后重建导入数据。

然后我们再次尝试通过source运行脚本来恢复数据,效果也是一样的。
mysql> source exp_test.log
...

mysql> select count(*)from new_test;  --可以看到数据都原原本本的回来了。
+----------+
| count(*) |
+----------+
|    32046 |
+----------+
1 row in set (0.03 sec)

mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2015-04-13 14:56:32 |
+---------------------+
1 row in set (0.00 sec)

还可以通过如下的方式来导出表结构和表数据,然后分别处理。下面两种方式都是等价的。
mysqldump -u test -T /u02/mysql/dump test
mysqldump -u test --tab=/u02/mysql/dump test

运行后生成的文件结构如下:.txt是数据内容,.sql是表结构语句。
[mysql@oel1 dump]$ ll
total 948
-rw-r--r-- 1 mysql dba   1349 Apr 13 16:02 innodb_test.sql
-rw-rw-rw- 1 mysql dba      2 Apr 13 16:02 innodb_test.txt
-rw-r--r-- 1 mysql dba   1349 Apr 13 16:02 myisam_test.sql
-rw-rw-rw- 1 mysql dba      2 Apr 13 16:02 myisam_test.txt
-rw-r--r-- 1 mysql dba   1380 Apr 13 16:02 new_test.sql
-rw-rw-rw- 1 mysql dba 943641 Apr 13 16:02 new_test.txt

导入数据可以使用下面的两种方式来实现。
[mysql@oel1 dump]$ mysqlimport -u test test /u02/mysql/dump/new_test.txt
test.new_test: Records: 32046  Deleted: 0  Skipped: 0  Warnings: 0

mysql> load data infile '/u02/mysql/dump/new_test.txt' into  table  new_test;
Query OK, 32046 rows affected (0.23 sec)
Records: 32046  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select count(*)from new_test;  --再次导入数据,数据量就翻倍了。
+----------+
| count(*) |
+----------+
|    64092 |
+----------+
1 row in set (0.05 sec)

一些细节的补充。
下面两种方式还是存在着较大的差距。我们来看看差别到底都在哪里。标黄部分就是差别所在。
 mysqldump -u test  test > b.sql
 mysqldump -u test --databases test > a.sql

 > sdiff a.sql b.sql
 /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;        /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-- Current Database: `test`                                  
--                                                            
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFA
USE `test`;                                                  
--                                                            
-- Table structure for table `innodb_test`                      -- Table structure for table `innodb_test`
在实际工作中,基本上我们不会导个数据重建个数据,所以第二种方式还是推荐的,不建议使用--databases选项。

mysqlimport导入数据,不能导入ddl语句
[mysql@oel1 dump]$ mysqlimport -u test test '/u02/mysql/dump/innodb_test.sql'
mysqlimport: Error: 1146, Table 'test.innodb_test' doesn't exist, when using table: innodb_test

-----导出存储程序
对于存储程序来说,可以使用下面的选项来选择性的导出,也可以忽略。
--events: Dump Event Scheduler events
--routines: Dump stored procedures and functions
--triggers: Dump triggers for tables
--skip-events, --skip-routines, or --skip-triggers.

只导出表结构
mysqldump -u test --no-data test > dump-defs.sql

只导出表中数据
mysqldump -u test --no-create-info test > dump-data.sql

导出数据中包含存储程序
mysqldump -u test --no-data --routines --events test > dump-defs.sql

以上基本就是逻辑备份的内容了,说起高效的备份,mysqlbackup性能提升还是很大的。不过企业版本的加强版本,还是需要付费的。下载的时候其实也是很方便的。
通过这个链接 http://www.mysql.com/downloads/ 选择enterprise backup对应的安装包即可
至于说安装,其实就是个插件一样,完全不需要安装,解压的事情,解压完配置一下环境变量就好了。
[mysql@oel1 ~]$ ll *.zip
-rw-r--r-- 1 mysql dba 4141359 Apr 13 17:37 V59683-01.zip
[mysql@oel1 ~]$ unzip V59683-01.zip
Archive:  V59683-01.zip
 extracting: meb-3.11.1-linux-glibc2.5-x86-32bit.tar.gz  
 extracting: meb-3.11.1-linux-glibc2.5-x86-32bit.tar.gz.asc  
 extracting: meb-3.11.1-linux-glibc2.5-x86-32bit.tar.gz.md5  
 extracting: README.txt              
[mysql@oel1 ~]$ gunzip  meb-3.11.1-linux-glibc2.5-x86-32bit.tar.gz
[mysql@oel1 ~]$ tar -xvf *.tar
meb-3.11.1-linux-glibc2.5-x86-32bit/
meb-3.11.1-linux-glibc2.5-x86-32bit/mvl.css
meb-3.11.1-linux-glibc2.5-x86-32bit/bin/
meb-3.11.1-linux-glibc2.5-x86-32bit/bin/mysqlbackup
meb-3.11.1-linux-glibc2.5-x86-32bit/README.txt
meb-3.11.1-linux-glibc2.5-x86-32bit/LICENSE.mysql
meb-3.11.1-linux-glibc2.5-x86-32bit/manual.html
[mysql@oel1 ~]$ 
解压好以后,直接配置.bash_profile把mysqlbackup配置到里面就大功告成了。
[mysql@oel1 mysql]$ mysqlbackup --version
MySQL Enterprise Backup version 3.11.1 Linux-2.6.18-274.el5-i686 [2014/11/04] 
Copyright (c) 2003, 2014, Oracle and/or its affiliates. All Rights Reserved.
Run mysqlbackup --help for help information.

时间: 2024-09-14 16:09:09

MySQL备份恢复第一篇的相关文章

MySQL备份恢复第二篇

MySQL中的数据恢复功能相比Oracle来说还是要单薄一些,而Oracle中的数据恢复相对来说自动化的程度要高一些.不过Mysql的二进制日志提供的信息很丰富,而日志信息在Oracle中式完全屏蔽的,对于数据的恢复可能MySQL也很灵活. 我们来模拟一下通过完整备份+增量备份(binlog)的方式来恢复. 首先我们来选择一个表new_test作为恢复的参考点. mysql> select count(*)from new_test; +----------+ | count(*) | +---

探索ORACLE不完全恢复之--基于cancel恢复 第一篇

探索ORACLE不完全恢复之--基于cancel恢复 第一篇 作者:吴伟龙   Name:Prodence Woo QQ:286507175  msn:hapy-wuweilong@hotmail.com 基于cancel的不一致性恢复(归档存在) 第一篇                 基于取消的恢复只适用于以下情况:归档日志丢失导致完全恢复失败:丢失了数据文件和未归档的重做日志(联机重做日志):   1.先关闭数据库,执行一次全库冷备份.   SQL> selectfile_name fro

mysql备份恢复中的常见错误

从A主机备份到B主机 mysqldump -uroot  -p vw>vw.sql 现备份数据库文件,需要恢复到目标机B,B的数据库版本为5.5.23,A机器的mysql版本为5.0.22 mysql>source /root/vw.sql; -------------------- Query OK, 6748 rows affected (0.13 sec) Records: 6748 Duplicates: 0 Warnings: 0 Query OK, 6807 rows affect

php实现mysql备份恢复分卷处理的方法_php技巧

本文实例讲述了php实现mysql备份恢复分卷处理的方法.分享给大家供大家参考.具体分析如下: 分卷处理就是把握们要处理的数据分成一个个小文件进行处理了,这里我来给大家介绍一个php mysql备份恢复分卷处理类,实现mysql数据库分卷备份,选择表进行备份,实现单个sql文件及分卷sql导入. 分卷导入类及思路详解 数据库导入导出是一个后台必要拥有的功能,网上一搜,有很多关于数据库导入导出的,但基本上一个大的系统,包含了许多我们并不需要的,而且他们都是自己的后台的形式,我并不喜欢的是拿人家的东

php mysql备份恢复分卷处理(数据库导入导出)

分卷导入类及思路详解 数据库导入导出是一个后台必要拥有的功能,网上一搜,有很多关于数据库导入导出的,但基本上一个大的系统,包含了许多我们并不需要的,而且他们都是自己的后台的形式,我并不喜欢的是拿人家的东西整合到自己的后台,我需要的是自己东西.于是参照了很多,自己写了一个关于分卷导入类.以方便调用.欢迎大家拍砖. 这里针对分卷文件是以'_v1.sql'为结尾,实现单个sql文件及分卷sql导入,分卷导入可选择是否当前分卷导入余下分卷,我们只需要直接调用类即可完成 //分别是主机,用户名,密码,数据

探索ORACLE不完全恢复之--基于SCN恢复 第一篇

探索ORACLE不完全恢复之--基于时间恢复 作者:吴伟龙   Name:Prodence Woo QQ:286507175  msn:hapy-wuweilong@hotmail.com 基于SCN恢复 第一篇 1.在删除数据之前,察看下SCN号是多少: SQL> col name format a45 SQL> set line 300 SQL> select name,checkpoint_change# from v$datafile_header;   NAME        

MySQL 备份恢复单个innodb表的教程

在实际环境中,时不时需要备份恢复单个或多个表(注意:这里除非明确指定,所说的表一律指InnoDB表),而对于innodb引擎恢复单个表需要整体的恢复,xtrabackup也可以单个表恢复,只不过是用的正则过滤的,不知最新版本是否支持表空间传输特性.本文将要说说怎么移动或复制部分或全部的表到另一台服务器上,而所要用到的技术点就是transportable tablespace特性,这就意味着MySQL5.6.6以及以上版本才支持. 表空间传输特性允许表空间从一个实例移动到另一个实例上.这在以前版本

RDS中的MYSQL备份恢复

RDS使用mysqldump对 MySQL 数据库进行逻辑全量备份,使用开源软件Xtrabackup进行物理全量备份,是实例级别的备份. 用户登录RDS控制台,可以下载备份文件.按照 利用逻辑备份文件恢复到自建数据库-MySQL和利用物理备份文件恢复到自建数据库-MySQL中的操作步骤,实现数据的恢复. 本文主要从原理的角度来介绍MySQL数据库的备份和恢复,希望能让用户更加了解RDS的备份恢复机制.   一.备份类型介绍 1. 按备份操作方式:物理备份和逻辑备份 备份方式 优点 缺点 逻辑备份

使用xtrabackup对Mysql备份恢复

备份原理:XtraBackup基于InnoDB的crash-recovery功能.它会复制innodb的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致.InnoDB维护了一个redo log,又称为transaction log,事务日志,它包含了innodb数据的所有改动情况.XtraBackup在备份的时候, 一页一页地复制innodb的数据,而且不锁定表,与此同时,XtraBackup还有另外一个线程监视着trans