前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL数据导出导出的三种办法(13/16)

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

作者头像
十里桃花舞丶
发布2024-04-12 08:54:44
3430
发布2024-04-12 08:54:44
举报
文章被收录于专栏:桥路_大数据桥路_大数据
数据导入导出

基本概述

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

  1. 使用mysqldump工具
    • 优点
      • 简单易用,只需一条命令即可完成数据导出。
      • 可以导出表结构和数据,方便完整备份。
      • 支持过滤条件,可以选择导出部分数据。
      • 生成的文件可以用于跨平台、跨版本的数据迁移。
    • 缺点
      • 导出的数据包含额外的INSERT语句,可能导致导入速度较慢。
      • 不能使用复杂的JOIN条件作为过滤条件。
    • 推荐场景
      • 需要备份和迁移表结构和数据。
      • 需要导出部分数据到其他系统或进行数据分析。
  2. 导出CSV文件
    • 优点
      • CSV格式通用,易于在不同应用程序间交换数据。
      • 可以利用文本编辑器查看和编辑数据。
      • 支持所有SQL写法的过滤条件。
    • 缺点
      • 导出的数据保存在服务器本地,可能受到secure_file_priv参数限制。
      • 每次只能导出一张表的数据。
      • 需要单独备份表结构。
    • 推荐场景
      • 需要将数据导出到本地文件系统或共享网络位置。
      • 需要将数据导入到其他非MySQL系统或应用程序。
  3. 物理拷贝表空间
    • 优点
      • 速度极快,尤其是对于大表数据的复制。
      • 可以直接复制整个表的数据,不需要逐条插入。
    • 缺点
      • 需要服务器端操作,无法在客户端完成。
      • 必须是全表拷贝,不能选择性导出数据。
      • 仅限于InnoDB引擎的表。
    • 推荐场景
      • 需要快速复制大表数据到另一个数据库或服务器。
      • 源表和目标表都使用InnoDB引擎。
      • 有服务器文件系统的访问权限。

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

mysqldump工具

使用mysqldump导出数据

代码语言:javascript
复制
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: 指定导出结果的文件路径。

将数据导入到目标数据库

代码语言:javascript
复制
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文件。
文件导入导出

导出为CSV文件

代码语言:javascript
复制
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文件路径。

导入CSV文件到目标表

代码语言:javascript
复制
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 INFILESELECT ... INTO OUTFILE这两个命令生成或读取文件的位置。这个参数的目的是为了增强安全性,防止意外或恶意地读取或写入服务器上的敏感文件。

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

物理拷贝表空间

物理拷贝表空间

首先创建一个相同结构的空表:

代码语言:javascript
复制
CREATE TABLE db2.r LIKE db1.t;

然后丢弃表空间:

代码语言:javascript
复制
ALTER TABLE db2.r DISCARD TABLESPACE;

导出表文件:

代码语言:javascript
复制
FLUSH TABLES db1.t FOR EXPORT;

拷贝文件:

代码语言:javascript
复制
cp /path/to/db1/t.ibd /path/to/db2/r.ibd
cp /path/to/db1/t.cfg /path/to/db2/r.cfg

解锁表并导入表空间:

代码语言:javascript
复制
UNLOCK TABLES;
ALTER TABLE db2.r IMPORT TABLESPACE;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据导入导出
    • 基本概述
      • mysqldump工具
        • 文件导入导出
          • 物理拷贝表空间
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档