mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
due to merge (pull)
This commit is contained in:
@ -10,7 +10,7 @@ AC_CANONICAL_SYSTEM
|
|||||||
#
|
#
|
||||||
# When changing major version number please also check switch statement
|
# When changing major version number please also check switch statement
|
||||||
# in mysqlbinlog::check_master_version().
|
# in mysqlbinlog::check_master_version().
|
||||||
AM_INIT_AUTOMAKE(mysql, 5.1.33)
|
AM_INIT_AUTOMAKE(mysql, 5.1.34)
|
||||||
AM_CONFIG_HEADER([include/config.h:config.h.in])
|
AM_CONFIG_HEADER([include/config.h:config.h.in])
|
||||||
|
|
||||||
PROTOCOL_VERSION=10
|
PROTOCOL_VERSION=10
|
||||||
|
@ -201,6 +201,6 @@ ADD_LIBRARY(mysqlserver STATIC ${LIBMYSQLD_SOURCES})
|
|||||||
ADD_DEPENDENCIES(mysqlserver GenServerSource GenError)
|
ADD_DEPENDENCIES(mysqlserver GenServerSource GenError)
|
||||||
TARGET_LINK_LIBRARIES(mysqlserver)
|
TARGET_LINK_LIBRARIES(mysqlserver)
|
||||||
|
|
||||||
ADD_LIBRARY(libmysqld MODULE cmake_dummy.c libmysqld.def)
|
ADD_LIBRARY(libmysqld SHARED cmake_dummy.c libmysqld.def)
|
||||||
ADD_DEPENDENCIES(libmysqld mysqlserver)
|
ADD_DEPENDENCIES(libmysqld mysqlserver)
|
||||||
TARGET_LINK_LIBRARIES(libmysqld mysqlserver wsock32)
|
TARGET_LINK_LIBRARIES(libmysqld mysqlserver wsock32)
|
||||||
|
@ -30,12 +30,12 @@ ADD_EXECUTABLE(mysql_embedded ../../client/completion_hash.cc
|
|||||||
../../client/mysql.cc ../../client/readline.cc
|
../../client/mysql.cc ../../client/readline.cc
|
||||||
../../client/sql_string.cc)
|
../../client/sql_string.cc)
|
||||||
TARGET_LINK_LIBRARIES(mysql_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32)
|
TARGET_LINK_LIBRARIES(mysql_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32)
|
||||||
ADD_DEPENDENCIES(mysql_embedded libmysqld)
|
TARGET_LINK_LIBRARIES(mysql_embedded libmysqld)
|
||||||
|
|
||||||
ADD_EXECUTABLE(mysqltest_embedded ../../client/mysqltest.cc)
|
ADD_EXECUTABLE(mysqltest_embedded ../../client/mysqltest.cc)
|
||||||
TARGET_LINK_LIBRARIES(mysqltest_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32)
|
TARGET_LINK_LIBRARIES(mysqltest_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32)
|
||||||
ADD_DEPENDENCIES(mysqltest_embedded libmysqld)
|
TARGET_LINK_LIBRARIES(mysqltest_embedded libmysqld)
|
||||||
|
|
||||||
ADD_EXECUTABLE(mysql_client_test_embedded ../../tests/mysql_client_test.c)
|
ADD_EXECUTABLE(mysql_client_test_embedded ../../tests/mysql_client_test.c)
|
||||||
TARGET_LINK_LIBRARIES(mysql_client_test_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32)
|
TARGET_LINK_LIBRARIES(mysql_client_test_embedded debug dbug strings mysys vio yassl taocrypt regex ws2_32)
|
||||||
ADD_DEPENDENCIES(mysql_client_test_embedded libmysqld)
|
TARGET_LINK_LIBRARIES(mysql_client_test_embedded libmysqld)
|
||||||
|
@ -12695,3 +12695,22 @@ a b
|
|||||||
1 NULL
|
1 NULL
|
||||||
2 NULL
|
2 NULL
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# BUG#32880 - Repairing Archive table fails with internal error 144
|
||||||
|
#
|
||||||
|
|
||||||
|
# Test with an existing table which is corrupted
|
||||||
|
# Copy t1 from std_data
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` int(11) DEFAULT NULL,
|
||||||
|
`b` blob
|
||||||
|
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1
|
||||||
|
CHECK TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check error Corrupt
|
||||||
|
REPAIR TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 repair error Corrupt
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -1731,7 +1731,7 @@ t1 CREATE TABLE `t1` (
|
|||||||
`HOST` varchar(64) NOT NULL DEFAULT '',
|
`HOST` varchar(64) NOT NULL DEFAULT '',
|
||||||
`DB` varchar(64) DEFAULT NULL,
|
`DB` varchar(64) DEFAULT NULL,
|
||||||
`COMMAND` varchar(16) NOT NULL DEFAULT '',
|
`COMMAND` varchar(16) NOT NULL DEFAULT '',
|
||||||
`TIME` bigint(7) NOT NULL DEFAULT '0',
|
`TIME` int(7) NOT NULL DEFAULT '0',
|
||||||
`STATE` varchar(64) DEFAULT NULL,
|
`STATE` varchar(64) DEFAULT NULL,
|
||||||
`INFO` longtext
|
`INFO` longtext
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||||
@ -1745,7 +1745,7 @@ t1 CREATE TEMPORARY TABLE `t1` (
|
|||||||
`HOST` varchar(64) NOT NULL DEFAULT '',
|
`HOST` varchar(64) NOT NULL DEFAULT '',
|
||||||
`DB` varchar(64) DEFAULT NULL,
|
`DB` varchar(64) DEFAULT NULL,
|
||||||
`COMMAND` varchar(16) NOT NULL DEFAULT '',
|
`COMMAND` varchar(16) NOT NULL DEFAULT '',
|
||||||
`TIME` bigint(7) NOT NULL DEFAULT '0',
|
`TIME` int(7) NOT NULL DEFAULT '0',
|
||||||
`STATE` varchar(64) DEFAULT NULL,
|
`STATE` varchar(64) DEFAULT NULL,
|
||||||
`INFO` longtext
|
`INFO` longtext
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||||
|
@ -1720,4 +1720,9 @@ SELECT CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1';
|
|||||||
CREATE_OPTIONS
|
CREATE_OPTIONS
|
||||||
KEY_BLOCK_SIZE=1
|
KEY_BLOCK_SIZE=1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
SET TIMESTAMP=@@TIMESTAMP + 10000000;
|
||||||
|
SELECT 'OK' AS TEST_RESULT FROM INFORMATION_SCHEMA.PROCESSLIST WHERE time < 0;
|
||||||
|
TEST_RESULT
|
||||||
|
OK
|
||||||
|
SET TIMESTAMP=DEFAULT;
|
||||||
End of 5.1 tests.
|
End of 5.1 tests.
|
||||||
|
BIN
mysql-test/std_data/bug32880.ARN
Normal file
BIN
mysql-test/std_data/bug32880.ARN
Normal file
Binary file not shown.
BIN
mysql-test/std_data/bug32880.ARZ
Normal file
BIN
mysql-test/std_data/bug32880.ARZ
Normal file
Binary file not shown.
BIN
mysql-test/std_data/bug32880.frm
Normal file
BIN
mysql-test/std_data/bug32880.frm
Normal file
Binary file not shown.
@ -166,7 +166,7 @@ NULL information_schema PROCESSLIST HOST 3 NO varchar 64 192 NULL NULL utf8 utf
|
|||||||
NULL information_schema PROCESSLIST ID 1 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
|
NULL information_schema PROCESSLIST ID 1 0 NO bigint NULL NULL 19 0 NULL NULL bigint(4) select
|
||||||
NULL information_schema PROCESSLIST INFO 8 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
|
NULL information_schema PROCESSLIST INFO 8 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select
|
||||||
NULL information_schema PROCESSLIST STATE 7 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
|
NULL information_schema PROCESSLIST STATE 7 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
|
||||||
NULL information_schema PROCESSLIST TIME 6 0 NO bigint NULL NULL 19 0 NULL NULL bigint(7) select
|
NULL information_schema PROCESSLIST TIME 6 0 NO int NULL NULL 10 0 NULL NULL int(7) select
|
||||||
NULL information_schema PROCESSLIST USER 2 NO varchar 16 48 NULL NULL utf8 utf8_general_ci varchar(16) select
|
NULL information_schema PROCESSLIST USER 2 NO varchar 16 48 NULL NULL utf8 utf8_general_ci varchar(16) select
|
||||||
NULL information_schema REFERENTIAL_CONSTRAINTS CONSTRAINT_CATALOG 1 NULL YES varchar 512 1536 NULL NULL utf8 utf8_general_ci varchar(512) select
|
NULL information_schema REFERENTIAL_CONSTRAINTS CONSTRAINT_CATALOG 1 NULL YES varchar 512 1536 NULL NULL utf8 utf8_general_ci varchar(512) select
|
||||||
NULL information_schema REFERENTIAL_CONSTRAINTS CONSTRAINT_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
|
NULL information_schema REFERENTIAL_CONSTRAINTS CONSTRAINT_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
|
||||||
@ -340,6 +340,7 @@ ORDER BY CHARACTER_SET_NAME, COLLATION_NAME, COL_CML;
|
|||||||
COL_CML DATA_TYPE CHARACTER_SET_NAME COLLATION_NAME
|
COL_CML DATA_TYPE CHARACTER_SET_NAME COLLATION_NAME
|
||||||
NULL bigint NULL NULL
|
NULL bigint NULL NULL
|
||||||
NULL datetime NULL NULL
|
NULL datetime NULL NULL
|
||||||
|
NULL int NULL NULL
|
||||||
--> CHAR(0) is allowed (see manual), and here both CHARACHTER_* values
|
--> CHAR(0) is allowed (see manual), and here both CHARACHTER_* values
|
||||||
--> are 0, which is intended behavior, and the result of 0 / 0 IS NULL
|
--> are 0, which is intended behavior, and the result of 0 / 0 IS NULL
|
||||||
SELECT CHARACTER_OCTET_LENGTH / CHARACTER_MAXIMUM_LENGTH AS COL_CML,
|
SELECT CHARACTER_OCTET_LENGTH / CHARACTER_MAXIMUM_LENGTH AS COL_CML,
|
||||||
@ -519,7 +520,7 @@ NULL information_schema PROCESSLIST ID bigint NULL NULL NULL NULL bigint(4)
|
|||||||
3.0000 information_schema PROCESSLIST HOST varchar 64 192 utf8 utf8_general_ci varchar(64)
|
3.0000 information_schema PROCESSLIST HOST varchar 64 192 utf8 utf8_general_ci varchar(64)
|
||||||
3.0000 information_schema PROCESSLIST DB varchar 64 192 utf8 utf8_general_ci varchar(64)
|
3.0000 information_schema PROCESSLIST DB varchar 64 192 utf8 utf8_general_ci varchar(64)
|
||||||
3.0000 information_schema PROCESSLIST COMMAND varchar 16 48 utf8 utf8_general_ci varchar(16)
|
3.0000 information_schema PROCESSLIST COMMAND varchar 16 48 utf8 utf8_general_ci varchar(16)
|
||||||
NULL information_schema PROCESSLIST TIME bigint NULL NULL NULL NULL bigint(7)
|
NULL information_schema PROCESSLIST TIME int NULL NULL NULL NULL int(7)
|
||||||
3.0000 information_schema PROCESSLIST STATE varchar 64 192 utf8 utf8_general_ci varchar(64)
|
3.0000 information_schema PROCESSLIST STATE varchar 64 192 utf8 utf8_general_ci varchar(64)
|
||||||
1.0000 information_schema PROCESSLIST INFO longtext 4294967295 4294967295 utf8 utf8_general_ci longtext
|
1.0000 information_schema PROCESSLIST INFO longtext 4294967295 4294967295 utf8 utf8_general_ci longtext
|
||||||
3.0000 information_schema REFERENTIAL_CONSTRAINTS CONSTRAINT_CATALOG varchar 512 1536 utf8 utf8_general_ci varchar(512)
|
3.0000 information_schema REFERENTIAL_CONSTRAINTS CONSTRAINT_CATALOG varchar 512 1536 utf8 utf8_general_ci varchar(512)
|
||||||
|
@ -27,7 +27,7 @@ PROCESSLIST CREATE TEMPORARY TABLE `PROCESSLIST` (
|
|||||||
`HOST` varchar(64) NOT NULL DEFAULT '',
|
`HOST` varchar(64) NOT NULL DEFAULT '',
|
||||||
`DB` varchar(64) DEFAULT NULL,
|
`DB` varchar(64) DEFAULT NULL,
|
||||||
`COMMAND` varchar(16) NOT NULL DEFAULT '',
|
`COMMAND` varchar(16) NOT NULL DEFAULT '',
|
||||||
`TIME` bigint(7) NOT NULL DEFAULT '0',
|
`TIME` int(7) NOT NULL DEFAULT '0',
|
||||||
`STATE` varchar(64) DEFAULT NULL,
|
`STATE` varchar(64) DEFAULT NULL,
|
||||||
`INFO` longtext
|
`INFO` longtext
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||||
@ -97,7 +97,7 @@ PROCESSLIST CREATE TEMPORARY TABLE `PROCESSLIST` (
|
|||||||
`HOST` varchar(64) NOT NULL DEFAULT '',
|
`HOST` varchar(64) NOT NULL DEFAULT '',
|
||||||
`DB` varchar(64) DEFAULT NULL,
|
`DB` varchar(64) DEFAULT NULL,
|
||||||
`COMMAND` varchar(16) NOT NULL DEFAULT '',
|
`COMMAND` varchar(16) NOT NULL DEFAULT '',
|
||||||
`TIME` bigint(7) NOT NULL DEFAULT '0',
|
`TIME` int(7) NOT NULL DEFAULT '0',
|
||||||
`STATE` varchar(64) DEFAULT NULL,
|
`STATE` varchar(64) DEFAULT NULL,
|
||||||
`INFO` longtext
|
`INFO` longtext
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||||
|
@ -17,7 +17,7 @@ PROCESSLIST CREATE TEMPORARY TABLE `PROCESSLIST` (
|
|||||||
`HOST` varchar(64) NOT NULL DEFAULT '',
|
`HOST` varchar(64) NOT NULL DEFAULT '',
|
||||||
`DB` varchar(64) DEFAULT NULL,
|
`DB` varchar(64) DEFAULT NULL,
|
||||||
`COMMAND` varchar(16) NOT NULL DEFAULT '',
|
`COMMAND` varchar(16) NOT NULL DEFAULT '',
|
||||||
`TIME` bigint(7) NOT NULL DEFAULT '0',
|
`TIME` int(7) NOT NULL DEFAULT '0',
|
||||||
`STATE` varchar(64) DEFAULT NULL,
|
`STATE` varchar(64) DEFAULT NULL,
|
||||||
`INFO` longtext
|
`INFO` longtext
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||||
|
@ -89,3 +89,81 @@ show grants for rpl_do_grant2@localhost;
|
|||||||
ERROR 42000: There is no such grant defined for user 'rpl_do_grant2' on host 'localhost'
|
ERROR 42000: There is no such grant defined for user 'rpl_do_grant2' on host 'localhost'
|
||||||
show grants for rpl_do_grant2@localhost;
|
show grants for rpl_do_grant2@localhost;
|
||||||
ERROR 42000: There is no such grant defined for user 'rpl_do_grant2' on host 'localhost'
|
ERROR 42000: There is no such grant defined for user 'rpl_do_grant2' on host 'localhost'
|
||||||
|
DROP DATABASE IF EXISTS bug42217_db;
|
||||||
|
CREATE DATABASE bug42217_db;
|
||||||
|
GRANT CREATE ROUTINE ON bug42217_db.* TO 'create_rout_db'@'localhost'
|
||||||
|
IDENTIFIED BY 'create_rout_db' WITH GRANT OPTION;
|
||||||
|
USE bug42217_db;
|
||||||
|
CREATE FUNCTION upgrade_del_func() RETURNS CHAR(30)
|
||||||
|
BEGIN
|
||||||
|
RETURN "INSIDE upgrade_del_func()";
|
||||||
|
END//
|
||||||
|
USE bug42217_db;
|
||||||
|
SELECT * FROM mysql.procs_priv;
|
||||||
|
Host Db User Routine_name Routine_type Grantor Proc_priv Timestamp
|
||||||
|
localhost bug42217_db create_rout_db upgrade_del_func FUNCTION create_rout_db@localhost Execute,Alter Routine #
|
||||||
|
SELECT upgrade_del_func();
|
||||||
|
upgrade_del_func()
|
||||||
|
INSIDE upgrade_del_func()
|
||||||
|
SELECT * FROM mysql.procs_priv;
|
||||||
|
Host Db User Routine_name Routine_type Grantor Proc_priv Timestamp
|
||||||
|
localhost bug42217_db create_rout_db upgrade_del_func FUNCTION create_rout_db@localhost Execute,Alter Routine #
|
||||||
|
SHOW GRANTS FOR 'create_rout_db'@'localhost';
|
||||||
|
Grants for create_rout_db@localhost
|
||||||
|
GRANT USAGE ON *.* TO 'create_rout_db'@'localhost' IDENTIFIED BY PASSWORD '*08792480350CBA057BDE781B9DF183B263934601'
|
||||||
|
GRANT CREATE ROUTINE ON `bug42217_db`.* TO 'create_rout_db'@'localhost' WITH GRANT OPTION
|
||||||
|
GRANT EXECUTE, ALTER ROUTINE ON FUNCTION `bug42217_db`.`upgrade_del_func` TO 'create_rout_db'@'localhost'
|
||||||
|
USE bug42217_db;
|
||||||
|
SHOW CREATE FUNCTION upgrade_del_func;
|
||||||
|
Function sql_mode Create Function character_set_client collation_connection Database Collation
|
||||||
|
upgrade_del_func CREATE DEFINER=`create_rout_db`@`localhost` FUNCTION `upgrade_del_func`() RETURNS char(30) CHARSET latin1
|
||||||
|
BEGIN
|
||||||
|
RETURN "INSIDE upgrade_del_func()";
|
||||||
|
END latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
|
SELECT upgrade_del_func();
|
||||||
|
upgrade_del_func()
|
||||||
|
INSIDE upgrade_del_func()
|
||||||
|
"Check whether the definer user will be able to execute the replicated routine on slave"
|
||||||
|
USE bug42217_db;
|
||||||
|
SHOW CREATE FUNCTION upgrade_del_func;
|
||||||
|
Function sql_mode Create Function character_set_client collation_connection Database Collation
|
||||||
|
upgrade_del_func CREATE DEFINER=`create_rout_db`@`localhost` FUNCTION `upgrade_del_func`() RETURNS char(30) CHARSET latin1
|
||||||
|
BEGIN
|
||||||
|
RETURN "INSIDE upgrade_del_func()";
|
||||||
|
END latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
|
SELECT upgrade_del_func();
|
||||||
|
upgrade_del_func()
|
||||||
|
INSIDE upgrade_del_func()
|
||||||
|
DELETE FROM mysql.procs_priv;
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
USE bug42217_db;
|
||||||
|
"Can't execute the replicated routine on slave like before after procs privilege is deleted "
|
||||||
|
SELECT upgrade_del_func();
|
||||||
|
ERROR 42000: execute command denied to user 'create_rout_db'@'localhost' for routine 'bug42217_db.upgrade_del_func'
|
||||||
|
"Test the user who creates a function on master doesn't exist on slave."
|
||||||
|
"Hence SQL thread ACL_GLOBAL privilege jumps in and no mysql.procs_priv is inserted"
|
||||||
|
DROP USER 'create_rout_db'@'localhost';
|
||||||
|
CREATE FUNCTION upgrade_alter_func() RETURNS CHAR(30)
|
||||||
|
BEGIN
|
||||||
|
RETURN "INSIDE upgrade_alter_func()";
|
||||||
|
END//
|
||||||
|
SELECT upgrade_alter_func();
|
||||||
|
upgrade_alter_func()
|
||||||
|
INSIDE upgrade_alter_func()
|
||||||
|
SHOW CREATE FUNCTION upgrade_alter_func;
|
||||||
|
Function sql_mode Create Function character_set_client collation_connection Database Collation
|
||||||
|
upgrade_alter_func CREATE DEFINER=`create_rout_db`@`localhost` FUNCTION `upgrade_alter_func`() RETURNS char(30) CHARSET latin1
|
||||||
|
BEGIN
|
||||||
|
RETURN "INSIDE upgrade_alter_func()";
|
||||||
|
END latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
|
"Should no privilege record for upgrade_alter_func in mysql.procs_priv"
|
||||||
|
SELECT * FROM mysql.procs_priv;
|
||||||
|
Host Db User Routine_name Routine_type Grantor Proc_priv Timestamp
|
||||||
|
SELECT upgrade_alter_func();
|
||||||
|
ERROR HY000: The user specified as a definer ('create_rout_db'@'localhost') does not exist
|
||||||
|
USE bug42217_db;
|
||||||
|
DROP FUNCTION upgrade_del_func;
|
||||||
|
DROP FUNCTION upgrade_alter_func;
|
||||||
|
DROP DATABASE bug42217_db;
|
||||||
|
DROP USER 'create_rout_db'@'localhost';
|
||||||
|
"End of test"
|
||||||
|
@ -87,9 +87,7 @@ show binary logs;
|
|||||||
Log_name File_size
|
Log_name File_size
|
||||||
master-bin.000002 #
|
master-bin.000002 #
|
||||||
master-bin.000003 #
|
master-bin.000003 #
|
||||||
select @time_for_purge:=DATE_ADD(UPDATE_TIME, INTERVAL 1 SECOND)
|
SELECT @time_for_purge:=DATE_ADD('tmpval', INTERVAL 1 SECOND);
|
||||||
from information_schema.tables
|
|
||||||
where TABLE_SCHEMA="test" and TABLE_NAME="t2";
|
|
||||||
purge master logs before (@time_for_purge);
|
purge master logs before (@time_for_purge);
|
||||||
show binary logs;
|
show binary logs;
|
||||||
Log_name File_size
|
Log_name File_size
|
||||||
|
@ -112,3 +112,100 @@ show grants for rpl_do_grant2@localhost;
|
|||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
--error 1141
|
--error 1141
|
||||||
show grants for rpl_do_grant2@localhost;
|
show grants for rpl_do_grant2@localhost;
|
||||||
|
|
||||||
|
#####################################################
|
||||||
|
# Purpose
|
||||||
|
# Test whether mysql.procs_priv get replicated
|
||||||
|
# Related bugs:
|
||||||
|
# BUG42217 mysql.procs_priv does not get replicated
|
||||||
|
#####################################################
|
||||||
|
connection master;
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP DATABASE IF EXISTS bug42217_db;
|
||||||
|
--enable_warnings
|
||||||
|
CREATE DATABASE bug42217_db;
|
||||||
|
|
||||||
|
GRANT CREATE ROUTINE ON bug42217_db.* TO 'create_rout_db'@'localhost'
|
||||||
|
IDENTIFIED BY 'create_rout_db' WITH GRANT OPTION;
|
||||||
|
|
||||||
|
connect (create_rout_db_master, localhost, create_rout_db, create_rout_db, bug42217_db,$MASTER_MYPORT,);
|
||||||
|
connect (create_rout_db_slave, localhost, create_rout_db, create_rout_db, bug42217_db, $SLAVE_MYPORT,);
|
||||||
|
|
||||||
|
connection create_rout_db_master;
|
||||||
|
|
||||||
|
|
||||||
|
USE bug42217_db;
|
||||||
|
|
||||||
|
DELIMITER //;
|
||||||
|
CREATE FUNCTION upgrade_del_func() RETURNS CHAR(30)
|
||||||
|
BEGIN
|
||||||
|
RETURN "INSIDE upgrade_del_func()";
|
||||||
|
END//
|
||||||
|
|
||||||
|
DELIMITER ;//
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
|
||||||
|
USE bug42217_db;
|
||||||
|
--replace_column 8 #
|
||||||
|
SELECT * FROM mysql.procs_priv;
|
||||||
|
SELECT upgrade_del_func();
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
--replace_column 8 #
|
||||||
|
SELECT * FROM mysql.procs_priv;
|
||||||
|
SHOW GRANTS FOR 'create_rout_db'@'localhost';
|
||||||
|
|
||||||
|
USE bug42217_db;
|
||||||
|
SHOW CREATE FUNCTION upgrade_del_func;
|
||||||
|
SELECT upgrade_del_func();
|
||||||
|
|
||||||
|
--echo "Check whether the definer user will be able to execute the replicated routine on slave"
|
||||||
|
connection create_rout_db_slave;
|
||||||
|
USE bug42217_db;
|
||||||
|
SHOW CREATE FUNCTION upgrade_del_func;
|
||||||
|
SELECT upgrade_del_func();
|
||||||
|
|
||||||
|
connection slave;
|
||||||
|
DELETE FROM mysql.procs_priv;
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
USE bug42217_db;
|
||||||
|
--echo "Can't execute the replicated routine on slave like before after procs privilege is deleted "
|
||||||
|
--error 1370
|
||||||
|
SELECT upgrade_del_func();
|
||||||
|
|
||||||
|
--echo "Test the user who creates a function on master doesn't exist on slave."
|
||||||
|
--echo "Hence SQL thread ACL_GLOBAL privilege jumps in and no mysql.procs_priv is inserted"
|
||||||
|
DROP USER 'create_rout_db'@'localhost';
|
||||||
|
|
||||||
|
connection create_rout_db_master;
|
||||||
|
DELIMITER //;
|
||||||
|
CREATE FUNCTION upgrade_alter_func() RETURNS CHAR(30)
|
||||||
|
BEGIN
|
||||||
|
RETURN "INSIDE upgrade_alter_func()";
|
||||||
|
END//
|
||||||
|
DELIMITER ;//
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
SELECT upgrade_alter_func();
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
SHOW CREATE FUNCTION upgrade_alter_func;
|
||||||
|
--echo "Should no privilege record for upgrade_alter_func in mysql.procs_priv"
|
||||||
|
--replace_column 8 #
|
||||||
|
SELECT * FROM mysql.procs_priv;
|
||||||
|
--error 1449
|
||||||
|
SELECT upgrade_alter_func();
|
||||||
|
|
||||||
|
###### CLEAN UP SECTION ##############
|
||||||
|
disconnect create_rout_db_master;
|
||||||
|
disconnect create_rout_db_slave;
|
||||||
|
connection master;
|
||||||
|
USE bug42217_db;
|
||||||
|
DROP FUNCTION upgrade_del_func;
|
||||||
|
DROP FUNCTION upgrade_alter_func;
|
||||||
|
DROP DATABASE bug42217_db;
|
||||||
|
DROP USER 'create_rout_db'@'localhost';
|
||||||
|
|
||||||
|
--echo "End of test"
|
||||||
|
@ -112,14 +112,24 @@ source include/show_master_logs.inc;
|
|||||||
purge binary logs to 'master-bin.000002';
|
purge binary logs to 'master-bin.000002';
|
||||||
source include/show_binary_logs.inc;
|
source include/show_binary_logs.inc;
|
||||||
|
|
||||||
# Calculate time to use in "purge master logs before" by taking
|
# Set the purge time 1 second after the last modify time of master-bin.000002.
|
||||||
# last modification time of t2 and adding 1 second
|
perl;
|
||||||
# This is donw in order to handle the case where file system
|
open F, ">>".$ENV{'MYSQLTEST_VARDIR'}.'/tmp/rpl_rotate_logs.tmp' or die "Tmp file rpl_rotate_logs.tmp not found";
|
||||||
# time differs from mysqld's time
|
my $binlogpath = $ENV{'MYSQLTEST_VARDIR'}.'/mysqld.1/data/master-bin.000002';
|
||||||
|
my @array = stat($binlogpath);
|
||||||
|
my $filemodifytime = $array[9];
|
||||||
|
my @t = localtime $filemodifytime;
|
||||||
|
my $modifytime = sprintf "%04u-%02u-%02u %02u:%02u:%02u",$t[5]+1900,$t[4]+1,$t[3],$t[2],$t[1],$t[0];
|
||||||
|
printf F ("let \$tmpval = %s;",$modifytime);
|
||||||
|
close F;
|
||||||
|
EOF
|
||||||
|
|
||||||
|
--source $MYSQLTEST_VARDIR/tmp/rpl_rotate_logs.tmp
|
||||||
|
remove_file $MYSQLTEST_VARDIR/tmp/rpl_rotate_logs.tmp;
|
||||||
|
|
||||||
--disable_result_log
|
--disable_result_log
|
||||||
select @time_for_purge:=DATE_ADD(UPDATE_TIME, INTERVAL 1 SECOND)
|
--replace_result $tmpval tmpval
|
||||||
from information_schema.tables
|
--eval SELECT @time_for_purge:=DATE_ADD('$tmpval', INTERVAL 1 SECOND)
|
||||||
where TABLE_SCHEMA="test" and TABLE_NAME="t2";
|
|
||||||
--enable_result_log
|
--enable_result_log
|
||||||
|
|
||||||
purge master logs before (@time_for_purge);
|
purge master logs before (@time_for_purge);
|
||||||
|
@ -1599,3 +1599,18 @@ INSERT INTO t1 VALUES (NULL, NULL),(NULL, NULL);
|
|||||||
FLUSH TABLE t1;
|
FLUSH TABLE t1;
|
||||||
SELECT * FROM t1 ORDER BY a;
|
SELECT * FROM t1 ORDER BY a;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#32880 - Repairing Archive table fails with internal error 144
|
||||||
|
--echo #
|
||||||
|
--echo
|
||||||
|
--echo # Test with an existing table which is corrupted
|
||||||
|
--echo # Copy t1 from std_data
|
||||||
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||||
|
copy_file std_data/bug32880.frm $MYSQLD_DATADIR/test/t1.frm;
|
||||||
|
copy_file std_data/bug32880.ARZ $MYSQLD_DATADIR/test/t1.ARZ;
|
||||||
|
copy_file std_data/bug32880.ARN $MYSQLD_DATADIR/test/t1.ARN;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
CHECK TABLE t1;
|
||||||
|
REPAIR TABLE t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -1410,6 +1410,15 @@ CREATE TABLE t1(a INT) KEY_BLOCK_SIZE=1;
|
|||||||
SELECT CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1';
|
SELECT CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1';
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #22047: Time in SHOW PROCESSLIST for SQL thread in replication seems
|
||||||
|
# to become negative
|
||||||
|
#
|
||||||
|
|
||||||
|
SET TIMESTAMP=@@TIMESTAMP + 10000000;
|
||||||
|
SELECT 'OK' AS TEST_RESULT FROM INFORMATION_SCHEMA.PROCESSLIST WHERE time < 0;
|
||||||
|
SET TIMESTAMP=DEFAULT;
|
||||||
|
|
||||||
--echo End of 5.1 tests.
|
--echo End of 5.1 tests.
|
||||||
|
|
||||||
# Wait till all disconnects are completed
|
# Wait till all disconnects are completed
|
||||||
|
@ -918,7 +918,7 @@ ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp,
|
|||||||
if (num < (ulonglong) optp->min_value)
|
if (num < (ulonglong) optp->min_value)
|
||||||
{
|
{
|
||||||
num= (ulonglong) optp->min_value;
|
num= (ulonglong) optp->min_value;
|
||||||
if (old < optp->min_value)
|
if (old < (ulonglong) optp->min_value)
|
||||||
adjusted= TRUE;
|
adjusted= TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4129,9 +4129,32 @@ end_with_restore_list:
|
|||||||
|
|
||||||
res= (sp_result= lex->sphead->create(thd));
|
res= (sp_result= lex->sphead->create(thd));
|
||||||
switch (sp_result) {
|
switch (sp_result) {
|
||||||
case SP_OK:
|
case SP_OK: {
|
||||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||||
/* only add privileges if really neccessary */
|
/* only add privileges if really neccessary */
|
||||||
|
|
||||||
|
Security_context security_context;
|
||||||
|
bool restore_backup_context= false;
|
||||||
|
Security_context *backup= NULL;
|
||||||
|
LEX_USER *definer= thd->lex->definer;
|
||||||
|
/*
|
||||||
|
Check if the definer exists on slave,
|
||||||
|
then use definer privilege to insert routine privileges to mysql.procs_priv.
|
||||||
|
|
||||||
|
For current user of SQL thread has GLOBAL_ACL privilege,
|
||||||
|
which doesn't any check routine privileges,
|
||||||
|
so no routine privilege record will insert into mysql.procs_priv.
|
||||||
|
*/
|
||||||
|
if (thd->slave_thread && is_acl_user(definer->host.str, definer->user.str))
|
||||||
|
{
|
||||||
|
security_context.change_security_context(thd,
|
||||||
|
&thd->lex->definer->user,
|
||||||
|
&thd->lex->definer->host,
|
||||||
|
&thd->lex->sphead->m_db,
|
||||||
|
&backup);
|
||||||
|
restore_backup_context= true;
|
||||||
|
}
|
||||||
|
|
||||||
if (sp_automatic_privileges && !opt_noacl &&
|
if (sp_automatic_privileges && !opt_noacl &&
|
||||||
check_routine_access(thd, DEFAULT_CREATE_PROC_ACLS,
|
check_routine_access(thd, DEFAULT_CREATE_PROC_ACLS,
|
||||||
lex->sphead->m_db.str, name,
|
lex->sphead->m_db.str, name,
|
||||||
@ -4143,8 +4166,19 @@ end_with_restore_list:
|
|||||||
ER_PROC_AUTO_GRANT_FAIL,
|
ER_PROC_AUTO_GRANT_FAIL,
|
||||||
ER(ER_PROC_AUTO_GRANT_FAIL));
|
ER(ER_PROC_AUTO_GRANT_FAIL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Restore current user with GLOBAL_ACL privilege of SQL thread
|
||||||
|
*/
|
||||||
|
if (restore_backup_context)
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(thd->slave_thread == 1);
|
||||||
|
thd->security_ctx->restore_security_context(thd, backup);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case SP_WRITE_ROW_FAILED:
|
case SP_WRITE_ROW_FAILED:
|
||||||
my_error(ER_SP_ALREADY_EXISTS, MYF(0), SP_TYPE_STRING(lex), name);
|
my_error(ER_SP_ALREADY_EXISTS, MYF(0), SP_TYPE_STRING(lex), name);
|
||||||
break;
|
break;
|
||||||
|
@ -9797,6 +9797,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
|||||||
table->in_use= thd;
|
table->in_use= thd;
|
||||||
table->quick_keys.init();
|
table->quick_keys.init();
|
||||||
table->covering_keys.init();
|
table->covering_keys.init();
|
||||||
|
table->merge_keys.init();
|
||||||
table->keys_in_use_for_query.init();
|
table->keys_in_use_for_query.init();
|
||||||
|
|
||||||
table->s= share;
|
table->s= share;
|
||||||
|
@ -1704,7 +1704,8 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
|
|||||||
field_list.push_back(field=new Item_empty_string("db",NAME_CHAR_LEN));
|
field_list.push_back(field=new Item_empty_string("db",NAME_CHAR_LEN));
|
||||||
field->maybe_null=1;
|
field->maybe_null=1;
|
||||||
field_list.push_back(new Item_empty_string("Command",16));
|
field_list.push_back(new Item_empty_string("Command",16));
|
||||||
field_list.push_back(new Item_return_int("Time",7, MYSQL_TYPE_LONG));
|
field_list.push_back(field= new Item_return_int("Time",7, MYSQL_TYPE_LONG));
|
||||||
|
field->unsigned_flag= 0;
|
||||||
field_list.push_back(field=new Item_empty_string("State",30));
|
field_list.push_back(field=new Item_empty_string("State",30));
|
||||||
field->maybe_null=1;
|
field->maybe_null=1;
|
||||||
field_list.push_back(field=new Item_empty_string("Info",max_query_length));
|
field_list.push_back(field=new Item_empty_string("Info",max_query_length));
|
||||||
@ -1797,7 +1798,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
|
|||||||
else
|
else
|
||||||
protocol->store(command_name[thd_info->command].str, system_charset_info);
|
protocol->store(command_name[thd_info->command].str, system_charset_info);
|
||||||
if (thd_info->start_time)
|
if (thd_info->start_time)
|
||||||
protocol->store((uint32) (now - thd_info->start_time));
|
protocol->store_long ((longlong) (now - thd_info->start_time));
|
||||||
else
|
else
|
||||||
protocol->store_null();
|
protocol->store_null();
|
||||||
protocol->store(thd_info->state_info, system_charset_info);
|
protocol->store(thd_info->state_info, system_charset_info);
|
||||||
@ -1872,8 +1873,8 @@ int fill_schema_processlist(THD* thd, TABLE_LIST* tables, COND* cond)
|
|||||||
table->field[4]->store(command_name[tmp->command].str,
|
table->field[4]->store(command_name[tmp->command].str,
|
||||||
command_name[tmp->command].length, cs);
|
command_name[tmp->command].length, cs);
|
||||||
/* MYSQL_TIME */
|
/* MYSQL_TIME */
|
||||||
table->field[5]->store((uint32)(tmp->start_time ?
|
table->field[5]->store((longlong)(tmp->start_time ?
|
||||||
now - tmp->start_time : 0), TRUE);
|
now - tmp->start_time : 0), FALSE);
|
||||||
/* STATE */
|
/* STATE */
|
||||||
#ifndef EMBEDDED_LIBRARY
|
#ifndef EMBEDDED_LIBRARY
|
||||||
val= (char*) (tmp->locked ? "Locked" :
|
val= (char*) (tmp->locked ? "Locked" :
|
||||||
@ -6558,7 +6559,7 @@ ST_FIELD_INFO processlist_fields_info[]=
|
|||||||
SKIP_OPEN_TABLE},
|
SKIP_OPEN_TABLE},
|
||||||
{"DB", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, "Db", SKIP_OPEN_TABLE},
|
{"DB", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, "Db", SKIP_OPEN_TABLE},
|
||||||
{"COMMAND", 16, MYSQL_TYPE_STRING, 0, 0, "Command", SKIP_OPEN_TABLE},
|
{"COMMAND", 16, MYSQL_TYPE_STRING, 0, 0, "Command", SKIP_OPEN_TABLE},
|
||||||
{"TIME", 7, MYSQL_TYPE_LONGLONG, 0, 0, "Time", SKIP_OPEN_TABLE},
|
{"TIME", 7, MYSQL_TYPE_LONG, 0, 0, "Time", SKIP_OPEN_TABLE},
|
||||||
{"STATE", 64, MYSQL_TYPE_STRING, 0, 1, "State", SKIP_OPEN_TABLE},
|
{"STATE", 64, MYSQL_TYPE_STRING, 0, 1, "State", SKIP_OPEN_TABLE},
|
||||||
{"INFO", PROCESS_LIST_INFO_WIDTH, MYSQL_TYPE_STRING, 0, 1, "Info",
|
{"INFO", PROCESS_LIST_INFO_WIDTH, MYSQL_TYPE_STRING, 0, 1, "Info",
|
||||||
SKIP_OPEN_TABLE},
|
SKIP_OPEN_TABLE},
|
||||||
|
@ -1652,6 +1652,7 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias,
|
|||||||
goto err;
|
goto err;
|
||||||
outparam->quick_keys.init();
|
outparam->quick_keys.init();
|
||||||
outparam->covering_keys.init();
|
outparam->covering_keys.init();
|
||||||
|
outparam->merge_keys.init();
|
||||||
outparam->keys_in_use_for_query.init();
|
outparam->keys_in_use_for_query.init();
|
||||||
|
|
||||||
/* Allocate handler */
|
/* Allocate handler */
|
||||||
|
@ -1076,11 +1076,9 @@ int ha_archive::unpack_row(azio_stream *file_to_read, uchar *record)
|
|||||||
|
|
||||||
read= azread(file_to_read, record_buffer->buffer, row_len, &error);
|
read= azread(file_to_read, record_buffer->buffer, row_len, &error);
|
||||||
|
|
||||||
DBUG_ASSERT(row_len == read);
|
|
||||||
|
|
||||||
if (read != row_len || error)
|
if (read != row_len || error)
|
||||||
{
|
{
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy null bits */
|
/* Copy null bits */
|
||||||
@ -1257,7 +1255,7 @@ int ha_archive::repair(THD* thd, HA_CHECK_OPT* check_opt)
|
|||||||
int rc= optimize(thd, check_opt);
|
int rc= optimize(thd, check_opt);
|
||||||
|
|
||||||
if (rc)
|
if (rc)
|
||||||
DBUG_RETURN(HA_ERR_CRASHED_ON_REPAIR);
|
DBUG_RETURN(HA_ADMIN_CORRUPT);
|
||||||
|
|
||||||
share->crashed= FALSE;
|
share->crashed= FALSE;
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
Reference in New Issue
Block a user