Penggunaan log_bin_trust_function_creators di MySQL

14

Apa gunanya log_bin_trust_function_creators? Juga, Apakah nilai parameternya dinamis? Apakah akan berubah jika saya me-restart layanan MySQL saya?

tesla747
sumber

Jawaban:

12

Variabel ini mengontrol apakah pencatatan biner harus memercayai pencipta fungsi yang disimpan untuk tidak membuat fungsi tersimpan yang akan menyebabkan peristiwa yang tidak aman. Misalnya. memiliki fungsi UUID.

Ini telah dijelaskan dengan baik dalam dokumentasi:

Ketika Anda membuat fungsi tersimpan, Anda harus menyatakan bahwa itu bersifat deterministik atau tidak mengubah data. Kalau tidak, mungkin tidak aman untuk pemulihan atau replikasi data.

Secara default, agar pernyataan FUNGSI CREATE diterima, setidaknya satu dari DETERMINISTIC, NO SQL, atau READS SQL DATA harus ditentukan secara eksplisit. Kalau tidak, akan terjadi kesalahan:

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

Untuk mengendurkan kondisi sebelumnya pada pembuatan fungsi (bahwa Anda harus memiliki hak SUPER dan bahwa suatu fungsi harus dinyatakan deterministik atau untuk tidak mengubah data), atur variabel sistem log_bin_trust_function_creators global ke 1.

Referensi: dokumentasi mysql (baca ini sebagaimana dijelaskan dengan contoh.)

Tentang pertanyaan kedua Anda, apakah itu dinamis dan apakah akan berubah jika Anda me-restart server:

  • Ya itu adalah variabel dinamis.

  • Variabel akan berubah saat restart, jika Anda tidak memperbarui konfigurasi untuk mencerminkan perubahan.

Referensi: dokumentasi mysql-lagi

mysql_user
sumber
apakah itu mengambil nilai boolean? Benar diatur ke BENAR untuk saya .. apakah itu berarti '1'?
tesla747
mysql> select if(1 is true,'TRUE','FALSE')\G *************************** 1. row *************************** if(1 is true,'TRUE','FALSE'): TRUE
mysql_user
Ok saya mengerti itu. Tetapi apakah perlu untuk mengubahnya ke '1' terutama untuk parameter itu? Sekarang karena saya mengaturnya sebagai BENAR, ketika saya me-restart layanan mysql akan berubah lagi
tesla747
1
Betul! Jadi untuk membuatnya tetap, Anda harus meletakkan nilai konfigurasi yang sama di file my.cnf Anda juga.
mysql_user
1
@ tesla747 ya ... itu berlaku ketika pencatatan biner diaktifkan.
mysql_user