Bug #16266 | Definer is not fully qualified error during replication | ||
---|---|---|---|
Submitted: | 6 Jan 2006 21:52 | Modified: | 15 Mar 2006 14:15 |
Reporter: | Gleb Paharenko | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server | Severity: | S3 (Non-critical) |
Version: | 5.0.17 > | OS: | Linux (Linux) |
Assigned to: | Alexander Nozdrin | CPU Architecture: | Any |
[6 Jan 2006 21:52]
Gleb Paharenko
[6 Jan 2006 22:54]
Gleb Paharenko
I've found that replication breaks if it is a setup with 5.0.11 master and 5.0.18 slave. Created on the master triggers without a DEFINER clause is replicated to slave (I see them in the relay log), where it causes an error. So seems it is difficult to replicate triggers from master older than 5.0.17 to 5.0.18(17) slave. In my opinion this should be documented
[8 Jan 2006 15:45]
Mark Leith
Hi Gleb, This is documented to a certain extent in the 5.0.17 change log, although I agree that a note should probably be added about replication compatibility, such as here: http://dev.mysql.com/doc/refman/5.0/en/replication-features.html I've set this as a documentation bug for you, and will get this fixed. For reference, if you would like to create triggers on master which is older than the slaves you can use the version comments, such as: CREATE /*!50017 DEFINER = root@localhost */ TRIGGER .... This will then replicate to the newer slaves, which will pick up the DEFINER from the comment properly. Best regards Mark
[11 Jan 2006 17:06]
Mark Leith
Changing back from Server from Server docs - as was not related to the initial bug report. Notes will be added to documentation soon
[16 Jan 2006 18:51]
Geert Vanderkelen
The proposed solution doesn't seem to work. - Master 5.0.18 (or 5.0.17) - Slave 5.0.16 - Make a trigger on table: CREATE TABLE t1 (id INT, updated DATETIME); CREATE /*!50017 DEFINER='geert'@'localhost' */ TRIGGER t_t1_updated BEFORE UPDATE ON t1 FOR EACH ROW SET NEW.updated = CURRENT_TIMESTAMP; Error on the Slave: Last_Errno: 1064 Last_Error: Error 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRIGGER t_t1_updated BEFORE UPDATE ON t1 FOR EACH ROW SET NEW.updated = CURRENT_' at line 1' on query. Default database: 'replica'. Query: 'CREATE DEFINER=`geert`@`localhost` TRIGGER t_t1_updated BEFORE UPDATE ON t1 FOR EACH ROW SET NEW.updated = CURRENT_TIMESTAMP' On a side note: skipping the log entry on the slave, and restarting replication. Then dropping the trigger on the Master crashed 5.0.16. There are no issues found between 5.0.18 Master/Slave. So this is more to document incompatibility or something between versions.
[9 Feb 2006 22:21]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/2411
[10 Feb 2006 11:22]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/2434
[7 Mar 2006 19:38]
Alexander Nozdrin
Pushed into 5.0 tree, currently tagged 5.0.20.
[9 Mar 2006 21:04]
Alexander Nozdrin
Pushed into 5.1 tree, currently tagged 5.1.8-beta.
[15 Mar 2006 14:15]
Paul DuBois
Noted in 5.0.20, 5.1.8 changelog. Replication slaves could not replicate triggers from older servers that included no <literal>DEFINER</literal> clause in the trigger definition. Now the trigger executes with the privileges of the invoker (which on the slave is the slave SQL thread). (Bug #16266)
[28 Mar 2006 22:01]
Clement Ho
I have a problem with this query here is the error message: ------------------- 060328 13:54:34 [ERROR] Slave: Error 'Definer is not fully qualified' on query. Default database: 'symbology'. Query: 'Insert into tblproc_temp Select tblsymbology_temp.symbol from tblsymbology_temp left join tblsymbology on tblsymbology_temp.symbol = tblsymbology.symbol where tblsymbology.symbol is NULL', Error_code: 1446 -------------------- I don't understand why it would happen since I am not using or having any trigger in the database. Why does it still happen to me? Note: The Query is succesfully executed in the Master DB. No Error generated. Thanks, Clement
[29 Mar 2006 10:21]
Alexander Nozdrin
Clement, thanks for comment, but unfortunately your description is not complete to start analysis. Could you please submit a new bug report and provide the following information: - server version; - OS; Also, if you could submit a reproducible test case, we would really appreciate that. Thanks!