概要
普段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; // ヘッダーがある場合は削除(なければこれは不要)
テーブルを確認して正常にデータが入っていれば成功です🙌
最後に
間違いがありましたらご指摘いただけますと幸いです!