Topik ini menjelaskan cara mendapatkan log biner dari instans Alibaba Cloud RDS for MySQL dari jarak jauh dan menguraikannya menggunakan utilitas mysqlbinlog.
Sebelum melakukan operasi berisiko, seperti mengubah konfigurasi atau data instans, pastikan instans Anda memiliki ketahanan terhadap bencana dan kesalahan guna melindungi data Anda.
Jika Anda mengubah konfigurasi atau data instans—misalnya instans ECS atau RDS—buat snapshot atau aktifkan log backup untuk instans RDS terlebih dahulu.
Jika Anda telah memberikan izin atau mengirimkan informasi sensitif (seperti username dan password) di platform Alibaba Cloud, segera ubah informasi tersebut.
Mendapatkan log biner
Metode 1: Unduh dari Konsol RDS
-
Instans yang menggunakan cloud disk: Setelah Anda mengaktifkan fitur log backup (yang diaktifkan secara default), log lokal (log biner) diunggah atau disalin ke ruang penyimpanan backup secara real time untuk membentuk cadangan log. Anda dapat mengunduh cadangan log untuk titik waktu yang diinginkan. Untuk informasi selengkapnya, lihat Unduh dari instans cloud disk.
-
Instans yang menggunakan high-performance local disk: Untuk informasi selengkapnya, lihat Unduh dari instans high-performance local disk.
Untuk mempelajari cara mengaktifkan log backup, lihat Mencadangkan instans Alibaba Cloud RDS for MySQL.
Metode 2: Mendapatkan log biner dari jarak jauh
Hubungkan ke instans Alibaba Cloud RDS for MySQL.
PentingVersi klien MySQL harus sesuai dengan versi instans RDS.
Jalankan pernyataan
SHOW BINARY LOGS;untuk melihat nama file log biner. Catat nama file yang Anda perlukan, misalnyamysql-bin.xxx, dari kolomLog_name.SHOW BINARY LOGS;Output serupa berikut dikembalikan:
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 dari langkah sebelumnya untuk mendapatkan log biner dari jarak jauh dan menyimpannya secara lokal.
Jalankan perintah berikut untuk keluar dari CLI MySQL dan kembali ke sistem operasi:
exit;Jalankan perintah berikut untuk mendapatkan log biner dari jarak jauh dan menyimpannya ke mesin 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>Username yang digunakan untuk menghubungkan ke server MySQL.
-p<$Password>Password yang digunakan untuk menghubungkan ke server MySQL.
-h<$Host>Titik akhir instans Alibaba Cloud RDS. Untuk mempelajari cara menemukan titik akhir, lihat Melihat titik akhir dan nomor port instans Alibaba Cloud RDS for MySQL.
--read-from-remote-serverMenghubungkan ke server MySQL remote yang ditentukan untuk mendapatkan log biner.
--rawSaat digunakan bersama
--read-from-remote-server, opsi ini menyebabkanmysqlbinlogmenulis log biner ke file lokal dalam format aslinya.<mysql-bin.XXX>Nama file log biner yang akan didapatkan, sebagaimana diidentifikasi pada langkah 2.
Menampilkan file log biner menggunakan mysqlbinlog
Jalankan perintah mysqlbinlog berikut untuk melihat isi file log biner.
Versi klien MySQL harus sesuai dengan versi instans RDS.
mysqlbinlog -vv --base64-output=decode-rows <mysql-bin.XXX> | moreUntuk menyimpan konten hasil penguraian guna ditinjau, tulis output ke file.
mysqlbinlog -vv --base64-output=decode-rows <mysql-bin.XXX> > [$File_Name]Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter | Deskripsi |
| Menampilkan output detail, termasuk konten lengkap untuk setiap event yang diurai. |
| Mencetak event baris log biner dalam bentuk yang telah didekode. |
| Nama file log biner yang akan diurai. Ganti |
| Mengarahkan output ke perintah |
| File lokal tempat konten hasil penguraian ditulis. |
Untuk informasi lebih lanjut tentang penguraian log biner, lihat dokumentasi resmi MySQL.
Output serupa berikut dikembalikan:
[root@iZbp****** ~]# mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000022 | more
# The proper term is pseudo_replica_mode, but we use this compatibility alias
# to make the statement usable on server versions 8.0.24 and older.
/*!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
Bagian ini menjelaskan masalah umum saat menggunakan utilitas mysqlbinlog.
Jika Anda menerima error berikut, periksa versi utilitas
mysqlbinlogAnda. Error ini, yang mungkin terjadi pada versi 3.3, telah diperbaiki pada versi 3.4. Untuk mengatasinya, gunakan versimysqlbinlogyang lebih baru.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 tidak menentukan parameter
--base64-output=decode-rowssaat menjalankanmysqlbinlog, output tetap dalam bentuk terenkripsi.
Jika Anda menerima error ini, periksa apakah file konfigurasi
my.cnfAnda berisi bidangdefault-character-set=utf8mb4. Jika iya, tambahkan parameter--no-defaultske perintah Anda untuk mengatasi error tersebut. 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 timestamp dalam log hasil penguraian tidak tepat, verifikasi bahwa zona waktu lingkungan lokal Anda sesuai dengan zona waktu database.
Log biner MySQL menyimpan timestamp dalam format Unix time tanpa data zona waktu. Perintah
mysqlbinlogmengonversi timestamp tersebut menggunakan zona waktu lokal sistem tempat perintah tersebut dijalankan. Ketidaksesuaian zona waktu antara lingkungan klien dan server database akan menghasilkan timestamp yang salah dalam output.
Berlaku untuk
Alibaba Cloud RDS for MySQL