Ada dua cara untuk memperbaikinya:
Jalankan perintah berikut di konsol MySQL:
SET GLOBAL log_bin_trust_function_creators = 1;
Tambahkan berikut ini ke file konfigurasi mysql.ini:
log_bin_trust_function_creators = 1;
Pengaturan melonggarkan pemeriksaan fungsi non-deterministik. Fungsi non-deterministik adalah fungsi yang mengubah data (yaitu memiliki pernyataan pembaruan, menyisipkan atau menghapus). Untuk info lebih lanjut, lihat di sini .
Harap dicatat, jika logging biner TIDAK diaktifkan, pengaturan ini tidak berlaku.
Pencatatan Biner Program Tersimpan
Jika logging biner tidak diaktifkan, log_bin_trust_function_creators tidak berlaku.
log_bin_trust_function_creators
Variabel ini berlaku saat logging biner diaktifkan.
Pendekatan terbaik adalah pemahaman yang lebih baik dan penggunaan deklarasi deterministik untuk fungsi yang disimpan. Deklarasi ini digunakan oleh MySQL untuk mengoptimalkan replikasi dan merupakan hal yang baik untuk memilihnya dengan hati-hati agar replikasi yang sehat.
DETERMINISTIC
Sebuah rutinitas dianggap “deterministik” jika selalu menghasilkan hasil yang sama untuk parameter input yang sama dan BUKAN DETERMINISTIK sebaliknya. Ini sebagian besar digunakan dengan string atau pemrosesan matematika, tetapi tidak terbatas pada itu.
NOT DETERMINISTIC
Berlawanan dengan "DETERMINISTIC". " Jika DETERMINISTIC atau NOT DETERMINISTIC tidak diberikan dalam definisi rutin, defaultnya adalah NOT DETERMINISTIC. Untuk menyatakan bahwa suatu fungsi bersifat deterministik, Anda harus menentukan DETERMINISTIC secara eksplisit. ". Jadi nampaknya jika tidak ada pernyataan yang dibuat, MySQl akan memperlakukan fungsi tersebut sebagai "NOT DETERMINISTIC". Pernyataan dari manual ini bertentangan dengan pernyataan lain dari area manual lain yang mengatakan bahwa: "Saat Anda membuat fungsi tersimpan, Anda harus menyatakan bahwa itu deterministik atau tidak mengubah data. Jika tidak, ini mungkin tidak aman untuk pemulihan atau replikasi data. Secara default, agar pernyataan CREATE FUNCTION diterima, setidaknya salah satu dari DETERMINISTIC, NO SQL, atau READS SQL DATA harus ditentukan secara eksplisit. Jika tidak, terjadi kesalahan "
Saya pribadi mendapat kesalahan di MySQL 5.5 jika tidak ada deklarasi, jadi saya selalu meletakkan setidaknya satu deklarasi "DETERMINISTIC", "NOT DETERMINISTIC", "NO SQL" atau "READS SQL DATA" terlepas dari deklarasi lain yang mungkin saya miliki.
MEMBACA DATA SQL
Ini secara eksplisit memberitahu MySQL bahwa fungsi HANYA akan membaca data dari database, jadi, tidak berisi instruksi yang mengubah data, tetapi berisi instruksi SQL yang membaca data (eq SELECT).
MODIFIKASI DATA SQL
Ini menunjukkan bahwa rutinitas berisi pernyataan yang dapat menulis data (misalnya, berisi instruksi UPDATE, INSERT, DELETE atau ALTER).
NO SQL
Ini menunjukkan bahwa rutinitas tidak berisi pernyataan SQL.
BERISI SQL
Ini menunjukkan bahwa rutinitas berisi instruksi SQL, tetapi tidak berisi pernyataan yang membaca atau menulis data. Ini adalah default jika tidak ada dari karakteristik ini yang diberikan secara eksplisit. Contoh pernyataan tersebut adalah SELECT NOW (), SELECT 10 + @ b, SET @x = 1 or DO RELEASE_LOCK ('abc'), yang mengeksekusi tetapi tidak membaca atau menulis data.
Perhatikan bahwa ada fungsi MySQL yang tidak deterministik safe, seperti: NOW (), UUID (), dll, yang kemungkinan besar akan menghasilkan hasil yang berbeda pada mesin yang berbeda, sehingga fungsi pengguna yang berisi instruksi tersebut harus dinyatakan TIDAK MENENTUKAN . Selain itu, fungsi yang membaca data dari skema yang tidak direplikasi jelas-jelas NONDETERMINISTIC. *
Penilaian sifat rutinitas didasarkan pada "kejujuran" penciptanya: MySQL tidak memeriksa bahwa rutin yang dinyatakan DETERMINISTIC bebas dari pernyataan yang menghasilkan hasil nondeterministik. Namun, salah menyatakan rutinitas dapat memengaruhi hasil atau memengaruhi kinerja. Menyatakan rutinitas nondeterministik sebagai DETERMINISTIC dapat menyebabkan hasil yang tidak diharapkan karena menyebabkan pengoptimal membuat pilihan rencana eksekusi yang salah. Menyatakan rutinitas deterministik sebagai NONDETERMINISTIC dapat mengurangi kinerja dengan menyebabkan pengoptimalan yang tersedia tidak digunakan.