Bug #9483 grant/revoke replicated to the default db instead of 'mysql' breaks replication
| Submitted: | 30 Mar 2005 12:12 | Modified: | 2 May 2006 2:54 |
|---|---|---|---|
| Reporter: | Anders Henke | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Documentation | Severity: | S3 (Non-critical) |
| Version: | 4.1.10 | OS: | Linux (Linux) |
| Assigned to: | Mike Hillyer | CPU Architecture: | Any |
[30 Mar 2005 12:15]
Anders Henke
Changed to a much more descriptive subject. I also haven't verified wether the same issue exists in the 4.0-tree.
[30 Mar 2005 20:33]
Jorge del Conde
tested w/4.1.11 from bk
[3 Jan 2006 10:27]
Andrei Elkin
The bug relates to the 180th. The latter fixed ignoring GRANT/REVOKE queries on the slave when the slave started with --replicate-wild-ignore-table=mysql.% In the same time it should be that --replicate-ignore-db=mysql does the same. But it does not.
[3 Jan 2006 13:03]
Andrei Elkin
GRANT/REVOKE belongs to `cross-database updates' [mysql.info:replication/6.8] class
in a sense they can affect different than default db.
Following that I would suggest always to govern their accepting/ignoring on the slave via
--replicate-wild-{ignore,do}-table=mysql.%
only, consequently --replicate-ignore-db=mysql is not applicable for GRANT/REVOKE.
A question remains how to treat `implicit' do/ignore rules. Particular example of
ignoring implicitly is when the slave rejects updates to any db not listed among do-db/table except the case when these lists are empty. The bug actually extends the exception to allow GRANT/REVOKE when the list is not emply and no .--replicate-wild-ingore-table=mysql.%.
I would suggest to fix this bug only in documentation to state that currently
is just a workaround:
one can govern replication of GRANT/REVOKE only via explicitly
providing --replicate-wild-{ignore,do}-table=mysql.%
I.e if one does not want to replicate GRANT/REVOKE, --replicate-wild-ingore-table=mysql.% is necessary.
[6 Jan 2006 18:05]
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/714
[9 Jan 2006 18:51]
Andrei Elkin
The bug has #980 one more ancestor. #980th test case did not cover REVOKE query so that I have decided to commit the test with name rpl_ignore_grant_revoke.test
[10 Jan 2006 11:44]
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/848
[10 Jan 2006 13:20]
Andrei Elkin
After specific to grant test was discovered I eliminated its part from mine and renamed it to be rpl_ignore_revoke.test. Bug status is being turned into Doc.
[10 Jan 2006 13:43]
Andrei Elkin
Doc team please use the last paragraph of comments of [3 Jan 14:03] to improve my wording.
[10 Jan 2006 17:39]
Andrei Elkin
I beg a pardon for playing with the version. The orig value is restored.
[18 Jan 2006 18:55]
Mike Hillyer
Cannot add to changelog and close without version numbers of the bugfix.
[21 Jan 2006 16:12]
Andrei Elkin
Mike, I am sorry for ChangeSet@1.1981.22.1, 2006-01-10 13:44:08+02:00, aelkin@mysql.com was committed without magic 'Bug#9483' word in comments. The latest tag for 5.0 tree at that time was mysql-5.0.18 .
[23 Jan 2006 18:18]
Andrei Elkin
Fixed mysql-5.0.18.
[26 Jan 2006 2:24]
Mike Hillyer
One more question: Is there a change here? Or is this more a matter of mentioning that --replication-do must be used? Does this require a changelog entry or a refman update? If so on either, what is needed?
[2 Feb 2006 5:13]
Mike Hillyer
Changing to documentation bug, assigning to myself.
[2 May 2006 2:54]
Mike Hillyer
Added note to the FAQ section about preventing the replication of GRANT/REVOKE statements:
<para>
<emphasis role="bold">Q</emphasis>: How do I prevent GRANT and
REVOKE statements from replicating to slave machines?
</para>
<para>
<emphasis role="bold">A</emphasis>: Start the server with the
<option>--replicate-wild-ignore-table=mysql.%</option> option.
</para>
[20 Feb 2007 13:15]
Guillaume Faussard
The FLUSH PRIVILEGES statements seem to be replicated whereas I've explicitly disabled replication of the 'mysql' database. I think these statements should not be replicated as GRANT/REVOKE statements are not. Part of my slave replication config: log-slave-updates replicate-wild-do-table = $somedatabase.% replicate-wild-ignore-table=mysql.% A flush privileges statement found in my slave binary logs: # at 1828752 #070216 8:40:02 server id 1 end_log_pos 1828827 Query thread_id=834 exec_time=364412 error_code=0 SET TIMESTAMP=1171611602; FLUSH PRIVILEGES; # at 1828827 Both the master and the slave are hosted on Windows and uses MySQL v5.0.27.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.049 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: Any grant/revoke commands issued after a "use $somedatabase" are written to the binlog, although the commands don't affect $somedatabase. While not exactly, this bug might also relate to #180. How to repeat: Master: mysql> use foo; mysql> revoke insert,update on foo.* from bar@'%'; Slave: ... is configured with "Replicate-Do-DB=foo"; so the database 'mysql' isn't replicated. mysql> show slave status\G [...] Replicate_Do_DB: foo Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: foo.shadow% [...] Last_Errno: 1141 Last_Error: Error 'There is no such grant defined for user 'bar' on host '%'' on query. Default database: 'foo'. Query: 'revoke insert,update on foo.* from bar@'%'' Suggested fix: Temporarily switch the default database when administrative commands are being issued. As the mysql-database itself isn't replicated, administrative commands affecting that database shouldn't be replicated as well. A colleague of mine had a similar problem with different commands and a different setup, he has been told to use "replicate-wild-do-table=foo.%" instead of "replicate-do-db=foo" - which solved the issue for him. I haven't checked back wether this would also solve this issue, but if it does, it might be a good idea to internally map "replicate-do-db=$db" to "replicate-wild-do-table=$db.%".