20200808のMySQLに関する記事は3件です。

【HOMEBREW】 Mac OSのパッケージマネージャーについて node.jsやってたら学んだ事

【この記事で身に付くこと】

■HOMEBREWとは基礎
■mysqlを自身のMacへ

【背景】

■node.jsでの開発途中で、mysqlが無く、先に進めなかった為

【開発環境】

■ Mac OS catalina
■ Homebrew 2.4.9
■ mysql Ver 8.0.21

【実装】

HOMEBREW入れます。

*Xcodeも自動的にインストールされます。便利

mac.terminal
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
.
.
.
// 5分くらい待ちます。下記の文は自動で出てきます。
$ Downloaded Command Line Tools for Xcode 

mysql入れます。

mac.terminal
$ brew install mysql 

確認

mac.ternminal
$ brew -v
Homebrew 2.4.9
Homebrew/homebrew-core (git revision b32b4; last commit 2020-08-08)

$ mysql --version
mysql  Ver 8.0.21 for osx10.15 on x86_64 (Homebrew)

以上。

【まとめ】

■HOMEBREWとはMACのOSを動かす、パッケージマネージャー
■mysqlはDBの種類

 パッケージマネージャー = app store
 パッケージ = app
みたいな感じでしょうか。。
appstoreがあるからappがダウンロードできる。

【合わせて読みたい】

■ 【node.js】 node.jsインストール 芋っていたけど、簡単だった件...
https://qiita.com/tanaka-yu3/items/739db5ffed24a8d9ae4b

■ 【comandLine】 一言で コマンドライン 各種コマンド ターミナル
https://qiita.com/tanaka-yu3/items/b32e353bd6d7c9ebd4fb

■作業環境を整えるMacOSXのパッケージマネージャ「Homebrew」のインストール方法と使い方
https://liginc.co.jp/web/tool/mac-iphone/151069

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

Cloud SQLへのprivate ip 接続でハマった話

概要

Cloud SQL(MySQL)に対してprivate ipを使ってアクセスしたときに、何をチェックしたかをメモする
ハマったからにはきちんとログを残す

現象

GCE から Cloud SQLに対してprivate ipでアクセスができない

$ mysql -u root -p --host [private ip]
ERROR 1045 (28000): Access denied for user 'root'@'[GCEのprivate ip]' (using password: YES)

(Access deniedと言われている時点でVPCの構成は問題ないのだが、本稿は調べたこと自体を書くので一旦無視する)

