加载中…
个人资料
汤圆爱红豆
汤圆爱红豆
  • 博客等级:
  • 博客积分:0
  • 博客访问:2,105
  • 关注人气:4
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
谁看过这篇博文
加载中…
正文 字体大小:

Myqsl 学习笔记 --数据库的备份和还原

(2014-05-31 14:08:52)
标签:

杂谈

    在学习这一块的时候,遇到了一些问题,这些问题有的还没有解决。
数据库备份:
    方法一:使用mysqldump命令备份(mysqldump是MySQL标准的数据导出的命令)
        mysqldump命令执行时,可以将数据库成一个文本文件,该文件中实际上包含了多个CREATE和INSERT语句,使用这些语句可以重新创建表和插入表。
        mysqldump备份数据库语句的基本语法格式:
        mysqldump -u user -h host -ppassword dbname [tbname,[tbname]] > filename.sql

        user:用户名称;
        host:登录用户的主机名称;
        password:登陆密码,如果想在该语句上输入密码这必须紧跟-p参数,不能用空格分开;
        dbname:需要备份的数据库名称;
        tbname:为dbname数据库中需要备份的数据表,可以制定多个需要备份的数据表;
        > :告诉mydump将备份数据表的定义和数据写入备份文件;
        filename.sql: 备份文件的名称。
Myqsl <wbr>学习笔记 <wbr>--数据库的备份和还原

导出数据之后,可以打开我们导出的文件fruits.sql:
Myqsl <wbr>学习笔记 <wbr>--数据库的备份和还原

首先,文件开头包含了一些备份文件的信息,比如:使用mysqldump工具的版本号,备份账户的名称、主机信息,备份的数据库的名称,最后是MySQL的服务器的版本号。这里为5.5.37。
    接下来是一些SET语句,这些语句将一些系统变量值赋给用户定义变量,用来确保被恢复的数据库的系统变量和原来备份时的变量相同。
    比如看,SET语句的第一句:
    *!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT *;
    是将系统变量CHARACHER_SET_CLIENT赋给用户定义变量@OLD_CHARACTER_SET_CLIENT。
    再看文件的尾部也是SET语句,看第四句:
   *!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT *; 
则是用来恢复服务器系统变量原来的值的。
    备份文件中的”--“字符开头的行为注释语句:以”"结尾的语句为可执行的MySQL注释,这些语句可以被MySQL执行,但在其他数据库管理系统将被作为注释忽略,是用来提高数据库的可移植性的。
    备份文件开始的一些语句以数字开头,这些数字代表了MySQL版本号,该数字告诉我们这些语句只有在指定的MySQL版本或者比版本高的情况下才能执行。例如40014,表明这些语句只有在MySQL版本号为4.00.14或者更高的条件下才可以被执行。
   
    如果想备份数据库中的所有表:mysqldump -u root -h localhost -p dbname > filename.sql
    如果想要备份数据库中的某些表
    mysqldump -u root -h localhost -p dbname tbname[,tbname2,tbname3] > filename.sql
    如果想要备份多个数据库:
    mysqldump -u user -h localhost -p --databases [dbname1,[dbname2...]] > filename.sql
    如果想要备份所有数据库:mysqldump -u root -p --all-databases > filename.sql
 :如果在服务器上进行备份,并且表为MyISAM表,应考虑用mysqlhotcopy,因为可以更快地尽心备份和恢复。
        当然啦,mysqldump还有其他选项可以用来制定备份过程。

  方法二直接复制整个数据库目录
        可以直接复制MySQL数据库的存储目录即文件进行备份。这是一种简单、快速、有效地备份方法,但是并不是最好的,因为这种方法对InnoDB存储引擎的表不适用,并且不同版本可能不兼容。
        使用这种方法法备份,想要爆出备份的一致性,备份前需要对相关表执行LOCAL TABLES操作,然后对表执行FLUSH TABLES操作。
        FLUSH TABLES:确保开始备份前将所有激活的索引文写入硬盘,也可以停止MySQL服务再进行备份操作。
       
     方法三:适用mysqlhotcopy工具快速备份
        基本语法格式:
        mysqlhotcopy db_name_1, ... db_name_n /path/to/new_directory

        db_name,...db_name_n:需要备份的数据库的名称
        /path/to/new_directory:指定备份文件目录。
        mysqlhotcopy只是将表所在的目录复制到另一个位置,只能用于备份MyISAM和ARCHIVE表,并且只能运行在数据库目录所在的机器上。
        如果要备份表,必须可以访问备份的表文件,具有表的SELECT权限、RELOAD权限和LOCK TABLES权限。备份InnoDB类型的数据表时会出现错误信息。

数据还原:
    为什么要数据还原?
    因为可能管理人员操作失误、计算机故障以及其他的意外情况,数据可能会丢失或者破坏,所以我们可以通过还原备份的数据尽量减少数据丢失或者破坏造成的损失。
   
    方法一:使用mysql命令还原
    基本语法:
    mysql -u user -p dbname < filename.sql
