Hướng dẫn sử dụng Procedure Mysql trên Cpanel

  • Monday 01/06/2020

Hiện Cpanel đã hỗ trợ đầy đủ quyền (PRIVILEGES) bao gồm CREATE ROUTINE, ALTER ROUTINE, và EXECUTE để sử dụng Procedure cho user database Mysql.

Tuy nhiên, người sử dụng sẽ ở cấp độ Share Hosting sẽ không sử dụng được Procedure trong phpMyadmin, wesbite vì lý do như sau :

– Khi vào chức năng phpMyadmin trong hosting Cpanel để quản lý database. Session được ghi nhận login bằng tài khoản user host Cpanel ( không phải user database Mysql).
Khi khởi tạo mới Procedure hoặc import từ file .sql sẵn có thì những Procedure được tạo mới này sẽ có DEFINER theo dạng cpses_xxx@%.
Chính vì vậy mỗi lần login vào phpMyadmin sẽ có thông số Session khác nhau, DEFINER sẽ không giống nhau và sẽ không thể chỉnh sửa (Edit) hoặc thực thi (Execute) được những Procedure đã tạo ra trước đó nữa.

Cách giải quyết :
– Thao tác từ quyền root Cpanel ( nếu bạn không có quyền thì liên hệ với người quản trị Server). Vào phpMyadmin từ quyền root > vào database chứa Procedure > Chạy lệnh sau
show procedure status;

Xác định được các Procedure đang thuộc DEFINER nào, ví dụ : cpses_xxx@%
Sau đó chạy lệnh
UPDATE `mysql`.`proc` p SET definer = 'my_user_db@%' WHERE definer='cpses_xxx@%'
thay my_user_db bằng user database của bạn đã được tạo trong Cpanel dùng để kết nối database.

Test lại với Navicat hoặc Website sử dụng user database kết nối với Database chứa Procedure.

Lưu ý : Như đã nói ở phần trên, phpMyadmin trong Cpanel vẫn sẽ không chỉnh sửa (Edit) hoặc thực thi (Execute) được vì DEFINER của Procedure đang được set cố định theo my_user_db@% không phải dạng cpses_xxx@%.

Vấn đề đặt ra tiếp theo là làm sao sử dụng được việc chỉnh sửa và thực thi Procedure trên phpMyadmin.
Hướng giải quyết : Đăng nhập phpMyadmin bằng user/pass database mà không thông qua Cpanel
– Download phiên bản phpMyadmin mới nhất ( https://www.phpmyadmin.net/downloads/ )
– Upload lên hosting và giải nén trong thư mục gốc của host.
– Rename và sử dụng theo Link http://yourdomain.com/phpMyAdmin
Lúc này đăng nhập vào phpMyadmin bằng user database, khi đó sẽ tạo, sửa, thực thi được vớ các Procedure có DEFINER là my_user_db@localhost