转贴:Mysql 数据导入(import)/导出(export)- mysqldump命令

本文介绍了如何使用mysqldump工具进行MySQL数据库的备份与恢复操作。详细演示了导出与导入数据库的具体命令,适用于数据库备份及迁移场景。

原文来自:http://www.clockwatchers.com/mysql_dump.html


MySQL Tutorial - Import or Export A Database

This tutorial section deals with mysqldump which is a tool to import and export MySQL databases.

It can be used to back up a database or to move database information from one server to another.

1. Export A MySQL Database

This example shows you how to export a database. It is a good idea to export your data often as a backup.


# mysqldump -u username -ppassword database_name > FILE.sql

 

Replace usernamepassword and database_name with your MySQL username, password and database name.

File FILE.sql now holds a backup of your database, download it to your computer.

2. Import A MySQL Database

Here, we import a database. Use this to restore data from a backup or to import from another MySQL server.

Start by uploading the FILE.sql file to the server where you will be running this command.


# mysql -u username -ppassword database_name < FILE.sql

Replace the parts in red with your own information.

This powerful, easy to use command has many uses. Let's say you wanted to switch web hosting providers.

Simply export your data on the old provider's server and import it on your account with the new host.

 

 

 

###########################################################

本关任务:利用 Sqoop 工具将 MySQL 中的数据导入到 HDFS 中来。 相关知识 为了完成本关任务,你需要掌握: 1、数据库( MySQL )建表。 2、Mysql 数据导入至 HDFS 中。 数据库( MySQL )建表 用命令进入 MySQL 客户端。 mysql -uroot -p123123 -h127.0.0.1 创建数据库hdfsdb(格式默认为utf8),并在数据库内建立表student,其表结构如下: 名 类 状态 stu_no int 主键 stu_name varchar(20) 学生姓名 stu_age int 学生年龄 在表内插入数据。 stu_no stu_name stu_age 202001 zhangsan 18 202002 lisi 19 202003 wangwu 20 检查是否成功。 MySQL数据导入至HDFS中 1、简单导入。 sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student 这里没有指定 HDFS 的目录 默认会将数据存到系统当前登录用户下 以表名称命名的文件夹下。 系统默认为逗号隔开,如下图: 注意:如果数据库没有设置主键,语法需要加上--split by指定一个列去分割或用-m 1指定一个 Map 任务。 2、指定 HDFS 目录/user/root/hdfsdb导入,指定一个 MapReduce 任务。 sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --usernameroot --password 123123 --table student --target-dir /user/root/hdfsdb -m 1 --target-dir:指定 HDFS 目录。 -m 1:指定一个 MapReduce 任务。 3、指定查询学生的学号与学生姓名存入到/user/root/hdfsdb2中,指定一个MapReduce 任务,并以|分隔。 sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdf
最新发布
05-08
<think>嗯,用户现在想了解如何使用Sqoop工具将MySQL数据导入到HDFS中,包括简单导入、指定目录导入和自定义查询导入的具体语法和注意事项。我之前已经回答过类似的问题,但用户现在更详细地要求不同导入方式的命令示例和步骤,可能是在实际操作中遇到了问题,或者需要更具体的指导。 首先,我需要确认用户的使用场景。可能用户是一个大数据工程师或数据分析师,正在处理数据迁移任务,需要将MySQL数据转移到Hadoop生态系统中进行处理。用户提到的三种导入方式:默认导入、指定目录导入和查询导入,这些都是常见的需求,特别是当数据量较大时,灵活使用这些方法能提高效率。 接下来,我需要参考用户提供的引用内容。根据引用[1],Sqoop数据迁移包括从RDB导入到HDFS的不同方法,如全量导入、Where过滤、列过滤、query方式等。引用[5]给出了一个具体的例子,使用--where参数。引用[2]提到导入到Hive的方法,但用户这次明确要导入到HDFS,所以可能不需要涉及Hive部分,但可以注意是否需要其他参数。引用[3]和[4]提到了创建作业和使用direct模式,这些可以作为注意事项补充。 用户的需求包括三个部分:简单导入、指定HDFS目录导入和自定义查询导入。我需要分别给出每种情况的语法、示例和注意事项。例如,简单导入可能只需要基本的连接信息和表名;指定目录则需要--target-dir参数;自定义查询则需要使用--query并注意where条件和$CONDITIONS的添加。 还要注意用户可能遇到的常见问题,比如连接字符串的正确性、权限问题、目录是否已存在需要覆盖、split-by的选择是否合理,以及在查询导入时如何正确使用条件。此外,用户可能需要知道如何验证导入是否成功,比如检查HDFS目录下的文件内容。 另外,引用[4]提到使用--direct参数可以提高导入效率,特别是在MySQL中使用mysqldump,这可能是一个优化点,可以在注意事项中提及。而创建Sqoop作业(引用[3])虽然用户没有直接问到,但可以作为一个高级用法在最后提到,帮助用户自动化任务。 需要确保命令中的参数正确,比如--connect的JDBC URL格式,用户名密码的安全性(是否应该提示使用-P而不是明文密码),以及mappers的数量和split-by字段的选择是否合理。如果用户的数据量很大,可能需要调整num-mappers来提高并行度。 最后,生成的相关问题需要围绕用户可能进一步的需求,比如性能优化、不同数据库的适配、验证步骤等,这些都在之前的回答中出现过,可以继续沿用。</think>### Sqoop 导入 MySQL 数据到 HDFS 的三种方法详解 #### 一、默认全量导入(简单导入) **适用场景**:全表数据迁移,无需条件过滤或字段筛选。 **语法**: ```bash sqoop import \ --connect jdbc:mysql://<主机名>:<端口>/<数据库名> \ --username <用户名> \ --password <密码> \ --table <表名> \ --num-mappers <并行任务数> \ --split-by <拆分依据列> ``` **示例**:将 `test` 数据库的 `employee` 表全量导入 HDFS 默认路径(`/user/<用户名>/<表名>`): ```bash sqoop import \ --connect jdbc:mysql://hadoop103:3306/test \ --username root \ --password 000000 \ --table employee \ --num-mappers 2 \ --split-by id ``` **注意事项**: 1. **路径规则**:默认保存到 HDFS 的 `/user/<当前用户>/<表名>` 目录[^5]; 2. **主键要求**:若未指定 `--split-by`,Sqoop 默认使用表的主键列作为拆分依据; 3. **并行度**:`--num-mappers` 建议设置为集群节点数的整数倍,但不超过源表主键范围。 --- #### 二、指定 HDFS 目录导入 **适用场景**:自定义存储路径,或覆盖已有数据。 **语法**: ```bash sqoop import \ --connect jdbc:mysql://<主机名>:<端口>/<数据库名> \ --username <用户名> \ --password <密码> \ --table <表名> \ --target-dir <HDFS目标路径> \ --delete-target-dir \ --fields-terminated-by '\t' ``` **示例**:将 `gmall.user_info` 表数据导入到 HDFS 路径 `/data/warehouse/user_info`,字段以制表符分隔: ```bash sqoop import \ --connect jdbc:mysql://hadoop103:3306/gmall \ --username root \ --password 000000 \ --table user_info \ --target-dir /data/warehouse/user_info \ --delete-target-dir \ --fields-terminated-by '\t' \ --num-mappers 4 \ --split-by id ``` **注意事项**: 1. **目录冲突**:`--delete-target-dir` 会强制删除已存在的目标目录; 2. **字段分隔符**:默认使用逗号分隔,通过 `--fields-terminated-by` 可指定其他符号(如 `\t` 或 `|`)[^1]; 3. **性能优化**:添加 `--direct` 参数可启用 MySQL 的 `mysqldump` 加速导出(仅限全表场景)[^4]。 --- #### 三、自定义查询导入 **适用场景**:需要复杂条件过滤或跨表关联查询。 **语法**: ```bash sqoop import \ --connect jdbc:mysql://<主机名>:<端口>/<数据库名> \ --username <用户名> \ --password <密码> \ --query "<SQL查询语句> AND \$CONDITIONS" \ --target-dir <HDFS目标路径> \ --split-by <拆分依据列> ``` **示例**:联合 `orders` 和 `customers` 表,筛选 2023 年订单数据导入 `/data/orders`: ```bash sqoop import \ --connect jdbc:mysql://hadoop103:3306/sales \ --username root \ --password 000000 \ --query "SELECT o.order_id, c.name, o.amount FROM orders o JOIN customers c ON o.customer_id = c.id WHERE o.order_date >= '2023-01-01' AND \$CONDITIONS" \ --target-dir /data/orders \ --split-by o.order_id \ --num-mappers 3 ``` **注意事项**: 1. **条件占位符**:查询语句必须包含 `AND \$CONDITIONS`,否则会报错; 2. **别名处理**:若查询包含列别名,需通过 `--map-column-java` 指定字段映射关系; 3. **并行限制**:复杂查询可能因数据库锁表导致并发问题,建议在业务低峰期执行。 --- ### 扩展:三种方法的对比场景 | 方法 | 适用场景 | 优点 | 缺点 | |-------------------|-------------------------|-------------------------|-------------------------| | 默认导入 | 全表迁移 | 命令简单,无需额外配置 | 无法控制存储路径和字段 | | 指定目录导入 | 结构化数据仓库建设 | 路径可控,支持数据覆盖 | 需手动清理旧目录 | | 自定义查询导入 | 复杂ETL或数据预处理 | 支持多表关联和条件过滤 | 语法复杂,性能开销较大 | --- ### 数据验证方法 1. **检查 HDFS 文件**: ```bash hdfs dfs -ls <目标路径> hdfs dfs -cat <目标路径>/part-m-00000 | head ``` 2. **验证记录数**: ```bash # MySQL 中执行 SELECT COUNT(*) FROM <表名>; # HDFS 中执行 hdfs dfs -cat <目标路径>/* | wc -l ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值