MySQL数据导出导出的三种办法(13/16)

2024-06-04 9705阅读

数据导入导出

基本概述

目前常用的有3中数据导入与导出方法:

  1. 使用mysqldump工具:

    • 优点:
      • 简单易用,只需一条命令即可完成数据导出。
      • 可以导出表结构和数据,方便完整备份。
      • 支持过滤条件,可以选择导出部分数据。
      • 生成的文件可以用于跨平台、跨版本的数据迁移。
      • 缺点:
        • 导出的数据包含额外的INSERT语句,可能导致导入速度较慢。
        • 不能使用复杂的JOIN条件作为过滤条件。
        • 推荐场景:
          • 需要备份和迁移表结构和数据。
          • 需要导出部分数据到其他系统或进行数据分析。
          • 导出CSV文件:

            • 优点:
              • CSV格式通用,易于在不同应用程序间交换数据。
              • 可以利用文本编辑器查看和编辑数据。
              • 支持所有SQL写法的过滤条件。
              • 缺点:
                • 导出的数据保存在服务器本地,可能受到secure_file_priv参数限制。
                • 每次只能导出一张表的数据。
                • 需要单独备份表结构。
                • 推荐场景:
                  • 需要将数据导出到本地文件系统或共享网络位置。
                  • 需要将数据导入到其他非MySQL系统或应用程序。
                  • 物理拷贝表空间:

                    • 优点:
                      • 速度极快,尤其是对于大表数据的复制。
                      • 可以直接复制整个表的数据,不需要逐条插入。
                      • 缺点:
                        • 需要服务器端操作,无法在客户端完成。
                        • 必须是全表拷贝,不能选择性导出数据。
                        • 仅限于InnoDB引擎的表。
                        • 推荐场景:
                          • 需要快速复制大表数据到另一个数据库或服务器。
                          • 源表和目标表都使用InnoDB引擎。
                          • 有服务器文件系统的访问权限。

在选择使用哪种方法时,还需要考虑数据的大小、是否需要跨平台迁移、是否有权限访问服务器文件系统、是否需要保留表结构等因素。通常,如果需要快速迁移大量数据并且对数据的完整性有高要求,物理拷贝表空间是一个好选择。如果数据量较小或者需要跨平台迁移,使用mysqldump或导出CSV文件可能更合适。

mysqldump工具
  1. 使用mysqldump导出数据:

    mysqldump -h$host -P$port -u$user --add-locks=0 --no-create-info --single-transaction --set-gtid-purged=OFF db1 t --where="a>900" --result-file=/client_tmp/t.sql
    -h: 指定MySQL服务器的主机名。$host: 替换为实际的主机名。
    -P: 指定MySQL服务器的端口号。$port: 替换为实际的端口号。
    -u: 指定登录MySQL的用户名。`$user`: 替换为实际的用户名。
    --add-locks=0: 导出时不增加额外的锁。
    --no-create-info: 不导出表结构。
    --single-transaction: 在导出数据时不需要对表加表锁。
    --set-gtid-purged=OFF: 不输出与GTID相关的信息。
    db1: 指定要导出的数据库名。
    t: 指定要导出的表名。
    --where="a>900": 导出满足条件a>900的数据。
    --result-file=/client_tmp/t.sql: 指定导出结果的文件路径。
    
  2. 将数据导入到目标数据库:

    mysql -h127.0.0.1 -P13000 -uroot db2 -e "source /client_tmp/t.sql"
    `-h`: 指定MySQL服务器的主机名。`root`: 使用root用户登录。
    `-P`: 指定MySQL服务器的端口号。
    `-u`: 指定登录MySQL的用户名。
    `db2`: 指定要导入数据的数据库名。
    `-e`: 后面跟随要执行的命令。
    `"source /client_tmp/t.sql"`: 执行source命令导入之前导出的SQL文件。
    
文件导入导出
  1. 导出为CSV文件:

    SELECT * FROM db1.t WHERE a > 900 INTO OUTFILE '/server_tmp/t.csv';
    SELECT * FROM db1.t: 指定要导出的查询。
    WHERE a > 900: 导出满足条件的数据。
    INTO OUTFILE '/server_tmp/t.csv': 指定导出结果的CSV文件路径。
    
  2. 导入CSV文件到目标表:

    LOAD DATA INFILE '/server_tmp/t.csv' INTO TABLE db2.t;
    LOAD DATA INFILE: 加载数据的命令。
    '/server_tmp/t.csv': 指定CSV文件的路径。
    INTO TABLE db2.t: 指定要导入数据的目标表。
    

在MySQL中secure_file_priv用于限制LOAD DATA INFILE和SELECT ... INTO OUTFILE这两个命令生成或读取文件的位置。这个参数的目的是为了增强安全性,防止意外或恶意地读取或写入服务器上的敏感文件。

如果secure_file_priv被设置为空字符串('')或者NULL,则表示没有文件路径限制,可以使用任意文件路径。但是,这种设置降低了系统的安全性,因此不推荐在生产环境中使用。

物理拷贝表空间
  1. 物理拷贝表空间:

    • 首先创建一个相同结构的空表:
      CREATE TABLE db2.r LIKE db1.t;
      
    • 然后丢弃表空间:
      ALTER TABLE db2.r DISCARD TABLESPACE;
      
    • 导出表文件:
      FLUSH TABLES db1.t FOR EXPORT;
      
    • 拷贝文件:
      cp /path/to/db1/t.ibd /path/to/db2/r.ibd
      cp /path/to/db1/t.cfg /path/to/db2/r.cfg
      
    • 解锁表并导入表空间:
      UNLOCK TABLES;
      ALTER TABLE db2.r IMPORT TABLESPACE;
      

作者与版本更新计划

感谢您的阅读与支持!本文是《MySQL实战与优化》专栏中的一篇精选文章,该专栏共包含16篇文章,旨在为您提供实战中可直接应用的宝贵知识。

关注公众号【数舟】,获取作者最新动态,公众号后台回复【mysql2024】,即可免费领取这份包含16篇文章的完整的PDF专栏!

MySQL数据导出导出的三种办法(13/16) 第1张

目前版本为v1.0,更新时间2024年4月10日。后续此文档更新与版本发布会同步到知识星球【数舟】中。

MySQL数据导出导出的三种办法(13/16) 第2张

知识整理与创作不易,感谢大家理解与支持!

加入知识星球,您将获得更多独家内容、专栏更新以及与行业内专家和同行的互动交流机会。我们在知识星球等您,一起探索MySQL的深层次世界!

星球内目前包含300+精品文章,内容涵盖大数据、MySQL、运维、Python、调优、经验分享、数据分析等方向内容,会根据大家的学习需求更新更多方向的内容。

🔗 立即扫描下方二维码,加入知识星球,与行业精英共同成长,开启您的专属学习之旅!

MySQL数据导出导出的三种办法(13/16) 第3张


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]