文章目录
- 何为备份还原
- 数据表备份
- 单表备份
- SQL备份
何为备份还原
备份:将当前已有的数据或者记录保留;
还原:将已经保留的数据恢复到对应的表中;
为了防止数据丢失,保存数据记录 ;
数据备份还原的方式:数据表备份,单表数据备份,SQL备份 ;
数据表备份
不需要通过 SQL
语句操作,直接进去数据库文件夹复制对应的表结构以及数据文件,将它们作为备份,以后还原的时候,直接将它们再放回去 ;
数据表备份的前提:存储引擎必须是 myisam
;
mysql
的常用的存储引擎有:innodb
、myisam
;
-
innodb
:数据库文件中只有表结构,至于数据,则全部存储在ibdata1
文件中 ; -
myisam
:表、数据结构和索引,全部分开单独存在数据库文件夹下 ;
因此,数据表备份,对于 myisam
存储引擎,是非常使用的,因为表的结构、数据都在那,直接复制走即可;
而对于 innodb
则只能复制表的结构,这样是无意义的 ,并且就算复制过去,show tables
是可以看到看到表的,但是无法对表进行操作 ;
单表备份
每次只能备份一张表,只能备份数据(表结构是不能备份的) ;
基于上面的特点: 将表中的数据进行导出到文件 ;
从表中选出一部分数据保存到外部的文件中(outfile
),前提是外部文件不存在 ;
select */字段列表 into outfile '文件路径' from 数据源 ;
mysql> select * into outfile 'D:/student.txt' from student ;
Query OK, 8 rows affected
数据导出到文件中的时候,记住千万不要用记事本打开,它会改变数据的编码格式,数据在数据库中可能是utf8
,用记事本打开就会被强行改成 gbk
;
用 editplus
打开导出文件:
1 andy 1
2 sas 1
3 white 2
2 an 1
5 hany 1
6 yang 2
7 Wily 2
11 gery 2
数据中间的是 tab
键 ;
我们可以指定格式;
select */字段列表 into outfile '文件路径' fields 字段处理 lines 行处理 from 数据源 ;
- fields :字段处理
enclosed by :字段使用什么内容包裹,默认是'',空字符串 ;
terminated by:字段以什么结束,默认是'\t',`tab` 键 ;
Escaped by :特殊符号使用什么方式处理,默认是 '\\',即转义 ;
- lines 行处理
starting by :每行以什么开始,默认是'',空字符串 ;
terminated by:每行以什么结束,默认是'\r\n' ,即换行符 ;
mysql> select * into outfile 'd:/stu.txt'
-> fields
-> enclosed by '"'
-> terminated by '|'
-> lines
-> starting by 'start:'
-> from student ;
Query OK, 8 rows affected
用 editplus
打开导出文件:
start:"1"|"andy"|"1"
start:"2"|"sas"|"1"
start:"3"|"white"|"2"
start:"2"|"an"|"1"
start:"5"|"hany"|"1"
start:"6"|"yang"|"2"
start:"7"|"Wily"|"2"
start:"11"|"gery"|"2"
格式跟我们指定的一样 ;
使用这种方式备份的数据还原:
将一个在外部保存的数据重新恢复到表中(表必须存在,也就是表结构必须存在)
数据在导出的时候,怎么处理的,导入的时候也要对应的处理 ;
load data infile '文件路径' into table 表名[(字段列表)] fields 字段处理 lines 行处理 ;
mysql> load data infile 'd:/stu.txt' into table student
-> fields
-> enclosed by '"'
-> terminated by '|'
-> lines
-> starting by 'start:' ;
Query OK, 8 rows affected
Records: 8 Deleted: 0 Skipped: 0 Warnings: 0
SQL备份
备份的是 SQL
语句 ,系统会对 表结构以及数据 进行处理,将它们都变成对应的SQL
语句 ;,然后进行备份,还原的时候,mysql
会执行对应的 sql
指令,将表和数据都恢复 ;
mysql
并没有提示备份指令,需要使用 mysql
提供的软件 :mysqldump.exe
;
mysqldump -hPup 数据库名字 [数据表1 [数据表2 ...]] > '备份文件目录'
(不要封号结尾,因为就不是sql环境)
h是host,主机
P是post,端口
u是user,用户
p是password,密码
不写数据表,就是整个数据库备份 ;
在 cmd 中使用 :
mysqldump -uroot -proot database student > d:/stu.sql
查看文件,可以看到表结构和数据都得到了备份 :
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL default '0',
`name` varchar(10) default NULL,
`sex` varchar(10) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
LOCK TABLES `student` WRITE;
INSERT INTO `student` VALUES (1,'andy','1'),(2,'sas','1'),(3,'white','2'),(2,'an','1'),(5,'hany','1'),(6,'yang','2'),(7,'Wily','2'),(11,'gery','2');
UNLOCK TABLES;
数据还原:
- 使用mysql客户端 (在CMD里面使用)
是不需要指定表名的,备份的sql
里面有表结构 ;
mysql -HPup 数据库名字 < 备份文件目录
mysql -uroot -proot database < d:/stu.sql (一样的,不需要封号)
- 使用
SQL
指令还原(在mysql
里面使用)
语法:
source 备份文件路径
操作:
mysql> use `database` ;
Database changed
mysql> source d:stu.sql ;
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 8 rows affected (0.00 sec)
Records: 8 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
border="0" src="//music.163.com/outchain/player?type=3&id=1369010786&auto=1&height=20" width="1" height="0">