20210729のMySQLに関する記事は4件です。

RDS - 既存のRDSを削除して新たにRDSを作成しWordPress.orgと接続させる

まえがき WordPressを作成した当初、DBインスタンスサイズを無料枠のdb.t2.microではなく db.t3.microを選択してしまい、どんどん課金がされていました(月額890円くらいでした)。 こちらに写真を載せております。 前提にも記述しますが、変更しようにも変更できず、新しく作成し直すか激しく悩み、 夜中の2時に起床して、思い切って決行しなんとか7時半くらいに終わりました。 1ヶ月ほど前ですが、船長さんに認めてもらえると思います。まもなくドーレ港です! 動作環境 ・MacBook Air (Retina, 13-inch, 2020) ・Big Sur11.4 ・ターミナルシェル:zsh ・Google Chrome 前提 ・既存のRDSですでにWordPress.orgをインストール、接続済み ・RDSのDBインスタンスクラスを変更しようとしたら、 申し訳ありません。DB インスタンス ○○○ の変更のリクエストが失敗しました。 と表示された。 ・テンプレートを、開発/テスト -> 無料利用枠に変更したい ・DBインスタンスタイプを、db.t3.micro -> db.t2.micro に変更したい 参考にしたサイト ? RDSを無料枠でマルチAZ化 ※※ インスタンスタイプのみ変更したい場合は、下記のリンクが一番手っ取り早いと思うので、 この作業が何らかのエラーで変更できなかった場合にこれからの順序を行ってください。 ※※ ? AWS EC2のインスタンスタイプ変更手順 1. 既存のRDSを削除、新たにRDSを作成 (1)既存のRDSを削除します ※※ こちらの手順1〜4まで ? RDS インスタンスの削除 ※※ (2)最終スナップショットはもしものために置いておきます ※※ 全て終了後削除 ※※ 削除・作成に時間がかかりそわそわしていたので、ポアロのクリスマスを読んでいました。 (3)新しくRDSを作成します ・変更点: ✔️ 開発/テスト -> 無料利用枠 ✔️ db.t3.micro -> db.t2.micro その他、みなさまの設定で作成してください。 作成中にダッシュボードの上部に詳細表示ボタンが現れるのでクリックし、 設定したマスターユーザー、マスターパスワードを保存しておきましょう。 (4)変更点をしっかり確認しておきます db.t3.micro -> db.t2.microのRDSが作成できましたね。 2. 新しいエンドポイントを設定します (1)RDS新規作成でエンドポイントが変更されたため、新しいエンドポイントを設定します (これまで使用していたエンドポイントはRDSを削除したため使用不可になります) (2)MySQLコマンドでMySQLをインストールします (3)Webサーバーにログインします ssh -i ~/認証キー保存ディレクトリ/認証キーの名前.pem ec2-user@Elastic IPアドレス 例) ssh -i ~/Desktop/ninsyo-key.pem ec2-user@44.44.44.44 (4)MySQLをインストールします [ec2-user@ip-○○○~ ]$ sudo yum install mysql (5)データーベースに接続する際にはデーターベースの接続先情報(エンドポイント)が 必要なのでエンドポイントをコピーしにいきます AWSダッシュボード -> RDS -> 左メニューのデータベース -> 作成したRDSをクリック -> 下タブのエンドポイントをコピー (6)コピーしたエンドポイントをターミナルに入力していきます [ec2-user@ip-○○○~ ]$ mysql -h コピーしたエンドポイント -u root(マスターユーザー名) -p (7)パスワード入力を求められるので、マスターパスワードを入力します(ペースト不可) (8)Welcome to the Maria DB monitor.と表示されれば、 Webサーバーからデータベースサーバーへ接続することができています! もしエラーが出てしまったら、 ①ユーザー名orパスワード入力ミスを疑う ②データーベースが利用可能になっていない(=MySQL未接続、 RDS -> データベースで確認、③セキュリティグループの設定ミス)を 確認してみてください。 ※※(9)Ctrl + cでMySQLログアウト、exitでSSHログアウトしますが、 3.(1)でまたすぐにログインするので省略可、その際は、3.の(2)からスタートです ※※ 3. WordPress用のデーターサーバを作成 ①データベース作成 (1)Webサーバーにsshでログインした上でMySQLコマンドでデータベースに接続します [ec2-user@ip-○○○~ ]$ ssh -i ~/Desktop/ninsyo-key.pem ec2-user@44.44.44.44 (2)MySQLコマンドでデータベースサーバーに接続し、パスワードを入力します [ec2-user@ip-○○○~ ]$ mysql -h コピーしたエンドポイント -u root(マスターユーザー名) -p (3)MySQLの中にデータベースを作成します MySQL [(none)]> CREATE DATABASE 作成したいデーターベース名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; Queri OK, 1 row affected, 2warnings (0.06sec) などと表示されたら作成できています。 各コマンドの説明は、こちらが分かりやすかったです。? よく使うMySQLコマンド集 (4)ちゃんと作成できているか確認します 作成したデータベース名が記載されていれば作成されています。 MySQL [(none)]> SHOW DATABASES; ②WordPress用のユーザーを作成します (1)ここでは、wordpress_userというユーザー名で作成していきます MySQL [(none)]> CREATE USER 'wordpress_user(作成したいユーザー名)'@'%' IDENTIFIED BY '接続時のパスワードをここで作成し、入力する'; Queri OK, 0 row affected(0.03sec) などと表示されたら作成できています。 (2)作成したユーザー(wordpress_user)にデータベースを操作できる権限を付与します これを行わないとWordPressユーザーが データーベース内でテーブルを参照したり、作成することが不可になってしまいます。 MySQL [(none)]> GRANT ALL ON wordpress_user.* TO 'wordpress_user'@'%'; (3)権限付与しただけなので、MySQLに設定を反映させます MySQL [(none)]> FLUSH PRIVILEGES; (4)ユーザー(wordpress_user)が作成されたか確認します MySQL [(none)]> SELECT user , host FROM mysql.user; ユーザーの一覧が表示され、作成したユーザー(wordpress_user)が 下記のように表示されていれば、どこからでも接続OKの設定が完了です。 (5)作成したユーザーでMySQLに接続できるか確認します 一旦ログアウトしてから再ログインし、MySQLに接続します MySQL [(none)]> exit Bye [ec2-user@ip-○○○~ ]$ mysql -h エンドポイント -u wordpress_user -p Enter password: Welcome to MariaDB monitor.. 4. WordPressを再インストール (1)Webサーバーにsshログインし、WordPressに必要なライブラリをインストールします [ec2-user@ip-○○○~ ]$ sudo amazon-linux-extras install -y php7.4 yumコマンドではなく、amazon-linux-extrasコマンドを使用します。 EC2のOSはAmazon Linux2ですが、extras libraryというパッケージ群が存在し、 その中にphpの最新版が存在し、使用することができます。 (2)php関連の必要なライブラリをyumからインストールします [ec2-user@ip-○○○~ ]$ sudo yum install -y php php-mbstring 先にphp7.4をインストールしておくと、7.4に対応したphp関連のライブラリを インストールしてくれるのでこの順番で行うようにしましょう。 (3)Webサーバーのホームディレクトリに移動します [ec2-user@ip-○○○~ ]$ cd ~ (4)WordPressの最新版をダウンロードします [ec2-user@ip-○○○~ ]$ wget https://ja.wordpress.org/latest-ja.tar.gz (5)インストールが完了したらファイルを確認します [ec2-user@ip-○○○~ ]$ ls latest-ja.tar.gz (6)解凍します [ec2-user@ip-○○○~ ]$ tar xzvf latest-ja.tar.gz (7)解凍が完了したら、ファイルの中身を確認します 下記のようにwordpressと表示されていれば、ディレクトリが作成されています。 [ec2-user@ip-○○○~ ]$ ls latest-ja.tar.gz wordpress ※※ ソースとディレクトリは不要だぜという方は、以下で削除してください。 ※※ [ec2-user@ip-○○○~ ]$ rm -r latest-ja.tar.gz wordpress (8)WordPressのディレクトリに移動します [ec2-user@ip-○○○~ ]$ cd wordpress/ (9)WordPressのプログラムをApacheから見える場所に移動させます [ec2-user@ip-○○○~ ]$ sudo cp -r * /var/www/html/ (10)コピーが完了したら、WordPressのファイルの所有者(グループ)を変更します [ec2-user@ip-○○○~ ]$ sudo chown apache:apache /var/www/html/ -R これでApacheからWordPressのファイルを参照できるようになりました。 (11)(10)の設定を反映させるためにApacheを再起動します ①Apacheの起動状態を確認します [ec2-user@ip-○○○~ ]$ sudo systemctl status httpd.service Active: active(running) since 土 2021-06-12... 起動していなかったら、 sudo systemctl start httpd.service を実行してください ②Apacheを再起動します [ec2-user@ip-○○○~ ]$ sudo systemctl restart httpd.service (12)起動状態の確認を行うため、①のコマンドを再実行し、①と同じように Active: active(running) since .. と表示されればWordPressの再インストールは完了です。 5. データベースと接続するための設定 (1)WordPressサイトに移動すると、 本来の初期設定画面が表示されずデータベース接続確率エラーが表示されます と表示されるので、 ・データベース名 ・ユーザー名 ・パスワード ・データベースのホスト名(エンドポイント) をwp-config.phpに直接書き込んでいきます。 上記を登録すると、wp-config.phpファイルが/var/www/html/配下に作成されます。 WordPressはそのファイルに記載されている内容を読み込んでデータベースと接続します。 (2)wp-config.phpファイルを編集しにいきます ターミナルにてsshログインし、/var/www/html/に移動、wp-config.phpを開きます [ec2-user@ip-○○○~ ]$ cd /var/www/html/ [ec2-user@ip-○○○~ ]$ nano wp-config.php ※※ 今回はvimではなく、nanoで作業しました。 ※※ (3)以下のdefineにMySQLの設定を書き込みます(移動したてはデフォルトの値です) define( 'DB_USER', 'データベースのユーザーネーム(ここではwordpress_user)'); define( 'DB_PASSWORD', 'データベースのパスワード'); define( 'DB_HOST', 'MySQLのホスト名(エンドポイント)'); define( 'DB_CHARSET', 'utf8mb4'); (4)Ctrl + s、Ctrl+xで保存、終了します (5)一応exitでログアウトします (6)WordPressをリロードすると初期設定画面が表示されるので、 サイト名:前と同じでなくてOK ユーザー名:前と同じ(一応) パスワード:前と同じ(一応) 一応としたのは、Chrome側でパスワードが保存されていたためと、 鬼が出るか蛇が出るか、緊張して前と同じにしたら同じように使えるかもと思ったからです。 (7)接続完了です!!!!ここまでおつかれさまでした!!!! 無事、同じドメイン名のWordPressへアクセスできるようになりました。 手動で取得したスナップショットは必ず削除してくださいね。お金かかっちゃいます。 前回(削除した)のRDSでインストールしたWordPressのテーマやプラグインも残っています。 WP mail SMTPやアンチスパムはもう一度設定し直したり、画像はS3 -> CloudFrontに再設定 したりする必要はありますが、きちんと使えるようになっているはずです。 あとがき かなりの長文になってしまいました。読み辛い点や設定の二度手間もあるかと思います。 失敗したらどうしようかと頭掻き毟るくらい悩んでいたので解決できて本当に安堵しました。 手順はノートに記載していたので、接続情報を変更する際にwp-config.phpファイルを 直接編集することを思い出せました。デジタルもアナログも思い切りも大事ですよね。 ゲームだと「さいしょから」の選択、パソコンだと初期化ができますが、 やはりサーバとなるとそんな簡単にはいきません。白紙にしたいと何度も思いました。 ハードなつづきからをやり終えた気分です(ロックマンエグゼ2でお願いします)。 補足 この記事は2021/06/25時点に実行したものであり、RDSを削除 -> 作成のみだったため、 削除したRDSでインストールしたWordPressのテーマやプラグインも残っておりました。 2021/07/26に、2回目としてCyberDuckでWordPressのディレクトリごと削除したあと、 もう一度この手順を踏んだのですが、インストール済みプラグインとテーマは残っており、 記事のみが初期化、S3 -> Cloud Front、プラグイン有効化の設定を行う状態でした。 2回目の理由はphpMyAdminで躓いてしまったからです。すっきり1からやり直したかったので RDSを削除する際のスナップショットは不要と判断し、作成していません。 1回目より時間はかかりませんでしたが悩んでいた3日間はずっと手汗まみれでした。 勉強を重ね、リベンジしようと思います。 ここまでお読みいただき、ありがとうございました。 ご指摘等ございましたらご教示くださると幸甚です。 参考 ・.htacess設定について ? Amazon Linux 2 で LAMP をインストールして WordPress 環境を構築する。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerでFlask+MySQLを動かしたときのAccess deniedエラー

