Pendahuluan
Acara MySQL adalah tugas yang berjalan sesuai dengan jadwal yang ditentukan pengguna . Penjadwal Acara adalah utas khusus yang menjalankan Acara pada waktu yang dijadwalkan.
Acara MySQL sangat membantu karena memfasilitasi manajemen basis data dan tugas operasional basis data berkala.
Dalam tutorial ini, Anda akan mempelajari apa itu Peristiwa MySQL dan cara menyiapkan dan menggunakannya.
Prasyarat:
- Sistem yang menjalankan MySQL pada server database
- Akun pengguna MySQL dengan hak akses root
Apa itu Penjadwal Acara MySQL?
Penjadwal Acara MySQL adalah utas yang berjalan di latar belakang dan mengelola eksekusi acara terjadwal. Penjadwal dalam keadaan tidur kecuali variabel global event_scheduler
disetel ke ON
atau 1
.
Penjadwal Acara MySQL mewakili alternatif tugas Cron dari MySQL . Beberapa manfaat dari Penjadwal Acara adalah:
- Ditulis langsung di Server MySQL.
- Ini adalah platform dan aplikasi yang independen.
- Ini dapat digunakan kapan pun pembaruan atau pembersihan basis data reguler diperlukan.
- Ini mengurangi jumlah kompilasi kueri.
Konfigurasi Penjadwal Acara MySQL
Status Penjadwal Acara MySQL dapat dikonfigurasi untuk menyetel Penjadwal aktif , nonaktif , atau nonaktifkan itu.
Untuk memeriksa status Penjadwal Acara, jalankan perintah berikut:
SHOW processlist;
event_scheduler
variabel sistem yang ditampilkan dalam hasil menunjukkan keadaan Penjadwal Acara. Di sini, event_scheduler
status variabel Menunggu antrian kosong , yang berarti Penjadwal aktif dan menunggu peristiwa untuk memicunya.
Status yang mungkin adalah:
ON
:Utas Penjadwal Acara sedang berjalan dan mengeksekusi semua acara yang dijadwalkan. Ini adalah status default Penjadwal. Jika PenjadwalON
,SHOW processlist
keluaran perintah mencantumkannya sebagai proses daemon.
Untuk mengaktifkan Penjadwal Acara ON
, jalankan perintah berikut:
SET GLOBAL event_scheduler = ON;
Nilai ON
dapat dipertukarkan dengan 1
.
OFF
:Utas Penjadwal Acara tidak berjalan, dan tidak muncul di outputSHOW processlist
. Jika Penjadwal Acara diatur keOFF
, acara yang dijadwalkan tidak dieksekusi.
Untuk mematikan Penjadwal Acara OFF
, jalankan perintah berikut:
SET GLOBAL event_scheduler = OFF;
Nilai OFF
dapat dipertukarkan dengan 0
.
DISABLED
:Keadaan ini berarti bahwa Penjadwal Acara tidak beroperasi. Utas tidak berjalan, dan tidak muncul di outputSHOW processlist
perintah.
Untuk menonaktifkan Penjadwal Acara, tambahkan opsi baris perintah berikut saat memulai server:
--event-scheduler=DISABLED
Penjadwalan Acara MySQL
Event adalah objek database yang berisi pernyataan SQL yang dieksekusi pada waktu tertentu atau dalam interval reguler. Acara dimulai dan berakhir pada waktu dan tanggal tertentu.
Karena Peristiwa MySQL dijalankan pada waktu yang ditentukan pengguna, peristiwa ini juga disebut sebagai temporal pemicu . Namun, mereka tidak boleh tercampur dengan Pemicu MySQL, yang merupakan objek basis data yang dieksekusi sebagai respons terhadap peristiwa tertentu. Oleh karena itu, lebih baik menggunakan istilah peristiwa saat mengacu pada tugas terjadwal untuk menghindari kebingungan.
Bagian berikut membahas cara membuat , tampilkan , ubah atau hapus acara.
Buat Acara Baru
Untuk membuat acara baru, gunakan sintaks berikut:
CREATE EVENT [IF NOT EXIST] event_name
ON SCHEDULE schedule
DO
event_body
IF NOT EXIST
pernyataan memastikan bahwa nama acara unik untuk database yang digunakan. Tentukan nama acara unik sebagai pengganti event_name
sintaksis. Jadwal pelaksanaan acara ditentukan setelah ON SCHEDULE
penyataan. Acara ini bisa menjadi acara satu kali atau peristiwa yang berulang .
Masukkan pernyataan SQL sebagai pengganti event_body
sintaks setelah DO
kata kunci. Badan acara dapat berisi prosedur tersimpan, kueri tunggal, atau pernyataan majemuk. Tulis pernyataan majemuk dalam BEGIN END
blokir.
Jadwalkan Acara
Acara dapat dijadwalkan untuk pelaksanaan selanjutnya atau untuk pelaksanaan berkala.
Acara Sekali Pakai
Peristiwa satu kali dieksekusi hanya sekali dan kemudian dihapus secara otomatis.
Untuk membuat acara satu kali, tentukan stempel waktu setelah ON SCHEDULE
pernyataan menggunakan sintaks berikut:
AT timestamp + [INTERVAL interval]
Pilihan yang memungkinkan untuk interval adalah:
- TAHUN
- PEREMPAT
- BULAN
- HARI
- JAM
- MENIT
- MINGGU
- DUA
- YEAR_MONTH
- HARI_JAM
- DAY_MINUTE
- HARI_DETIK
- HOUR_MINUTE
- HOUR_SECOND
- MINUTE_SECOND
Stempel waktu harus DATETIME
atau TIMESTAMP
nilai di masa depan. Untuk menentukan waktu yang tepat, tambahkan interval ke stempel waktu menggunakan + INTERVAL
, bilangan bulat positif, dan salah satu pilihan interval. Perhatikan bahwa ini hanya berlaku saat menggunakan CURRENT_TIMESTAMP
fungsi.
Misalnya:
Di sini, acara terjadi dua hari sejak pembuatannya, dan tugasnya adalah menjatuhkan tabel bernama test .
Acara secara otomatis dijatuhkan setelah eksekusi. Jika Anda ingin menyimpan acara di database, tambahkan ON COMPLETION PRESERVE
klausa saat membuat acara.
Acara Berulang
Peristiwa berulang terjadi berulang kali pada waktu tertentu. Untuk menjadwalkan acara berulang, gunakan sintaks berikut setelah ON SCHEDULE
pernyataan:
EVERY interval
STARTS timestamp [+ INTERVAL]
ENDS timestamp [+ INTERVAL]
STARTS
kata kunci menentukan kapan eksekusi acara dimulai, sedangkan ENDS
kata kunci menentukan kapan eksekusi acara berhenti.
Misalnya:
Peristiwa ini menyebabkan MySQL menghentikan pengujian tabel setiap enam bulan sekali, segera dimulai.
Anda juga dapat menentukan interval untuk memulai acara nanti. Misalnya:
Anda juga dapat menentukan waktu mulai dan waktu berakhir untuk acara:
Peristiwa ini membuat MySQL menjatuhkan tabel bernama test setiap enam bulan sekali selama lima tahun, mulai lima hari dari sekarang.
Tampilkan Acara
Perintah berikut menampilkan semua kejadian yang disimpan dalam database:
SHOW EVENTS FROM database_name;
Perhatikan bahwa peristiwa satu kali secara otomatis dihapus setelah eksekusi dan tidak muncul di output SHOW EVENTS
perintah, kecuali jika Anda menggunakan ON COMPLETION PRESERVE
klausa saat membuat acara.
Outputnya mencantumkan semua kejadian yang disimpan dalam database yang ditentukan.
Ubah Acara
Gunakan ALTER EVENT
pernyataan untuk mengubah acara yang ada:
ALTER EVENT event_name
[ ON SCHEDULE schedule ]
[ RENAME TO new_event_name ]
[ ON COMPLETION [ NOT ] PRESERVE ]
[ COMMENT 'comment' ]
[ ENABLED | DISABLED ]
[ DO sql_statement ]
event_name
harus merupakan peristiwa yang sudah ada. Semua pernyataan setelah ALTER EVENT
adalah opsional, tergantung pada apa yang ingin Anda ubah. Menghilangkan klausa apa pun di ALTER EVENT
perintah berarti bahwa mereka tetap dalam keadaan sebelumnya. Setiap klausa yang disertakan berarti bahwa nilai baru yang Anda tentukan diterapkan.
Misalnya:
Dalam contoh ini, kami mengganti nama acara dan mengubah pernyataan SQL-nya.
Hapus Acara (Acara Berhenti)
Untuk menghapus (menjatuhkan) acara, gunakan sintaks berikut:.
DROP EVENT [IF EXISTS] event_name;
Misalnya:
Tindakan ini menghapus secara permanen acara dari database.
Menggunakan IF EXISTS
pernyataan mengeluarkan peringatan jika peristiwa seperti itu tidak ada:
Batasan Peristiwa MySQL
Ada batasan tertentu yang perlu dipertimbangkan saat menggunakan Acara MySQL. Beberapa di antaranya adalah:
- Acara tidak dapat mengembalikan kumpulan hasil. Outputnya diarahkan ke dev/null, dan acara tersebut gagal atau berhasil tanpa memberi tahu pengguna.
- Nama peristiwa tidak peka huruf besar/kecil. Dua peristiwa tidak boleh memiliki nama yang sama dengan kasus yang berbeda.
- Acara tidak dapat dijadwalkan setelah 19 Januari 2038 – maksimum yang dapat direpresentasikan dalam era Unix.
- Acara tidak dapat dibuat, dijatuhkan, atau diubah oleh program, pemicu, atau acara lain yang tersimpan.
- Acara tidak dapat membuat, menghapus, atau mengubah program atau pemicu yang tersimpan.
- Interval
MONTH
,YEAR_MONTH
,QUARTER
, danYEAR
diselesaikan dalam beberapa bulan. Semua interval lainnya diselesaikan dalam hitungan detik. - Mungkin ada dua acara dengan jadwal yang sama, tetapi tidak ada cara untuk memaksakan perintah eksekusi.
- Acara selalu berjalan dengan hak istimewa yang ditentukan. Utas mengeksekusi acara yang bertindak sebagai pengguna yang membuat acara, dengan hak istimewa pengguna tersebut. Perhatikan bahwa menghapus pengguna tidak menghapus acara yang dibuat pengguna.
- Peristiwa tidak mengubah hitungan eksekusi pernyataan, yang berarti tidak ada efek pada
SHOW STATISTICS
perintah. - Penundaan maksimum untuk mengeksekusi suatu peristiwa adalah dua detik. Namun, information_schema.events tabel selalu menampilkan waktu eksekusi acara yang akurat.
- Gunakan variabel yang ditentukan pengguna alih-alih referensi ke variabel lokal dalam pernyataan yang disiapkan di dalam rutin yang disimpan.
- Jumlah panggilan rekursif dibatasi hingga
max_sp_recursion_depth
. Jika variabel ini adalah 0, yang merupakan nilai default, rekursi akan dinonaktifkan. - Gunakan
START TRANSACTION
pernyataan alih-alihBEGIN WORK
, sejakBEGIN WORK
diperlakukan sebagai awal dariBEGIN END
blokir. - Keterbatasan lain dari prosedur tersimpan juga berlaku untuk acara.