zoukankan      html  css  js  c++  java
  • MySQL数据备份与还原

    备份数据库的方法网上有很多。园子里我见有一个园友写的就挺好。传送门https://www.cnblogs.com/kissdodog/p/4174421.html

    我就在他的基础上补充点,他没写的。

    1、备份数据库中的某个表

    语法格式:

    mysqldump -u user -h host -p dbname [tbname,[tbname..]] > filename.sql

    实例:

    mysqldump -uroot -p food shop_order >G:shop_order.sql
    dbname 表示数据库中的表名,多个表名之间用空格打开。
    备份数据可以与备份表的不同之处在与,如果要备份数据库,把表名去掉即可。

    2、数据库还原

    2.1第一种还原办法:

    source filename

    实例:

    1、登录mysql服务器
    2、use food
    3、source G:shop_order.sql

    2.2、第二种还原办法

    mysql -uroot -p <test.sql

    3、直接复制到数据库目录

      注:保存备份的数据库和待还原的数据库服务器的主版本号相同。而且这种方式只针对MyISAM引擎的表有效,对于InnoDB引擎的表不可用。

    执行还原前关闭mysql服务,将备份的文件或目录覆盖MySQL的data目录,启动mysql服务。LINUX需要将文件的用户和组更改为mysql运行的用户和组。

    4、数据库迁移

      直接复制,此方法只使用MyISAM引擎的镖。

      1、相同版本的mysql数据库之间的迁移

    mysqldump -h www.abc.com -uroot -ppassword food1 |  mysql -h www.efd.com -uroot -ppassword

    mysqldump导入的数据之间通过管道符"|",传给mysql命令导入到主机www.efd.com数据库中。food1为需要迁移的数据库名称。迁移全部的数据库,可使用参数 --all-databases。

      2、不同版本的mysql数据库之间的迁移

      需要注意的的新旧数据库版本如果使用不同的默认字符集,在导入带有中文数据的时候,需要对默认字符集进行修改。不然可能无法正常显示结果。MyISAM可以直接复制或者mysqlhotcopy工具,mysqldump导入到目标服务器。InnoDB,一般使用mysqldump导入。新版本向旧版本迁移时要小心,最好使用mysqldump命令导出,然后导入目标数据库。

      3、不同数据之间的迁移

      不同数据库。他们之间关键字有可能会不同。所以迁移的时候可以使用工具。如:navcat还有mysql官方提供的工具 MySQL Migration Toolkit。

    5、导出文本文件

      语法:

    SELECT columnlist FROM table WHERE condition INTO OUTFILE 'filename' [OPTIONS]

      --OPTIONS 选项

    • FIELDS TERMINATED BY 'value':设置字段直接的间隔字符,可以为单个或多个字符,默认情况下为制表符 " ".
    • FIELDS [OPTIONALLY] ENCLOSED BY 'value':设置字段的包围字符串,只能为单个字符,如果使用了optionally,则只有char和varchar等字符数据字段包被括。
    • FIELDS ESCAPED BY 'value':设置如何写或读取特殊字符,只能为单个字符,即设置转义字符,默认值为""
    • LINES STARTING BY ‘value’:设置每行数据开头的字符,可以为单个或多个字符,默认情况下不使用任何字符
    • LINES TERMINATED BY ‘value’:设置每行数据结尾的字符,可以为单个或多个字符,默认值为" ".
    • FIELDS和LINES两个字句都是自选的,单是如果两个都被指定了。FIELDS必须位于LINES的前面

      select .. info outfile可以非常快速地把一个表转储到服务器上。如果在服务器主机之外的部分主机上创建结果文件。则使用mysql -e "select ...">file_name 这样的命令。

        实例:

    select * from tbl_shop_order into outfile 'g:1.txt'
    FIELDS
    TERMINATED BY ','
    ENCLOSED BY '"'
    ESCAPED BY '''
    LINES
    TERMINATED BY '
    ';

    该语法导出之后只有数据,没有结构

    6、mysql命令导出文本文件

    语法:

    mysql -uroot -p --execute="SELECT语句" dbname >filename.txt

    --execute表示执行选项后面的语句并退出。dbname指数据库名称;语句必须用双引号;导出的文件中不同列直接使用制表符分割,第1行包含了各个字段的名称。

    实例:

    mysql -uroot -p --execute="select * from tbl_shop_log" test >G:	bl_shop_log.txt

    --execute前面添加--vertical可以将每条记录分为多行显示;添加 --html 可以将查询结果导出到html文件中;添加--xml可以将查询结果导出到xml文件中

    mysql -uroot -p --html --execute="select * from tbl_shop_log;" test >G:	bl_shop_log.html

    7、mysqldump导出文本文件

    实例:

    mysqldump -T G:  test1 -uroot -p

    G:后面不加文件夹名称 表示导入根目录,否则则是导入根目录 ;如果导入根目录需要加空格   test1代表数据库名称

    执行成功之后,将会导出.txt和.sql两个文件;

    .txt文件只包含数据

    .sql包含表结构

    7、使用load data infile 方式导入文本文件

    语法:

    LOAD DATA INFILE 'filename' INTO TABLE tablename  [OPTIONS]
    [IGNORE number LINES]

    OPTIONS参数与导出文本文件参数一致。

    ignore number lines表示忽略文件开始处的行数,number表示忽略的行数。执行load data语句需要file权限

    实例:

    load data infile 'G:	bl_shop_order.txt' into table liuhesan.tbl_shop_order
    FIELDS
    TERMINATED BY ','
    ENCLOSED BY '"'
    ESCAPED BY '''
    LINES
    TERMINATED BY '
    ';

    8、使用mysqlimport导入文本文件

    语法:

    mysqlimport -u root-o dbname filename.txt [OPTIONS]

      --OPTIONS 选项

    • fields-ferminated=value:设置字段直接的封字符,可以为单个或多个字符,默认情况下为制表符 " ".
    • fields-enclosed-by=value:设置字段的包围字符
    • fields-optionally-enclosed-by=value:设置字段的包围字符串,只能为单个字符,包括char和varchar等字符数据字段。
    • fields-escaped-by=value:控制如何写入或读取特殊字符,只能为单个字符,即设置转义字符,默认值为""
    • lines-terminated-by=value:设置每行数据结尾的字符,可以为单个或多个字符,默认值为" ".
    • ignore-lines=n:忽视数据文件的前n行
    • ....

    dbane为数据库名称。mysqlimport不指定导入数据库的表名称,数据库表的名称由导入文件名称确定,即文件名作为表名,导入数据之前该表必须存在。

    实例:

    mysqlimport -uroot -p test G:1.txt --fields-terminated-by=,
    --fields-optionall-enclosed-by=" --fields-escaped-by=? --lines-terminated-by=
    
  • 相关阅读:
    【BigData】Java基础_ArrayList的使用
    【BigData】Java基础_构造方法的使用
    【BigData】Java基础_类和对象的基本使用
    【BigData】Java基础_冒泡排序
    【BigData】Java基础_数组
    【BigData】Java基础_循环
    【BigData】Java基础_终端输入2个数字并求和
    Navicat自动断开连接处理方式
    名字修饰约定extern "C"与extern "C++"浅析
    qt study 元对象,属性和反射编程
  • 原文地址:https://www.cnblogs.com/xb88/p/8512414.html
Copyright © 2011-2022 走看看