zoukankan      html  css  js  c++  java
  • (十六)数据备份与还原


    何为备份还原

    备份:将当前已有的数据或者记录保留;
    还原:将已经保留的数据恢复到对应的表中;

    为了防止数据丢失,保存数据记录 ;

    数据备份还原的方式:数据表备份,单表数据备份,SQL备份


    数据表备份

    不需要通过 SQL 语句操作,直接进去数据库文件夹复制对应的表结构以及数据文件,将它们作为备份,以后还原的时候,直接将它们再放回去 ;

    数据表备份的前提:存储引擎必须是 myisam

    mysql 的常用的存储引擎有:innodbmyisam

    • 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:字段以什么结束,默认是'	'`tab` 键 ;
    		Escaped by :特殊符号使用什么方式处理,默认是 '\',即转义 ;
    		
    
     - lines 行处理
    
    		starting by :每行以什么开始,默认是'',空字符串 ;
    		terminated by:每行以什么结束,默认是'
    ' ,即换行符 ;
    
    
    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;
    
    

    数据还原:

    1. 使用mysql客户端 (在CMD里面使用)

      是不需要指定表名的,备份的 sql 里面有表结构 ;

      mysql -HPup 数据库名字 < 备份文件目录
      
      mysql -uroot -proot database < d:/stu.sql (一样的,不需要封号)
      
      
      
    2. 使用 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">


  • 相关阅读:
    python递归函数
    python全局替换文件内容脚本第1版
    python的if判断补充
    python装饰器
    python函数作用域
    python函数基础
    python文件操作
    ASCII、Unicode和UTF-8编码的区别
    python基础(二)----数据类型
    python基础第一章
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665632.html
Copyright © 2011-2022 走看看