PlanetScale というサーバレスDBを使ってみました。
以下のQiita見てサインアップしました。
多少画面遷移は変わっていますが、なんとかなるレベルです。スクショ貼ってくれるのは本当にありがたい・・・
あ、無料プランで登録したのですがクレカの登録は必要でした。
で、その後に手元のMacで環境整備。
- homebrew で mysql をインストール
$ mysql -V mysql Ver 8.1.0 for macos13.3 on x86_64 (Homebrew)
接続先のホストやデータベース名、ユーザー名とパスワードを環境変数にセットして、いざアクセス。
あっさりログイン。
$ mysql -h $DATABASE_HOST -D $DATABASE_NAME -u $DATABASE_USERNAME -p$DATABASE_PASSWORD --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/cert.pem mysql: [Warning] Using a password on the command line interface can be insecure. Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1608708638 Server version: 8.0.23-PlanetScale Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> mysql> select version(); +---------------+ | version() | +---------------+ | 8.0.23-Vitess | +---------------+ 1 row in set (0.01 sec)
拍子抜け。そのまま、SQLでテスト用のデータベースを作成。
INSERT INTO `users` (id, email, first_name, last_name) VALUES (1, 'hp@example.com', 'Harry', 'Potter'); SELECT * FROM users; DESCRIBE users;
確認
mysql> SELECT * FROM users; +----+----------------+------------+-----------+ | id | email | first_name | last_name | +----+----------------+------------+-----------+ | 1 | hp@example.com | Harry | Potter | +----+----------------+------------+-----------+ 1 row in set (0.04 sec)
普通のMySQLですなぁ。
一旦 exit;
で抜けて、Perlからアクセスできるか確認していきます。
Perlからアクセス
$ cpanm DBI DBI is up to date. (1.643) $ cpanm DBD::mysql DBD::mysql is up to date. (4.050)
use v5.036; use DBI; my $dbh = DBI->connect( "DBI:mysql:$ENV{DATABASE_NAME}:$ENV{DATABASE_HOST}", $ENV{DATABASE_USERNAME}, $ENV{DATABASE_PASSWORD}, { RaiseError => 1, mysql_ssl => 1, mysql_enable_utf8mb4 => 1, } ); my $sth = $dbh->prepare("SELECT * FROM users"); $sth->execute(); while ( my $ref = $sth->fetchrow_hashref() ) { print "Found a row: id = $ref->{'id'}, email = $ref->{'email'}, first_name = $ref->{'first_name'}, last_name = $ref->{'last_name'}\n"; } $sth->finish();
とここで問題。
ちゃんと Found a row: id = 1, email = hp@test.com, first_name = Harry, last_name = Potter
と意図した応答があったのですが、その前にWARNINGがついてきます。
WARNING: MYSQL_OPT_RECONNECT is deprecated and will be removed in a future version
このWARNINGを消すのに色々調べて回ったのですが、まずはStackoverflow
翻訳使いながらみていきますが、どうも手立てはない模様。
この WARNING をGoogle 検索にいれて片っ端から見ていきます。
MySQL 公式もひっかかったのですが、この警告は特定条件の時に出る模様。
他にも、裏で Perl 使ってそうなミドルウェアで同様の警告ログが出ているみたい。
そんなこんなでたどり着いたのがこちら。
スレッドをずっと辿っていくと、fork した修正版を作ってくれた方がいました。
ありがたい!早速インストールします。
$ cpanm https://github.com/dveeden/DBD-mysql.git
おかげで無事警告は消えました。
作者の方はテストしたらCPANにリリースするとのことでした( https://github.com/perl5-dbi/DBD-mysql/issues/354#issuecomment-1696402746)。
待ち遠しいですね。