91s

プログラミング関係、日記などを書きます

Google Dataportal(Datastudio)でMySQL8のRDSを使う方法メモ

※注意点

試行錯誤の結果色々変なことになっている箇所があるので、得た情報をつなぎ合わせたものを先に書いて、"動かなかった場合"として自分の環境も載せようと思います。

はじめに

google dataportalでは、MySQL8に対応していないらしく、そのままでは接続できませんでした。 公式のcommunityスレッドにとても有益な情報があったのでそれを参考にした結果接続できたのでそれを載せます。

引用元: https://support.google.com/datastudio/thread/4115506?hl=en&msgid=34547134

ざっくりまとめると、RDSに直接接続するのではなくProxySQLという色々よしなにやってくれるミドルウェアを間に挟むそうです!

前提

DB:RDS MySQL8.0.16 (色々試行錯誤したのでリードレプリカでpublicから接続できるDBを使っています。同じVPCの中に環境立てるのでpublicなDBでなくてもいけると思います。)

手順

1. ProxySQLの準備

EC2インスタンスの作成
  • AMI:Amazon Linux 2(他では試していません)
  • VPC:RDSと同じ
  • セキュリティグループ
    • port:22 ソース:myIP(proxysql設定の為)
    • port:6033 ソース:Google Dataportalのヘルプに書いてあるip一覧(カンマ区切り) 下記参照
64.18.0.0/20,64.233.160.0/19,66.102.0.0/20,66.249.80.0/20,72.14.192.0/18,74.125.0.0/16,108.177.8.0/21,173.194.0.0/16,207.126.144.0/20,209.85.128.0/17,216.58.192.0/19,216.239.32.0/19

引用元: MySQL に接続する - データポータルのヘルプ

ProxySQLの設定
  1. 上記で作成したEC2インスタンスssh接続
  2. ProxySQLのインストール

以下を実行

sudo vi /etc/yum.repos.d/proxysql.repo

以下を記入

[proxysql_repo]
name= ProxySQL YUM repository
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/\$releasever
gpgcheck=1
gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key

以下を実行

sudo yum install proxysql

  1. proxysqlの設定

以下このファイルを触っていきます

sudo vi /etc/proxysql.cnf

~ 略 ~
admin_variables=
{
        admin_credentials="DBマスターユーザーパスワード or DBマスターユーザーパスワードをハッシュ化したもの"
#       mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
        mysql_ifaces="127.0.0.1" ←変更
#       refresh_interval=2000
#       debug=true
}
~ 略 ~

DBマスターユーザーパスワードのハッシュ化は、該当DBに接続し、

SELECT CONCAT("*", UPPER(SHA1(UNHEX(SHA1('DBマスターユーザーパスワード'))))) AS password;

上記のsqlを実行することで取得できるそうです。

~ 略 ~
mysql_variables=
{
        ~ 略 ~
        default_schema="DB名"
        stacksize=1048576
        server_version="8.0.16" ←変更
~ 略 ~

mysql_servers =
(
        {
                ~ ここから
                address = "RDSエンドポイント" # no default, required . If port is 0 , address is interpred as a Unix Socket Domain
                port = 3306           # no default, required . If port is 0 , address is interpred as a Unix Socket Domain
                hostgroup = 0           # no default, required
                status = "ONLINE"     # default: ONLINE
                weight = 1            # default: 1
                compression = 0       # default: 0
                ここまでをコメントアウト~
#   max_replication_lag = 10  # default 0 . If greater than 0 and replication lag passes such threshold, the server is shunned
        }, ←ここもコメントアウト
~ 略 ~

mysql_users:
(
        {
                username = "DBマスターユーザー名" # no default , required
                password = "DBマスターユーザーパスワード or DBマスターユーザーパスワードをハッシュ化したもの" # default: ''
                default_hostgroup = 0 # default: 0
                active = 1            # default: 1
        },
~ 略 ~

mysql_query_rules:
(
~ ここから
{
    rule_id=1
    active=1
    match_pattern="\@\@query_cache_size"
    replace_pattern="null"
    apply=0
},
{
    rule_id=2
    active=1
    match_pattern="\@\@query_cache_type"
    replace_pattern="null"
    apply=0
},
{
    rule_id=3
    active=1
    match_pattern="\@\@tx_isolation"
    replace_pattern="null"
    apply=0
},
ここまで 追加~
)
~ 略 ~
MySQLのインストール

※引用元には載っていませんでしたが、接続確認の為インストールしました。 不要かもしれません。

以下を実行

sudo yum -y install mysql mysql-devel

2. RDSの設定

セキュリティグループの設定

インバウンドルールに

port 3306 ソース:上記で作成したEC2のセキュリティグループ

を追加

3. ProxySQLの実行

以下を実行

sudo service proxysql start

4. Google Dataportal側での設定

新規レポート→データを追加→MySQL

  • ホスト名:上記で作成したProxySQLを実行しているEC2のパブリックIP
  • ポート:6033
  • データベース:接続したいDB
  • ユーザー名:DBマスターユーザー名
  • パスワード:DBマスターユーザーパスワード

を記入し 追加 をクリック

参考文献

ProxySQL公式 GitHub - sysown/proxysql: High-performance MySQL proxy with a GPL license.

Google Dataportal 公式スレッド https://support.google.com/datastudio/thread/4115506?hl=en&msgid=34547134