mirror of
https://github.com/MariaDB/server.git
synced 2025-01-21 14:32:34 +01:00
59f1be1b63
Original revision: ------------------------------------------------------------ revision-id: li-bing.song@sun.com-20100130124925-o6sfex42b6noyc6x parent: joro@sun.com-20100129145427-0n79l9hnk0q43ajk committer: <Li-Bing.Song@sun.com> branch nick: mysql-5.1-bugteam timestamp: Sat 2010-01-30 20:49:25 +0800 message: Bug #48321 CURRENT_USER() incorrectly replicated for DROP/RENAME USER; REVOKE/GRANT; ALTER EVENT. The following statements support the CURRENT_USER() where a user is needed. DROP USER RENAME USER CURRENT_USER() ... GRANT ... TO CURRENT_USER() REVOKE ... FROM CURRENT_USER() ALTER DEFINER = CURRENT_USER() EVENT but, When these statements are binlogged, CURRENT_USER() just is binlogged as 'CURRENT_USER()', it is not expanded to the real user name. When slave executes the log event, 'CURRENT_USER()' is expand to the user of slave SQL thread, but SQL thread's user name always NULL. This breaks the replication. After this patch, All above statements are rewritten when they are binlogged. The CURRENT_USER() is expanded to the real user's name and host. ------------------------------------------------------------
45 lines
2.3 KiB
Text
45 lines
2.3 KiB
Text
stop slave;
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
reset master;
|
|
reset slave;
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
start slave;
|
|
set session sql_log_bin=0;
|
|
delete from mysql.user where Host='fakehost';
|
|
set session sql_log_bin=1;
|
|
set session sql_log_bin=0;
|
|
delete from mysql.user where Host='fakehost';
|
|
set session sql_log_bin=1;
|
|
create user 'foo'@'fakehost';
|
|
create user 'foo'@'fakehost', 'bar'@'fakehost';
|
|
ERROR HY000: Operation CREATE USER failed for 'foo'@'fakehost'
|
|
create user 'foo'@'fakehost', 'bar'@'fakehost';
|
|
ERROR HY000: Operation CREATE USER failed for 'foo'@'fakehost','bar'@'fakehost'
|
|
select Host,User from mysql.user where Host='fakehost';
|
|
Host User
|
|
fakehost bar
|
|
fakehost foo
|
|
rename user 'foo'@'fakehost' to 'foofoo'@'fakehost';
|
|
rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'bar'@'fakehost' to 'barbar'@'fakehost';
|
|
ERROR HY000: Operation RENAME USER failed for 'not_exist_user1'@'fakehost'
|
|
rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'not_exist_user2'@'fakehost' to 'barfoo'@'fakehost';
|
|
ERROR HY000: Operation RENAME USER failed for 'not_exist_user1'@'fakehost','not_exist_user2'@'fakehost'
|
|
select Host,User from mysql.user where Host='fakehost';
|
|
Host User
|
|
fakehost barbar
|
|
fakehost foofoo
|
|
drop user 'foofoo'@'fakehost';
|
|
drop user 'not_exist_user1'@'fakehost', 'barbar'@'fakehost';
|
|
ERROR HY000: Operation DROP USER failed for 'not_exist_user1'@'fakehost'
|
|
drop user 'not_exist_user1'@'fakehost', 'not_exist_user2'@'fakehost';
|
|
ERROR HY000: Operation DROP USER failed for 'not_exist_user1'@'fakehost','not_exist_user2'@'fakehost'
|
|
select Host,User from mysql.user where Host='fakehost';
|
|
Host User
|
|
show binlog events from <binlog_start>;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 # Query # # use `test`; create user 'foo'@'fakehost'
|
|
master-bin.000001 # Query # # use `test`; create user 'foo'@'fakehost', 'bar'@'fakehost'
|
|
master-bin.000001 # Query # # use `test`; rename user 'foo'@'fakehost' to 'foofoo'@'fakehost'
|
|
master-bin.000001 # Query # # use `test`; rename user 'not_exist_user1'@'fakehost' to 'foobar'@'fakehost', 'bar'@'fakehost' to 'barbar'@'fakehost'
|
|
master-bin.000001 # Query # # use `test`; drop user 'foofoo'@'fakehost'
|
|
master-bin.000001 # Query # # use `test`; drop user 'not_exist_user1'@'fakehost', 'barbar'@'fakehost'
|