はじめに DockerでFlaskとMySQLのコンテナを立てて、FlaskからMySQLに接続しようとするとFlaskがエラーを吐いて落ちてしまう状況に何度か遭遇した。対処方法として万人に有効かは分からないが、一応記録する。 出たエラー ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 解決方法 MySQLにマウントしているディレクトリを一旦消してからコンテナを立て直す。 解説 このエラーが出る原因のひとつは、MySQLの設定を変えてからコンテナを立て直したことである。自分の場合は、環境変数のMYSQL_ROOT_PASSWORDを別のものに書き換えたことが原因だった。 MySQLコンテナが初めて立ち上がる際には、MySQLサーバーの設定ファイル群が自動で作られる。これらは永続ボリュームに保存される。そのため、MySQLの設定を変えた場合は、設定ファイル群を作り直す必要があったのだ。 しかし、一度コンテナを立てると、設定を変えても作り直されることはないため、上記のようなエラーが出ることになる。なので、解決方法としてはボリュームの中身を削除するか、MySQLサーバーに入って設定をいじるということになる。 環境構築の段階で起きやすいエラーなので、作り直してしまった方が早そうである。 まとめ コンテナ上のMySQLサーバーの設定を変更した場合は、コンテナだけでなくデータベースのディレクトリを作り直さないとエラーが出る場合がある。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL(MariaDB)で複数DBの移行(ダンプ・リストア)

