J'ai du mal "définitivement" S pour certains déclencheurs dans MySQL (en fait Mariadb). J'ai pensé que le moyen le plus simple de les corriger serait une version de:
use information_schema;
update triggers set definer=current_user() where trigger_schema='foobar';
Cela produit:
ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'information_schema'
Dans la même session, je peux laisser tomber et recréer les déclencheurs avec "déclencheur de goutte" et "créer un déclencheur", donc je ne comprends pas le problème des autorisations. Y a-t-il un privilège que mon utilisateur a besoin de cela que cela n'a pas?
Ce que vous faites est impossible car la base de données INFORMATION_SCHEMA est une base de données composée de tables temporaires en lecture seule en mémoire (voir mon message Comment Information_schema implémentée dans MySQL? )
Vous allez devoir laisser tomber les déclencheurs et les recréer
J'ai écrit un post à ce sujet avant (Oct 02, 2011
: CAN Les déclencheurs et les procédures de MySqldump? )
Voici ce que vous pouvez faire pour tous les déclencheurs de la base de données foo
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
mysqldump -${MYSQL_CONN} -d -t --skip-routines --triggers foo > foo_make_triggers.sql
Pour clarification
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SELECT CONCAT('DROP TRIGGER ',trigger_name,';')"
SQL="${SQL} FROM information_schema.triggers"
SQL="${SQL} WHERE trigger_schema = 'foo'"
mysql ${MYSQL_CONN} -ANe"${SQL}" > foo_drop_triggers.sql
vi -R foo_drop_triggers.sql
vi -R foo_make_triggers.sql
foo_make_triggers.sql
Comme vous savez commentuse foo
source foo_drop_triggers.sql
source foo_make_triggers.sql
Testez ceci sur un serveur de stadification s'il vous plaît