RDSリカバリーに大事なバイナリログをLogServiceでどのように収集するのかにご関心をお持ちの方がいるかと思い、今回の記事はRDSバイナリログの収集について、紹介したいと思います。
実現手法
下図のように、LogtailがMySQLスレーブインタラクティブプロトコルを実装している為、スレーブノードとしてマスターノードにDumpプロトコルを送信し、マスターノードはDump要求を受信した後、自身のバイナリログをLogtailにプッシュします。Logtailはリアルタイムでイベント解析、フィルタリング、データ解析などをし、解析されたデータはログサービスにアップロードします。
手順について
まず、バイナリログを行モードになっているのかを確認します。
mysql> show variables like "log_bin";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.02 sec)
mysql> show variables like "binlog_format";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.03 sec)
次は、testuserという名前のユーザーを作成し、下記のコマンドで権限を付与します。
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'testuser'@'%';
FLUSH PRIVILEGES;
そして、LogService側でProjectとLogStoreを作成していきます。LogStoreのデータソースのBINLOGを選択してから、プラグイン設定のところに、RDSに関しての必要な詳細情報を設定します。(パスワードなどの情報を守る為、こちらで一旦ダミーデータを入力し、後からLogtailの/usr/local/ilogtail/user_log_config.jsonで修正するのをおすすめします。)
{
"inputs": [
{
"type": "service_canal",
"detail": {
"Host": "************.mysql.rds.aliyuncs.com",
"User": "testuser",
"Password": "*******",
"ServerID": 32355,
"IncludeTables": [
".*\\..*"
],
"ExcludeTables": [
"mysql\\..*"
],
"TextToString": true
}
}
]
}
テストする
testdbでtest_dbという名前のテーブルを作成し、INSERT INTO、UPDATEとDELETEなどのDML文を実行します。
CREATE TABLE test_tb
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
INSERT INTO test_tb (PersonID, LastName, FirstName, Address, City)
VALUES (1, 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', 'Norway');
UPDATE test_tb
SET FirstName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE PersonID = 1;
DELETE FROM test_db WHERE PersonID =1;
下記のように、LogStoreでバイナリログが収集されるようになりました。
最後
いかがでしたでしょうか、LogServiceを用いてRDSバイナリログの収集手法を紹介させて頂きました。また、収集したログをOSSやTableStore、MaxComputeなどのAlibaba Cloudのサービスと連携して、大量データの長期保存・分析をすることもできます。 この辺については、今後ご紹介させて頂きたいと思います。