Saat melakukan pencadangan fisik pada sistem yang sering digunakan, kecepatan pencadangan mungkin tidak sesuai dengan keluaran perekaman ulang. Hal ini dapat terjadi jika penyimpanan cadangan lebih lambat daripada media cadangan yang dilaporkan ulang, dan ini dapat menyebabkan inkonsistensi dalam pencadangan.
MySQL Enterprise Backup (alias MEB) dan mungkin Percona Xtrabackup, memiliki kemampuan untuk menulis catatan pelaporan ulang berturut-turut dalam file arsip, selain file pendaftaran ulang.
Fitur ini diperkenalkan di MySQL 8.0.17.
Bagaimana cara mengaktifkannya?
Diperlukan dua pengaturan untuk mengaktifkan fitur ini:
- Siapkan direktori global tempat log yang diarsipkan dapat disimpan
- Mulai proses pengarsipan dalam satu sesi dengan memanggil fungsi khusus
Ini adalah variabel global innodb_redo_log_archive_dirs
.
Variabel ini harus mengandung Ditandai Direktori di mana laporan pengarsipan dapat disimpan. Format string dipisahkan oleh titik koma seperti ini:
innodb_redo_log_archive_dirs="label1:/backups1;label2:/backups2"
Pengguna sistem sedang berjalan mysqld
Harus memiliki akses ke direktori tersebut dan tidak dapat diakses oleh semua pengguna.
Arsip laporan ulang mulai menggunakan fungsi innodb_redo_log_archive_start()
Dan berhenti menggunakan innodb_redo_log_archive_stop()
. Hanya pengguna dengan INNODB_REDO_LOG_ARCHIVE
hak istimewa dapat memanggil fungsi-fungsi itu.
Penting untuk dicatat bahwa sesi MySQL yang memungkinkan pengarsipan repost harus tetap terbuka selama periode pengarsipan. Anda harus menonaktifkan arsip laporan ulang di sesi yang sama. Jika sesi berakhir sebelum arsip repost secara eksplisit dinonaktifkan, server secara implisit menonaktifkan arsip repost dan menghapus file arsip repost.
Mari kita lihat cara mengaktifkannya:
$ sudo mkdir -p /var/lib/mysql-redo-archive/backup1 $ sudo chown mysql. -R /var/lib/mysql-redo-archive $ sudo chmod -R 700 /var/lib/mysql-redo-archive/
Bahkan, siap tetapi tidak aktif, hanya ketika sesi dipanggil, biasanya sesi yang sama yang menghargai cadangan. innodb_redo_log_archive_start()
Benar-benar diaktifkan:
Apakah itu aktif?
Bagaimana kita bisa melihat apakah arsip coba lagi aktif?
Kami dapat memeriksa apakah MySQL menggunakan file arsip coba lagi:
select * from performance_schema.file_instances where event_name like '%::redo_log_archive_file'\G
Jika ada input, berarti proses arsip pelaporan ulang telah diaktifkan atau berhasil diaktifkan dan dihentikan menggunakan fungsi khusus:
Oleh karena itu, ini tidak cukup untuk memastikan bahwa arsip pelaporan ulang aktif. Tetapi kita dapat menggunakan kueri ini untuk memeriksa apakah subjeknya aktif:
select thread_id, name, type from threads where name like '%redo_log_archive%';
Jika baris dikembalikan, itu berarti arsip repost aktif dan aktif:
pesan eror
Berikut adalah beberapa pesan kesalahan Pengarsipan Redo Log yang umum:
ERROR: 3850 (HY000): Redo log archiving failed: Session terminated with active redo log archiving - stopped redo log archiving and deleted the file
. Kesalahan ini terjadi saat Anda mencoba menghentikan arsip repost dari sesi lain dan sesi yang memulainya berakhir.
ERROR: 3851 (HY000): Redo log archiving has not been started by this session
. Ini adalah saat sesi yang memulai proses masih terbuka dan Anda mencoba untuk menghentikan pengarsipan laporan ulang dari sesi lain.
ERROR: 3848 (HY000): Redo log archiving has been started on '/var/lib/mysql-redo-archive/backup2/archive.17f6a975-e2b4-11ec-b714-c8cb9e32df8e.000001.log' - Call innodb_redo_log_archive_stop() first
: Ini terjadi ketika Anda ingin memulai proses pengarsipan dan sudah ada item yang aktif.
ERROR: 3842 (HY000): Label 'backup2' not found in server variable 'innodb_redo_log_archive_dirs'
.: Ini adalah saat Anda ingin memulai arsip repost dan menggunakan tag yang tidak ditentukan. innodb_redo_log_archive_dirs
.
ERROR: 3846 (HY000): Redo log archive directory '/var/lib/mysql-redo-archive/backup2' is accessible to all OS users
: Ini adalah saat direktori dapat diakses oleh pengguna lain. Hanya pengguna yang menjalankan mysqld
Harus memiliki akses ke sana.
ERROR: 3844 (HY000): Redo log archive directory '/var/lib/mysql-redo-archive/backup3' does not exist or is not a directory
Ini adalah kesalahan yang sangat umum, yang terjadi ketika subdirektori tidak ada di direktori yang ditentukan oleh tag yang sesuai. innodb_redo_log_archive_dirs
. Dalam contoh ini, backup3
Tidak dibuat di /var/lib/mysql-redo-archive
.
ERROR: 3847 (HY000): Cannot create redo log archive file '/var/lib/mysql-redo-archive/backup3/archive.17f6a975-e2b4-11ec-b714-c8cb9e32df8e.000001.log' (OS errno: 13 - Permission denied)
: Ini mudah dimengerti, ada direktori dan subdirektori tetapi bukan milik pengguna yang sedang berjalan mysqld
(Biasanya mysql
).
Fungsi yang dapat dipanggil
Ada beberapa fungsi yang terkait dengan Pengarsipan Log Redo, kami telah menggunakan 2 di antaranya untuk memulai dan menghentikan proses. Daftar ini sebagai MySQL 8.0.29:
Dua fungsi terakhir digunakan oleh MEB dan tidak didokumentasikan dalam manual Server MySQL dan tidak ada alasan untuk menggunakannya sebagai pengguna biasa.
innodb_redo_log_archive_flush
Digunakan untuk menghapus antrian arsip laporan ulang.
innodb_redo_log_sharp_checkpoint
Sebuah pos pemeriksaan disebut log_make_latest_checkpoint(*log_sys)
Hasil
Meskipun belum populer, fitur ini wajib untuk beban kerja yang berat, ketika penyimpanan cadangan tidak memiliki kemampuan yang sama dengan penyimpanan produksi dan tidak dapat melacak kecepatan tulis.
Saat diaktifkan oleh DBA, MySQL Enterprise Backup menggunakannya secara otomatis. DBA dapat memeriksa untuk melihat apakah proses arsip pelaporan ulang telah dimulai dan masih aktif performance_schema.threads
Meja.