MySQL : Binary Logs Management

Prakata Binary Logs

MySQL sebagai database server, tidak lepas dari risiko-risiko masalah data. Risiko tersebut antara lain : kehilangan data, putus koneksi data, dan sejenisnya. Oleh karena itu MySQL memiliki fitur manajemen risiko data, salah satunya adalah dengan adanya Binary Logs. Binary Logs didesain untuk menyimpan seluruh data transaksional MySQL, baik sifatnya view (SELECT), hingga DELETE. Dalam operasionalnya, binary logs akan disimpan dalam sebuah file yang defaultnya berekstensi .bin. Lokasinya ada di datadir mysql. (Jika di linux defaultnya di /var/lib/mysql).

[bimo@wedhus ~]$ ls /var/lib/mysql/ -alh
total 6.8G
drwxr-xr-x 16 mysql mysql 4.0K Mar 1 06:45 .
drwxr-xr-x. 19 root root 4.0K Mar 1 04:02 ..
-rw-rw---- 1 mysql mysql 746M Mar 1 10:16 ibdata1
-rw-rw---- 1 mysql mysql 5.0M Mar 1 10:16 ib_logfile0
-rw-rw---- 1 mysql mysql 5.0M Mar 1 10:16 ib_logfile1
drwx------ 2 mysql mysql 4.0K Aug 16 2017 mysql
-rw-rw---- 1 mysql mysql 201M Feb 22 06:45 mysql-bin.001047
-rw-rw---- 1 mysql mysql 202M Feb 22 12:30 mysql-bin.001048
-rw-rw---- 1 mysql mysql 202M Feb 22 18:05 mysql-bin.001049
-rw-rw---- 1 mysql mysql 201M Feb 22 23:55 mysql-bin.001050
-rw-rw---- 1 mysql mysql 35M Feb 23 01:00 mysql-bin.001051
-rw-rw---- 1 mysql mysql 201M Feb 23 06:45 mysql-bin.001052
-rw-rw---- 1 mysql mysql 201M Feb 23 12:35 mysql-bin.001053
-rw-rw---- 1 mysql mysql 202M Feb 23 18:25 mysql-bin.001054
-rw-rw---- 1 mysql mysql 201M Feb 24 00:15 mysql-bin.001055
-rw-rw---- 1 mysql mysql 23M Feb 24 01:00 mysql-bin.001056
-rw-rw---- 1 mysql mysql 201M Feb 24 06:45 mysql-bin.001057
-rw-rw---- 1 mysql mysql 201M Feb 24 12:35 mysql-bin.001058
-rw-rw---- 1 mysql mysql 202M Feb 24 18:25 mysql-bin.001059

 

Bagaimana cara mengaktifkan Binary Logs?

Cara mengaktifkan Binary Logs adalah dengan mengaktifkannya pada file konfigurasi mysql. Untuk CentOS, pengaktifannya di /etc/my.cnf. Untuk Ubuntu/Debian, dapat lewat /etc/mysql/mysql.conf.d/mysqld.cnf. Ada beberapa baris yang perlu disetting untuk pengaktifan binary logs.

log-bin=mysql-bin
max_binlog_size=200M
expire_logs_days=7

Bagian log-bin, adalah untuk mengaktifkan binary logs dengan suatu nama : misal mysql-bin. Max_binlog_size adalah besarnya tiap binary logs. Setelah angka max tercapai, mysql akan membuat binary logs lain dengan nama angka index binary logs. Misal mysql-bin.001080, dan seterusnya. Expiry logs days adalah maksimal binary logs boleh tinggal di server. Setelah lebih dari sekian hari, akan dihapus.

 

Bagaimana cara membaca Binary Logs?

MySQL memiliki cara membaca binary logs dengan perintah mysqlbinlog. Caranya adalah dengan perintah :

mysqlbinlog namafile.bin.xxxx

Misal :

mysqlbinlog /var/lib/mysql/mysql.bin.000060

Screenshot from 2019-03-01 10-46-39

 

 

MySQL Binary Logs Index

MySQL melakukan indexing binary logs (pengurutan), pada sebuah file yang diletakkan pada direktori yang sama dengan binlog. Yaitu di datadir. File tersebut biasanya bernama : mysql-bin.index. File tersebut berupa text, sehingga dapat dibaca begitu saja dengan editor text. Misal, punya saya :

cat /var/lib/mysql/wedhus.bin.index

./wedhus.bin.000060
./wedhus.bin.000061
./wedhus.bin.000062

Data tersebut juga dapat dicocokkan dengan melihat data binary logs via mysql command :

mysql> show binary logs;

Contoh:

mysql> show binary logs;
+-------------------+------------+
| Log_name | File_size |
+-------------------+------------+
| wedhus.bin.000060 | 875667866 |
| wedhus.bin.000061 | 1073741946 |
| wedhus.bin.000062 | 179279083 |
+-------------------+------------+
3 rows in set (0.00 sec)

 

Tentu, pada direktori data, juga akan ada nama file tersebut :

[root@wedhus ~]# ls -al /var/lib/mysql/ | grep bin
-rw-rw---- 1 mysql mysql 875667866 Feb 16 09:59 wedhus.bin.000060
-rw-rw---- 1 mysql mysql 1073741946 Feb 27 16:05 wedhus.bin.000061
-rw-rw---- 1 mysql mysql 179328432 Mar 1 11:01 wedhus.bin.000062
-rw-rw---- 1 mysql mysql 60 Feb 27 16:05 mahesa-bin.index

Sebagai backup data aktif, binary logs, hanya akan berjalan pada satu file aktif. Bagaimana cara melihat file binary logs yang saat ini sedang digunakan?

mysql> show master status;

+-------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+-----------+--------------+------------------+
| wedhus.bin.000062 | 179322683 | | |
+-------------------+-----------+--------------+------------------+
1 row in set (0.00 sec)

 

Restore Data Binary Logs

Sebagai data backup, tentu backup ini bisa direstore kembali (dimasukkan ke dalam sistem database kembali), saat backup ini dibutuhkan. Bagaimana cara merestore binary logs? Langkah pertama adalah backup lebih dulu database yang ada. Selanjutnya dapat digunakan perintah :

mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p

Misal, punya saya, saya ingin mengembalikan posisi data per tanggal kemarin, maka saya akan cari binary logs tanggal kemarin, dan akan saya lakukan

mysqlbinlog wedhus.bin.000061 | mysql -u root -p

 

Bagaimana cara menghapus Binary Logs?

Binary Logs, tidak boleh dihapus langsung dari struktur file. Jangan menggunakan rm -f /var/lib/mysql/mysql.bin.00002 . Ada cara yang lebih prosedural untuk menghapus. Caranya adalah dengan menggunakan perintah mysql:

mysql> purge binary logs to 'namabinterakhir';

Misal punya saya,

mysql> purge binary logs to 'wedhus.bin.000062';

Biasanya yang disisakan adalah binary logs yang aktif pada master status. Untuk auto hapus, dapat menggunakan cara yang sudah disebut di atas, yaitu dengan menentukan maksimal umur Binlog di server. Dengan cara menambahkan

expire_logs_days=7

Maka binary logs yang lebih lama dari 7 hari akan dihapus oleh MySQL.

 

 

Nah demikian dulu. Semoga bermanfaat. Segala masukan, dipersilakan.

Leave a Reply

Your email address will not be published. Required fields are marked *