LoginSignup
1
1

【Docker】SQLファイルを実行させる方法

Posted at

DockerのMysqlでSQLファイルを実行させたい!

こんにちは。
GolangにてブログAPIの作成をしている際に、Docker環境を用いてDB(Mysql)を用意して処理を行うとしていました。コマンドでSQLクエリを実行するのはいささか面倒なため、SQLファイルを作成し、それを実行させようと試みましたが、うまくいかない!!
今回はこれの解決法を記します。

うまくいかなかったコマンド

mysql -h localhost -u docker sampledb -p | createTable.sql

dockerコンテナを立ち上げた状態で、上記コマンドを打ち込みましたが、うまくいかず。。。
コマンドの意味としては、localhost上で動作するMysqlサーバー内におけるsampledbに対してdockerユーザでcreateTable.sqlファイルを実行してください。というものです(この認識が間違っているのかな。。。?)

解決策

上記コマンドではうまくいかなかったため、全く別の方法をとりました。
1.Dockerコンテナ内にSQLファイルをコピー
2.Dockerコンテナ内に移動
3.Mysqlを起動し、SQLファイルを実行させる

それではひとつずつ見ていきましょう

0.前提

まずDockerコンテナがきちんと立ち上がっているか、また、Mysqlが立ち上がっているかを確認してください。

Docker起動
docker-compose up

1.Dockerコンテナ内にSQLファイルをコピー

ローカルからファイルを呼び出してもうまくいかないと判断したため、コンテナ内にSQLファイルを移すことにしました。

下記はローカルのSQLファイルをDockerコンテナ内にコピーするコマンドです。

ファイルのコピー
docker cp {sqlファイル名} {DockerコンテナID}:{コピー先のファイル名}

例
docker cp createTable.sql 123456789:/tmp/

上記におけるDockerコンテナIDの調べ方は以下の通りです。

{DockerコンテナID}の調べ方
docker ps

#実行結果
CONTAINER ID   IMAGE       COMMAND                   CREATED       STATUS             PORTS                               NAMES
###             ###          ###                        ###          ###                 ###

上記のような結果のCONTAINER IDの下に記述してある文字列がコンテナIDにあたります

2.Dockerコンテナ内に移動

コンテナ内に実行させたいSQLファイルを移すことが来たら、コンテナ内に移動する。
コンテナ名に関しては、docker-compose.yamlに記述していると思います。

コンテナ内に移動
docker exec -it {コンテナ名} bash    

例
docker exec -it test-container bash

SQLファイルを保存したファイルまで移動する

cd ファイル名

例
cd tmp

先ほど保存したSQLファイルがあるかを確認する

ls

#実行結果
createTable.sql

lsコマンドでローカルからコンテナ内に移したファイルの存在が確認出来たら成功です!!
あとはこれをmysqlで実行させるだけです。

3.Mysqlを起動し、SQLファイルを実行させる

mysqlにアクセス

ログイン
mysql -u root -p

パスワード入力

使いたいデータベースを指定する

データベース指定
use {DB名}

例
use sampledb

実行させたいSQLファイルを指定

ファイル実行
source {SQLファイル名}

例
source createTable.sql

さいごに

上記の流れで私はSQLファイルを実行させることができました。
最初に実行していたコマンドでうまくできない理由は分からないので有識者教えていただけたら幸いです。

このエラー(?)で2日間もGoの勉強かつAPIの作成が遅れた。。。
まぁDockerの勉強になったからよしとします。

1
1
0

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
1
1