観点

  1. VPCの接続構成が正しいか
  2. アクセスログがあるかどうか
  3. Cloud Proxyで接続できるのか(MySQLのusername/passwordが合っているか、private ipでいけるのかなど
  4. MySQLのUserテーブルのHostで許可設定がされているか
  5. SSL/TSLの設定が間違っていないのか

1. VPCの接続構成が正しいか

GCPのdefaultのvpcネットワークに接続しているものとして仮定する。
対象のインスタンスの設定画面からネットワークインタフェースを参照し、「ネットワーク インターフェースの詳細」に移動する
赤丸のボタンを押しネットワークの接続テストを作成する(最初はAPIを許可するというボタンになっているのでonにしてテストを実施できるようにする)

スクリーンショット 2020-08-08 0.27.46.png

接続テストにて、今回のアクセスについて記載する。

スクリーンショット 2020-08-08 0.27.08.png

到達可能になっている場合は、「理論的」に接続が可能である(パケットは転送されている可能性がありますってのは、理論的には送ってないけど、構成としては届きますっていうこと)

スクリーンショット 2020-08-08 0.35.20.png

もしここで到達可能にならない場合は、VPCネットワークピアリングのlist( https://console.cloud.google.com/networking/peering/list
)から対象を参照し、
対象のピアリングが、GCEの使っているネットワークインタフェースのVPCネットワークと同じであることを確認する。(今回defaultを想定するので対象のピアリングがdefaultのVPCネットワークに所属していることを確認する)

同じVPCネットワークではあるが、到達可能にならない場合、サブネット ピアリング ルートにCloud SQLのprivate ipが所属していない可能性がある(Cloud SQLでprivate ip作成をした場合はここは問題ないはずだが。。。 こちらの方の現象と同じになっている可能性もあるので注意する)

全部チェックできたら2に進む

1.の補足

ネットワーク詳しくない場合、この接続テスト機能で確認していくのが良いと思われる。
https://cloud.google.com/network-intelligence-center/docs/connectivity-tests/how-to/running-connectivity-tests?hl=ja

2. アクセスログがあるかどうか

構成が正しいことが確認できたら、対象のCloud SQLインスタンスに対してそもそもアクセスが本当に届いているのかをログで見てみる
対象の時間辺りに以下のクエリで検索してログが出ていることを出ていることを確認する

resource.type="cloudsql_database"
severity=INFO
textPayload:"Access denied for user"

ない場合は1. で、VPCの設定がきちんとできているかをもう一度確認する。またはインスタンスが動いているかを確認する。
ある場合は3に進む

2.の補足

Cloud Loggingのクエリの書き方は覚えたほうがいい
https://cloud.google.com/logging/docs/view/advanced-queries?hl=ja

3. Cloud Proxyで接続できるのか(MySQLのusername/passwordが合っているか、private ipでいけるのかなど

Cloud Proxyを使って接続してみる
インストールはドキュメントの通り対応するとしてprivate ipを使ってアクセスする
https://cloud.google.com/sql/docs/mysql/sql-proxy?hl=ja

$ ./cloud_sql_proxy -ip_address_types=PRIVATE -instances=[対象のcloud sqlのinstance id]
$ mysql -u root -p -S /cloudsql/[対象のcloud sqlのinstance id]

接続できたなら、username/passwordは合っている。private ipも動いている。4へ進む。
できない場合username/passwordが間違っている可能性が高い。Cloud SQLのコンソール画面からrootのパスワードを変更してみる。
それでもできない場合、public ipが空いているのであれば(許可ipはなくても良い)、-ip_address_typesのflagを消してpublic ipでのアクセスを試してみる。それでもできない場合はインスタンスが停止している、または、4のユーザのHOSTの設定が限りなく狭いと思われる。(rootなのであんま考えにくいけど。。。)
CloudSQLのコンソール画面から許可ホストを%となるようにユーザを作成してアクセスできるか確認する
それでも、できなかったら、GCEのインスタンスについているサービスアカウントのiamの設定、またはインスタンスのアクセスscopeにて、cloud sqlへの接続許可がついていないと思われる。(この場合アクセスログには残らない気がするが。。。)

3.の補足

cloud sql proxyでprivate ipだけでの接続やtcpでの接続ができるので、色々チェックできるのがすごい
TCPの場合

$ ./cloud_sql_proxy -ip_address_types=PRIVATE -instances=[対象のcloud sqlのinstance id]=tcp:3306
$ mysql -u root -p --host 127.0.0.1 --port 3306

4. MySQLのUserテーブルのHostで許可設定がされているか

Cloud SQLのコンソール画面からユーザ一覧をみて、許可されているホストを確認する
(rootなのに)制限されているのであれば、制限内のipからprivate ipでアクセスしてみる。
ホストの値が % になっている、または制限内のipなのにアクセスできない場合、5に進む

4.の補足

Cloud SQLのコンソール上で見れるのは mysql データベースの user テーブルである。
ユーザのgrantについてはMySQLにloginしないと見れない(今回はloginできるかの問題なので、grantはあまり関係ない

5. SSL/TSLの設定が間違っていないのか

  • SSL/TSLの設定をしている場合、その期限が切れているか
  • またその証明書が正しいかどうか
  • MySQLへのアクセス時に証明書を使っているか
  • SSL/TSLの設定をOFFにしてprivate ipでアクセスできるか(public ip直でアクセスしている場合は、OFFにしてはいけない)

以上をチェックする。
Cloud Proxyを使ってのアクセスの場合、SSL/TSLの証明書などがなくてもいけるので、いつもCloud Proxyを使ってたから特に気にしてない人はここでハマるかも知れない(まぁ、ハマりましたけど
ここまでくればほぼ接続できるはず。。。

5.の補足

SSL/TSLをONにして、SSL/TSLの証明書がないって場合、パスワード間違いと同じエラーがでてくる
設定はきちんと見直そう

まとめ

よくわからないで設定を変更するのはやめておこう。。。(今回のSSL/TSLの設定もいつしたのか覚えてない

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

node.js x express.js x mysql x TablePlusでCRUD処理

node.jsで基本のCURDをしてみた

参考にしたサイト
https://reffect.co.jp/node-js/express-js-connect-mysql#MySQL-3
こちらのサイトがとても解説が丁寧でわかりやすかった。

作成結果

ezgif.com-resize.gif

スクリーンショット 2020-08-08 1.55.09.png

実装方法は上記記事を参照
やってみて分かったことは感想に記述

【感想】

・node.jsのCRUDはphpと動きが似ている
・mysqlのDBとtableはjsファイル内で記述してサーバーが更新されると自動で作成される。
その後も更新のたびに新しく同じDBとtableを作成しようとしてエラーになるので、一度作ったDBとtableのjsファイル内の記述はコメントオフか削除が必要でした。
・table plusはやはり便利

TablePlus使い方

参考
https://reffect.co.jp/windows/tableplus-connect-mysql-sqlite

初期設定のパスワードやuserはmysqlのことなので、自分のユーザー名やパスワードではなく、
user:root(mysqlの場合)
パスワード:なし(mysqlの場合)
記述の保存は基本comand + s
基本クリックして登録、更新、削除をする
Data:データの登録、更新、削除
Structure: VARCHARやIDなどの編集

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