;
    user:是执行filename.sql中语句的用户名;
    -p:输入用户密码;
    dbname:数据库名;
    filename.sql:为mysqldump工具创建的包含创建数据库语句的文件,执行的时候不需要制定数据库名称。
    :如果使用mysqldump备份整个数据库成功,把表和数据库都删除了,但使用备份文件却不能恢复数据库时,可能是在备份数据库时的语句写的是:mysqldump -u root -p booksDB > books.sql.这条语句只备份了booksDB数据库下所有的表,CREATE语句里不包含CREATE DATABASE语句。,因此如果把数据库也删除了,所以使用该sql文件就不可以还原以前的表了。
    如果已经登陆到MySQL服务器,可以使用source命令导入sql文件,不过在使用之前,需要使用use语句选择数据库。
Myqsl <wbr>学习笔记 <wbr>--数据库的备份和还原


    使用完毕以后:
Myqsl <wbr>学习笔记 <wbr>--数据库的备份和还原


   方法二:直接复制到数据库目录:
    直接复制备份的文件到MySQL数据目录下实现还原。用这种方式还原数据时,必须保存备份数据的数据库和待还原的数据库服务器的主板号相同,并且这种方式只对MyISAM引擎的表有效,对InnoDB引擎的表不可用。
    步骤:关闭mysql服务,将备份的文件或目录覆盖MySQL的data目录,启动mysql服务。
   
    方法三:mysqlhotcopy快速恢复
    步骤:
    1、停止mysql服务器。
    2、复制备份的数据库目录到mysql数据目录下。
    3、更改目录所有者为mysql服务器运行的用户(如mysql)。
    4、启动mysql服务器
    如果以根目录执行该操作,必须指定数据库文件的所有者:chown -R mysql.mysql /var/lib/mysql/dbname
    如果需要恢复的数据库已经存在,则需要删除已经存在的数据库之后,恢复才能成功。

什么是数据库迁移:
    数据库迁移就是把数据从一个系统移动到另一个系统上。

为什么要数据库迁移:
    1.需要安装新的数据库服务器
    2.数据库MySQL版本更新
    3.数据库管理系统的变更
    4.……

数据库迁移的种类:
    1.相同版本的数据库之间的迁移
    2.不同版本的MySQL数据库之间的迁移
    3.不同数据库之间的迁移


 这里重点说了将数据库中的数据导出到文本文件中,或者将文本文件导入到数据库中。
 1.表中数据的导出
    方法1:SELECT...INTO OUTFILE 'filename'
    基本格式:
     SELECT columnlist FROM table WHERE condition INTO OUTFILE 'filename'[OPTION]
     columnlist:需要导出的数据列
     table:需要导出数据的数据表
     conditon:语句查询条件 
     filename:导出的文件名。
     OPTION:可选参数,可以用来规定输出数据的格式。
Myqsl <wbr>学习笔记 <wbr>--数据库的备份和还原

Myqsl <wbr>学习笔记 <wbr>--数据库的备份和还原

根据语句基本格式:可以查出就是用select语句查询出来的结果导出到'filename'文件中。
        在用这个语句方法的时候,我遇到了一个问题,就是select... into outfile到制定的目录(除了/tmp/目录下)比如家目录下,就会提示can't create/write 该文件的语句,网上也搜了一些办法来解决,但都没有解决这个问题,所以可以将文件先导出到/tmp/目录下,然后再移动到我需要的地方来或者使用下面的方法。
   
    方法2:用mysql命令导出文本文件
    语句的基本格式:
    mysql -u root -p  --execute = "SELECT 语句" dbname > filename.txt

     --execute选项:执行该选项后面的语句并退出,后面的语句必须用双引号括起来。
    dbname:为要导出的数据库名称(导出的文件中不同列之间使用制表符分隔)
    也可以加上 --vartical选项来将每条记录分为多行显示。
                      --html选项将表中的记录到html文件中
                      --xml选项将表中的数据记录到xml文件
Myqsl <wbr>学习笔记 <wbr>--数据库的备份和还原

Myqsl <wbr>学习笔记 <wbr>--数据库的备份和还原

2.导入文本文件
   方法1:LOAD DATA INFILE方式导入文本文件。
          基本格式:
    LOAD DATA 'filename.txt' into table tablename[OPTIONS][IGNORE number LINES]

 
 
  方法二
:使用mysqlimport命令导入文本文件
        基本格式:
    mysqlimport -u root -p dbname filename.txt[OPTIONS]

         这里只要指明导入表所在的数据库名称就可以了,不用指定导入数据库的表的名称,因为数据表的名称由导入文件名称确定,即文件名为表名。

 注:如果出现了can't get stat of'filename.txt'(errcode 13)的提示错误,说明该文本文件没有放在数据库的data里,默认目录是/var/lib/mysql。把要导入的文本文件放入要导入的数据库目录下,然后导入才会成功。  
  这里的[OPTIONS][IGNORE number LINES]都是可选参数,具体要用的时候,我会查阅手册或者一些资料。

笔记参考资料《Mysql5.5从零开始》

0

阅读 评论 收藏 转载 喜欢 打印举报
已投稿到:
前一篇:学习笔记
后一篇:小结啊小结
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    < 前一篇学习笔记
    后一篇 >小结啊小结
      

    新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有