Skip to content

Commit fd33d43

Browse files
Merge pull request #1602 from EvgeniyPatlan/release-5.7.17-12
lp1676401 : mysqldump using deprecated variable
2 parents 1e87281 + 5a66ee3 commit fd33d43

14 files changed

+943
-624
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
MYSQL_VERSION_MAJOR=5
22
MYSQL_VERSION_MINOR=7
33
MYSQL_VERSION_PATCH=17
4-
MYSQL_VERSION_EXTRA=-12
4+
MYSQL_VERSION_EXTRA=-13

client/mysqldump.c

Lines changed: 48 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -787,22 +787,34 @@ static void write_header(FILE *sql_file, char *db_name)
787787
"/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;\n",
788788
path?"":"NO_AUTO_VALUE_ON_ZERO",compatible_mode_normal_str[0]==0?"":",",
789789
compatible_mode_normal_str);
790+
791+
// This is specifically to allow MyRocks to bulk load a dump faster
792+
// We have no interest in anything earlier than 5.7 and 17 being the
793+
// current release. 5.7.8 and after can only use P_S for session_variables
794+
// and never I_S. So we first check that P_S is present and the
795+
// session_variables table exists. If no, we simply skip the optimization
796+
// assuming that MyRocks isn't present either. If it is, ohh well, bulk
797+
// loader will not be invoked.
790798
fprintf(sql_file,
791-
"/*!50112 SELECT COUNT(*) INTO @is_rocksdb_supported FROM"
792-
" INFORMATION_SCHEMA.SESSION_VARIABLES WHERE"
793-
" VARIABLE_NAME='rocksdb_bulk_load' */;\n"
794-
"/*!50112 SET @save_old_rocksdb_bulk_load ="
795-
" IF (@is_rocksdb_supported,"
796-
" 'SET @old_rocksdb_bulk_load = @@rocksdb_bulk_load',"
797-
" 'SET @dummy_old_rocksdb_bulk_load = 0') */;\n"
798-
"/*!50112 PREPARE s FROM @save_old_rocksdb_bulk_load */;\n"
799-
"/*!50112 EXECUTE s */;\n"
800-
"/*!50112 SET @enable_bulk_load = IF (@is_rocksdb_supported,"
801-
" 'SET SESSION rocksdb_bulk_load = 1',"
802-
" 'SET @dummy_rocksdb_bulk_load = 0') */;\n"
803-
"/*!50112 PREPARE s FROM @enable_bulk_load */;\n"
804-
"/*!50112 EXECUTE s */;\n"
805-
"/*!50112 DEALLOCATE PREPARE s */;\n");
799+
"/*!50717 SET @rocksdb_bulk_load_var_name='rocksdb_bulk_load' */;\n"
800+
"/*!50717 SELECT COUNT(*) INTO @rocksdb_has_p_s_session_variables"
801+
" FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA ="
802+
" 'performance_schema' AND TABLE_NAME = 'session_variables'"
803+
" */;\n"
804+
"/*!50717 SET @rocksdb_get_is_supported = IF"
805+
" (@rocksdb_has_p_s_session_variables, 'SELECT COUNT(*) INTO"
806+
" @rocksdb_is_supported FROM performance_schema.session_variables"
807+
" WHERE VARIABLE_NAME=?', 'SELECT 0') */;\n"
808+
"/*!50717 PREPARE s FROM @rocksdb_get_is_supported */;\n"
809+
"/*!50717 EXECUTE s USING @rocksdb_bulk_load_var_name */;\n"
810+
"/*!50717 DEALLOCATE PREPARE s */;\n"
811+
"/*!50717 SET @rocksdb_enable_bulk_load = IF"
812+
" (@rocksdb_is_supported, 'SET SESSION rocksdb_bulk_load = 1',"
813+
" 'SET @rocksdb_dummy_bulk_load = 0') */;\n"
814+
"/*!50717 PREPARE s FROM @rocksdb_enable_bulk_load */;\n"
815+
"/*!50717 EXECUTE s */;\n"
816+
"/*!50717 DEALLOCATE PREPARE s */;\n");
817+
806818

