集群中导入 csv 文件

导入 csv 文件

通过 LOAD DATA 命令加载 CSV 文件中的数据到数据库表中。

准备 CSV 文件

说明:将相关文件上传至服务器 /root路径下,可以直接导数据。

使用 more 命令查看 CSV 文件。

more employee_csv.csv

输出如下:
[root@iZbp1gn42x4y0k0m5d6gc8Z ~]# more employee_csv.csv
"emp_no","birthday","name"
1001,"2024-08-02","xiaohong"
1002,"2024-08-29","xiaofeng"

连接集群的 MySQL 租户

在 OBserver 节点上,通过本地 Unix Socket 连接集群的 MySQL 租户。

obclient -S /root/observer/run/sql.sock -uroot@mysql_tenant -Dtestdb -A

配置数据库可访问路径

配置数据库可以访问的路径 /root/。

SET GLOBAL secure_file_priv = "/root/";

重新连接数据库

exit

说明: 设置 secure_file_priv 后,就可以使用普通连接串来连数据库,不再需要使用 sock 连接。

使用 root 用户登录 obcluster 集群的 mysql_tenant 租户。

obclient -h127.0.0.1 -P2883 -uroot@mysql_tenant#obcluster -Dtestdb -A 

创建目标表 t1

CREATE TABLE testdb.employee (
emp_no int(120) COMMENT '员工工号' NOT NULL,
birthday date COMMENT '员工生日' NULL,
name varchar(120) COMMENT '员工姓名' NULL,
CONSTRAINT cons_employee_empno PRIMARY KEY (emp_no)
) DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci;

设置超时时间

set ob_query_timeout = 10000000000;

往目标表 employee 中插入数据

通过旁路导入往目标表 employee 中插入数据。

LOAD DATA INFILE '/root/employee_csv.csv'
                   INTO TABLE employee
                   FIELDS TERMINATED BY ','
                   ENCLOSED BY '"'
                   LINES TERMINATED BY '\r\n'
                   IGNORE 1 LINES;

执行合并

ALTER SYSTEM MAJOR FREEZE;

查看表中的数据

select * from testdb.employee;

输出结果如下:

obclient [testdb]> select * from testdb.employee;
+--------+------------+----------+
| emp_no | birthday   | name     |
+--------+------------+----------+
|   1001 | 2024-08-02 | xiaohong |
|   1002 | 2024-08-29 | xiaofeng |
+--------+------------+----------+
2 rows in set (0.004 sec)
2 个赞

感谢分享!