MySQLのバイナリログを見てみる

VirtualBoxにCentOSをとりあえずインストール
の続き

MySQLのバイナリログを見てみる。

MySQLのインストール

とりあえずMySQLをインストールする。

$ sudo yum -y install mysql-server
$ sudo service mysqld start
$ sudo chkconfig mysqld on

バイナリログを出力する

今はまだバイナリログは出力されていない。

$ ls /var/lib/mysql/
ib_logfile0  ib_logfile1  ibdata1  mysql  mysql.sock  test

log-binを追加してバイナリログを出力するよう設定する。

$ sudo vi /etc/my.cnf
[mysqld]
・・・
log-bin	←追加
$ sudo service mysqld restart

バイナリログのファイル「mysqld-bin.000001」が生成された。

$ ls /var/lib/mysql/
ib_logfile0  ib_logfile1  ibdata1  mysql  mysql.sock  mysqld-bin.000001  mysqld-bin.index  test

バイナリログの中身を確認する

バイナリログの中身はmysqlbinlogで確認できる。

$ cd /var/lib/mysql
$ sudo mysqlbinlog mysqld-bin.000001
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#140705 21:44:46 server id 1  end_log_pos 106   Start: binlog v 4, server v 5.1.73-log created 140705 21:44:46 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
PvO3Uw8BAAAAZgAAAGoAAAABAAQANS4xLjczLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA+87dTEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
sudoを付けないと、下記のような出力になる。

$ mysqlbinlog mysqld-bin.000001
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
mysqlbinlog: File 'mysqld-bin.000001' not found (Errcode: 13)
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

データベースを更新してみる。

$ mysql -u root
mysql> create database sample;
mysql> quit

更新のSQLが記録されているのが確認できる。

$ sudo mysqlbinlog mysqld-bin.000001
・・・
# at 106
#140705 21:47:25 server id 1  end_log_pos 193   Query   thread_id=2     exec_time=0     error_code=0
SET TIMESTAMP=1404564445/*!*/;
SET @@session.pseudo_thread_id=2/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
create database sample
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

ちなみに、この時点のPositionは下記のようになっている。

$ mysql -u root
mysql> create database sample;
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000001 |      193 |              |                  |
+-------------------+----------+--------------+------------------+

バイナリログの番号

現状、mysqld-bin.000001だけだが、

$ ls
ib_logfile0  ib_logfile1  ibdata1  mysql  mysql.sock  mysqld-bin.000001  mysqld-bin.index  sample  test

再起動すると、

$ sudo service mysqld restart

mysqld-bin.000002が生成される。

$ ls
ib_logfile0  ib_logfile1  ibdata1  mysql  mysql.sock  mysqld-bin.000001  mysqld-bin.000002  mysqld-bin.index  sample  test

この番号は、MySQLが再起動したり、
設定のmax_binlog_size(デフォルト1GB)のサイズに達したりすると
次の番号に切り替わるみたい。