■ ダンプ ● DBを指定するパターン データベース名を複数指定して dump する(データベース名は事前に show databases;で取得しておくこと) --routines ストアドプロシージャ, --events イベント も含める --add-drop-table で既存テーブルを削除してリストアする情報を含める $ mysqldump --add-drop-table --routines --events --databases aaa bbb ccc > dumps.sql ● 全DBをdumpするパターン $ mysqldump --add-drop-table --routines --events --all-databases > dumps.sql ■ リストア データベースの作成、選択は、ダンプファイルの中に書かれているのでこれだけでOK $ mysql < dumps.sql ■ 使用例 ダンプ $ mysqldump -u [username] -h [hostname] -p --add-drop-table --routines --events --databases dbname1 dbname2 dbname3 > dump.20210729.sql リストア $ mysql -u [username] -h [hostname] -p < dumps.20210729.sql
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SQLのCASE式を使ってテーブル同士のマッチングを行うテクニック

ポイント CASE式の大きな利点は 式を評価できること なので、CASE式の中で、BETWEEN、LIKE、<、>と言った述語群を使用できる 特にこれが便利: INとEXISTSはサブクエリを引数に取れるので非常に強力です 実例 イメージ 店舗とその最寄駅データの中間テーブルのようなものをイメージして欲しいです。 店舗id 駅id 最寄駅フラグ 1 22 1 1 23 0 2 5 1 3 123 1 4 34 0 4 35 1 4 36 0 5 23 1 SELECT s.name, CASE WHEN s.id IN ( SELECT shop_id FROM reserves WHERE created_at BETWEEN '2021-01-01' AND '2021-01-31') THEN 'o' ELSE 'x' END AS '2021/1', CASE WHEN s.id IN ( SELECT shop_id FROM reserves WHERE created_at BETWEEN '2021-02-01' AND '2021-02-28') THEN 'o' ELSE 'x' END AS '2021/2', CASE WHEN s.id IN ( SELECT shop_id FROM reserves WHERE created_at BETWEEN '2021-03-01' AND '2021-03-31') THEN 'o' ELSE 'x' END AS '2021/3' FROM shops AS s 結果 店舗ごと各月の予約のある無し状況のクロス集計表が作れます。(わけわからんクロス表であることはご愛敬) name 2021/1 2021/2 2021/3 名古屋店 o o o 横浜店 o o o 新宿店 o x x SQLのEXISTSとinの違い EXISTSは、存在するかどうかだけを判定するのに対し、INは条件に当てはまるデータを全て抽出します。 また、INはカラム名を指定するのに対して、EXISTSは無指定でOK。 SELECT s.name, CASE WHEN EXISTS ( SELECT r.shop_id FROM reserves AS r WHERE r.created_at BETWEEN '2021-01-01' AND '2021-01-31' AND r.shop_id = s.id ) THEN 'o' ELSE 'x' END AS '2021/1', CASE WHEN EXISTS ( SELECT r.shop_id FROM reserves AS r WHERE r.created_at BETWEEN '2021-02-01' AND '2021-02-28' AND r.shop_id = s.id ) THEN 'o' ELSE 'x' END AS '2021/2', CASE WHEN EXISTS ( SELECT r.shop_id FROM reserves AS r WHERE created_at BETWEEN '2021-03-01' AND '2021-03-31' AND r.shop_id = s.id ) THEN 'o' ELSE 'x' END AS '2021/3' FROM shops AS s INとEXISTSでは、EXISTSの方がパフォーマンスが優れています。 なので、テーブルのサイズが大きい場合は、EXISTSを使うようにしましょう。 参照 16-18p アウトプット100本ノック実施中
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む