- 投稿日:2020-08-23T23:56:22+09:00
mysql dump fileをテーブルごとに分ける
ここからお借りした
https://tecadmin.net/extract-tables-backup-from-full-mysql-dump/
#!/bin/bash #### # Split MySQL dump SQL file into one file per table # based on http://blog.tty.nl/2011/12/28/splitting-a-database-dump #### if [ $# -lt 1 ] ; then echo "USAGE $0 DUMP_FILE [TABLE]" exit fi if [ $# -ge 2 ] ; then csplit -s -ftable $1 "/-- Table structure for table/" "%-- Table structure for table `$2`%" "/-- Table structure for table/" "%40103 SET TIME_ZONE=@OLD_TIME_ZONE%1" else csplit -s -ftable $1 "/-- Table structure for table/" {*} fi [ $? -eq 0 ] || exit mv table00 head FILE=`ls -1 table* | tail -n 1` if [ $# -ge 2 ] ; then mv $FILE foot else csplit -b '%d' -s -f$FILE $FILE "/40103 SET TIME_ZONE=@OLD_TIME_ZONE/" {*} mv ${FILE}1 foot fi for FILE in `ls -1 table*`; do NAME=`head -n1 $FILE | cut -d$'x60' -f2` cat head $FILE foot > "$NAME.sql" donetar.gzになってれば先に gunzip -x して .sql にしておく。
叩く
chmod +x split.sh ./split.sh dump.sqlこんなファイルができる
-rw-r--r-- 1 root root 840 2020-08-23 23:42:27 table00 -rw-r--r-- 1 root root 16G 2020-08-23 23:44:23 table01 -rw-r--r-- 1 root root 171M 2020-08-23 23:44:24 table02 -rw-r--r-- 1 root root 82M 2020-08-23 23:44:25 table03 -rw-r--r-- 1 root root 12G 2020-08-23 23:46:06 table04 -rw-r--r-- 1 root root 2.9M 2020-08-23 23:46:06 table05 -rw-r--r-- 1 root root 5.2K 2020-08-23 23:46:06 table06 -rw-r--r-- 1 root root 405K 2020-08-23 23:46:06 table07 -rw-r--r-- 1 root root 5.8K 2020-08-23 23:46:06 table08 -rw-r--r-- 1 root root 5.6K 2020-08-23 23:46:06 table09 -rw-r--r-- 1 root root 47M 2020-08-23 23:46:06 table10 -rw-r--r-- 1 root root 17M 2020-08-23 23:46:06 table11 -rw-r--r-- 1 root root 27K 2020-08-23 23:46:06 table12table名はなんかgrepすればわかる。mysqldumpはalphabet順で出すみたいなんで、だいたい数字のままでもわかる
そしたらimportする
cat table* | mysql -h mysql-server mydbおわり
- 投稿日:2020-08-23T22:12:17+09:00
LaravelをRDSと繋ぐ
TL;DR
- RDSを構築して、RDS情報をenvs/配下の値を適切に埋める
- envファイルに設定したい文字列に#がある時はダブルクオーテーションで括る
RDS構築
一連の流れを説明とともに記述します。詳しいことは載っていないので注意です。
また、今回はRDSをパブリックサブネットに配置します。
(外部から繋ぎたいため)本来はVPC内のプライベートサブネットに置き、
EC2などからしか接続させないようにするのがオーソドックスかと思います。
- VPC作成
- VPC > インターネットゲートウェイからインターネットゲートウェイを作成し、VPCにアタッチ
- VPC > ルートテーブルから、VPCのルートテーブルにサブネットの関連づけをする
- VPC > サブネットからパブリックサブネットを2つ作る (※1)
- EC2 > セキュリティグループからRDS用のセキュリティグループ作成。
今回はパブリックサブネットに置くので、外部(XServer)のIPをインバウンドとして設定- RDS > サブネットグループを先に作成
- 先ほどつくった2つのサブネットを選択
- RDS > パラメータグループを先に作成
- デフォルトであるものを適用させないくらいの文脈で作成
- RDS > オプショングループを先に作成
- デフォルトであるものを適用させないくらいの文脈で作成
- RDSからデータベースの作成 (かいつまんで状況↓)
- DBインスタンスサイズ
- テスト環境なのでバースト可能クラスのt2.micro選択
- ストレージ
- ストレージタイプ:汎用
- ストレージの自動スケーリングは無効に(テスト環境なので)
- 可用性と耐久性
- スタンバイインスタンスを作成しないでください
- テスト環境なので。2つ作ったサブネットの1つだけ使う感じ
- 接続
- 先ほどつくったVPC
- サブネットグループ
- 先ほど作ったもの
- パブリックアクセス可能
- あり。
- 今回、外部から接続させるため。プライベートサブネット上であれば「なし」
- セキュリティグループ
- 先ほど作ったもの
- アベイラビリティゾーン
- 2つのサブネットのどちらか好きな方
- データベース認証
- パスワード認証
- 追加設定
- DBパラメータグループ
- 先ほど作ったもの
- オプショングループ
- 先ほど作ったもの
- 自動バックアップの有効化。30日くらい
- モニタリングは無効化
- 削除保護の有効化
- データベースの作成! (※2)
※1. RDSのサブネットを複数持たせる件について
RDSはマルチAZ、冗長化が簡単にできるように、デフォルトで複数のサブネットを用意したグループを作らせる
※2. Cannot create a publicly accessible DBInstance. The specified VPC does not support DNS resolution
↓ありがとうございます???
Lalavelへの記述
envs/配下に適切に情報を記述する。
- DB_HOST
- 接続とセキュリティ > エンドポイントを記述
- XXXX.YYYYYYY.ZZZZZZ.rds.amazonaws.com なやつ
- DB_DATABASE
- データベース名
- Sequel ProからRDSに接続してデータベース作成してそれを書いた
- DB_USERNAME
- とりえあずさっき作成したユーザを記述
- DB_PASSWORD
- さっき作成したユーザのパスワードを記述
↑の設定後、以下を実行
php artisan config:clear php artisan cache:clear設定したenvがうまく反映されない
SQLSTATE[HY000] [1045] Access denied for user 'XXX'@'YYYYY' (using password: YES) (SQL: delete from `cache`)がでまくった。usernameは合ってそうだが、host名(DB_HOSTに設定したRDSのエンドポイント)が正しくなさそうな感じになる。
結論としては passwordにシャープが入っていた ため。
コメント化されてしまい、うまくenvファイルがパースできなかったみたい。
(host名が間違っているのかと思ってかなりの時間を割いて調べてしまった?)envのパスワード部分を以下のようにダブルクオーテーションで括ることで解決。
DB_PASSWORD="XXXXXX"
できた???