MySQLのmysqlbinlogコマンドでは、MySQL5.6からリモートにあるバイナリーログを読み取る事が可能になりましたが、SSLを利用した通信の暗号化はサポートされておりませんでした。
次期メジャーバージョンのMySQL5.7では、ここら辺も機能拡張されておりmysqlbinlogコマンドを利用して、リモートのバイナリーログを読み込み場合にもSSLを利用した通信の暗号化を行う事が出来るようになりました。
Firewall、セキュリティ機器、セグメント分割された環境で、何処まで必要になるかは状況次第ですが、
リモートサーバーが自然災害対策の為に、自分でインフラを準備する必要が無いPublicクラウド上にある場合などに通信の暗号化が出来ると安心ですね。
※ MySQLのレプリケーションでは、以前からSSLを利用した通信の暗号化が可能です。
参照:
MySQL 5.7: mysqlbinlog now supports SSL
MySQL5.7 mysqlbinlogマニュアル
4.6.7 mysqlbinlog — Utility for Processing Binary Log Files
MySQL5.6: mysqlbinlogコマンドでリモートデータベースからログを読みこむ機能の確認
4.6.8. mysqlbinlog — バイナリログファイルを処理するためのユーティリティー
[環境] リモートからのログ読み込み基本動作確認
MySQL: 5.6.24 (SSLの確認は別途)
特定ログファイルの読み込み
ログ取得元サーバー
[admin@GA01 ~]$ mysql -u root -p -e 'show master logs'; Enter password: +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000117 | 1636700 | | mysql-bin.000118 | 844 | | mysql-bin.000119 | 222 | | mysql-bin.000120 | 518 | | mysql-bin.000121 | 470 | | mysql-bin.000122 | 222 | +------------------+-----------+ [admin@GA01 ~]$ ls -l /usr/local/mysql/data/mysql-bin.000117 -rw-rw----. 1 mysql mysql 1636700 7月 6 10:21 /usr/local/mysql/data/mysql-bin.000117 [admin@GA01 ~]$
ログ読み込みクライアントサーバー
ログが読みこまれているのが確認出来る。バイナリーのまま持ってくる場合は、
”–raw”オプションを付けてあげれば良い。
[admin@misc01 tmp]$ /usr/local/mysql/bin/mysqlbinlog --read-from-remote-server \ > --host=192.168.56.201 --user=admin --password \ > mysql-bin.000117 > RemoteLogBackup_`date "+%Y%m%d_%H%M%S"`.sql Enter password: [admin@misc01 tmp]$ ls -l 合計 3632 -rw-rw-r--. 1 admin admin 3715955 7月 9 11:06 RemoteLogBackup_20150709_110610.sql [admin@misc01 tmp]$ cat RemoteLogBackup_20150709_110610.sql | grep CREATE CREATE DATABASE `world` /*!40100 DEFAULT CHARACTER SET utf8 */ CREATE TABLE `City` ( CREATE TABLE `Country` ( CREATE TABLE `CountryLanguage` ( CREATE DATABASE `audit_information` /*!40100 DEFAULT CHARACTER SET utf8 */ CREATE DATABASE `audit_information` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ CREATE TABLE `audit_parsed` ( CREATE TABLE `audit_history` ( [admin@misc01 tmp]$
指定したログファイル以降のログも全て持ってくる場合
[admin@misc01 tmp]$ /usr/local/mysql/bin/mysqlbinlog --read-from-remote-server \ > --host=192.168.56.201 --user=admin --password --to-last-log \ > mysql-bin.000117 > RemoteLogBackup_`date "+%Y%m%d_%H%M%S"`.sql Enter password: [admin@misc01 tmp]$ ls -l 合計 7268 -rw-rw-r--. 1 admin admin 3715955 7月 9 11:06 RemoteLogBackup_20150709_110610.sql -rw-rw-r--. 1 admin admin 3722407 7月 9 11:46 RemoteLogBackup_20150709_114625.sql [admin@misc01 tmp]$ cat RemoteLogBackup_*.sql | grep CREATE CREATE DATABASE `world` /*!40100 DEFAULT CHARACTER SET utf8 */ CREATE TABLE `City` ( CREATE TABLE `Country` ( CREATE TABLE `CountryLanguage` ( CREATE DATABASE `audit_information` /*!40100 DEFAULT CHARACTER SET utf8 */ CREATE DATABASE `audit_information` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ CREATE TABLE `audit_parsed` ( CREATE TABLE `audit_history` ( CREATE DATABASE `world` /*!40100 DEFAULT CHARACTER SET utf8 */ CREATE TABLE `City` ( CREATE TABLE `Country` ( CREATE TABLE `CountryLanguage` ( CREATE DATABASE `audit_information` /*!40100 DEFAULT CHARACTER SET utf8 */ CREATE DATABASE `audit_information` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ CREATE TABLE `audit_parsed` ( CREATE TABLE `audit_history` ( [admin@misc01 tmp]$
ログの中身を確認してみると、先頭行のポジションが同じである事が確認出来る。
[admin@misc01 tmp]$ cat RemoteLogBackup_20150709_110610.sql | grep \# | head # at 4 #290328 15:21:27 server id 1 end_log_pos 120 CRC32 0x3a600c07 Start: binlog v 4, server v 5.6.24-enterprise-commercial-advanced-log created 290328 15:21:27 at startup # at 120 #290328 15:21:27 server id 1 end_log_pos 151 CRC32 0xe9d5507f Previous-GTIDs # [empty] # at 151 #380119 12:14:09 server id 1 end_log_pos 222 CRC32 0x5aae6a2b Previous-GTIDs # 8560c2ac-e1dc-11e4-88ff-0800275399c1:1-612 # at 222 #150703 11:57:42 server id 1 end_log_pos 270 CRC32 0xb9607b03 GTID last_committed=0 sequence_number=0 [admin@misc01 tmp]$ cat RemoteLogBackup_20150709_114625.sql | grep \# | head # at 4 #700101 9:00:00 server id 1 end_log_pos 0 Rotate to mysql-bin.000117 pos: 4 # at 4 #290328 15:21:27 server id 1 end_log_pos 120 CRC32 0x3a600c07 Start: binlog v 4, server v 5.6.24-enterprise-commercial-advanced-log created 290328 15:21:27 at startup # at 120 #290328 15:21:27 server id 1 end_log_pos 151 CRC32 0xe9d5507f Previous-GTIDs # [empty] # at 151 #380119 12:14:09 server id 1 end_log_pos 222 CRC32 0x5aae6a2b Previous-GTIDs # 8560c2ac-e1dc-11e4-88ff-0800275399c1:1-612 [admin@misc01 tmp]$
ログの中身を確認してみると、特定のログ以降の全てのログを読みこんだログは、
最終変更までのバイナリーログが読みこまれている事が確認出来る。
[admin@misc01 tmp]$ cat RemoteLogBackup_20150709_110610.sql | grep \# | tail -n 20 #150703 19:06:58 server id 1 end_log_pos 1634541 CRC32 0x49844ce7 GTID last_committed=0 sequence_number=0 # at 1634541 #150703 19:06:58 server id 1 end_log_pos 1634716 CRC32 0x271b8e30 Query thread_id=6 exec_time=0 error_code=0 # at 1634716 #150703 19:07:50 server id 1 end_log_pos 1634764 CRC32 0x92c5292d GTID last_committed=0 sequence_number=0 # at 1634764 #150703 19:07:50 server id 1 end_log_pos 1634875 CRC32 0x1b73a468 Query thread_id=6 exec_time=0 error_code=0 # at 1634875 #150703 19:08:03 server id 1 end_log_pos 1634923 CRC32 0x62aa0722 GTID last_committed=0 sequence_number=0 # at 1634923 #150703 19:08:03 server id 1 end_log_pos 1635101 CRC32 0x10ed801d Query thread_id=6 exec_time=0 error_code=0 # at 1635101 #150703 19:08:21 server id 1 end_log_pos 1635149 CRC32 0x805c979c GTID last_committed=0 sequence_number=0 # at 1635149 #150703 19:08:21 server id 1 end_log_pos 1636236 CRC32 0x78f51539 Query thread_id=6 exec_time=0 error_code=0 # at 1636236 #150703 19:08:41 server id 1 end_log_pos 1636284 CRC32 0xf6128e4b GTID last_committed=0 sequence_number=0 # at 1636284 #150703 19:08:41 server id 1 end_log_pos 1636700 CRC32 0xeda14d3e Query thread_id=6 exec_time=0 error_code=0 # End of log file [admin@misc01 tmp]$ cat RemoteLogBackup_20150709_114625.sql | grep \# | tail -n 20 # at 151 #380119 12:14:09 server id 1 end_log_pos 222 CRC32 0x1bbf07f9 Previous-GTIDs # 8560c2ac-e1dc-11e4-88ff-0800275399c1:1-5933 # at 222 #150708 14:30:37 server id 1 end_log_pos 270 CRC32 0x7fdb0132 GTID last_committed=0 sequence_number=0 # at 270 #150708 14:30:35 server id 1 end_log_pos 370 CRC32 0xdc99f8eb Query thread_id=1 exec_time=0 error_code=0 # at 370 #150708 14:30:35 server id 1 end_log_pos 470 CRC32 0xa8b91492 Query thread_id=1 exec_time=0 error_code=0 # at 4 #700101 9:00:00 server id 1 end_log_pos 0 CRC32 0xc2515710 Rotate to mysql-bin.000122 pos: 4 # at 4 #700101 9:00:00 server id 1 end_log_pos 120 CRC32 0x07fa7f88 Start: binlog v 4, server v 5.6.24-enterprise-commercial-advanced-log created 700101 9:00:00 # at 120 #700101 9:00:00 server id 1 end_log_pos 151 CRC32 0x218282e8 Previous-GTIDs # [empty] # at 151 #380119 12:14:09 server id 1 end_log_pos 222 CRC32 0xd7150767 Previous-GTIDs # 8560c2ac-e1dc-11e4-88ff-0800275399c1:1-5934 # End of log file [admin@misc01 tmp]$
リモートデータベースからログを読み込み、定期的に遠隔地に保存してしておく方法の一つとしても使えそうです。