Gunakan mysqlbinlog untuk mengunduh file log biner dari kluster PolarDB for MySQL secara remote dan menguraikannya secara lokal guna keperluan auditing data, pemulihan pada titik waktu (point-in-time recovery), atau troubleshooting replikasi.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Mengaktifkan binary logging untuk kluster PolarDB for MySQL. Binary logging dinonaktifkan secara default. Tanpa fitur ini, perintah
SHOW BINARY LOGS;akan mengembalikan pesanYou are not using binary logging. Mengaktifkan atau menonaktifkan binary logging memicu restart kluster secara otomatis—lakukan perubahan ini selama jam sepi dan pastikan aplikasi Anda dapat terhubung kembali secara otomatis.Klien MySQL yang terinstal di server lokal Anda.
Titik akhir kluster (privat atau publik). Lihat Mengelola Titik Akhir Kluster.
Memiliki akun database untuk kluster PolarDB for MySQL. Lihat Membuat dan mengelola akun database.
Cara kerja
Node yang menyediakan log biner bergantung pada titik akhir yang Anda gunakan untuk koneksi:
| Metode koneksi | Log biner disediakan dari |
|---|---|
| Titik akhir primary, titik akhir kluster default, atau titik akhir kluster kustom yang dikaitkan dengan node primary | Node primary |
| Titik akhir kluster kustom yang hanya dikaitkan dengan node read-only | Salah satu node read-only |
Mengunduh log biner dari node read-only memerlukan:
PolarDB for MySQL 8.0, versi revisi 8.0.1.1.12 atau lebih baru
PolarDB for MySQL 5.7, versi revisi 5.7.1.0.12 atau lebih baru
Jika persyaratan versi tidak terpenuhi, mysqlbinlog akan mengembalikan pesan Only allow to dump binary log file on primary instance. Lihat Peningkatan versi minor untuk melakukan upgrade.
Mengunduh file log biner
Lakukan koneksi ke kluster PolarDB dari client MySQL. Lihat Koneksi database.
root@xxx:~# mysql -h xxx-polardb.rwlb.rds.aliyuncs.com -P3306 -utest_api -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is xxx Server version: 8.0.13 Source distribution Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>Tampilkan daftar file log biner yang tersedia:
SHOW BINARY LOGS;Output menampilkan nama dan ukuran setiap file log:
+------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000005 | 2639 | +------------------+-----------+ 1 row in set (0.00 sec)Catat nilai
Log_name—gunakan nilai ini pada langkah berikutnya.Keluar dari client MySQL:
exitJalankan mysqlbinlog untuk mengunduh file log biner ke server lokal Anda. Format perintah:
Parameter:
Parameter Deskripsi --read-from-remote-serverWajib digunakan. Melakukan koneksi ke kluster sebagai client replikasi untuk mengalirkan log biner dari jarak jauh. --host/-hTitik akhir pribadi atau publik kluster. Gunakan titik akhir pribadi jika kluster dan server Anda berada dalam wilayah dan virtual private cloud (VPC) yang sama; jika tidak, gunakan titik akhir publik. Jika titik akhir menggunakan port non-default, tambahkan nomor port setelah alamat titik akhir. --user/-uNama akun database kluster PolarDB for MySQL. --password/-pPassword akun. Kosongkan nilainya agar diminta memasukkannya secara interaktif setelah menjalankan perintah. --rawMenyimpan log biner dalam format biner aslinya, bukan mengonversinya ke teks. mysql-bin.<log-number>Nama file log biner dari bidang Log_namepada langkah 2.mysqlbinlog -u<Username> -p<Password> -h<Endpoint> --read-from-remote-server --raw mysql-bin.******Contoh:
mysqlbinlog -utest_api -p -htest-polardb.rwlb.rds.aliyuncs.com --read-from-remote-server --raw mysql-bin.000005mysql> exit Bye root@xxx:~# mysqlbinlog -utest_api -p -hxxx-polardb.rwlb.rds.aliyuncs.com --read-from-remote-server --raw mysql-bin.000005 Enter password: root@xxx:~#
Menampilkan dan mengurai file log biner
Jalankan mysqlbinlog pada file yang telah diunduh untuk mendekode dan melihat isinya:
mysqlbinlog -vv --base64-output=decode-rows mysql-bin.<log-number> | more-vv: menampilkan pernyataan SQL dan perubahan tingkat baris secara detail--base64-output=decode-rows: mendekode event baris yang dienkripsi base64 menjadi SQL yang dapat dibaca
Output menampilkan isi terdekripsi dari setiap event dalam file log biner:
[root@iZ ~]# mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000110 | more
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#160217 23:04:37 server id 2802943055 end_log_pos 107 Start: binlog v 4, server v 5.5.18.1-log created 160217 23:04:37
# at 107
#160217 23:04:38 server id 2802943055 end_log_pos 171 Query thread id=584632 exec time=0 error code=0
SET TIMESTAMP=1455721478/*!*/;
SET @@session.pseudo_thread_id=584632/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=2097152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 171Gunakan versi MySQL yang sama dengan versi mesin database kluster PolarDB untuk menghindari kesalahan penguraian.
Untuk sintaksis dan opsi lengkap mysqlbinlog, lihat dokumentasi MySQL.
FAQ
Mengapa SHOW BINARY LOGS mengembalikan "You are not using binary logging"?
Binary logging dinonaktifkan secara default. Aktifkan binary logging untuk kluster tersebut dan coba lagi.
Mengaktifkan atau menonaktifkan binary logging memicu restart kluster secara otomatis.
Mengapa mysqlbinlog gagal dengan kesalahan sanity check atau checksum?
ERROR: Error in Log_event::read_log_event(): 'Sanity check failed', data_len: 151, event_type: 35
ERROR: Could not read entry at offset 120: Error in log format or read error.
ERROR: Got error reading packet from server: 'Slave can not handle replication events with the checksum that master is configured to log;Versi mysqlbinlog Anda terlalu lama. Lakukan upgrade ke versi yang lebih baru—misalnya, jika Anda menggunakan V3.3, upgrade ke V3.4.
Mengapa mysqlbinlog gagal dengan pesan "Lost connection to MySQL server"?
ERROR: Failed on connect: Lost connection to MySQL server at 'reading initial communication packet', system error: 104Periksa hal-hal berikut:
Konektivitas jaringan: Pastikan Anda dapat mengakses titik akhir kluster dari server Anda.
Daftar putih IP: Pastikan alamat IP server Anda telah ditambahkan ke daftar putih kluster. Lihat Mengonfigurasi daftar putih IP.
Pengaturan database: Periksa apakah server MySQL lokal Anda dapat terhubung ke database dan pastikan Anda dapat mengakses database tersebut dengan sukses.
Mengapa isi file log biner tidak didekode?
Jika Anda menjalankan mysqlbinlog tanpa parameter --base64-output=decode-rows, event baris akan ditampilkan sebagai string base64 mentah:
Berikut adalah contoh output log biner yang belum didekode ketika --base64-output=decode-rows tidak digunakan. Pernyataan BINLOG berisi data terenkripsi base64 yang belum diurai:
[root@iz ~]# mysqlbinlog -vv mysql-bin.000110 | more
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#160217 23:04:37 server id 2802943055 end_log_pos 107 Start: binlog v 4, server v 5.5.18.1-log created 160217 23:04:37
BINLOG '
BYzEVg9PhBGnZwAAAGsAAAAAAAAQANS41LjE4LjEtbG9nAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAAA==
'/*!*/;
# at 107
#160217 23:04:38 server id 2802943055 end_log_pos 171 Query thread_id=584632 exec_time=0 error_code=0Selalu sertakan parameter --base64-output=decode-rows saat melihat file log biner.
Mengapa muncul pesan "Only allow to dump binary log file on primary instance" saat terhubung ke node read-only?
Versi kluster Anda tidak memenuhi persyaratan minimum untuk mengakses log biner dari node read-only. Lakukan upgrade ke PolarDB for MySQL 8.0 revisi 8.0.1.1.12 atau lebih baru, atau PolarDB for MySQL 5.7 revisi 5.7.1.0.12 atau lebih baru. Lihat Peningkatan versi minor.
Mengapa log biner dari node read-only kadang tertinggal dari node primary?
Node primary mereplikasi file log biner ke node read-only secara asinkron. Jika terjadi latensi sinkronisasi, node read-only mungkin belum memiliki file log yang paling baru ditulis. Hal ini biasanya berlangsung singkat jika volume datanya kecil.
Mengapa file log biner yang sudah kedaluwarsa tidak dihapus setelah periode retensi binlog_expire_logs_seconds?
Jika thread node read-only sedang aktif membaca file tersebut saat masa berlakunya habis, sistem akan menahannya hingga proses baca selesai. Setelah node primary menulis file log biner baru, sistem akan memeriksa file yang sudah kedaluwarsa dan tidak lagi sedang dibaca, lalu menghapusnya.