Google Compute Engine (GCE)上でTiny Tiny RSSを動かしてみるの続きです。前回はCompute EngineのVMインスタンス上でLighttpdとMySQLを動かしましたが、今回はMySQLの代わりにCloud SQLを使ってみます。基本的に自分用の備忘録です。
Cloud SQLとは
要はMySQLをGoogle Cloud Platform用に超カスタマイズしたVMインスタンスということのようです。
Cloud SQLインスタンスを起動
2016年1月の時点ではCloud SQL Second Generation (beta)がお勧めのようです。まだベータ版ですが、SLA(Service Level Agreement)も必要ないし、値段もこちらの方が安いようなので、こちらを使ってみます。
Machine typeはとりあえずdb-f1-micro
を選択。Enable daily backupsをチェックして時間を適当に設定。Advanced optionsのMySQL flagsでcharacter_set_server
をutf8mb4
に、default_time_zone
を-08:00
(America/Los_Angeles
の冬時間の場合)にセットして起動します。
起動直後の初期状態で、Storage usageが約1GB、CPU usageがほぼ0、Memory usageが約550MBでした。db-f1-micro
のメモリが614.4MBなので、結構ぎりぎりな感じです。
Cloud SQLの設定
まずはWebからAccess ControlのUserのところで'root'@'%'
ユーザのパスワードを設定します。
それから、Access ControlのAuthorizationのところでTiny Tiny RSS用に起動したVMインスタンスのIPアドレスからのアクセスを許可します。IPアドレスはVMインスタンスのExternal IPを使えばいいようです。
試しにVMインスタンスからmysql
コマンドで接続してみます。
$ mysql -h (Cloud SQLインスタンスのIPアドレス) -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
...
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2016-01-22 20:20:20 |
+---------------------+
1 row in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
現在時刻をチェックしてタイムゾーンの設定ができているか確認しておきます。
Creating DatabasesやCreating Usersを見るとWebからデータベースやユーザを作れそうですが、どうやらSecond Generation (beta)ではまだサポートされていないようです。ということで、mysql
コマンドからデータベースとユーザを作成します。
mysql> CREATE DATABASE ttrss_db CHARACTER SET utf8mb4;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER 'ttrss_user'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL ON ttrss_db.* TO 'ttrss_user'@'%';
Query OK, 0 rows affected (0.00 sec)
データの移行
Importing and Exporting Dataを参考に、VMインスタンスのttrss_db
データベースのデータをダンプしてインポートします。
$ sudo service tt-rss stop
$ mysqldump --databases ttrss_db -u ttrss_user -p --hex-blob --default-character-set=ut
f8 > ttrss_db.sql
Enter password:
$ ls -l
total 504
-rw-rw-r-- 1 z80 z80 513801 Jan 22 22:22 ttrss_db.sql
$ gcloud auth login
...
$ gsutil cp ttrss_db.sql gs://mybucket
Copying file://ttrss_db.sql [Content-Type=application/x-sql]...
Uploading gs://mybucket/ttrss_db.sql: 501.76 KiB/501.76 KiB
$ gsutil ls -l gs://mybucket
513801 2016-01-22T22:22:22Z gs://mybucket/ttrss_db.sql
TOTAL: 1 objects, 513801 bytes (501.76 KiB)
$ gcloud sql instances import ttrss-db gs://mybucket/ttrss_db.sql
Importing Cloud SQL instance...-ERROR: (gcloud.sql.instances.import) UNKNOWN
むむ、UNKNOWNな理由でエラーになってしまいました。試しにFirst GenerationのCloud SQLインスタンスを起動してインポートしてみたら問題なくインポートできたので、Second Generation (beta)ではまだサポートされていないのでしょう。
普通にmysql
コマンドからリストアします。
$ mysql -h (Cloud SQLインスタンスのIPアドレス) -u root -p < ttrss_db.sql
Enter password:
問題なくリストアできました。
Tiny Tiny RSSの設定
Tiny Tiny RSSの設定を変更します。
$ sudo service tt-rss stop
$ sudo service mysql stop
$ cd /var/www/tt-rss
$ sudo mv config.php config.php.backup
ブラウザで http://(IPアドレス)/tt-rss/install/ にアクセスしてインストールします。
$ diff -u config.php.backup config.php
...
$ sudo vi config.php
# DAEMON_SLEEP_INTERVALの設定を追加
$ sudo service tt-rss start
ブラウザで http://(IPアドレス)/tt-rss/にアクセスます。
バックアップとリストア
一日経ったら、バックアップがとれているか確認します。試しにリストアしてみると、データは元に戻ってTiny Tiny RSSも普通に動いています。
まとめ
Tiny Tiny RSSのデータベースを、Compute EngineのVMインスタンス上のMySQLからCloud SQLに移行して、問題なく動くことが確認できました。Cloud SQLのSecond Generation (beta)は、MySQL本体は問題なく動いているようですが、Webからの設定やgcloud
コマンドからの操作はもうちょっとのようです。2016年1月の時点では、Cloud SQLの機能を活用するならFirst Generationの方がお手軽そうです。
ToDo
MySQLのcharacter setについて調べていたら、utf8
とutf8mb4
というのがあるようです。schema/ttrss_schema_mysql.sql
ではDEFAULT CHARSET=UTF8
としていますが、絵文字などを扱うにはutf8mb4
にする必要があるようです。
追記: Google Compute Engine (GCE)上でTiny Tiny RSSを動かしてみるを更新しました。