0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【MySQL】Dockerコンテナ内のMySQLにCSVデータをインポートする【Docker】

Last updated at Posted at 2024-05-20

概要

普段MySQLWorkbenchを使用しているのですが、チーム内でツールを統一していないこともあり、いただいたdumpデータがcsv形式だったときのメモです。
Workbenchからもデータはインポートできますが、レコード数が多くなってくると4時間以上かかりそうなくらい遅いので、コマンドラインからインポート作業を行なうことにしました。

以下手順のコマンドに記述されている{}は、可変部の目印として使用しているため削除して実行してください

手順1(Dockerコンテナ内へのCSVのコピー)

こちらの手順はDockerコンテナ外にファイルがあることを前提としています。
Webサーバーコンテナ内にファイルが配置されており、DBコンテナとの通信ができる場合は実行不要です。

コンテナ内にコピーするファイル名は自由に指定できます
(実際はローカルのファイル名をそのまま使用することが多い)

docker cp {コピーしたいファイルのパス}| -{container_id}:{ファイルを置きたいパス+任意のファイル名}

下記メッセージのみが表示されていれば成功です!

Successfully copied hogeMB to {container_id}:{ファイルを置きたいパス+任意のファイル名}

手順2(MySQLの操作)

Dockerを使用している場合、まずはコンテナに入る必要があります。

docker exec -it {container_id} bash

上記コマンドを使用するか、DockerDesktopを使用していれば該当コンテナのExecから下記手順を実施でOK

mysql -u root -p --local_infile=1

パスワードを求められると思うので、設定されているものを入力してください。
MySQLにログインしたら↓を実行

select @@local_infile;

この時、@@local_infileの設定が0の場合、1に設定してあげる必要があります。

set persist local_infile = 1;

手順3(CSVインポート)

コマンド内のヘッダー削除などはCSVデータに応じてセットしてあげてください。

load data local infile '{コンテナにコピーしたファイルのパス}' into table {schema.table_name} 
fields terminated by ',' //データの区切り文字
optionally enclosed by '"'  
lines terminated by '\n' //改行
ignore 1 lines; // ヘッダーがある場合は削除(なければこれは不要)

テーブルを確認して正常にデータが入っていれば成功です🙌

最後に

間違いがありましたらご指摘いただけますと幸いです!

0
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?