在mysql里面,有逻辑备份和物理备份。逻辑备份最大优点是对于各种存储引擎,都可以使用同样的方法来备份。而物理备份则不同,不同的存储引擎有着不同的备份方法。
逻辑备份与恢复备份在mysql中逻辑备份是使用mysqldump将数据库中的数据备份为一个文本文件,备份的文件可以被查看和编辑。按照备份范围,可以将备份分为以下三种备份。
备份指定的一个数据库或者该数据库中的某些表
mysqldump [options] 数据库名 [表名] > data.sql
备份指定的多个数据库
mysqldump [options] –database > data.sql 数据库1名 数据库2名 数据库3名…
备份所有的数据库
mysqldump [options] –all-database > data.sql
解析:[options] 备份时候,需要的权限信息等。mysqldump的选项很多,具体可以通过mysqldump –help来查看。 为了保证数据备份一致性,mysql存储引擎在北方时候,需要加上-l 参数,表示将所有表加上读锁,在备份期间,所有的表将只能读,而不能写。但是对于innodb引擎来说,可以采用–single-transaction。data.sql备份的数据文件
参数:
l:代表给所有表加锁
f:代表生成一个新的日子文件
实例将xxpt数据库中所有表备份到dequan.sql表中。命令如下:
mysqldump -uroot -p xxpt >dequan.sql
因为上面我没有指定备份路径,默认情况下,会备份到当前路径,所以备份到d:\wamp\bin\mysql\mysql5.6.17\bin路径下了。
恢复完全恢复mysqldump的恢复也很简单,将备份作为输入执行即可。结果如下:
mysql -uroot -p dbname
不完全恢复不完全恢复包含基于时间点的恢复和基于位置的恢复。时间点与位置是相对应二进制日志(binlog日志)里面的时间点和位置。
基于时间点将设下午4:00到下午5:00之前的数据室错误的,恢复时候,需要跳过。首先我们来看一下binlog日志。如下午4点多更新数据是错误的,恢复时候需要跳过,下午5点多删除数据是正确的,需要保留。
1.通过mysql -uroot -p dbname
基于位置的恢复使用位置恢复时候,我们需要先查看binlog日志文件,确定位置编号,然后使用如下命令进行恢复:
mysqlbinlog d:\wamp\bin\mysql\mysql5.6.17\data\mybinlog.000012 –stop-position=716406|mysql -uroot -p
恢复5点之后的操作
d:\wamp\bin\mysql\mysql5.6.17\data\mybinlog.000012 –start-position=723613|mysql -uroot -p
物理备份与恢复物理备份分为冷备份和热备份。和逻辑备份相比,它的最大优点是备份和恢复的速度快。因为物理备份的原理都是基于文件的cp。
冷备份与恢复冷备份其实就是将停掉数据库服务,复制数据文件的方法。这种方法对myisam和innodb都适合。
恢复:首先停掉mysql服务,在操作系统级别恢复mysql的数据文件,然后重启mysql服务,使用mysqlbinlog工具恢复备份以来的所有binlog。
热备份在mysql中不同存储引擎的热备份时不相同的。
myisam存储引擎myisam存储引擎备份原理就是将要备份的表加读锁,然后在cp数据文件到备份目录。常用方法
方法一:使用mysqlhotcop
mysqlhotcop db_name [目录]
方法二:手工锁表copy
首先给数据库中所有表加读锁,然后cp数据。
锁定所有表flush tables with read lock;
innodb存储引擎正在学习中···
表的导入与导出导出使用select …into outfile …+[options]命令实现
关于options参数如下
默认路径为该数据对应的路径下:
使用mysqldump
mysqldump -u username -t targetdir dbname tablename[options]
比如:
mysqldump -uroot -p -t d:/wamp/bin/mysql/mysql5.6.17/ xxpt t1
生成了两个文件,如下图:
t1.txt中保存中数据信息,t1.sql文件内容如下
-- mysql dump 10.13 distrib 5.6.17, for win32 (x86) ---- host: localhost database: xxpt -- ------------------------------------------------------ -- server version 5.6.17-log /*!40101 set @old_character_set_client=@@character_set_client */; /*!40101 set @old_character_set_results=@@character_set_results */; /*!40101 set @old_collation_connection=@@collation_connection */; /*!40101 set names utf8 */;/*!40103 set @old_time_zone=@@time_zone */; /*!40103 set time_zone='+00:00' */;/*!40101 set @old_sql_mode=@@sql_mode, sql_mode='' */; /*!40111 set @old_sql_notes=@@sql_notes, sql_notes=0 */; ---- table structure for table `t1`--drop table if exists `t1`; /*!40101 set @saved_cs_client = @@character_set_client */; /*!40101 set character_set_client = utf8 */; create table `t1` ( `id1` int(11) not null default '0', `id2` int(3) unsigned zerofill not null default '000') engine=innodb default charset=utf8; /*!40101 set character_set_client = @saved_cs_client */; /*!40103 set time_zone=@old_time_zone */; /*!40101 set sql_mode=@old_sql_mode */; /*!40101 set character_set_client=@old_character_set_client */; /*!40101 set character_set_results=@old_character_set_results */; /*!40101 set collation_connection=@old_collation_connection */; /*!40111 set sql_notes=@old_sql_notes */; -- dump completed on 2016-04-18 19:30:51
导入方法一:
load data infile
eg:
load data infile ‘d:/wamp/bin/mysql/mysql5.6.17/t1.txt’ into table t1;
方法二:使用mysqlinport
以上就是mysql的备份与恢复详解的内容。
