diff options
author | Sven Sandberg <sven@mysql.com> | 2008-08-19 17:35:56 +0200 |
---|---|---|
committer | Sven Sandberg <sven@mysql.com> | 2008-08-19 17:35:56 +0200 |
commit | bbb45c158fafd6409f4357751a8a4083c0ccce74 (patch) | |
tree | d4246fb07f2da7bbb611cfc625b38d9c1fffe3c2 /mysql-test | |
parent | fd548d585d57b50cec1ffc785e160d9b154a9d15 (diff) | |
download | mariadb-git-bbb45c158fafd6409f4357751a8a4083c0ccce74.tar.gz |
Bug#35807 - INSTALL PLUGIN replicates row-based, but not stmt-based
INSTALL PLUGIN and UNINSTALL PLUGIN worked with statement-based and
mixed-mode replication only, but not with row-based replication.
There is no statement-based replication of these statements.
But there was row-based replication of the inserts and deletes
to and from the mysql.plugin table.
The fix is to suppress binlogging during insert and delete to
and from the mysql.plugin table.
mysql-test/suite/rpl/r/rpl_plugin_load.result:
new result file
mysql-test/suite/rpl/t/rpl_plugin_load-master.opt:
new opt file
mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt:
new opt file
mysql-test/suite/rpl/t/rpl_plugin_load.test:
new test
sql/sql_plugin.cc:
Suppress binlogging during insert and delete to/from the
mysql.plugin table.
Diffstat (limited to 'mysql-test')
-rw-r--r-- | mysql-test/suite/rpl/r/rpl_plugin_load.result | 36 | ||||
-rw-r--r-- | mysql-test/suite/rpl/t/rpl_plugin_load-master.opt | 1 | ||||
-rw-r--r-- | mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt | 1 | ||||
-rw-r--r-- | mysql-test/suite/rpl/t/rpl_plugin_load.test | 60 |
4 files changed, 98 insertions, 0 deletions
diff --git a/mysql-test/suite/rpl/r/rpl_plugin_load.result b/mysql-test/suite/rpl/r/rpl_plugin_load.result new file mode 100644 index 00000000000..43e171a97c9 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_plugin_load.result @@ -0,0 +1,36 @@ +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; +Verify that example engine is not installed. +SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE'; +ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS +Get binlog position before install plugin. +Install example engine. +INSTALL PLUGIN example SONAME 'ha_example.so'; +Get binlog position after install plugin. +Compute the difference of the binlog positions. +Should be zero as install plugin should not be replicated. +Delta +0 +Verify that example engine is installed. +SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE'; +ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS +EXAMPLE YES Example storage engine NO NO NO +connection slave: Verify that example engine is not installed. +SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE'; +ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS +connection master: Uninstall example engine. +Get binlog position before uninstall plugin. +UNINSTALL PLUGIN example; +Get binlog position after uninstall plugin. +Compute the difference of the binlog positions. +Should be zero as uninstall plugin should not be replicated. +Delta +0 +Verify that example engine is not installed. +SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE'; +ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS +End of test diff --git a/mysql-test/suite/rpl/t/rpl_plugin_load-master.opt b/mysql-test/suite/rpl/t/rpl_plugin_load-master.opt new file mode 100644 index 00000000000..367d5233e0e --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_plugin_load-master.opt @@ -0,0 +1 @@ +$EXAMPLE_PLUGIN_OPT diff --git a/mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt b/mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt new file mode 100644 index 00000000000..367d5233e0e --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt @@ -0,0 +1 @@ +$EXAMPLE_PLUGIN_OPT diff --git a/mysql-test/suite/rpl/t/rpl_plugin_load.test b/mysql-test/suite/rpl/t/rpl_plugin_load.test new file mode 100644 index 00000000000..100683922ad --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_plugin_load.test @@ -0,0 +1,60 @@ +# +# Bug#35807 - INSTALL PLUGIN replicates row-based, but not stmt-based +# +# The test verifies that INSTALL PLUGIN and UNINSTALL PLUGIN +# work with replication. +# +# The test tries to install and uninstall a plugin on master, +# and verifies that it does not affect the slave, +# and that it does not add anything to the binlog. + +--source include/not_embedded.inc +--source include/have_log_bin.inc +# Dynamic loading of Example does not work on Windows currently. +--source include/not_windows.inc +--source include/have_example_plugin.inc + +# Initialize replication. +--source include/master-slave.inc +--echo Verify that example engine is not installed. +SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE'; +--echo Get binlog position before install plugin. +let $before_pos = query_get_value("SHOW MASTER STATUS", Position, 1); +--echo Install example engine. +INSTALL PLUGIN example SONAME 'ha_example.so'; +--echo Get binlog position after install plugin. +let $after_pos = query_get_value("SHOW MASTER STATUS", Position, 1); +--echo Compute the difference of the binlog positions. +--echo Should be zero as install plugin should not be replicated. +--disable_query_log +eval SELECT $after_pos - $before_pos AS Delta; +--enable_query_log +--echo Verify that example engine is installed. +SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE'; +# Wait for slave to catch up with master. +sync_slave_with_master; +# + --echo connection slave: Verify that example engine is not installed. + connection slave; + SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE'; +# +--echo connection master: Uninstall example engine. +connection master; +--echo Get binlog position before uninstall plugin. +let $before_pos = query_get_value("SHOW MASTER STATUS", Position, 1); +UNINSTALL PLUGIN example; +--echo Get binlog position after uninstall plugin. +let $after_pos = query_get_value("SHOW MASTER STATUS", Position, 1); +--echo Compute the difference of the binlog positions. +--echo Should be zero as uninstall plugin should not be replicated. +--disable_query_log +eval SELECT $after_pos - $before_pos AS Delta; +--enable_query_log +--echo Verify that example engine is not installed. +SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE'; +# Wait for slave to catch up with master. +sync_slave_with_master; +# +# Cleanup +--source include/master-slave-end.inc +--echo End of test |