数据的备份与恢复
概念
备份就是将已有的内容复制一份,存储在其他的服务器上!
MySQL中提供的备份的方式有很多,常见的有:
文本备份
数据备份(单表)
SQL备份
一.文本备份
文本备份是最简单的!就是复制和粘贴!
我们一般认为,文本备份只适合Myisam存储引擎的数据表!
还原的时候就是把上面的三个文件复制到对应的数据库目录下就行了!
缺点:
每次都要备份全部的文件,非常浪费空间和时间!
二.数据备份
也就是只备份一张数据表的数据部分!(表的结构不备份)
也就是说,如果备份之后,不小心执行了delete语句,数据还可以找回来,但是如果不小心执行了drop语句,数据表就很难还原了!
备份语法
1 -- 数据备份语法 2 select * | 字段列表 into outfile 文件地址 from 表名; 3 -- 备份php_student 表 4 select * into outfile \'G:/backup/php_student.txt\' from php_student;
1 注意: 2 1.备份的时候不能指定一个已经存在的文件存储数据,文件只能由MySQL系统自动生成 3 2.首先要有backup目录! 4 5 -- 还原语法: 6 load data infile 文件地址 into table 表名[字段列表]; 7 8 delete from php_student; 9 10 load data infile \'G:/backup/php_student.txt\' into table php_student;
三.SQL备份
将表的结构和数据通过sql语句的形式进行备份!
mysql中有一个专门用来备份的客户端:mysqldump.exe
既然是客户端,也需要连接认证!
1 备份语法 2 --SQL备份语法 3 mysqldump -h主机地址 -P端口号 -u用户名 -p 数据库名字[数据表1 数据表2] > 备份的存储路径 4 5 也就说如果省略掉了数据表的名称,意思就是备份前面整个数据库!
-- 备份单表 mysqldump -uroot -p php2017 php_student > G:/backup/php_student.sql 如果是整个数据库备份: -- 备份多表 mysqldump -uroot -p php2017 php_student > G:/backup/php_student.sql php_student2 > G:/backup/php_student2.sql -- 备份单库 mysqldump -uroot -p php2017 > G:/backup/php_student.sql -- 备份多库语法 -- 其实,还可以同时备份多个数据库,语法: mysqldump -h主机地址 -P端口号 -u用户名 -p --database 数据库1 数据库2 .. > 存储路径 mysqldump -uroot -p --database php2017 php2018 > g:/backup/php.sql -- 还可以一次性备份所有的数据库: -- 语法如下: mysqldump -h主机地址 -P端口号 -u用户名 -p --all-database>存储路径 mysqldump -uroot -p --all-database > g:/backup/all.sql
还原语法
还原语法 有两种方式: 第一种: -- 使用mysql客户端还原语法 mysql -h主机地址 -P端口号 -u用户名 -p 数据库的名称 < 备份的路径 -- 先drop掉php_student 表 drop table php_student ; -- 还原 mysql -uroot -p php2017 < g:/backup/php_student.sql 注意:如果整个数据库都被删除了,应该先创建数据库,然后再去还原。 -- 删除整个数据库 drop database php2017; -- 还原 create database \'php2017\'; mysql -uroot -p php2017 < g:/backup/php_student.sql 第二种:使用sql命令: source 备份路径; -- 先drop掉php_student 表 drop table php_student; -- 使用source命令还原 source g:/backup/php_student.sq; /* 总结SQL备份的优缺点: 优点: 既可以备份表数据也可以备份表结构,即使数据库被drop掉了也能还原 缺点:备份是整表的备份,耗时比较长,也比较浪费磁盘空间! 备份策略: 推荐SQL备份+ n天轮流策略! 比如:永远只备份最近7天的! */
第一种还原: