0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LogServiceを用いてMySQLバイナリログを収集する

Last updated at Posted at 2019-03-29

RDSリカバリーに大事なバイナリログをLogServiceでどのように収集するのかにご関心をお持ちの方がいるかと思い、今回の記事はRDSバイナリログの収集について、紹介したいと思います。

実現手法

下図のように、LogtailがMySQLスレーブインタラクティブプロトコルを実装している為、スレーブノードとしてマスターノードにDumpプロトコルを送信し、マスターノードはDump要求を受信した後、自身のバイナリログをLogtailにプッシュします。Logtailはリアルタイムでイベント解析、フィルタリング、データ解析などをし、解析されたデータはログサービスにアップロードします。

スクリーンショット 2019-03-21 16.52.13.png

手順について                         

まず、バイナリログを行モードになっているのかを確認します。

qiita.rb
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という名前のユーザーを作成し、下記のコマンドで権限を付与します。

qiita.rb
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で修正するのをおすすめします。)

qiita.rb
{
  "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文を実行します。

qiita.rb
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でバイナリログが収集されるようになりました。

スクリーンショット 2019-03-24 10.42.41.png

最後

いかがでしたでしょうか、LogServiceを用いてRDSバイナリログの収集手法を紹介させて頂きました。また、収集したログをOSSやTableStore、MaxComputeなどのAlibaba Cloudのサービスと連携して、大量データの長期保存・分析をすることもできます。 この辺については、今後ご紹介させて頂きたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?