807819
check_io(sql_file);
808820
}
@@ -6883,19 +6895,35 @@ static my_bool has_session_variables_like(MYSQL *mysql_con, const char *var_name
68836895
MYSQL_RES *res;
68846896
MYSQL_ROW row;
68856897
char *val= 0;
6886-
char buf[32], query[256];
6887-
my_bool has_var= FALSE;
6898+
char buf[32], query[256];
6899+
my_bool has_var= FALSE;
6900+
my_bool has_table= FALSE;
68886901

68896902
my_snprintf(query, sizeof(query), "SELECT COUNT(*) FROM"
6890-
" INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE"
6891-
" %s", quote_for_like(var_name, buf));
6903+
" INFORMATION_SCHEMA.TABLES WHERE table_schema ="
6904+
" 'performance_schema' AND table_name = 'session_variables'");
68926905
if (mysql_query_with_error_report(mysql_con, &res, query))
68936906
return FALSE;
68946907

68956908
row = mysql_fetch_row(res);
68966909
val = row ? (char*)row[0] : NULL;
6897-
has_var = val && strcmp(val, "0") != 0;
6910+
has_table = val && strcmp(val, "0") != 0;
68986911
mysql_free_result(res);
6912+
6913+
if (has_table)
6914+
{
6915+
my_snprintf(query, sizeof(query), "SELECT COUNT(*) FROM"
6916+
" performance_schema.session_variables WHERE VARIABLE_NAME LIKE"
6917+
" %s", quote_for_like(var_name, buf));
6918+
if (mysql_query_with_error_report(mysql_con, &res, query))
6919+
return FALSE;
6920+
6921+
row = mysql_fetch_row(res);
6922+
val = row ? (char*)row[0] : NULL;
6923+
has_var = val && strcmp(val, "0") != 0;
6924+
mysql_free_result(res);
6925+
}
6926+
68996927
return has_var;
69006928
}
69016929

