0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Docker-compose】MysqlDumpファイルを一括で流し込む

Last updated at Posted at 2023-02-24

初のQiita記事です。どうぞお手柔らかに

前置き長いので目的
docker-composeで個別のDumpファイル(ってかSQL)を、初期化時にまとめてbashでレストアしたい!

以上記事終了。

というわけにもいかず、まぁdocker-composeでMySQL環境構築はみなさん当たり前にやってるかと思います。
まぁなんで、何番煎じの記事なんじゃという話ではあるんですが。

Amazon Aurora MySQLを使っているのですが、なんらかの理由で全データをローカルで見たいとなるんです。--all-databasesでdumpを取得してレストアしてみたものの、権限周りもセットでバックアップされる関係もあってレストア直後は接続できますが、コンテナを一度落とすと接続できなくなるという残念な結果になります。
(ローカルでやるとMySQLぶっ壊れるので、必ずdocker使いましょう。私は壊しました。)

よってDBごとに個別でdumpを取得して、個別にレストアする必要があります。

で、この個別のDumpファイル(ってかSQLなんですけど)を、初期化時にまとめてレストアしたいんじゃ!ってのが今回の目的です。
まぁ細かいことは他の記事に移譲します。私もそこを参考にしました。
先駆者はとても偉大ですね。本当に尊敬します。ありがとうございます。

まぁdumpに付けられた名前をそのままDBの名前として使いたいが本当の目的。
結局なにかって、初期化時に走るbashスクリプトを書いただけです。

あとは参考文献をもとに構成されてます。
sqlディレクトリにDB単位のdumpファイルつっこんで、docker-compose up -d --buildするだけです。

本当はSQLのIF分とか使えやとかヒアドキュメントでかけやとか言われてしまいそうだしconfにパスワード書けとか言われそうだけどヘーキヘーキ(あかん)
その辺うまく書き換えてください。

docker-compose でMySQL環境簡単構築を参考にしているのですが、以下のコードは記事で言えばinit-database.shファイルの中身です。
ファイルの階層とかも気にしてください。

とりあえず誰かの役に立てれば幸いです。

#!/bin/bash

#MySQL
DB_HOST=localhost 
DB_USER="任意のユーザー"
DB_PASS="任意のパスワード"
DB_PORT="任意のポート"

CURRENT=$(cd $(dirname $0);pwd)

files="${CURRENT}/sql/*"

#配列作成
array=()
for filepath in $files; do
  echo $filepath
  #変数$filepathの中身を配列に追加
  array+=("$filepath")
done

# Dump Databases
for e in ${array[@]}; do
  name=`basename $e .sql`
  echo $name
  dbname=\``echo ${name}`\`
  echo $dbname
  mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASS  -e "CREATE DATABASE $dbname;"
  mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" ${name} < ${e}

done

【参考文献】
Aurora MySQLでリストア権限のあるDBを個別にダンプするスクリプト
docker-compose でMySQL環境簡単構築

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?