diff --git a/mysql-test/main/mariadb-dump-debug.result b/mysql-test/main/mariadb-dump-debug.result new file mode 100644 index 00000000000..a02e224e5d3 --- /dev/null +++ b/mysql-test/main/mariadb-dump-debug.result @@ -0,0 +1,4 @@ +set @save_debug_dbug=@@global.debug_dbug; +set global debug_dbug='+d,select_export_kill'; +mariadb-dump: Couldn't execute async query 'SELECT /*!40001 SQL_NO_CACHE */ `Host`, `User`, `Priv` INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/global_priv.txt' /*!50138 CHARACTER SET binary */ FROM `mysql`.`global_priv`' (Query execution was interrupted) +set global debug_dbug=@save_debug_dbug; diff --git a/mysql-test/main/mariadb-dump-debug.test b/mysql-test/main/mariadb-dump-debug.test new file mode 100644 index 00000000000..a762a07295e --- /dev/null +++ b/mysql-test/main/mariadb-dump-debug.test @@ -0,0 +1,15 @@ +--source include/have_debug.inc +--source include/not_embedded.inc +# need to dump "mysql" schema +--source include/have_innodb.inc + +# inject error on SELECT INTO OUTFILE +set @save_debug_dbug=@@global.debug_dbug; +set global debug_dbug='+d,select_export_kill'; +# This one succeeds +--replace_result .\exe '' $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--error 2 +--exec $MYSQL_DUMP --tab=$MYSQLTEST_VARDIR/tmp/ --parallel=2 mysql global_priv 2>&1 + +set global debug_dbug=@save_debug_dbug; + diff --git a/mysql-test/main/mysqldump-win.opt b/mysql-test/main/mysqldump-win.opt new file mode 100644 index 00000000000..e534ae1eae5 --- /dev/null +++ b/mysql-test/main/mysqldump-win.opt @@ -0,0 +1 @@ +--loose-enable-named-pipe diff --git a/mysql-test/main/mysqldump-win.result b/mysql-test/main/mysqldump-win.result new file mode 100644 index 00000000000..8f889a60ed3 --- /dev/null +++ b/mysql-test/main/mysqldump-win.result @@ -0,0 +1,9 @@ +# Test mysqldump specific features (pipe connection, with parallel) +CREATE TABLE t1 (i INT); +INSERT INTO t1 VALUES(1); +DROP TABLE t1; +test.t1: Records: 1 Deleted: 0 Skipped: 0 Warnings: 0 +SELECT * FROM t1; +i +1 +DROP TABLE t1; diff --git a/mysql-test/main/mysqldump-win.test b/mysql-test/main/mysqldump-win.test new file mode 100644 index 00000000000..4088c4a8103 --- /dev/null +++ b/mysql-test/main/mysqldump-win.test @@ -0,0 +1,14 @@ +--source include/windows.inc +--source include/not_embedded.inc + +--echo # Test mysqldump specific features (pipe connection, with parallel) +CREATE TABLE t1 (i INT); +INSERT INTO t1 VALUES(1); + +--exec $MYSQL_DUMP --host=. --tab=$MYSQLTEST_VARDIR/tmp/ test --parallel=2 +DROP TABLE t1; +--exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/t1.sql +--exec $MYSQL_IMPORT test $MYSQLTEST_VARDIR/tmp/t1.txt +SELECT * FROM t1; +DROP TABLE t1; + diff --git a/mysql-test/main/mysqldump.result b/mysql-test/main/mysqldump.result index 3032c016d04..7494694a947 100644 --- a/mysql-test/main/mysqldump.result +++ b/mysql-test/main/mysqldump.result @@ -6658,3 +6658,12 @@ drop table t1; # End of 10.4 tests # mariadb-dump: --xml can't be used with --tab. +select @@max_connections into @save_max_connections; +set global max_connections=10; +mariadb-dump: Got error: 1040: "Too many connections" when trying to connect +set global max_connections=300; +mariadb-dump: Too many connections +set global max_connections=@save_max_connections; +# +# End of 11.4 tests +# diff --git a/mysql-test/main/mysqldump.test b/mysql-test/main/mysqldump.test index 707f12b2083..da4fa0bd38e 100644 --- a/mysql-test/main/mysqldump.test +++ b/mysql-test/main/mysqldump.test @@ -2482,7 +2482,7 @@ INSERT INTO t2 VALUES (3), (4); SELECT * FROM t1; SELECT * FROM t2; ---exec $MYSQL_DUMP --default-character-set=utf8mb4 --tab=$MYSQLTEST_VARDIR/tmp/ db_20772273 +--exec $MYSQL_DUMP --default-character-set=utf8mb4 --tab=$MYSQLTEST_VARDIR/tmp/ --parallel=2 db_20772273 --exec $MYSQL db_20772273 < $MYSQLTEST_VARDIR/tmp/t1.sql --exec $MYSQL db_20772273 < $MYSQLTEST_VARDIR/tmp/t2.sql @@ -3023,3 +3023,24 @@ drop table t1; --replace_result mariadb-dump.exe mariadb-dump --error 1 --exec $MYSQL_DUMP --xml --tab=$MYSQLTEST_VARDIR/tmp 2>&1 + +# +# MDEV-32589 parallel-mysqldump - test "too many connections" +# +select @@max_connections into @save_max_connections; +set global max_connections=10; +--replace_result mariadb-dump.exe mariadb-dump +--error 2 +--exec $MYSQL_DUMP --tab=$MYSQLTEST_VARDIR/tmp/ --parallel=20 mysql 2>&1 +# +# MDEV-32589 test builtin 256 connections limit +# +set global max_connections=300; +--replace_result mariadb-dump.exe mariadb-dump +--error 1 +--exec $MYSQL_DUMP --tab=$MYSQLTEST_VARDIR/tmp/ --parallel=280 mysql 2>&1 +set global max_connections=@save_max_connections; + +--echo # +--echo # End of 11.4 tests +--echo # diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 98846cce087..13e478eeb4e 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -3399,6 +3399,9 @@ int select_export::send_data(List &items) uint used_length=0,items_left=items.elements; List_iterator_fast li(items); + DBUG_EXECUTE_IF("select_export_kill", { + thd->killed= KILL_QUERY; + }); if (my_b_write(&cache,(uchar*) exchange->line_start->ptr(), exchange->line_start->length())) goto err;