گیک فارسی

نوشته های یک گیک فارسی از فعالیت ها ،‌ علاقه مندی ها و نقد هایش

خطای عجیب MySQL در زمان صدا زدن Stored Procedure

نویسنده:
12 مارس 14

من توی اکثر سرویس های Reseller که داشتم تعریف Stored Procedure ها معضل بوده و معمولاً دسترسی ایجاد نمیدهند یا باید در زمان تعریف ، Definer و تنظیمات دیگر Create Syntax را درست تنظیم کنید.

اما امروز با خطای عجیبی مواجه شدم که توضیحاتی را میدم شاید که راهگشای شخص دیگه ای باشه. خطا توی Log مربوط به php در زمان اجرای Stored Procedure این بود :

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)

خوب از خطا مشخصه اما توضیحش این هست که میگه چون Binary Logging را فعال کردین باید برای هر Procedure در زمان ایجاد تعیین کنین که آیا تغییری در Data های پایگاه میده (برای Rollback و این داستان‌ها مهم هستش) یا اصلاً SQL توش داره یا فقط دارین اطلاعات را با Select میخونین.

بعدش هم میگه میتونین با وجود امنیت پایینی که داره متغیر log_bin_trust_function_creators را استفاده کنین. که منظورش این هست که مقدارش را برابر ۱ بگذاریم تا این خطا را نگیریم.

در مورد مشکل من با توجه به اینکه من Reseller بودم یک Ticket زدم و چون زمان Up Time مربوط به MySQL را چک کرده بودم و گویا این‌ها سرویس MySQL را بروزرسانی کرده بودن و با این عدله که تا قبل از بروزرسانی همه چیز ok بوده. لطفاً اون متغیر را مقدارش را ۱ کنین که من دسترسی ندارم. دوستان خارجکی هم انجام دادند و مشکل من حل شد.

نکته : البته بهتر بود دسترسی کار با Stored Procedure ها را فعال میکردن و میگفتن برین مقادیر مورد نظر را برای هر Procedure تعیین کنید (No SQL یا READS SQL DATA).