20200823のMySQLに関する記事は2件です。

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"
done

tar.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 table12

table名はなんかgrepすればわかる。mysqldumpはalphabet順で出すみたいなんで、だいたい数字のままでもわかる

そしたらimportする

cat table* | mysql -h mysql-server mydb

おわり

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelをRDSと繋ぐ

TL;DR

  • RDSを構築して、RDS情報をenvs/配下の値を適切に埋める
  • envファイルに設定したい文字列に#がある時はダブルクオーテーションで括る

RDS構築

一連の流れを説明とともに記述します。詳しいことは載っていないので注意です。
また、今回はRDSをパブリックサブネットに配置します。
(外部から繋ぎたいため)

本来はVPC内のプライベートサブネットに置き、
EC2などからしか接続させないようにするのがオーソドックスかと思います。

  1. VPC作成
  2. VPC > インターネットゲートウェイからインターネットゲートウェイを作成し、VPCにアタッチ
  3. VPC > ルートテーブルから、VPCのルートテーブルにサブネットの関連づけをする
  4. VPC > サブネットからパブリックサブネットを2つ作る (※1)
  5. EC2 > セキュリティグループからRDS用のセキュリティグループ作成。
    今回はパブリックサブネットに置くので、外部(XServer)のIPをインバウンドとして設定
  6. RDS > サブネットグループを先に作成
    1. 先ほどつくった2つのサブネットを選択
  7. RDS > パラメータグループを先に作成
    1. デフォルトであるものを適用させないくらいの文脈で作成
  8. RDS > オプショングループを先に作成
    1. デフォルトであるものを適用させないくらいの文脈で作成
  9. RDSからデータベースの作成 (かいつまんで状況↓)
    1. DBインスタンスサイズ
      1. テスト環境なのでバースト可能クラスのt2.micro選択
    2. ストレージ
      1. ストレージタイプ:汎用
      2. ストレージの自動スケーリングは無効に(テスト環境なので)
    3. 可用性と耐久性
      1. スタンバイインスタンスを作成しないでください
        1. テスト環境なので。2つ作ったサブネットの1つだけ使う感じ
    4. 接続
      1. 先ほどつくったVPC
      2. サブネットグループ
        1. 先ほど作ったもの
      3. パブリックアクセス可能
        1. あり。
        2. 今回、外部から接続させるため。プライベートサブネット上であれば「なし」
      4. セキュリティグループ
        1. 先ほど作ったもの
      5. アベイラビリティゾーン
        1. 2つのサブネットのどちらか好きな方
    5. データベース認証
      1. パスワード認証
    6. 追加設定
      1. DBパラメータグループ
        1. 先ほど作ったもの
      2. オプショングループ
        1. 先ほど作ったもの
      3. 自動バックアップの有効化。30日くらい
      4. モニタリングは無効化
      5. 削除保護の有効化
    7. データベースの作成! (※2)

※1. RDSのサブネットを複数持たせる件について

RDSはマルチAZ、冗長化が簡単にできるように、デフォルトで複数のサブネットを用意したグループを作らせる

※2. Cannot create a publicly accessible DBInstance. The specified VPC does not support DNS resolution

↓ありがとうございます???

Cannot create a RDS Readreplicaが作成できない。(publicly accessible DBInstance because customer VPC does not support DNS resolution and/or hostnames. )

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"

できた???

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む