mysql-test/r/backup_locks_mysqldump.result

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ root@localhost on using Socket
1818
/*!40103 SET TIME_ZONE='+00:00' */
1919
FLUSH TABLES
2020
FLUSH TABLES WITH READ LOCK
21-
SELECT COUNT(*) FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE 'rocksdb\_skip\_fill\_cache'
21+
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'performance_schema' AND table_name = 'session_variables'
22+
SELECT COUNT(*) FROM performance_schema.session_variables WHERE VARIABLE_NAME LIKE 'rocksdb\_skip\_fill\_cache'
2223
SHOW VARIABLES LIKE 'gtid\_mode'
2324
SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN (SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('test'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE, TOTAL_EXTENTS, INITIAL_SIZE ORDER BY LOGFILE_GROUP_NAME
2425
SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('test')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME
@@ -62,7 +63,8 @@ root@localhost on using Socket
6263
/*!40103 SET TIME_ZONE='+00:00' */
6364
SHOW VARIABLES LIKE 'have_backup_locks'
6465
LOCK TABLES FOR BACKUP
65-
SELECT COUNT(*) FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE 'rocksdb\_skip\_fill\_cache'
66+
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'performance_schema' AND table_name = 'session_variables'
67+
SELECT COUNT(*) FROM performance_schema.session_variables WHERE VARIABLE_NAME LIKE 'rocksdb\_skip\_fill\_cache'
6668
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
6769
START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
6870
SHOW VARIABLES LIKE 'gtid\_mode'
@@ -112,7 +114,8 @@ root@localhost on using Socket
112114
SHOW VARIABLES LIKE 'have_backup_locks'
113115
SHOW STATUS LIKE 'binlog_snapshot_%'
114116
LOCK TABLES FOR BACKUP
115-
SELECT COUNT(*) FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE 'rocksdb\_skip\_fill\_cache'
117+
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'performance_schema' AND table_name = 'session_variables'
118+
SELECT COUNT(*) FROM performance_schema.session_variables WHERE VARIABLE_NAME LIKE 'rocksdb\_skip\_fill\_cache'
116119
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
117120
START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
118121
SHOW VARIABLES LIKE 'gtid\_mode'

mysql-test/r/mysqldump-max.result

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,16 @@ id name
8888
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
8989
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
9090
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
91-
/*!50112 SELECT COUNT(*) INTO @is_rocksdb_supported FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='rocksdb_bulk_load' */;
92-
/*!50112 SET @save_old_rocksdb_bulk_load = IF (@is_rocksdb_supported, 'SET @old_rocksdb_bulk_load = @@rocksdb_bulk_load', 'SET @dummy_old_rocksdb_bulk_load = 0') */;
93-
/*!50112 PREPARE s FROM @save_old_rocksdb_bulk_load */;
94-
/*!50112 EXECUTE s */;
95-
/*!50112 SET @enable_bulk_load = IF (@is_rocksdb_supported, 'SET SESSION rocksdb_bulk_load = 1', 'SET @dummy_rocksdb_bulk_load = 0') */;
96-
/*!50112 PREPARE s FROM @enable_bulk_load */;
97-
/*!50112 EXECUTE s */;
98-
/*!50112 DEALLOCATE PREPARE s */;
91+
/*!50717 SET @rocksdb_bulk_load_var_name='rocksdb_bulk_load' */;
92+
/*!50717 SELECT COUNT(*) INTO @rocksdb_has_p_s_session_variables FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'performance_schema' AND TABLE_NAME = 'session_variables' */;
93+
/*!50717 SET @rocksdb_get_is_supported = IF (@rocksdb_has_p_s_session_variables, 'SELECT COUNT(*) INTO @rocksdb_is_supported FROM performance_schema.session_variables WHERE VARIABLE_NAME=?', 'SELECT 0') */;
94+
/*!50717 PREPARE s FROM @rocksdb_get_is_supported */;
95+
/*!50717 EXECUTE s USING @rocksdb_bulk_load_var_name */;
96+
/*!50717 DEALLOCATE PREPARE s */;
97+
/*!50717 SET @rocksdb_enable_bulk_load = IF (@rocksdb_is_supported, 'SET SESSION rocksdb_bulk_load = 1', 'SET @rocksdb_dummy_bulk_load = 0') */;
98+
/*!50717 PREPARE s FROM @rocksdb_enable_bulk_load */;
99+
/*!50717 EXECUTE s */;
100+
/*!50717 DEALLOCATE PREPARE s */;
99101

100102
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */;
101103

@@ -209,14 +211,16 @@ UNLOCK TABLES;
209211
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
210212
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
211213
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
212-
/*!50112 SELECT COUNT(*) INTO @is_rocksdb_supported FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='rocksdb_bulk_load' */;
213-
/*!50112 SET @save_old_rocksdb_bulk_load = IF (@is_rocksdb_supported, 'SET @old_rocksdb_bulk_load = @@rocksdb_bulk_load', 'SET @dummy_old_rocksdb_bulk_load = 0') */;
214-
/*!50112 PREPARE s FROM @save_old_rocksdb_bulk_load */;
215-
/*!50112 EXECUTE s */;
216-
/*!50112 SET @enable_bulk_load = IF (@is_rocksdb_supported, 'SET SESSION rocksdb_bulk_load = 1', 'SET @dummy_rocksdb_bulk_load = 0') */;
217-
/*!50112 PREPARE s FROM @enable_bulk_load */;
218-
/*!50112 EXECUTE s */;
219-
/*!50112 DEALLOCATE PREPARE s */;
214+
/*!50717 SET @rocksdb_bulk_load_var_name='rocksdb_bulk_load' */;
215+
/*!50717 SELECT COUNT(*) INTO @rocksdb_has_p_s_session_variables FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'performance_schema' AND TABLE_NAME = 'session_variables' */;
216+
/*!50717 SET @rocksdb_get_is_supported = IF (@rocksdb_has_p_s_session_variables, 'SELECT COUNT(*) INTO @rocksdb_is_supported FROM performance_schema.session_variables WHERE VARIABLE_NAME=?', 'SELECT 0') */;
217+
/*!50717 PREPARE s FROM @rocksdb_get_is_supported */;
218+
/*!50717 EXECUTE s USING @rocksdb_bulk_load_var_name */;
219+
/*!50717 DEALLOCATE PREPARE s */;
220+
/*!50717 SET @rocksdb_enable_bulk_load = IF (@rocksdb_is_supported, 'SET SESSION rocksdb_bulk_load = 1', 'SET @rocksdb_dummy_bulk_load = 0') */;
221+
/*!50717 PREPARE s FROM @rocksdb_enable_bulk_load */;
222+
/*!50717 EXECUTE s */;
223+
/*!50717 DEALLOCATE PREPARE s */;
220224

221225
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */;
222226

0 commit comments

Comments
 (0)