Topik ini menjelaskan cara memperoleh file log biner dari instance ApsaraDB RDS for MySQL secara remote serta menggunakan mysqlbinlog untuk menguraikannya.
Perhatikan hal-hal berikut:
Sebelum melakukan operasi berisiko tinggi seperti mengubah konfigurasi atau data instance Anda, pastikan untuk memeriksa kemampuan pemulihan bencana dan toleransi kesalahan instance guna memastikan keamanan data.
Sebelum mengubah konfigurasi atau data suatu instance, seperti instance Elastic Compute Service (ECS) atau instance ApsaraDB RDS, disarankan untuk membuat snapshot atau mengaktifkan cadangan. Sebagai contoh, Anda dapat mengaktifkan pencadangan log untuk instance ApsaraDB RDS.
Jika Anda telah memberikan izin pada informasi sensitif atau mengirimkan informasi sensitif di Konsol Manajemen Alibaba Cloud, segera modifikasi informasi sensitif tersebut. Informasi sensitif mencakup nama pengguna dan kata sandi.
Memperoleh file log biner
Pilih metode untuk memperoleh file log biner sesuai dengan kebutuhan bisnis Anda.
Metode 1: (Direkomendasikan) Unduh file log dari konsol ApsaraDB RDS
Instance RDS yang menggunakan disk cloud: Setelah mengaktifkan fitur pencadangan log untuk instance RDS yang menggunakan disk cloud, log biner akan diunggah atau direplikasi ke penyimpanan cadangan secara real-time dan disimpan sebagai file pencadangan log. Fitur ini diaktifkan secara default. Anda dapat mengunduh log biner pada titik waktu tertentu. Untuk informasi lebih lanjut, lihat tabel instance RDS yang menggunakan disk cloud dalam Metode Unduhan.
Instance RDS yang menggunakan Premium Local SSD: Untuk informasi lebih lanjut tentang cara mengunduh log biner dari instance tersebut, lihat tabel instance RDS yang menggunakan Premium Local SSD dalam Metode Unduhan.
Untuk informasi lebih lanjut tentang cara mengaktifkan fitur pencadangan log, lihat Prosedur.
Metode 2: Memperoleh file log biner secara remote
Hubungkan klien ke instance RDS.
PentingDisarankan menggunakan klien yang menjalankan versi MySQL yang sama dengan instance RDS tempat Anda ingin memperoleh file log biner.
Eksekusi Pernyataan SQL berikut untuk melihat dan mencatat nilai dari
Log_namedalam tabellogs. Nilai tersebut adalah nama file log biner, sepertimysql-bin.xxx.SHOW BINARY LOGS;Berikut adalah contoh keluaran.
mysql> SHOW BINARY LOGS; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000022 | 406039 | | mysql-bin.000023 | 71497 | +------------------+-----------+ 2 rows in set (0.01 sec)Gunakan nama file log biner yang diperoleh pada langkah sebelumnya untuk memperoleh file log biner secara remote dan simpan file tersebut ke perangkat lokal Anda.
Jalankan perintah berikut untuk keluar dari CLI MySQL dan masuk ke sistem operasi:
exit;Jalankan perintah berikut untuk memperoleh file log biner secara remote dan menyimpan file tersebut ke perangkat lokal Anda:
mysqlbinlog -u<$User> -p<$Password> -h<$Host> --read-from-remote-server --raw <mysql-bin.XXX>
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Deskripsi
-u<$User>Nama pengguna yang digunakan untuk terhubung ke server MySQL.
-p<$Password>Kata sandi yang digunakan untuk terhubung ke server MySQL.
-h<$Host>Titik akhir yang digunakan untuk terhubung secara remote ke instance RDS. Untuk informasi lebih lanjut, lihat Lihat dan kelola titik akhir dan port instance.
--read-from-remote-serverServer MySQL remote tempat
mysqlbinlogterhubung untuk memperoleh isi file log biner.--rawFormat mentah yang digunakan untuk menampilkan isi file log biner dalam keluaran perintah
mysqlbinlogsetelah penguraian.<mysql-bin.XXX>Nama file log biner yang perlu diuraikan. Anda perlu mengonfigurasi parameter ini berdasarkan hasil dari Langkah 2.
> [$File_Name]Nama file log biner yang diperoleh secara remote dan disimpan ke perangkat lokal Anda.
Jalankan perintah berikut untuk memeriksa apakah file log biner telah diperoleh:
more [$File_Name]
Gunakan mysqlbinlog untuk melihat file log biner
Masuk ke sistem operasi tempat klien MySQL diinstal dan jalankan perintah berikut untuk menggunakan mysqlbinlog guna melihat isi file log biner:
Disarankan menggunakan klien yang menjalankan versi MySQL yang sama dengan instance RDS tempat Anda ingin memperoleh file log biner.
mysqlbinlog -vv --base64-output=decode-rows <mysql-bin.XXX> | moreAnda dapat menulis isi file log biner yang diuraikan ke file untuk dilihat.
mysqlbinlog -vv --base64-output=decode-rows <mysql-bin.XXX> > [$File_Name]Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter | Deskripsi |
| Rincian keluaran, termasuk rincian tentang peristiwa yang diperoleh dari penguraian. |
| Menentukan bahwa pengkodean Base64 digunakan untuk mencatat entri log biner. |
| Nama file log biner yang perlu diuraikan. Ganti |
| Menentukan bahwa pipa digunakan untuk mengirim keluaran ke perintah |
| Nama file lokal tempat Anda ingin menulis isi file log biner yang diuraikan. |
Untuk informasi lebih lanjut tentang penguraian log biner, lihat Dokumentasi MySQL.
Keluaran serupa dikembalikan:
[root@iZbp****** ~]# mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000022 | more
# Istilah yang tepat adalah pseudo_replica_mode, tetapi kami menggunakan alias kompatibilitas ini
# untuk membuat pernyataan dapat digunakan pada versi server 8.0.24 dan yang lebih lama.
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#230911 9:27:28 server id 26718053 end_log_pos 123 CRC32 0xa231cb44 Start: binlog v 4, server v 5.7.42-log created 230911 9:27:28
# at 123
#230911 9:27:28 server id 26718053 end_log_pos 194 CRC32 0x078b6dc1 Previous-GTIDs
# a63b4ed1-4c86-11ee-9029-00163e157053:1-27339
# at 194
#230911 9:27:32 server id 26718053 end_log_pos 259 CRC32 0x59b848c3 GTID last_committed=0 sequence_number=1 rbr_only=yes original_committed_ti
mestamp=0 immediate_commit_timestamp=0 transaction_length=0
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# original_commit_timestamp=0 (1970-01-01 08:00:00.000000 CST)
# immediate_commit_timestamp=0 (1970-01-01 08:00:00.000000 CST)
/*!80001 SET @@session.original_commit_timestamp=0*//*!*/;
/*!80014 SET @@session.original_server_version=0*//*!*/;
/*!80014 SET @@session.immediate_server_version=0*//*!*/;
SET @@SESSION.GTID_NEXT= 'a63b4ed1-4c86-11ee-9029-00163e157053:27340'/*!*/;
# at 259
#230911 9:27:32 server id 26718053 end_log_pos 327 CRC32 0xc0dddaec Query thread_id=16849 exec_time=0 error_code=0
SET TIMESTAMP=1694395652/*!*/;
SET @@session.pseudo_thread_id=16849/*!*/;
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 utf8mb3 *//*!*/;
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/*!*/;
BEGINFAQ
Berikut ini menjelaskan kesalahan umum yang mungkin terjadi saat menggunakan mysqlbinlog.
Jika kesalahan berikut terjadi, periksa versi mysqlbinlog. Misalnya, jika Anda menggunakan mysqlbinlog 3.3 dan mengalami kesalahan berikut, Anda dapat menggunakan mysqlbinlog 3.4 untuk melihat isi file log biner karena kesalahan ini diselesaikan di mysqlbinlog 3.4. Jika kesalahan ini terjadi, gunakan versi mysqlbinlog yang lebih baru untuk melihat isi file log biner.
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.Jika Anda menggunakan mysqlbinlog untuk melihat isi file log biner tetapi parameter
--base64-output=decode-rowstidak digunakan, keluarannya adalah konten yang belum diuraikan.
Jika kesalahan berikut terjadi, periksa apakah parameter
default-character-set=utf8mb4ada dalam file konfigurasimy.cnf. Jika parameter tersebut ada, tambahkan parameter--no-defaultsuntuk mencegah kesalahan ini. Contoh:mysqlbinlog --no-defaults -u[$User] -p[$Password] -h[$Host] --read-from-remote-server mysql-bin.XXX > [$File_Name].mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8mb4'Jika waktu log biner yang diuraikan oleh perintah
mysqlbinlogberbeda dari waktu sebenarnya, periksa apakah zona waktu lingkungan tempat perintahmysqlbinlogdijalankan sama dengan zona waktu database ApsaraDB RDS for MySQL Anda.Dalam MySQL, informasi waktu log biner disimpan sebagai timestamp UNIX yang tidak mencakup informasi zona waktu. Oleh karena itu, waktu yang diuraikan oleh perintah
mysqlbinlogdikonversi berdasarkan zona waktu lokal lingkungan tempat perintah tersebut dijalankan. Jika zona waktu lingkungan berbeda dari zona waktu instance RDS for MySQL, waktu yang diuraikan tidak sesuai dengan waktu sebenarnya.
Cakupan aplikasi
ApsaraDB RDS for MySQL