さくらのクラウド データベースアプライアンス

晴れ火曜はいつもの店でいつものように打ち合わせ。 今日は道路が非常に混んでおり、年末年始休みが終わって、人々が平常通りに動き出しているのを感じた。
首都圏で緊急事態宣言出ているが、香川県のこのお店への来客具合は、いつもと変わらないような気がする。 2021年が始まって2週間経ったが、この集まりでのプロジェクトの動きはまだ何も無い。 1年って52週間しかないので、そのうちの4%も、もう経過しているということを再認識しなくてはならない。 あっという間に夏になって、また年末になってしまうだろう。
モーニング

自分のサーバーでは、さくらのクラウドを使っているのだけど、アプリケーションとデータベースを同じサーバーに同居させている。
何度か書いているが、新しいインスタンスに新しいディストリビューションを入れて、PHPなどを最新版にしたい。 だが、アプリケーションとDBが同居していると、別のインスタンス立ち上げてDB接続させたい場合問題になる。 やろうと思えば古いインスタンスのポート開けて、そこに接続させることもできるのだけど、微妙な策だ。
なので、DBをサーバーに同居させるのではなく、AWSでいうRDSみたいに、DB専用のサービスみたいなものが、さくらのクラウドにもあるので、それに移行する作業をしていた。

さくらのクラウドでデータベースアプライアンスを使うには、スイッチが必須。 スイッチは、スイッチのみのプランか、スイッチ+ルータのプランがある。 別にルータ機能は求めてないし、ルータ機能がついているとIPアドレスも16個や32個取得しなくてはならず、金額が跳ね上がる。 裏側でネットワーク組むだけなので、スイッチだけのプランを作成し、データベースアプライアンスと、今動いているインスタンスにNICを追加してスイッチに接続させた。 インスタンスにNICを追加するのは動かしながらはできないので、一旦サーバーを落とさなくてはならない。 冗長化などもしてないため、2,3分で終わるので今アクセスしている人たちは無視して、無理やりシャットダウンしてNIC追加して、ついでにプランを2CPU×2GBメモリに上げた。 今までは1×1で、22時前後など負荷のかかる時間は少々厳しかったので。
で、SSHでeth1を追加したりして、ようやくDBアプライアンスに接続することができた。 ネットワークは苦手なので、この辺りの一連の作業も気を使う。

接続できたので、次はデータベースのデータを移行しなくてはならない。 mysqldumpで丸っと移せばいいのだけど、mysqlの管理テーブルとかも移ってしまうのと、without的なものが見つからなかったので、1データベースずつmysqldump, mysqlコマンドで流し込んでいった。
で、軽くテストして、いざデータベース接続先を変更したら、insertの一部クエリでエラーが発生。 not nullのカラムを持つテーブルにinsertする場合に発生していたのだけど、例えばnameがnot nullだとして、
INSERT INTO table (id, name, birthday) VALUES(1, ”, ‘2000-01-01’);
というのは通るが、
INSERT INTO table (id, birthday) VALUES(1, ‘2000-01-01’);
というのはエラーが発生する。 こんな処理している箇所がけっこうあって、コード直すのは箇所が多くて大変なのだけど、DB側でnot null制約を外して対応してしまった。

が、後で調べて分かったのだけど、MariaDB10.2.4からsqlmodeに「STRICT_TRANS_TABLES」が追加されたよう。 これはSQLを厳密に処理する設定らしく、上で挙げたようなnot nullなのにカラム指定しないインサート、つまり空ではなくnullのような場合にエラーを吐くようになっていたらしい。
前まで使っていたのが、MariaDB10.1.48で、今がMariaDB10.4.12だからだな。

とりあえず、色々計画している中での、データベースの分離は終わった。 これでようやくスタートラインに立てた感じがする。

夜はジョギングへ。 ペース気にせず
5.31, 5.27, 5.23, 5.09, 5.08, 5.05と、6kmを31分46秒で、キロ5分17秒ペースだった。