Merge remote-tracking branch 'origin/10.2' into bb-10.2-ext
This commit is contained in:
commit
765347384a
@ -39,8 +39,4 @@ else
|
||||
fi
|
||||
fi
|
||||
|
||||
# main.mysqlhotcopy_myisam consitently failed in travis containers
|
||||
# https://travis-ci.org/grooverdan/mariadb-server/builds/217661580
|
||||
echo 'main.mysqlhotcopy_myisam : unstable in containers' >> ${TRAVIS_BUILD_DIR}/mysql-test/unstable-tests
|
||||
echo 'archive.mysqlhotcopy_archive : unstable in containers' >> ${TRAVIS_BUILD_DIR}/mysql-test/unstable-tests
|
||||
set +v +x
|
||||
|
24
.travis.yml
24
.travis.yml
@ -42,13 +42,33 @@ matrix:
|
||||
compiler: gcc
|
||||
script:
|
||||
- ${CC} --version ; ${CXX} --version
|
||||
# Just for disabling hotcopy tests for now
|
||||
- source .travis.compiler.sh
|
||||
# https://github.com/travis-ci/travis-ci/issues/7062 - /run/shm isn't writable or executable
|
||||
# in trusty containers
|
||||
- export MTR_MEM=/tmp
|
||||
- env DEB_BUILD_OPTIONS="parallel=6" debian/autobake-deb.sh;
|
||||
- ccache --show-stats
|
||||
# Until OSX becomes a bit more stable: MDEV-12435
|
||||
allow_failures:
|
||||
- os: osx
|
||||
compiler: clang
|
||||
env: GCC_VERSION=4.8 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=rpl
|
||||
- os: osx
|
||||
compiler: clang
|
||||
env: GCC_VERSION=5 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=main,archive,optimizer_unfixed_bugs,parts,sys_vars,unit,vcol,innodb,innodb_gis,innodb_zip,innodb_fts
|
||||
- os: osx
|
||||
compiler: clang
|
||||
env: GCC_VERSION=6 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=binlog,binlog_encryption,encryption,rocksdb
|
||||
- os: osx
|
||||
compiler: clang
|
||||
env: GCC_VERSION=6 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=csv,federated,funcs_1,funcs_2,gcol,handler,heap,json,maria,percona,perfschema,plugins,multi_source,roles
|
||||
# MDEV-13002 plugins.server_audit and plugins.thread_pool_server_audit test fail due to mysqltest error
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
env: GCC_VERSION=6 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=csv,federated,funcs_1,funcs_2,gcol,handler,heap,json,maria,percona,perfschema,plugins,multi_source,roles
|
||||
- os: linux
|
||||
compiler: clang
|
||||
env: GCC_VERSION=6 TYPE=RelWithDebInfo MYSQL_TEST_SUITES=csv,federated,funcs_1,funcs_2,gcol,handler,heap,json,maria,percona,perfschema,plugins,multi_source,roles
|
||||
|
||||
# Matrix include for coverity
|
||||
# - env:
|
||||
@ -108,6 +128,7 @@ addons:
|
||||
- libaio-dev
|
||||
- libboost-dev
|
||||
- libcurl3-dev
|
||||
- libdbd-mysql
|
||||
- libjudy-dev
|
||||
- libncurses5-dev
|
||||
- libpam0g-dev
|
||||
@ -128,6 +149,7 @@ addons:
|
||||
- liblzma-dev
|
||||
- libzmq-dev
|
||||
- libdistro-info-perl
|
||||
- uuid-dev
|
||||
- devscripts # implicit for any build on Ubuntu
|
||||
|
||||
# libsystemd-daemon-dev # https://github.com/travis-ci/apt-package-whitelist/issues/3882
|
||||
|
2
VERSION
2
VERSION
@ -1,3 +1,3 @@
|
||||
MYSQL_VERSION_MAJOR=10
|
||||
MYSQL_VERSION_MINOR=2
|
||||
MYSQL_VERSION_PATCH=6
|
||||
MYSQL_VERSION_PATCH=7
|
||||
|
@ -3061,7 +3061,6 @@ static int com_server_help(String *buffer __attribute__((unused)),
|
||||
{
|
||||
unsigned int num_fields= mysql_num_fields(result);
|
||||
my_ulonglong num_rows= mysql_num_rows(result);
|
||||
mysql_fetch_fields(result);
|
||||
if (num_fields==3 && num_rows==1)
|
||||
{
|
||||
if (!(cur= mysql_fetch_row(result)))
|
||||
|
@ -1130,7 +1130,7 @@ static int check_version_match(void)
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
char self_name[FN_REFLEN];
|
||||
char self_name[FN_REFLEN + 1];
|
||||
|
||||
MY_INIT(argv[0]);
|
||||
|
||||
@ -1138,7 +1138,7 @@ int main(int argc, char **argv)
|
||||
if (GetModuleFileName(NULL, self_name, FN_REFLEN) == 0)
|
||||
#endif
|
||||
{
|
||||
strncpy(self_name, argv[0], FN_REFLEN);
|
||||
strmake_buf(self_name, argv[0]);
|
||||
}
|
||||
|
||||
if (init_dynamic_string(&ds_args, "", 512, 256) ||
|
||||
|
@ -47,6 +47,7 @@ static uint opt_count_iterations= 0, my_end_arg;
|
||||
static ulong opt_connect_timeout, opt_shutdown_timeout;
|
||||
static char * unix_port=0;
|
||||
static char *opt_plugin_dir= 0, *opt_default_auth= 0;
|
||||
static bool sql_log_bin_off= false;
|
||||
|
||||
#ifdef HAVE_SMEM
|
||||
static char *shared_memory_base_name=0;
|
||||
@ -600,6 +601,31 @@ static my_bool sql_connect(MYSQL *mysql, uint wait)
|
||||
}
|
||||
|
||||
|
||||
static int maybe_disable_binlog(MYSQL *mysql)
|
||||
{
|
||||
if (opt_local && !sql_log_bin_off)
|
||||
{
|
||||
if (mysql_query(mysql, "set local sql_log_bin=0"))
|
||||
{
|
||||
my_printf_error(0, "SET LOCAL SQL_LOG_BIN=0 failed; error: '%-.200s'",
|
||||
error_flags, mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
sql_log_bin_off= true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int flush(MYSQL *mysql, const char *what)
|
||||
{
|
||||
char buf[FN_REFLEN];
|
||||
my_snprintf(buf, sizeof(buf), "flush %s%s",
|
||||
(opt_local && !sql_log_bin_off ? "local " : ""), what);
|
||||
return mysql_query(mysql, buf);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@brief Execute all commands
|
||||
|
||||
@ -616,6 +642,7 @@ static my_bool sql_connect(MYSQL *mysql, uint wait)
|
||||
|
||||
static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
{
|
||||
int ret = 0;
|
||||
const char *status;
|
||||
/*
|
||||
MySQL documentation relies on the fact that mysqladmin will
|
||||
@ -628,17 +655,6 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
struct my_rnd_struct rand_st;
|
||||
char buff[FN_REFLEN + 20];
|
||||
|
||||
if (opt_local)
|
||||
{
|
||||
sprintf(buff, "set local sql_log_bin=0");
|
||||
if (mysql_query(mysql, buff))
|
||||
{
|
||||
my_printf_error(0, "SET LOCAL SQL_LOG_BIN=0 failed; error: '%-.200s'",
|
||||
error_flags, mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
for (; argc > 0 ; argv++,argc--)
|
||||
{
|
||||
int command;
|
||||
@ -650,6 +666,8 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
my_printf_error(0, "Too few arguments to create", error_flags);
|
||||
return 1;
|
||||
}
|
||||
if (maybe_disable_binlog(mysql))
|
||||
return -1;
|
||||
sprintf(buff,"create database `%.*s`",FN_REFLEN,argv[1]);
|
||||
if (mysql_query(mysql,buff))
|
||||
{
|
||||
@ -667,6 +685,8 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
my_printf_error(0, "Too few arguments to drop", error_flags);
|
||||
return 1;
|
||||
}
|
||||
if (maybe_disable_binlog(mysql))
|
||||
return -1;
|
||||
if (drop_db(mysql,argv[1]))
|
||||
return -1;
|
||||
argc--; argv++;
|
||||
@ -707,7 +727,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_PRIVILEGES:
|
||||
case ADMIN_RELOAD:
|
||||
if (mysql_query(mysql,"flush privileges"))
|
||||
if (flush(mysql, "privileges"))
|
||||
{
|
||||
my_printf_error(0, "reload failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -911,7 +931,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_LOGS:
|
||||
{
|
||||
if (mysql_query(mysql,"flush logs"))
|
||||
if (flush(mysql, "logs"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -921,7 +941,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_BINARY_LOG:
|
||||
{
|
||||
if (mysql_query(mysql, "flush binary logs"))
|
||||
if (flush(mysql, "binary logs"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -931,7 +951,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_ENGINE_LOG:
|
||||
{
|
||||
if (mysql_query(mysql,"flush engine logs"))
|
||||
if (flush(mysql, "engine logs"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -941,7 +961,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_ERROR_LOG:
|
||||
{
|
||||
if (mysql_query(mysql, "flush error logs"))
|
||||
if (flush(mysql, "error logs"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -951,7 +971,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_GENERAL_LOG:
|
||||
{
|
||||
if (mysql_query(mysql, "flush general logs"))
|
||||
if (flush(mysql, "general logs"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -961,7 +981,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_RELAY_LOG:
|
||||
{
|
||||
if (mysql_query(mysql, "flush relay logs"))
|
||||
if (flush(mysql, "relay logs"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -971,7 +991,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_SLOW_LOG:
|
||||
{
|
||||
if (mysql_query(mysql,"flush slow logs"))
|
||||
if (flush(mysql, "slow logs"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -981,7 +1001,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_HOSTS:
|
||||
{
|
||||
if (mysql_query(mysql,"flush hosts"))
|
||||
if (flush(mysql, "hosts"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -991,7 +1011,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_TABLES:
|
||||
{
|
||||
if (mysql_query(mysql,"flush tables"))
|
||||
if (flush(mysql, "tables"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -1001,7 +1021,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_STATUS:
|
||||
{
|
||||
if (mysql_query(mysql,"flush status"))
|
||||
if (flush(mysql, "status"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -1011,7 +1031,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_TABLE_STATISTICS:
|
||||
{
|
||||
if (mysql_query(mysql,"flush table_statistics"))
|
||||
if (flush(mysql, "table_statistics"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -1021,7 +1041,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_INDEX_STATISTICS:
|
||||
{
|
||||
if (mysql_query(mysql,"flush index_statistics"))
|
||||
if (flush(mysql, "index_statistics"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -1031,7 +1051,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_USER_STATISTICS:
|
||||
{
|
||||
if (mysql_query(mysql,"flush user_statistics"))
|
||||
if (flush(mysql, "user_statistics"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -1041,7 +1061,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_USER_RESOURCES:
|
||||
{
|
||||
if (mysql_query(mysql, "flush user_resources"))
|
||||
if (flush(mysql, "user_resources"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -1051,7 +1071,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_CLIENT_STATISTICS:
|
||||
{
|
||||
if (mysql_query(mysql,"flush client_statistics"))
|
||||
if (flush(mysql, "client_statistics"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -1061,9 +1081,8 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_ALL_STATISTICS:
|
||||
{
|
||||
if (mysql_query(mysql,
|
||||
"flush table_statistics,index_statistics,"
|
||||
"user_statistics,client_statistics"))
|
||||
if (flush(mysql, "table_statistics,index_statistics,"
|
||||
"user_statistics,client_statistics"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -1073,9 +1092,8 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
}
|
||||
case ADMIN_FLUSH_ALL_STATUS:
|
||||
{
|
||||
if (mysql_query(mysql,
|
||||
"flush status,table_statistics,index_statistics,"
|
||||
"user_statistics,client_statistics"))
|
||||
if (flush(mysql, "status,table_statistics,index_statistics,"
|
||||
"user_statistics,client_statistics"))
|
||||
{
|
||||
my_printf_error(0, "flush failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
@ -1093,6 +1111,8 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
start_time=time((time_t*) 0);
|
||||
my_rnd_init(&rand_st,(ulong) start_time,(ulong) start_time/2);
|
||||
|
||||
if (maybe_disable_binlog(mysql))
|
||||
return -1;
|
||||
if (argc < 1)
|
||||
{
|
||||
my_printf_error(0, "Too few arguments to change password", error_flags);
|
||||
@ -1106,7 +1126,8 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
if (strcmp(typed_password, verified) != 0)
|
||||
{
|
||||
my_printf_error(0,"Passwords don't match",MYF(ME_BELL));
|
||||
return -1;
|
||||
ret = -1;
|
||||
goto password_done;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1133,7 +1154,8 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
{
|
||||
my_printf_error(0, "Could not determine old_passwords setting from server; error: '%s'",
|
||||
error_flags, mysql_error(mysql));
|
||||
return -1;
|
||||
ret = -1;
|
||||
goto password_done;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1144,7 +1166,8 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
"Could not get old_passwords setting from "
|
||||
"server; error: '%s'",
|
||||
error_flags, mysql_error(mysql));
|
||||
return -1;
|
||||
ret = -1;
|
||||
goto password_done;
|
||||
}
|
||||
if (!mysql_num_rows(res))
|
||||
old= 1;
|
||||
@ -1169,15 +1192,15 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
{
|
||||
my_printf_error(0, "Can't turn off logging; error: '%s'",
|
||||
error_flags, mysql_error(mysql));
|
||||
return -1;
|
||||
ret = -1;
|
||||
}
|
||||
else
|
||||
if (mysql_query(mysql,buff))
|
||||
{
|
||||
if (mysql_errno(mysql)!=1290)
|
||||
{
|
||||
my_printf_error(0,"unable to change password; error: '%s'",
|
||||
error_flags, mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1191,9 +1214,10 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
" --skip-grant-tables).\n"
|
||||
"Use: \"mysqladmin flush-privileges password '*'\""
|
||||
" instead", error_flags);
|
||||
return -1;
|
||||
}
|
||||
ret = -1;
|
||||
}
|
||||
password_done:
|
||||
/* free up memory from prompted password */
|
||||
if (typed_password != argv[1])
|
||||
{
|
||||
@ -1300,7 +1324,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2480,7 +2480,7 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
|
||||
int2store(buf + BIN_LOG_HEADER_SIZE, binlog_flags);
|
||||
|
||||
size_t tlen = strlen(logname);
|
||||
if (tlen > UINT_MAX)
|
||||
if (tlen > sizeof(buf) - 10)
|
||||
{
|
||||
error("Log name too long.");
|
||||
DBUG_RETURN(ERROR_STOP);
|
||||
|
@ -2174,6 +2174,7 @@ static void print_xml_comment(FILE *xml_file, size_t len,
|
||||
case '-':
|
||||
if (*(comment_string + 1) == '-') /* Only one hyphen allowed. */
|
||||
break;
|
||||
/* fall through */
|
||||
default:
|
||||
fputc(*comment_string, xml_file);
|
||||
break;
|
||||
@ -2850,6 +2851,8 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
||||
|
||||
my_free(scv_buff);
|
||||
|
||||
if (path)
|
||||
my_fclose(sql_file, MYF(MY_WME));
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
else
|
||||
@ -5940,8 +5943,7 @@ static my_bool get_view_structure(char *table, char* db)
|
||||
dynstr_free(&ds_view);
|
||||
}
|
||||
|
||||
if (switch_character_set_results(mysql, default_charset))
|
||||
DBUG_RETURN(1);
|
||||
switch_character_set_results(mysql, default_charset);
|
||||
|
||||
/* If a separate .sql file was opened, close it now */
|
||||
if (sql_file != md_result_file)
|
||||
|
@ -1720,13 +1720,12 @@ void log_msg(const char *fmt, ...)
|
||||
int cat_file(DYNAMIC_STRING* ds, const char* filename)
|
||||
{
|
||||
int fd;
|
||||
size_t len;
|
||||
int len;
|
||||
char buff[16384];
|
||||
|
||||
if ((fd= my_open(filename, O_RDONLY, MYF(0))) < 0)
|
||||
return 1;
|
||||
while((len= my_read(fd, (uchar*)&buff,
|
||||
sizeof(buff)-1, MYF(0))) > 0)
|
||||
while((len= (int)my_read(fd, (uchar*)&buff, sizeof(buff)-1, MYF(0))) > 0)
|
||||
{
|
||||
char *p= buff, *start= buff,*end=buff+len;
|
||||
while (p < end)
|
||||
|
@ -41,4 +41,3 @@ SET(WSREP_PROC_INFO ${WITH_WSREP})
|
||||
IF(WITH_WSREP)
|
||||
SET(WSREP_PATCH_VERSION "wsrep_${WSREP_VERSION}")
|
||||
ENDIF()
|
||||
|
||||
|
@ -576,21 +576,4 @@
|
||||
#define __STDC_FORMAT_MACROS
|
||||
#endif
|
||||
|
||||
/*
|
||||
stat structure (from <sys/stat.h>) is conditionally defined
|
||||
to have different layout and size depending on the defined macros.
|
||||
The correct macro is defined in my_config.h, which means it MUST be
|
||||
included first (or at least before <features.h> - so, practically,
|
||||
before including any system headers).
|
||||
|
||||
Check the include order by looking at __GLIBC__ (defined in <features.h>)
|
||||
|
||||
But we cannot force all third-party clients/connectors to include
|
||||
my_config.h first. So, their crashes are their responsibility,
|
||||
we enable this check only for MariaDB sources (SAFE_MUTEX check).
|
||||
*/
|
||||
#if defined(__GLIBC__) && defined(SAFE_MUTEX)
|
||||
#error <my_config.h> MUST be included first!
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -82,7 +82,7 @@ uintmax_t cur_page_num;
|
||||
/* Skip the checksum verification. */
|
||||
static bool no_check;
|
||||
/* Enabled for strict checksum verification. */
|
||||
bool strict_verify = 0;
|
||||
bool strict_verify;
|
||||
/* Enabled for rewrite checksum. */
|
||||
static bool do_write;
|
||||
/* Mismatches count allowed (0 by default). */
|
||||
@ -280,7 +280,8 @@ void print_index_leaf_stats(
|
||||
fprintf(fil_out, "page_no\tdata_size\tn_recs\n");
|
||||
while (it_page != index.leaves.end()) {
|
||||
const per_page_stats& stat = it_page->second;
|
||||
fprintf(fil_out, "%llu\t%lu\t%lu\n", it_page->first, stat.data_size, stat.n_recs);
|
||||
fprintf(fil_out, "%llu\t" ULINTPF "\t" ULINTPF "\n",
|
||||
it_page->first, stat.data_size, stat.n_recs);
|
||||
page_no = stat.right_page_no;
|
||||
it_page = index.leaves.find(page_no);
|
||||
}
|
||||
@ -315,12 +316,15 @@ void defrag_analysis(
|
||||
}
|
||||
|
||||
if (index.leaf_pages) {
|
||||
fprintf(fil_out, "count = %lu free = %lu\n", index.count, index.free_pages);
|
||||
fprintf(fil_out, "count = " ULINTPF " free = " ULINTPF "\n",
|
||||
index.count, index.free_pages);
|
||||
}
|
||||
|
||||
fprintf(fil_out, "%llu\t\t%llu\t\t%lu\t\t%lu\t\t%lu\t\t%.2f\t%lu\n",
|
||||
fprintf(fil_out, "%llu\t\t%llu\t\t"
|
||||
ULINTPF "\t\t%lu\t\t" ULINTPF "\t\t%.2f\t" ULINTPF "\n",
|
||||
id, index.leaf_pages, n_leaf_pages, n_merge, n_pages,
|
||||
1.0 - (double)n_pages / (double)n_leaf_pages, index.max_data_size);
|
||||
1.0 - (double)n_pages / (double)n_leaf_pages,
|
||||
index.max_data_size);
|
||||
}
|
||||
|
||||
void print_leaf_stats(
|
||||
|
@ -27,101 +27,6 @@ IF(NOT WIN32)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(WITH_LIBARCHIVE STREQUAL "STATIC")
|
||||
SET(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib)
|
||||
ENDIF()
|
||||
|
||||
FIND_PACKAGE(LibArchive)
|
||||
|
||||
IF(NOT DEFINED WITH_LIBARCHIVE)
|
||||
IF(LibArchive_FOUND)
|
||||
SET(WITH_LIBARCHIVE_DEFAULT ON)
|
||||
ELSE()
|
||||
SET(WITH_LIBARCHIVE_DEFAULT OFF)
|
||||
ENDIF()
|
||||
SET(WITH_LIBARCHIVE ${WITH_LIBARCHIVE_DEFAULT} CACHE STRING "Use libarchive for streaming features (ON, OFF or STATIC)" )
|
||||
ENDIF()
|
||||
|
||||
IF(NOT WITH_LIBARCHIVE MATCHES "^(ON|OFF|STATIC)$")
|
||||
MESSAGE(FATAL_ERROR "Invalid value for WITH_LIBARCHIVE: '${WITH_LIBARCHIVE}'. Use one of ON, OFF or STATIC")
|
||||
ENDIF()
|
||||
|
||||
IF(UNIX)
|
||||
SET(PIC_FLAG -fPIC)
|
||||
ENDIF()
|
||||
|
||||
IF((NOT WITH_LIBARCHIVE STREQUAL "OFF") AND (NOT LibArchive_FOUND))
|
||||
IF(CMAKE_VERSION VERSION_LESS "2.8.12")
|
||||
MESSAGE("libarchive can't be built, old cmake")
|
||||
ELSE()
|
||||
# Build a local version
|
||||
INCLUDE(ExternalProject)
|
||||
SET(LIBARCHIVE_DIR ${CMAKE_CURRENT_BINARY_DIR}/libarchive)
|
||||
SET(libarchive_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/libarchive)
|
||||
SET(libarchive_CMAKE_ARGS
|
||||
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
|
||||
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||
-DENABLE_ICONV=OFF
|
||||
-DENABLE_TAR=ON
|
||||
-DENABLE_OPENSSL=OFF
|
||||
-DENABLE_TEST=OFF
|
||||
"-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG} ${PIC_FLAG}"
|
||||
"-DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO} ${PIC_FLAG}"
|
||||
"-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE} ${PIC_FLAG}"
|
||||
"-DCMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL} ${PIC_FLAG}"
|
||||
)
|
||||
IF(WIN32)
|
||||
SET(libarchive_CMAKE_ARGS ${libarchive_CMAKE_ARGS} -DWINDOWS_VERSION=WIN7 -DCMAKE_DEBUG_POSTFIX=d)
|
||||
SET(LIBARCHIVE_RELEASE_LIB ${LIBARCHIVE_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}archive_static${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
SET(LIBARCHIVE_DEBUG_LIB ${LIBARCHIVE_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}archive_staticd${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
SET(byproducts ${LIBARCHIVE_RELEASE_LIB} ${LIBARCHIVE_DEBUG_LIB})
|
||||
ELSE()
|
||||
SET(LIBARCHIVE_LIB ${LIBARCHIVE_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}archive${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
SET(byproducts ${LIBARCHIVE_LIB})
|
||||
ENDIF()
|
||||
|
||||
IF(CMAKE_VERSION VERSION_GREATER "3.1")
|
||||
SET(byproducts BUILD_BYPRODUCTS ${byproducts})
|
||||
ENDIF()
|
||||
|
||||
ExternalProject_Add(libarchive
|
||||
PREFIX ${libarchive_PREFIX}
|
||||
DOWNLOAD_DIR ${LIBARCHIVE_DIR}
|
||||
URL http://www.libarchive.org/downloads/libarchive-3.2.2.tar.gz
|
||||
INSTALL_DIR ${LIBARCHIVE_DIR}
|
||||
CMAKE_ARGS ${libarchive_CMAKE_ARGS}
|
||||
${byproducts}
|
||||
)
|
||||
ADD_LIBRARY(archive_static STATIC IMPORTED)
|
||||
ADD_DEPENDENCIES(archive_static libarchive)
|
||||
IF(WIN32)
|
||||
SET_PROPERTY(TARGET archive_static PROPERTY IMPORTED_LOCATION_RELWITHDEBINFO ${LIBARCHIVE_RELEASE_LIB})
|
||||
SET_PROPERTY(TARGET archive_static PROPERTY IMPORTED_LOCATION_RELEASE ${LIBARCHIVE_RELEASE_LIB})
|
||||
SET_PROPERTY(TARGET archive_static PROPERTY IMPORTED_LOCATION_DEBUG ${LIBARCHIVE_DEBUG_LIB})
|
||||
SET_PROPERTY(TARGET archive_static PROPERTY IMPORTED_LOCATION_MINSIZEREL ${LIBARCHIVE_RELEASE_LIB})
|
||||
ELSE()
|
||||
SET_PROPERTY(TARGET archive_static PROPERTY IMPORTED_LOCATION ${LIBARCHIVE_LIB})
|
||||
ENDIF()
|
||||
|
||||
SET(LibArchive_FOUND ON )
|
||||
SET(LibArchive_INCLUDE_DIRS ${LIBARCHIVE_DIR}/include )
|
||||
SET(LibArchive_LIBRARIES archive_static)
|
||||
IF(WIN32)
|
||||
SET(LIBARCHIVE_STATIC 1)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
|
||||
IF(WITH_LIBARCHIVE AND LibArchive_FOUND)
|
||||
ADD_DEFINITIONS(-DHAVE_LIBARCHIVE)
|
||||
IF(LIBARCHIVE_STATIC)
|
||||
ADD_DEFINITIONS(-DLIBARCHIVE_STATIC)
|
||||
ENDIF()
|
||||
INCLUDE_DIRECTORIES(${LibArchive_INCLUDE_DIRS})
|
||||
LINK_LIBRARIES(${LibArchive_LIBRARIES})
|
||||
SET(DS_ARCHIVE_SOURCE ds_archive.c)
|
||||
ENDIF()
|
||||
|
||||
INCLUDE_DIRECTORIES(
|
||||
${CMAKE_SOURCE_DIR}/include
|
||||
@ -154,7 +59,6 @@ MYSQL_ADD_EXECUTABLE(mariabackup
|
||||
innobackupex.cc
|
||||
changed_page_bitmap.cc
|
||||
datasink.c
|
||||
${DS_ARCHIVE_SOURCE}
|
||||
ds_buffer.c
|
||||
ds_compress.c
|
||||
ds_local.c
|
||||
|
@ -450,7 +450,7 @@ datadir_iter_free(datadir_iter_t *it)
|
||||
/************************************************************************
|
||||
Holds the state needed to copy single data file. */
|
||||
struct datafile_cur_t {
|
||||
os_file_t file;
|
||||
pfs_os_file_t file;
|
||||
char rel_path[FN_REFLEN];
|
||||
char abs_path[FN_REFLEN];
|
||||
MY_STAT statinfo;
|
||||
|
@ -35,7 +35,7 @@ Remove these on the first opportunity, i.e. single-binary XtraBackup. */
|
||||
/** Single bitmap file information */
|
||||
struct log_online_bitmap_file_t {
|
||||
char name[FN_REFLEN]; /*!< Name with full path */
|
||||
os_file_t file; /*!< Handle to opened file */
|
||||
pfs_os_file_t file; /*!< Handle to opened file */
|
||||
ib_uint64_t size; /*!< Size of the file */
|
||||
ib_uint64_t offset; /*!< Offset of the next read,
|
||||
or count of already-read bytes
|
||||
|
@ -30,4 +30,4 @@ ENDIF()
|
||||
IF(HAVE_CLMUL_INSTRUCTION)
|
||||
ADD_DEFINITIONS(-DHAVE_CLMUL_INSTRUCTION)
|
||||
ENDIF()
|
||||
ADD_LIBRARY(crc crc_glue.c crc-intel-pclmul.c)
|
||||
ADD_LIBRARY(crc STATIC crc_glue.c crc-intel-pclmul.c)
|
||||
|
@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
*******************************************************/
|
||||
|
||||
#include "my_config.h"
|
||||
#include "crc_glue.h"
|
||||
#include "crc-intel-pclmul.h"
|
||||
#include <stdint.h>
|
||||
|
@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
#include "read_filt.h"
|
||||
|
||||
struct xb_fil_cur_t {
|
||||
os_file_t file; /*!< source file handle */
|
||||
pfs_os_file_t file; /*!< source file handle */
|
||||
fil_node_t* node; /*!< source tablespace node */
|
||||
char rel_path[FN_REFLEN];
|
||||
/*!< normalized file path */
|
||||
|
@ -848,9 +848,7 @@ ibx_get_one_option(int optid,
|
||||
opt_ibx_decrypt = true;
|
||||
break;
|
||||
case OPT_STREAM:
|
||||
if (!strcasecmp(argument, "tar"))
|
||||
xtrabackup_stream_fmt = XB_STREAM_FMT_TAR;
|
||||
else if (!strcasecmp(argument, "xbstream"))
|
||||
if (!strcasecmp(argument, "xbstream"))
|
||||
xtrabackup_stream_fmt = XB_STREAM_FMT_XBSTREAM;
|
||||
else {
|
||||
ibx_msg("Invalid --stream argument: %s\n", argument);
|
||||
|
@ -23,17 +23,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
|
||||
extern void os_io_init_simple(void);
|
||||
extern os_file_t files[1000];
|
||||
extern pfs_os_file_t files[1000];
|
||||
extern const char *innodb_checksum_algorithm_names[];
|
||||
extern TYPELIB innodb_checksum_algorithm_typelib;
|
||||
extern dberr_t open_or_create_data_files(
|
||||
ibool* create_new_db,
|
||||
bool* create_new_db,
|
||||
#ifdef UNIV_LOG_ARCHIVE
|
||||
lsn_t* min_arch_log_no,
|
||||
lsn_t* max_arch_log_no,
|
||||
#endif
|
||||
lsn_t* min_flushed_lsn,
|
||||
lsn_t* max_flushed_lsn,
|
||||
#endif
|
||||
lsn_t* flushed_lsn,
|
||||
ulint* sum_of_new_sizes)
|
||||
;
|
||||
int
|
||||
@ -66,7 +65,6 @@ void
|
||||
innodb_log_checksum_func_update(
|
||||
/*============================*/
|
||||
ulint algorithm) /*!< in: algorithm */;
|
||||
dberr_t recv_find_max_checkpoint(log_group_t** max_group, ulint* max_field);
|
||||
dberr_t
|
||||
srv_undo_tablespaces_init(
|
||||
/*======================*/
|
||||
|
@ -42,7 +42,6 @@ typedef struct xb_wstream_file_struct xb_wstream_file_t;
|
||||
|
||||
typedef enum {
|
||||
XB_STREAM_FMT_NONE,
|
||||
XB_STREAM_FMT_TAR,
|
||||
XB_STREAM_FMT_XBSTREAM
|
||||
} xb_stream_fmt_t;
|
||||
|
||||
|
@ -309,8 +309,7 @@ my_bool xtrabackup_rebuild_indexes = FALSE;
|
||||
my_bool xtrabackup_incremental_force_scan = FALSE;
|
||||
|
||||
/* The flushed lsn which is read from data files */
|
||||
lsn_t min_flushed_lsn= 0;
|
||||
lsn_t max_flushed_lsn= 0;
|
||||
lsn_t flushed_lsn= 0;
|
||||
|
||||
/* The size of archived log file */
|
||||
ib_int64_t xtrabackup_arch_file_size = 0ULL;
|
||||
@ -564,7 +563,6 @@ enum options_xtrabackup
|
||||
OPT_INNODB_LOG_BUFFER_SIZE,
|
||||
OPT_INNODB_LOG_FILE_SIZE,
|
||||
OPT_INNODB_LOG_FILES_IN_GROUP,
|
||||
OPT_INNODB_MIRRORED_LOG_GROUPS,
|
||||
OPT_INNODB_OPEN_FILES,
|
||||
OPT_INNODB_SYNC_SPIN_LOOPS,
|
||||
OPT_INNODB_THREAD_CONCURRENCY,
|
||||
@ -704,11 +702,7 @@ struct my_option xb_client_options[] =
|
||||
|
||||
{"stream", OPT_XTRA_STREAM, "Stream all backup files to the standard output "
|
||||
"in the specified format."
|
||||
#ifdef HAVE_LIBARCHIVE
|
||||
"Supported formats are 'tar' and 'xbstream'."
|
||||
#else
|
||||
"Supported format is 'xbstream'."
|
||||
#endif
|
||||
,
|
||||
(G_PTR*) &xtrabackup_stream_str, (G_PTR*) &xtrabackup_stream_str, 0, GET_STR,
|
||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
@ -1453,9 +1447,7 @@ xb_get_one_option(int optid,
|
||||
xtrabackup_target_dir= xtrabackup_real_target_dir;
|
||||
break;
|
||||
case OPT_XTRA_STREAM:
|
||||
if (!strcasecmp(argument, "tar"))
|
||||
xtrabackup_stream_fmt = XB_STREAM_FMT_TAR;
|
||||
else if (!strcasecmp(argument, "xbstream"))
|
||||
if (!strcasecmp(argument, "xbstream"))
|
||||
xtrabackup_stream_fmt = XB_STREAM_FMT_XBSTREAM;
|
||||
else
|
||||
{
|
||||
@ -1906,8 +1898,8 @@ error:
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
static my_bool
|
||||
innodb_end(void)
|
||||
static void
|
||||
innodb_end()
|
||||
{
|
||||
srv_fast_shutdown = (ulint) innobase_fast_shutdown;
|
||||
innodb_inited = 0;
|
||||
@ -1915,9 +1907,7 @@ innodb_end(void)
|
||||
msg("xtrabackup: starting shutdown with innodb_fast_shutdown = %lu\n",
|
||||
srv_fast_shutdown);
|
||||
|
||||
if (innobase_shutdown_for_mysql() != DB_SUCCESS) {
|
||||
goto error;
|
||||
}
|
||||
innodb_shutdown();
|
||||
free(internal_innobase_data_file_path);
|
||||
internal_innobase_data_file_path = NULL;
|
||||
|
||||
@ -1928,12 +1918,6 @@ innodb_end(void)
|
||||
// pthread_mutex_destroy(&commit_threads_m);
|
||||
// pthread_mutex_destroy(&commit_cond_m);
|
||||
// pthread_cond_destroy(&commit_cond);
|
||||
|
||||
return(FALSE);
|
||||
|
||||
error:
|
||||
msg("xtrabackup: innodb_end(): Error occured.\n");
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
/* ================= common ================= */
|
||||
@ -2169,7 +2153,7 @@ xb_write_delta_metadata(const char *filename, const xb_delta_info_t *info)
|
||||
void
|
||||
xtrabackup_io_throttling(void)
|
||||
{
|
||||
if (xtrabackup_throttle && (io_ticket--) < 0) {
|
||||
if (xtrabackup_backup && xtrabackup_throttle && (io_ticket--) < 0) {
|
||||
os_event_reset(wait_throttle);
|
||||
os_event_wait(wait_throttle);
|
||||
}
|
||||
@ -2412,7 +2396,7 @@ check_if_skip_table(
|
||||
Reads the space flags from a given data file and returns the compressed
|
||||
page size, or 0 if the space is not compressed. */
|
||||
ulint
|
||||
xb_get_zip_size(os_file_t file)
|
||||
xb_get_zip_size(pfs_os_file_t file)
|
||||
{
|
||||
byte *buf;
|
||||
byte *page;
|
||||
@ -2611,96 +2595,6 @@ skip:
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
static
|
||||
void
|
||||
xtrabackup_choose_lsn_offset(lsn_t start_lsn)
|
||||
{
|
||||
#if SUPPORT_PERCONA_5_5
|
||||
ulint no, alt_no, expected_no;
|
||||
ulint blocks_in_group;
|
||||
lsn_t tmp_offset, end_lsn;
|
||||
int lsn_chosen = 0;
|
||||
log_group_t *group;
|
||||
|
||||
start_lsn = ut_uint64_align_down(start_lsn, OS_FILE_LOG_BLOCK_SIZE);
|
||||
end_lsn = start_lsn + RECV_SCAN_SIZE;
|
||||
|
||||
group = UT_LIST_GET_FIRST(log_sys->log_groups);
|
||||
|
||||
if (mysql_server_version < 50500 || mysql_server_version > 50600) {
|
||||
/* only make sense for Percona Server 5.5 */
|
||||
return;
|
||||
}
|
||||
|
||||
if (server_flavor == FLAVOR_PERCONA_SERVER) {
|
||||
/* it is Percona Server 5.5 */
|
||||
group->alt_offset_chosen = true;
|
||||
group->lsn_offset = group->lsn_offset_alt;
|
||||
return;
|
||||
}
|
||||
|
||||
if (group->lsn_offset_alt == group->lsn_offset ||
|
||||
group->lsn_offset_alt == (lsn_t) -1) {
|
||||
/* we have only one option */
|
||||
return;
|
||||
}
|
||||
|
||||
no = alt_no = (ulint) -1;
|
||||
lsn_chosen = 0;
|
||||
|
||||
blocks_in_group = log_block_convert_lsn_to_no(
|
||||
log_group_get_capacity(group)) - 1;
|
||||
|
||||
/* read log block number from usual offset */
|
||||
if (group->lsn_offset < group->file_size * group->n_files &&
|
||||
(log_group_calc_lsn_offset(start_lsn, group) %
|
||||
UNIV_PAGE_SIZE) % OS_MIN_LOG_BLOCK_SIZE == 0) {
|
||||
log_group_read_log_seg(LOG_RECOVER, log_sys->buf,
|
||||
group, start_lsn, end_lsn);
|
||||
no = log_block_get_hdr_no(log_sys->buf);
|
||||
}
|
||||
|
||||
/* read log block number from Percona Server 5.5 offset */
|
||||
tmp_offset = group->lsn_offset;
|
||||
group->lsn_offset = group->lsn_offset_alt;
|
||||
|
||||
if (group->lsn_offset < group->file_size * group->n_files &&
|
||||
(log_group_calc_lsn_offset(start_lsn, group) %
|
||||
UNIV_PAGE_SIZE) % OS_MIN_LOG_BLOCK_SIZE == 0) {
|
||||
log_group_read_log_seg(LOG_RECOVER, log_sys->buf,
|
||||
group, start_lsn, end_lsn);
|
||||
alt_no = log_block_get_hdr_no(log_sys->buf);
|
||||
}
|
||||
|
||||
expected_no = log_block_convert_lsn_to_no(start_lsn);
|
||||
|
||||
ut_a(!(no == expected_no && alt_no == expected_no));
|
||||
|
||||
group->lsn_offset = tmp_offset;
|
||||
|
||||
if ((no <= expected_no &&
|
||||
((expected_no - no) % blocks_in_group) == 0) ||
|
||||
((expected_no | 0x40000000UL) - no) % blocks_in_group == 0) {
|
||||
/* default offset looks ok */
|
||||
++lsn_chosen;
|
||||
}
|
||||
|
||||
if ((alt_no <= expected_no &&
|
||||
((expected_no - alt_no) % blocks_in_group) == 0) ||
|
||||
((expected_no | 0x40000000UL) - alt_no) % blocks_in_group == 0) {
|
||||
/* PS 5.5 style offset looks ok */
|
||||
++lsn_chosen;
|
||||
group->alt_offset_chosen = true;
|
||||
group->lsn_offset = group->lsn_offset_alt;
|
||||
}
|
||||
|
||||
/* We are in trouble, because we can not make a
|
||||
decision to choose one over the other. Die just
|
||||
like a Buridan's ass */
|
||||
ut_a(lsn_chosen == 1);
|
||||
#endif
|
||||
}
|
||||
|
||||
extern ibool log_block_checksum_is_ok_or_old_format(const byte* block);
|
||||
|
||||
/*******************************************************//**
|
||||
@ -2868,8 +2762,6 @@ static my_bool
|
||||
xtrabackup_copy_logfile(lsn_t from_lsn, my_bool is_last)
|
||||
{
|
||||
/* definition from recv_recovery_from_checkpoint_start() */
|
||||
log_group_t* group;
|
||||
lsn_t group_scanned_lsn;
|
||||
lsn_t contiguous_lsn;
|
||||
|
||||
ut_a(dst_log_file != NULL);
|
||||
@ -2879,66 +2771,50 @@ xtrabackup_copy_logfile(lsn_t from_lsn, my_bool is_last)
|
||||
|
||||
/* TODO: We must check the contiguous_lsn still exists in log file.. */
|
||||
|
||||
group = UT_LIST_GET_FIRST(log_sys->log_groups);
|
||||
bool finished;
|
||||
lsn_t start_lsn;
|
||||
lsn_t end_lsn;
|
||||
|
||||
while (group) {
|
||||
bool finished;
|
||||
lsn_t start_lsn;
|
||||
lsn_t end_lsn;
|
||||
/* reference recv_group_scan_log_recs() */
|
||||
|
||||
/* reference recv_group_scan_log_recs() */
|
||||
finished = false;
|
||||
start_lsn = contiguous_lsn;
|
||||
|
||||
start_lsn = contiguous_lsn;
|
||||
do {
|
||||
end_lsn = start_lsn + RECV_SCAN_SIZE;
|
||||
|
||||
while (!finished) {
|
||||
xtrabackup_io_throttling();
|
||||
|
||||
end_lsn = start_lsn + RECV_SCAN_SIZE;
|
||||
log_mutex_enter();
|
||||
|
||||
xtrabackup_io_throttling();
|
||||
log_group_read_log_seg(LOG_RECOVER, log_sys->buf,
|
||||
&log_sys->log, start_lsn, end_lsn);
|
||||
|
||||
mutex_enter(&log_sys->mutex);
|
||||
bool success = xtrabackup_scan_log_recs(
|
||||
&log_sys->log, is_last,
|
||||
start_lsn, &contiguous_lsn,
|
||||
&log_sys->log.scanned_lsn,
|
||||
&finished);
|
||||
|
||||
log_group_read_log_seg(LOG_RECOVER, log_sys->buf,
|
||||
group, start_lsn, end_lsn, false);
|
||||
|
||||
if (!xtrabackup_scan_log_recs(group, is_last,
|
||||
start_lsn, &contiguous_lsn, &group_scanned_lsn,
|
||||
&finished)) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
mutex_exit(&log_sys->mutex);
|
||||
|
||||
start_lsn = end_lsn;
|
||||
log_mutex_exit();
|
||||
|
||||
if (!success) {
|
||||
ds_close(dst_log_file);
|
||||
msg("xtrabackup: Error: xtrabackup_copy_logfile()"
|
||||
" failed.\n");
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
group->scanned_lsn = group_scanned_lsn;
|
||||
start_lsn = end_lsn;
|
||||
} while (!finished);
|
||||
|
||||
msg_ts(">> log scanned up to (" LSN_PF ")\n",
|
||||
group->scanned_lsn);
|
||||
|
||||
group = UT_LIST_GET_NEXT(log_groups, group);
|
||||
|
||||
/* update global variable*/
|
||||
log_copy_scanned_lsn = group_scanned_lsn;
|
||||
|
||||
/* innodb_mirrored_log_groups must be 1, no other groups */
|
||||
ut_a(group == NULL);
|
||||
|
||||
debug_sync_point("xtrabackup_copy_logfile_pause");
|
||||
|
||||
}
|
||||
msg_ts(">> log scanned up to (" LSN_PF ")\n",
|
||||
log_sys->log.scanned_lsn);
|
||||
|
||||
/* update global variable*/
|
||||
log_copy_scanned_lsn = log_sys->log.scanned_lsn;
|
||||
|
||||
debug_sync_point("xtrabackup_copy_logfile_pause");
|
||||
return(FALSE);
|
||||
|
||||
error:
|
||||
mutex_exit(&log_sys->mutex);
|
||||
ds_close(dst_log_file);
|
||||
msg("xtrabackup: Error: xtrabackup_copy_logfile() failed.\n");
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
static
|
||||
@ -3106,14 +2982,6 @@ files first, and then streams them in a serialized way when closed. */
|
||||
static void
|
||||
xtrabackup_init_datasinks(void)
|
||||
{
|
||||
if (xtrabackup_parallel > 1 && xtrabackup_stream &&
|
||||
xtrabackup_stream_fmt == XB_STREAM_FMT_TAR) {
|
||||
msg("xtrabackup: warning: the --parallel option does not have "
|
||||
"any effect when streaming in the 'tar' format. "
|
||||
"You can use the 'xbstream' format instead.\n");
|
||||
xtrabackup_parallel = 1;
|
||||
}
|
||||
|
||||
/* Start building out the pipelines from the terminus back */
|
||||
if (xtrabackup_stream) {
|
||||
/* All streaming goes to stdout */
|
||||
@ -3131,30 +2999,17 @@ xtrabackup_init_datasinks(void)
|
||||
/* Stream formatting */
|
||||
if (xtrabackup_stream) {
|
||||
ds_ctxt_t *ds;
|
||||
if (xtrabackup_stream_fmt == XB_STREAM_FMT_TAR) {
|
||||
ds = ds_create(xtrabackup_target_dir, DS_TYPE_ARCHIVE);
|
||||
} else if (xtrabackup_stream_fmt == XB_STREAM_FMT_XBSTREAM) {
|
||||
ds = ds_create(xtrabackup_target_dir, DS_TYPE_XBSTREAM);
|
||||
} else {
|
||||
/* bad juju... */
|
||||
ds = NULL;
|
||||
}
|
||||
|
||||
ut_a(xtrabackup_stream_fmt == XB_STREAM_FMT_XBSTREAM);
|
||||
ds = ds_create(xtrabackup_target_dir, DS_TYPE_XBSTREAM);
|
||||
|
||||
xtrabackup_add_datasink(ds);
|
||||
|
||||
ds_set_pipe(ds, ds_data);
|
||||
ds_data = ds;
|
||||
|
||||
if (xtrabackup_stream_fmt != XB_STREAM_FMT_XBSTREAM) {
|
||||
|
||||
/* 'tar' does not allow parallel streams */
|
||||
ds_redo = ds_meta = ds_create(xtrabackup_target_dir,
|
||||
DS_TYPE_TMPFILE);
|
||||
xtrabackup_add_datasink(ds_meta);
|
||||
ds_set_pipe(ds_meta, ds);
|
||||
} else {
|
||||
ds_redo = ds_meta = ds_data;
|
||||
}
|
||||
ds_redo = ds_meta = ds_data;
|
||||
}
|
||||
|
||||
/* Encryption */
|
||||
@ -3271,13 +3126,12 @@ xb_fil_io_init(void)
|
||||
Populates the tablespace memory cache by scanning for and opening data files.
|
||||
@returns DB_SUCCESS or error code.*/
|
||||
static
|
||||
ulint
|
||||
xb_load_tablespaces(void)
|
||||
/*=====================*/
|
||||
dberr_t
|
||||
xb_load_tablespaces()
|
||||
{
|
||||
ulint i;
|
||||
ibool create_new_db;
|
||||
ulint err;
|
||||
bool create_new_db;
|
||||
dberr_t err;
|
||||
ulint sum_of_new_sizes;
|
||||
lsn_t min_arch_logno, max_arch_logno;
|
||||
|
||||
@ -3292,7 +3146,7 @@ xb_load_tablespaces(void)
|
||||
|
||||
err = open_or_create_data_files(&create_new_db,
|
||||
&min_arch_logno, &max_arch_logno,
|
||||
&min_flushed_lsn, &max_flushed_lsn,
|
||||
&flushed_lsn,
|
||||
&sum_of_new_sizes);
|
||||
if (err != DB_SUCCESS) {
|
||||
msg("xtrabackup: Could not open or create data files.\n"
|
||||
@ -3348,9 +3202,9 @@ xb_load_tablespaces(void)
|
||||
Initialize the tablespace memory cache and populate it by scanning for and
|
||||
opening data files.
|
||||
@returns DB_SUCCESS or error code.*/
|
||||
ulint
|
||||
xb_data_files_init(void)
|
||||
/*====================*/
|
||||
static
|
||||
dberr_t
|
||||
xb_data_files_init()
|
||||
{
|
||||
xb_fil_io_init();
|
||||
|
||||
@ -3359,9 +3213,9 @@ xb_data_files_init(void)
|
||||
|
||||
/************************************************************************
|
||||
Destroy the tablespace memory cache. */
|
||||
static
|
||||
void
|
||||
xb_data_files_close(void)
|
||||
/*====================*/
|
||||
xb_data_files_close()
|
||||
{
|
||||
ulint i;
|
||||
|
||||
@ -3772,7 +3626,6 @@ open_or_create_log_file(
|
||||
ibool log_file_has_been_opened,/*!< in: TRUE if a log file has been
|
||||
opened before: then it is an error
|
||||
to try to create another log file */
|
||||
ulint k, /*!< in: log group number */
|
||||
ulint i) /*!< in: log file number in group */
|
||||
{
|
||||
ibool ret;
|
||||
@ -3782,8 +3635,6 @@ open_or_create_log_file(
|
||||
|
||||
UT_NOT_USED(create_new_db);
|
||||
UT_NOT_USED(log_file_has_been_opened);
|
||||
UT_NOT_USED(k);
|
||||
ut_ad(k == 0);
|
||||
|
||||
*log_file_created = FALSE;
|
||||
|
||||
@ -3831,20 +3682,14 @@ open_or_create_log_file(
|
||||
which is for this log group */
|
||||
|
||||
fil_space_create(name,
|
||||
2 * k + SRV_LOG_SPACE_FIRST_ID, 0, FIL_LOG, 0, 0);
|
||||
SRV_LOG_SPACE_FIRST_ID, 0, FIL_TYPE_LOG, 0, 0);
|
||||
log_init(srv_n_log_files, srv_log_file_size * UNIV_PAGE_SIZE);
|
||||
}
|
||||
|
||||
ut_a(fil_validate());
|
||||
|
||||
ut_a(fil_node_create(name, (ulint)srv_log_file_size,
|
||||
2 * k + SRV_LOG_SPACE_FIRST_ID, FALSE));
|
||||
if (i == 0) {
|
||||
log_group_init(k, srv_n_log_files,
|
||||
srv_log_file_size * UNIV_PAGE_SIZE,
|
||||
2 * k + SRV_LOG_SPACE_FIRST_ID,
|
||||
SRV_LOG_SPACE_FIRST_ID + 1); /* dummy arch
|
||||
space id */
|
||||
}
|
||||
SRV_LOG_SPACE_FIRST_ID, FALSE));
|
||||
|
||||
return(DB_SUCCESS);
|
||||
}
|
||||
@ -3938,7 +3783,7 @@ xtrabackup_backup_func(void)
|
||||
lsn_t latest_cp;
|
||||
uint i;
|
||||
uint count;
|
||||
os_ib_mutex_t count_mutex;
|
||||
pthread_mutex_t count_mutex;
|
||||
data_thread_ctxt_t *data_threads;
|
||||
|
||||
#ifdef USE_POSIX_FADVISE
|
||||
@ -3962,6 +3807,7 @@ xtrabackup_backup_func(void)
|
||||
mysql_data_home[0]=FN_CURLIB; // all paths are relative from here
|
||||
mysql_data_home[1]=0;
|
||||
|
||||
srv_n_purge_threads = 1;
|
||||
srv_read_only_mode = TRUE;
|
||||
|
||||
srv_backup_mode = TRUE;
|
||||
@ -4057,13 +3903,13 @@ xtrabackup_backup_func(void)
|
||||
|
||||
xb_fil_io_init();
|
||||
|
||||
log_init();
|
||||
log_sys_init();
|
||||
|
||||
lock_sys_create(srv_lock_table_size);
|
||||
|
||||
for (i = 0; i < srv_n_log_files; i++) {
|
||||
err = open_or_create_log_file(FALSE, &log_file_created,
|
||||
log_opened, 0, i);
|
||||
log_opened, i);
|
||||
if (err != DB_SUCCESS) {
|
||||
|
||||
//return((int) err);
|
||||
@ -4118,72 +3964,60 @@ xtrabackup_backup_func(void)
|
||||
fil_system_t* f_system = fil_system;
|
||||
|
||||
/* definition from recv_recovery_from_checkpoint_start() */
|
||||
log_group_t* max_cp_group;
|
||||
ulint max_cp_field;
|
||||
byte* buf;
|
||||
byte* log_hdr_buf_;
|
||||
byte* log_hdr_buf;
|
||||
ulint err;
|
||||
|
||||
/* start back ground thread to copy newer log */
|
||||
os_thread_id_t log_copying_thread_id;
|
||||
datafiles_iter_t *it;
|
||||
|
||||
log_hdr_buf_ = static_cast<byte *>
|
||||
(ut_malloc(LOG_FILE_HDR_SIZE + UNIV_PAGE_SIZE_MAX));
|
||||
log_hdr_buf = static_cast<byte *>
|
||||
(ut_align(log_hdr_buf_, UNIV_PAGE_SIZE_MAX));
|
||||
|
||||
/* get current checkpoint_lsn */
|
||||
/* Look for the latest checkpoint from any of the log groups */
|
||||
|
||||
mutex_enter(&log_sys->mutex);
|
||||
log_mutex_enter();
|
||||
|
||||
err = recv_find_max_checkpoint(&max_cp_group, &max_cp_field);
|
||||
dberr_t err = recv_find_max_checkpoint(&max_cp_field);
|
||||
|
||||
if (err != DB_SUCCESS) {
|
||||
|
||||
ut_free(log_hdr_buf_);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
log_group_read_checkpoint_info(max_cp_group, max_cp_field);
|
||||
buf = log_sys->checkpoint_buf;
|
||||
if (log_sys->log.format == 0) {
|
||||
old_format:
|
||||
msg("xtrabackup: Error: cannot process redo log"
|
||||
" before MariaDB 10.2.2\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
ut_ad(!((log_sys->log.format ^ LOG_HEADER_FORMAT_CURRENT)
|
||||
& ~LOG_HEADER_FORMAT_ENCRYPTED));
|
||||
|
||||
const byte* buf = log_sys->checkpoint_buf;
|
||||
|
||||
checkpoint_lsn_start = mach_read_from_8(buf + LOG_CHECKPOINT_LSN);
|
||||
checkpoint_no_start = mach_read_from_8(buf + LOG_CHECKPOINT_NO);
|
||||
|
||||
mutex_exit(&log_sys->mutex);
|
||||
|
||||
reread_log_header:
|
||||
fil_io(OS_FILE_READ | OS_FILE_LOG, true, max_cp_group->space_id,
|
||||
0,
|
||||
0, 0, LOG_FILE_HDR_SIZE,
|
||||
log_hdr_buf, max_cp_group, NULL);
|
||||
err = recv_find_max_checkpoint(&max_cp_field);
|
||||
|
||||
/* check consistency of log file header to copy */
|
||||
mutex_enter(&log_sys->mutex);
|
||||
if (err != DB_SUCCESS) {
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
err = recv_find_max_checkpoint(&max_cp_group, &max_cp_field);
|
||||
if (log_sys->log.format == 0) {
|
||||
goto old_format;
|
||||
}
|
||||
|
||||
if (err != DB_SUCCESS) {
|
||||
|
||||
ut_free(log_hdr_buf_);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
log_group_read_checkpoint_info(max_cp_group, max_cp_field);
|
||||
buf = log_sys->checkpoint_buf;
|
||||
ut_ad(!((log_sys->log.format ^ LOG_HEADER_FORMAT_CURRENT)
|
||||
& ~LOG_HEADER_FORMAT_ENCRYPTED));
|
||||
|
||||
if(checkpoint_no_start != mach_read_from_8(buf + LOG_CHECKPOINT_NO)) {
|
||||
|
||||
checkpoint_lsn_start = mach_read_from_8(buf + LOG_CHECKPOINT_LSN);
|
||||
checkpoint_no_start = mach_read_from_8(buf + LOG_CHECKPOINT_NO);
|
||||
mutex_exit(&log_sys->mutex);
|
||||
goto reread_log_header;
|
||||
}
|
||||
|
||||
mutex_exit(&log_sys->mutex);
|
||||
log_mutex_exit();
|
||||
|
||||
xtrabackup_init_datasinks();
|
||||
|
||||
@ -4230,10 +4064,6 @@ reread_log_header:
|
||||
&io_watching_thread_id);
|
||||
}
|
||||
|
||||
mutex_enter(&log_sys->mutex);
|
||||
xtrabackup_choose_lsn_offset(checkpoint_lsn_start);
|
||||
mutex_exit(&log_sys->mutex);
|
||||
|
||||
/* copy log file by current position */
|
||||
if(xtrabackup_copy_logfile(checkpoint_lsn_start, FALSE))
|
||||
exit(EXIT_FAILURE);
|
||||
@ -4246,7 +4076,7 @@ reread_log_header:
|
||||
err = xb_load_tablespaces();
|
||||
if (err != DB_SUCCESS) {
|
||||
msg("xtrabackup: error: xb_load_tablespaces() failed with"
|
||||
"error code %lu\n", err);
|
||||
"error code %u\n", err);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
@ -4323,35 +4153,24 @@ reread_log_header:
|
||||
}
|
||||
|
||||
/* read the latest checkpoint lsn */
|
||||
latest_cp = 0;
|
||||
{
|
||||
log_group_t* max_cp_group;
|
||||
ulint max_cp_field;
|
||||
ulint err;
|
||||
|
||||
mutex_enter(&log_sys->mutex);
|
||||
log_mutex_enter();
|
||||
|
||||
err = recv_find_max_checkpoint(&max_cp_group, &max_cp_field);
|
||||
|
||||
if (err != DB_SUCCESS) {
|
||||
if (recv_find_max_checkpoint(&max_cp_field) == DB_SUCCESS
|
||||
&& log_sys->log.format != 0) {
|
||||
latest_cp = mach_read_from_8(log_sys->checkpoint_buf +
|
||||
LOG_CHECKPOINT_LSN);
|
||||
msg("xtrabackup: The latest check point"
|
||||
" (for incremental): '" LSN_PF "'\n", latest_cp);
|
||||
} else {
|
||||
latest_cp = 0;
|
||||
msg("xtrabackup: Error: recv_find_max_checkpoint() failed.\n");
|
||||
mutex_exit(&log_sys->mutex);
|
||||
goto skip_last_cp;
|
||||
}
|
||||
|
||||
log_group_read_checkpoint_info(max_cp_group, max_cp_field);
|
||||
|
||||
xtrabackup_choose_lsn_offset(checkpoint_lsn_start);
|
||||
|
||||
latest_cp = mach_read_from_8(log_sys->checkpoint_buf +
|
||||
LOG_CHECKPOINT_LSN);
|
||||
|
||||
mutex_exit(&log_sys->mutex);
|
||||
|
||||
msg("xtrabackup: The latest check point (for incremental): "
|
||||
"'" LSN_PF "'\n", latest_cp);
|
||||
log_mutex_exit();
|
||||
}
|
||||
skip_last_cp:
|
||||
|
||||
/* stop log_copying_thread */
|
||||
log_copying = FALSE;
|
||||
os_event_set(log_copying_stop);
|
||||
@ -4650,6 +4469,7 @@ xtrabackup_stats_func(int argc, char **argv)
|
||||
mysql_data_home[0]=FN_CURLIB; // all paths are relative from here
|
||||
mysql_data_home[1]=0;
|
||||
|
||||
srv_n_purge_threads = 1;
|
||||
/* set read only */
|
||||
srv_read_only_mode = TRUE;
|
||||
|
||||
@ -4845,8 +4665,7 @@ end:
|
||||
xb_filters_free();
|
||||
|
||||
/* shutdown InnoDB */
|
||||
if(innodb_end())
|
||||
exit(EXIT_FAILURE);
|
||||
innodb_end();
|
||||
}
|
||||
|
||||
/* ================= prepare ================= */
|
||||
@ -4854,7 +4673,7 @@ end:
|
||||
static my_bool
|
||||
xtrabackup_init_temp_log(void)
|
||||
{
|
||||
os_file_t src_file = XB_FILE_UNDEFINED;
|
||||
pfs_os_file_t src_file;
|
||||
char src_path[FN_REFLEN];
|
||||
char dst_path[FN_REFLEN];
|
||||
ibool success;
|
||||
@ -5181,7 +5000,7 @@ xb_space_create_file(
|
||||
ulint space_id, /*!<in: space id */
|
||||
ulint flags __attribute__((unused)),/*!<in: tablespace
|
||||
flags */
|
||||
os_file_t* file) /*!<out: file handle */
|
||||
pfs_os_file_t* file) /*!<out: file handle */
|
||||
{
|
||||
ibool ret;
|
||||
byte* buf;
|
||||
@ -5260,7 +5079,7 @@ mismatching ID, renames it to xtrabackup_tmp_#ID.ibd. If there was no
|
||||
matching file, creates a new tablespace.
|
||||
@return file handle of matched or created file */
|
||||
static
|
||||
os_file_t
|
||||
pfs_os_file_t
|
||||
xb_delta_open_matching_space(
|
||||
const char* dbname, /* in: path to destination database dir */
|
||||
const char* name, /* in: name of delta file (without .delta) */
|
||||
@ -5274,7 +5093,7 @@ xb_delta_open_matching_space(
|
||||
char dest_space_name[FN_REFLEN];
|
||||
ibool ok;
|
||||
fil_space_t* fil_space;
|
||||
os_file_t file = 0;
|
||||
pfs_os_file_t file;
|
||||
ulint tablespace_flags;
|
||||
xb_filter_entry_t* table;
|
||||
|
||||
@ -5438,8 +5257,8 @@ xtrabackup_apply_delta(
|
||||
including the .delta extension */
|
||||
void* /*data*/)
|
||||
{
|
||||
os_file_t src_file = XB_FILE_UNDEFINED;
|
||||
os_file_t dst_file = XB_FILE_UNDEFINED;
|
||||
pfs_os_file_t src_file;
|
||||
pfs_os_file_t dst_file;
|
||||
char src_path[FN_REFLEN];
|
||||
char dst_path[FN_REFLEN];
|
||||
char meta_path[FN_REFLEN];
|
||||
@ -5813,7 +5632,7 @@ xtrabackup_apply_deltas()
|
||||
static my_bool
|
||||
xtrabackup_close_temp_log(my_bool clear_flag)
|
||||
{
|
||||
os_file_t src_file = XB_FILE_UNDEFINED;
|
||||
pfs_os_file_t src_file;
|
||||
char src_path[FN_REFLEN];
|
||||
char dst_path[FN_REFLEN];
|
||||
ibool success;
|
||||
@ -6407,6 +6226,7 @@ skip_check:
|
||||
|
||||
/* Create logfiles for recovery from 'xtrabackup_logfile', before start InnoDB */
|
||||
srv_max_n_threads = 1000;
|
||||
srv_n_purge_threads = 1;
|
||||
ut_mem_init();
|
||||
/* temporally dummy value to avoid crash */
|
||||
srv_page_size_shift = 14;
|
||||
@ -6499,13 +6319,13 @@ skip_check:
|
||||
metadata_last_lsn);
|
||||
xtrabackup_archived_to_lsn = metadata_last_lsn;
|
||||
}
|
||||
if (xtrabackup_archived_to_lsn < min_flushed_lsn) {
|
||||
if (xtrabackup_archived_to_lsn < flushed_lsn) {
|
||||
msg("xtrabackup: error: logs applying "
|
||||
"lsn limit " UINT64PF " is less than "
|
||||
"min_flushed_lsn " UINT64PF
|
||||
", there is nothing to do\n",
|
||||
xtrabackup_archived_to_lsn,
|
||||
min_flushed_lsn);
|
||||
flushed_lsn);
|
||||
goto error_cleanup;
|
||||
}
|
||||
}
|
||||
@ -6516,7 +6336,7 @@ skip_check:
|
||||
*/
|
||||
xtrabackup_apply_log_only = srv_apply_log_only = true;
|
||||
|
||||
if (!xtrabackup_arch_search_files(min_flushed_lsn)) {
|
||||
if (!xtrabackup_arch_search_files(flushed_lsn)) {
|
||||
goto error_cleanup;
|
||||
}
|
||||
|
||||
@ -6594,7 +6414,7 @@ skip_check:
|
||||
|
||||
if (xtrabackup_export) {
|
||||
msg("xtrabackup: export option is specified.\n");
|
||||
os_file_t info_file = XB_FILE_UNDEFINED;
|
||||
pfs_os_file_t info_file;
|
||||
char info_file_path[FN_REFLEN];
|
||||
ibool success;
|
||||
char table_name[FN_REFLEN];
|
||||
@ -6788,8 +6608,7 @@ next_node:
|
||||
xb_write_galera_info(xtrabackup_incremental);
|
||||
#endif
|
||||
|
||||
if(innodb_end())
|
||||
goto error_cleanup;
|
||||
innodb_end();
|
||||
|
||||
innodb_free_param();
|
||||
|
||||
@ -6875,9 +6694,7 @@ next_node:
|
||||
if(innodb_init())
|
||||
goto error;
|
||||
|
||||
if(innodb_end())
|
||||
goto error;
|
||||
|
||||
innodb_end();
|
||||
innodb_free_param();
|
||||
|
||||
}
|
||||
@ -7403,22 +7220,6 @@ int main(int argc, char **argv)
|
||||
innobase_file_per_table = TRUE;
|
||||
}
|
||||
|
||||
if (xtrabackup_incremental && xtrabackup_stream &&
|
||||
xtrabackup_stream_fmt == XB_STREAM_FMT_TAR) {
|
||||
msg("xtrabackup: error: "
|
||||
"streaming incremental backups are incompatible with the \n"
|
||||
"'tar' streaming format. Use --stream=xbstream instead.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if ((xtrabackup_compress || xtrabackup_encrypt) && xtrabackup_stream &&
|
||||
xtrabackup_stream_fmt == XB_STREAM_FMT_TAR) {
|
||||
msg("xtrabackup: error: "
|
||||
"compressed and encrypted backups are incompatible with the \n"
|
||||
"'tar' streaming format. Use --stream=xbstream instead.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (!xtrabackup_prepare &&
|
||||
(innobase_log_arch_dir || xtrabackup_archived_to_lsn)) {
|
||||
|
||||
|
@ -27,7 +27,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
#include "changed_page_bitmap.h"
|
||||
|
||||
#ifdef __WIN__
|
||||
#define XB_FILE_UNDEFINED NULL
|
||||
#define XB_FILE_UNDEFINED INVALID_HANDLE_VALUE
|
||||
#else
|
||||
#define XB_FILE_UNDEFINED (-1)
|
||||
#endif
|
||||
@ -182,19 +182,10 @@ datafiles_iter_t *datafiles_iter_new(fil_system_t *f_system);
|
||||
fil_node_t *datafiles_iter_next(datafiles_iter_t *it);
|
||||
void datafiles_iter_free(datafiles_iter_t *it);
|
||||
|
||||
/************************************************************************
|
||||
Initialize the tablespace memory cache and populate it by scanning for and
|
||||
opening data files */
|
||||
ulint xb_data_files_init(void);
|
||||
|
||||
/************************************************************************
|
||||
Destroy the tablespace memory cache. */
|
||||
void xb_data_files_close(void);
|
||||
|
||||
/***********************************************************************
|
||||
Reads the space flags from a given data file and returns the compressed
|
||||
page size, or 0 if the space is not compressed. */
|
||||
ulint xb_get_zip_size(os_file_t file);
|
||||
ulint xb_get_zip_size(pfs_os_file_t file);
|
||||
|
||||
/************************************************************************
|
||||
Checks if a table specified as a name in the form "database/name" (InnoDB 5.6)
|
||||
|
@ -174,6 +174,7 @@ register char **argv[];
|
||||
break;
|
||||
case 'V':
|
||||
version=1;
|
||||
/* fall through */
|
||||
case 'I':
|
||||
case '?':
|
||||
help=1; /* Help text written */
|
||||
|
@ -949,6 +949,12 @@ extern ulonglong my_getcputime(void);
|
||||
#define hrtime_sec_part(X) ((ulong)((X).val % HRTIME_RESOLUTION))
|
||||
#define my_time(X) hrtime_to_time(my_hrtime())
|
||||
|
||||
#if STACK_DIRECTION < 0
|
||||
#define available_stack_size(CUR,END) (long) ((char*)(CUR) - (char*)(END))
|
||||
#else
|
||||
#define available_stack_size(CUR,END) (long) ((char*)(END) - (char*)(CUR))
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_MMAN_H
|
||||
#include <sys/mman.h>
|
||||
|
||||
|
@ -1404,7 +1404,7 @@ void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net)
|
||||
DBUG_ASSERT(stmt != 0);
|
||||
|
||||
stmt->last_errno= net->last_errno;
|
||||
if (net->last_error && net->last_error[0])
|
||||
if (net->last_error[0])
|
||||
strmov(stmt->last_error, net->last_error);
|
||||
strmov(stmt->sqlstate, net->sqlstate);
|
||||
|
||||
@ -4707,8 +4707,7 @@ my_bool STDCALL mysql_stmt_close(MYSQL_STMT *stmt)
|
||||
{
|
||||
uchar buff[MYSQL_STMT_HEADER]; /* 4 bytes - stmt id */
|
||||
|
||||
if ((rc= reset_stmt_handle(stmt, RESET_ALL_BUFFERS | RESET_CLEAR_ERROR)))
|
||||
return rc;
|
||||
reset_stmt_handle(stmt, RESET_ALL_BUFFERS | RESET_CLEAR_ERROR);
|
||||
|
||||
int4store(buff, stmt->stmt_id);
|
||||
if ((rc= stmt_command(mysql, COM_STMT_CLOSE, buff, 4, stmt)))
|
||||
|
16
mysql-test/include/innodb_page_size.combinations
Normal file
16
mysql-test/include/innodb_page_size.combinations
Normal file
@ -0,0 +1,16 @@
|
||||
[64k]
|
||||
innodb-page-size=64K
|
||||
innodb-buffer-pool-size=24M
|
||||
|
||||
[32k]
|
||||
innodb-page-size=32K
|
||||
innodb-buffer-pool-size=24M
|
||||
|
||||
[16k]
|
||||
innodb-page-size=16K
|
||||
|
||||
[8k]
|
||||
innodb-page-size=8K
|
||||
|
||||
[4k]
|
||||
innodb-page-size=4K
|
4
mysql-test/include/innodb_page_size.inc
Normal file
4
mysql-test/include/innodb_page_size.inc
Normal file
@ -0,0 +1,4 @@
|
||||
# The goal of including this file is to enable innodb_page_size combinations
|
||||
# (see include/innodb_page_size.combinations)
|
||||
|
||||
--source include/have_innodb.inc
|
8
mysql-test/include/innodb_page_size_small.combinations
Normal file
8
mysql-test/include/innodb_page_size_small.combinations
Normal file
@ -0,0 +1,8 @@
|
||||
[16k]
|
||||
innodb-page-size=16K
|
||||
|
||||
[8k]
|
||||
innodb-page-size=8K
|
||||
|
||||
[4k]
|
||||
innodb-page-size=4K
|
4
mysql-test/include/innodb_page_size_small.inc
Normal file
4
mysql-test/include/innodb_page_size_small.inc
Normal file
@ -0,0 +1,4 @@
|
||||
# The goal of including this file is to enable innodb_page_size combinations
|
||||
# (see include/innodb_page_size.combinations)
|
||||
|
||||
--source include/have_innodb.inc
|
@ -90,6 +90,7 @@ explain select count(*) from t1 where v between 'a' and 'a ' and v between 'a '
|
||||
--replace_regex /Duplicate entry '[^']+' for key/Duplicate entry '{ ' for key/
|
||||
--error ER_DUP_ENTRY
|
||||
alter table t1 add unique(v);
|
||||
show warnings;
|
||||
alter table t1 add key(v);
|
||||
select concat('*',v,'*',c,'*',t,'*') as qq from t1 where v='a';
|
||||
--replace_column 6 # 9 # 10 #
|
||||
|
@ -208,6 +208,10 @@ sub mtr_report_test ($) {
|
||||
{
|
||||
mtr_report("[ skipped ]");
|
||||
}
|
||||
if ( $tinfo->{'warnings'} )
|
||||
{
|
||||
mtr_report($tinfo->{'warnings'});
|
||||
}
|
||||
}
|
||||
elsif ($result eq 'MTR_RES_PASSED')
|
||||
{
|
||||
|
@ -2794,15 +2794,26 @@ sub mysql_server_start($) {
|
||||
}
|
||||
|
||||
my $mysqld_basedir= $mysqld->value('basedir');
|
||||
my $extra_opts= get_extra_opts($mysqld, $tinfo);
|
||||
|
||||
if ( $basedir eq $mysqld_basedir )
|
||||
{
|
||||
if (! $opt_start_dirty) # If dirty, keep possibly grown system db
|
||||
{
|
||||
# Copy datadir from installed system db
|
||||
my $path= ($opt_parallel == 1) ? "$opt_vardir" : "$opt_vardir/..";
|
||||
my $install_db= "$path/install.db";
|
||||
copytree($install_db, $datadir) if -d $install_db;
|
||||
mtr_error("Failed to copy system db to '$datadir'") unless -d $datadir;
|
||||
# Some InnoDB options are incompatible with the default bootstrap.
|
||||
# If they are used, re-bootstrap
|
||||
if ( $extra_opts and
|
||||
"@$extra_opts" =~ /--innodb[-_](?:page[-_]size|checksum[-_]algorithm|undo[-_]tablespaces|log[-_]group[-_]home[-_]dir|data[-_]home[-_]dir)/ )
|
||||
{
|
||||
mysql_install_db($mysqld, undef, $extra_opts);
|
||||
}
|
||||
else {
|
||||
# Copy datadir from installed system db
|
||||
my $path= ($opt_parallel == 1) ? "$opt_vardir" : "$opt_vardir/..";
|
||||
my $install_db= "$path/install.db";
|
||||
copytree($install_db, $datadir) if -d $install_db;
|
||||
mtr_error("Failed to copy system db to '$datadir'") unless -d $datadir;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -2841,7 +2852,6 @@ sub mysql_server_start($) {
|
||||
|
||||
if (!$opt_embedded_server)
|
||||
{
|
||||
my $extra_opts= get_extra_opts($mysqld, $tinfo);
|
||||
mysqld_start($mysqld,$extra_opts);
|
||||
|
||||
# Save this test case information, so next can examine it
|
||||
@ -3065,7 +3075,7 @@ sub default_mysqld {
|
||||
|
||||
|
||||
sub mysql_install_db {
|
||||
my ($mysqld, $datadir)= @_;
|
||||
my ($mysqld, $datadir, $extra_opts)= @_;
|
||||
|
||||
my $install_datadir= $datadir || $mysqld->value('datadir');
|
||||
my $install_basedir= $mysqld->value('basedir');
|
||||
@ -3106,6 +3116,13 @@ sub mysql_install_db {
|
||||
mtr_add_arg($args, $extra_opt);
|
||||
}
|
||||
}
|
||||
# InnoDB options can come not only from the command line, but also
|
||||
# from option files or combinations
|
||||
foreach my $extra_opt ( @$extra_opts ) {
|
||||
if ($extra_opt =~ /--innodb/) {
|
||||
mtr_add_arg($args, $extra_opt);
|
||||
}
|
||||
}
|
||||
|
||||
# If DISABLE_GRANT_OPTIONS is defined when the server is compiled (e.g.,
|
||||
# configure --disable-grant-options), mysqld will not recognize the
|
||||
@ -3990,12 +4007,13 @@ sub run_testcase ($$) {
|
||||
{
|
||||
my $res= $test->exit_status();
|
||||
|
||||
if ($res == 0 and $opt_warnings and check_warnings($tinfo) )
|
||||
if (($res == 0 or $res == 62) and $opt_warnings and check_warnings($tinfo) )
|
||||
{
|
||||
# Test case suceeded, but it has produced unexpected
|
||||
# warnings, continue in $res == 1
|
||||
$res= 1;
|
||||
resfile_output($tinfo->{'warnings'}) if $opt_resfile;
|
||||
# If test case suceeded, but it has produced unexpected
|
||||
# warnings, continue with $res == 1;
|
||||
# but if the test was skipped, it should remain skipped
|
||||
$res= 1 if $res == 0;
|
||||
resfile_output($tinfo->{'warnings'}) if $opt_resfile;
|
||||
}
|
||||
|
||||
if ( $res == 0 )
|
||||
|
@ -184,6 +184,35 @@ CREATE TABLE t1 (a LONGTEXT COLLATE latin1_general_ci);
|
||||
ALTER TABLE t1 MODIFY a LONGTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
|
||||
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB
|
||||
#
|
||||
select @@global.delay_key_write;
|
||||
@@global.delay_key_write
|
||||
ON
|
||||
create table t1 (a int, b int, key(b));
|
||||
flush tables;
|
||||
flush status;
|
||||
show status like 'Feature_delay_key_write';
|
||||
Variable_name Value
|
||||
Feature_delay_key_write 0
|
||||
insert t1 values (1,2),(2,3),(3,4);
|
||||
show status like 'Feature_delay_key_write';
|
||||
Variable_name Value
|
||||
Feature_delay_key_write 0
|
||||
alter online table t1 delay_key_write=1;
|
||||
show status like 'Feature_delay_key_write';
|
||||
Variable_name Value
|
||||
Feature_delay_key_write 1
|
||||
flush tables;
|
||||
insert t1 values (1,2),(2,3),(3,4);
|
||||
show status like 'Feature_delay_key_write';
|
||||
Variable_name Value
|
||||
Feature_delay_key_write 2
|
||||
alter online table t1 delay_key_write=0;
|
||||
show status like 'Feature_delay_key_write';
|
||||
Variable_name Value
|
||||
Feature_delay_key_write 2
|
||||
flush tables;
|
||||
insert t1 values (1,2),(2,3),(3,4);
|
||||
show status like 'Feature_delay_key_write';
|
||||
Variable_name Value
|
||||
Feature_delay_key_write 2
|
||||
drop table t1;
|
||||
|
@ -614,22 +614,24 @@ ANALYZE
|
||||
},
|
||||
"block-nl-join": {
|
||||
"table": {
|
||||
"table_name": "<subquery2>",
|
||||
"table_name": "t2",
|
||||
"access_type": "ALL",
|
||||
"possible_keys": ["distinct_key"],
|
||||
"r_loops": 1,
|
||||
"rows": 2,
|
||||
"r_rows": 2,
|
||||
"r_total_time_ms": "REPLACED",
|
||||
"filtered": 100,
|
||||
"r_filtered": 100
|
||||
"r_filtered": 0,
|
||||
"attached_condition": "<in_optimizer>(t2.b,t2.b in (subquery#2))"
|
||||
},
|
||||
"buffer_type": "flat",
|
||||
"buffer_size": "256Kb",
|
||||
"join_type": "BNL",
|
||||
"r_filtered": 100,
|
||||
"materialized": {
|
||||
"unique": 1,
|
||||
"attached_condition": "<in_optimizer>(t2.b,t2.b in (subquery#2))",
|
||||
"r_filtered": null
|
||||
},
|
||||
"subqueries": [
|
||||
{
|
||||
"query_block": {
|
||||
"select_id": 2,
|
||||
"r_loops": 1,
|
||||
@ -646,24 +648,7 @@ ANALYZE
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"block-nl-join": {
|
||||
"table": {
|
||||
"table_name": "t2",
|
||||
"access_type": "ALL",
|
||||
"r_loops": 1,
|
||||
"rows": 2,
|
||||
"r_rows": 2,
|
||||
"r_total_time_ms": "REPLACED",
|
||||
"filtered": 100,
|
||||
"r_filtered": 100
|
||||
},
|
||||
"buffer_type": "incremental",
|
||||
"buffer_size": "256Kb",
|
||||
"join_type": "BNL",
|
||||
"attached_condition": "t2.b = `<subquery2>`.a",
|
||||
"r_filtered": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
drop table t1,t2;
|
||||
|
@ -507,6 +507,7 @@ select t.a, count(*) from t1,t where t1.a=t.a group by t.a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 Using where; Using temporary; Using filesort
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 Using where; Using join buffer (flat, BNL join)
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 35 func 1
|
||||
3 MATERIALIZED t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
3 MATERIALIZED t1 ALL NULL NULL NULL NULL 8 Using where; Using join buffer (flat, BNL join)
|
||||
explain
|
||||
@ -522,6 +523,7 @@ where t1.a=t.a group by t.a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 Using where; Using temporary; Using filesort
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 Using where; Using join buffer (flat, BNL join)
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 35 func 1
|
||||
3 MATERIALIZED t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
3 MATERIALIZED t1 ALL NULL NULL NULL NULL 8 Using where; Using join buffer (flat, BNL join)
|
||||
# with clause in the specification of a derived table
|
||||
|
@ -2916,5 +2916,64 @@ Handler_read_rnd_deleted 0
|
||||
Handler_read_rnd_next 27
|
||||
deallocate prepare stmt1;
|
||||
drop table t1,t2;
|
||||
#
|
||||
# Bug mdev-12670: mergeable derived / view with subqueries
|
||||
# subject to semi-join optimizations
|
||||
# (actually this is a 5.3 bug.)
|
||||
#
|
||||
create table t1 (a int) engine=myisam;
|
||||
insert into t1 values (5),(3),(2),(7),(2),(5),(1);
|
||||
create table t2 (b int, index idx(b)) engine=myisam;
|
||||
insert into t2 values (2),(3),(2),(1),(3),(4);
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
analyze table t1,t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
test.t2 analyze status OK
|
||||
explain select a from t1 where a in (select b from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 7 Using where
|
||||
1 PRIMARY t2 ref idx idx 5 test.t1.a 140 Using index; FirstMatch(t1)
|
||||
explain select * from (select a from t1 where a in (select b from t2)) t;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 7 Using where
|
||||
1 PRIMARY t2 ref idx idx 5 test.t1.a 140 Using index; FirstMatch(t1)
|
||||
create view v1 as select a from t1 where a in (select b from t2);
|
||||
explain select * from v1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 7 Using where
|
||||
1 PRIMARY t2 ref idx idx 5 test.t1.a 140 Using index; FirstMatch(t1)
|
||||
drop view v1;
|
||||
drop table t1,t2;
|
||||
#
|
||||
# Bug mdev-12812: mergeable derived / view with subqueries
|
||||
# NOT subject to semi-join optimizations
|
||||
#
|
||||
CREATE TABLE t1 (c1 varchar(3)) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES ('foo'),('foo');
|
||||
CREATE TABLE t2 (c2 varchar(3)) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES ('bar'),('qux'),('foo');
|
||||
SELECT STRAIGHT_JOIN *
|
||||
FROM ( SELECT * FROM t1 WHERE c1 IN ( SELECT c2 FROM t2 ) ) AS sq;
|
||||
c1
|
||||
foo
|
||||
foo
|
||||
EXPLAIN EXTENDED SELECT STRAIGHT_JOIN *
|
||||
FROM ( SELECT * FROM t1 WHERE c1 IN ( SELECT c2 FROM t2 ) ) AS sq;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
3 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select straight_join `test`.`t1`.`c1` AS `c1` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`c1`,<exists>(/* select#3 */ select `test`.`t2`.`c2` from `test`.`t2` where <cache>(`test`.`t1`.`c1`) = `test`.`t2`.`c2`))
|
||||
DROP TABLE t1, t2;
|
||||
set optimizer_switch=@exit_optimizer_switch;
|
||||
set join_cache_level=@exit_join_cache_level;
|
||||
|
@ -880,3 +880,17 @@ SET @regCheck= '\\xE0\\x01';
|
||||
SELECT CAST(0xE001 AS BINARY) REGEXP @regCheck;
|
||||
CAST(0xE001 AS BINARY) REGEXP @regCheck
|
||||
1
|
||||
# MDEV-12420: Testing recursion overflow
|
||||
SELECT 1 FROM dual WHERE ('Alpha,Bravo,Charlie,Delta,Echo,Foxtrot,StrataCentral,Golf,Hotel,India,Juliet,Kilo,Lima,Mike,StrataL3,November,Oscar,StrataL2,Sand,P3,P4SwitchTest,Arsys,Poppa,ExtensionMgr,Arp,Quebec,Romeo,StrataApiV2,PtReyes,Sierra,SandAcl,Arrow,Artools,BridgeTest,Tango,SandT,PAlaska,Namespace,Agent,Qos,PatchPanel,ProjectReport,Ark,Gimp,Agent,SliceAgent,Arnet,Bgp,Ale,Tommy,Central,AsicPktTestLib,Hsc,SandL3,Abuild,Pca9555,Standby,ControllerDut,CalSys,SandLib,Sb820,PointV2,BfnLib,Evpn,BfnSdk,Sflow,ManagementActive,AutoTest,GatedTest,Bgp,Sand,xinetd,BfnAgentLib,bf-utils,Hello,BfnState,Eos,Artest,Qos,Scd,ThermoMgr,Uniform,EosUtils,Eb,FanController,Central,BfnL3,BfnL2,tcp_wrappers,Victor,Environment,Route,Failover,Whiskey,Xray,Gimp,BfnFixed,Strata,SoCal,XApi,Msrp,XpProfile,tcpdump,PatchPanel,ArosTest,FhTest,Arbus,XpAcl,MacConc,XpApi,telnet,QosTest,Alpha2,BfnVlan,Stp,VxlanControllerTest,MplsAgent,Bravo2,Lanz,BfnMbb,Intf,XCtrl,Unicast,SandTunnel,L3Unicast,Ipsec,MplsTest,Rsvp,EthIntf,StageMgr,Sol,MplsUtils,Nat,Ira,P4NamespaceDut,Counters,Charlie2,Aqlc,Mlag,Power,OpenFlow,Lag,RestApi,BfdTest,strongs,Sfa,CEosUtils,Adt746,MaintenanceMode,MlagDut,EosImage,IpEth,MultiProtocol,Launcher,Max3179,Snmp,Acl,IpEthTest,PhyEee,bf-syslibs,tacc,XpL2,p4-ar-switch,p4-bf-switch,LdpTest,BfnPhy,Mirroring,Phy6,Ptp' REGEXP '^((?!\b(Strata|StrataApi|StrataApiV2)\b).)*$');
|
||||
1
|
||||
Warnings:
|
||||
Warning 1139 Got error 'pcre_exec: recursion limit of NUM exceeded' from regexp
|
||||
SELECT REGEXP_INSTR('a_kollision', 'oll');
|
||||
REGEXP_INSTR('a_kollision', 'oll')
|
||||
4
|
||||
SELECT REGEXP_INSTR('a_kollision', '(oll)');
|
||||
REGEXP_INSTR('a_kollision', '(oll)')
|
||||
4
|
||||
SELECT REGEXP_INSTR('a_kollision', 'o([lm])\\1');
|
||||
REGEXP_INSTR('a_kollision', 'o([lm])\\1')
|
||||
4
|
||||
|
@ -1133,5 +1133,78 @@ where index_date_updated= 10 and index_id < 800;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 range index_date_updated index_date_updated 13 NULL # Using index condition
|
||||
drop table t0,t1,t2;
|
||||
set optimizer_switch=@save_ext_key_optimizer_switch;
|
||||
SET SESSION STORAGE_ENGINE=DEFAULT;
|
||||
#
|
||||
# MDEV-11196: Error:Run-Time Check Failure #2 - Stack around the variable 'key_buff'
|
||||
# was corrupted, server crashes in opt_sum_query
|
||||
CREATE TABLE t1 (
|
||||
pk INT,
|
||||
f1 VARCHAR(3),
|
||||
f2 VARCHAR(1024),
|
||||
PRIMARY KEY (pk),
|
||||
KEY(f2)
|
||||
) ENGINE=InnoDB CHARSET utf8 ROW_FORMAT= DYNAMIC;
|
||||
INSERT INTO t1 VALUES (1,'foo','abc'),(2,'bar','def');
|
||||
SELECT MAX(t2.pk) FROM t1 t2 INNER JOIN t1 t3 ON t2.f1 = t3.f1 WHERE t2.pk <= 4;
|
||||
MAX(t2.pk)
|
||||
2
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
pk1 INT,
|
||||
pk2 INT,
|
||||
f1 VARCHAR(3),
|
||||
f2 VARCHAR(1021),
|
||||
PRIMARY KEY (pk1,pk2),
|
||||
KEY(f2)
|
||||
) ENGINE=InnoDB CHARSET utf8 ROW_FORMAT= DYNAMIC;
|
||||
INSERT INTO t1 VALUES (1,2,'2','abc'),(2,3,'3','def');
|
||||
explain format= json
|
||||
select * from t1 force index(f2) where pk1 <= 5 and pk2 <=5 and f2 = 'abc' and f1 <= '3';
|
||||
EXPLAIN
|
||||
{
|
||||
"query_block": {
|
||||
"select_id": 1,
|
||||
"table": {
|
||||
"table_name": "t1",
|
||||
"access_type": "range",
|
||||
"possible_keys": ["f2"],
|
||||
"key": "f2",
|
||||
"key_length": "3070",
|
||||
"used_key_parts": ["f2", "pk1"],
|
||||
"rows": 1,
|
||||
"filtered": 100,
|
||||
"index_condition": "t1.pk1 <= 5 and t1.pk2 <= 5 and t1.f2 = 'abc'",
|
||||
"attached_condition": "t1.f1 <= '3'"
|
||||
}
|
||||
}
|
||||
}
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
f2 INT,
|
||||
pk2 INT,
|
||||
f1 VARCHAR(3),
|
||||
pk1 VARCHAR(1000),
|
||||
PRIMARY KEY (pk1,pk2),
|
||||
KEY k1(pk1,f2)
|
||||
) ENGINE=InnoDB CHARSET utf8 ROW_FORMAT= DYNAMIC;
|
||||
INSERT INTO t1 VALUES (1,2,'2','abc'),(2,3,'3','def');
|
||||
explain format= json
|
||||
select * from t1 force index(k1) where f2 <= 5 and pk2 <=5 and pk1 = 'abc' and f1 <= '3';
|
||||
EXPLAIN
|
||||
{
|
||||
"query_block": {
|
||||
"select_id": 1,
|
||||
"table": {
|
||||
"table_name": "t1",
|
||||
"access_type": "range",
|
||||
"possible_keys": ["k1"],
|
||||
"key": "k1",
|
||||
"key_length": "3011",
|
||||
"used_key_parts": ["pk1", "f2", "pk2"],
|
||||
"rows": 1,
|
||||
"filtered": 100,
|
||||
"index_condition": "t1.f2 <= 5 and t1.pk2 <= 5 and t1.pk1 = 'abc'",
|
||||
"attached_condition": "t1.f1 <= '3'"
|
||||
}
|
||||
}
|
||||
}
|
||||
drop table t1;
|
||||
|
@ -2337,4 +2337,99 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`i1` AS `i1`,`test`.`t1`.`v1` AS `v1`,`test`.`t2`.`i2` AS `i2`,`test`.`t2`.`v2` AS `v2`,`test`.`t3`.`i3` AS `i3`,`test`.`t3`.`v3` AS `v3` from `test`.`t1` join `test`.`t2` join `test`.`t3` where `test`.`t3`.`v3` = 4 and `test`.`t1`.`i1` = `test`.`t3`.`i3` and `test`.`t2`.`i2` = `test`.`t3`.`i3`
|
||||
drop table t1,t2,t3;
|
||||
#
|
||||
# MDEV-11958: LEFT JOIN with stored routine produces incorrect result
|
||||
#
|
||||
CREATE TABLE t (x INT);
|
||||
INSERT INTO t VALUES(1),(NULL);
|
||||
CREATE FUNCTION f (val INT, ret INT) RETURNS INT DETERMINISTIC RETURN IFNULL(val, ret);
|
||||
SELECT t1.x, t2.x, IFNULL(t2.x,0), f(t2.x,0)
|
||||
FROM t t1 LEFT JOIN t t2
|
||||
ON t1.x = t2.x
|
||||
WHERE IFNULL(t2.x,0)=0;
|
||||
x x IFNULL(t2.x,0) f(t2.x,0)
|
||||
NULL NULL 0 0
|
||||
explain extended
|
||||
SELECT t1.x, t2.x, IFNULL(t2.x,0), f(t2.x,0)
|
||||
FROM t t1 LEFT JOIN t t2
|
||||
ON t1.x = t2.x
|
||||
WHERE IFNULL(t2.x,0)=0;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`x` AS `x`,`test`.`t2`.`x` AS `x`,ifnull(`test`.`t2`.`x`,0) AS `IFNULL(t2.x,0)`,`f`(`test`.`t2`.`x`,0) AS `f(t2.x,0)` from `test`.`t` `t1` left join `test`.`t` `t2` on(`test`.`t2`.`x` = `test`.`t1`.`x`) where ifnull(`test`.`t2`.`x`,0) = 0
|
||||
SELECT t1.x, t2.x, IFNULL(t2.x,0), f(t2.x,0)
|
||||
FROM t t1 LEFT JOIN t t2
|
||||
ON t1.x = t2.x
|
||||
WHERE f(t2.x,0)=0;
|
||||
x x IFNULL(t2.x,0) f(t2.x,0)
|
||||
NULL NULL 0 0
|
||||
explain extended
|
||||
SELECT t1.x, t2.x, IFNULL(t2.x,0), f(t2.x,0)
|
||||
FROM t t1 LEFT JOIN t t2
|
||||
ON t1.x = t2.x
|
||||
WHERE f(t2.x,0)=0;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`x` AS `x`,`test`.`t2`.`x` AS `x`,ifnull(`test`.`t2`.`x`,0) AS `IFNULL(t2.x,0)`,`f`(`test`.`t2`.`x`,0) AS `f(t2.x,0)` from `test`.`t` `t1` left join `test`.`t` `t2` on(`test`.`t2`.`x` = `test`.`t1`.`x`) where `f`(`test`.`t2`.`x`,0) = 0
|
||||
drop function f;
|
||||
drop table t;
|
||||
CREATE TABLE t1 (
|
||||
col1 DECIMAL(33,5) NULL DEFAULT NULL,
|
||||
col2 DECIMAL(33,5) NULL DEFAULT NULL
|
||||
);
|
||||
CREATE TABLE t2 (
|
||||
col1 DECIMAL(33,5) NULL DEFAULT NULL,
|
||||
col2 DECIMAL(33,5) NULL DEFAULT NULL,
|
||||
col3 DECIMAL(33,5) NULL DEFAULT NULL
|
||||
);
|
||||
INSERT INTO t1 VALUES (2, 1.1), (2, 2.1);
|
||||
INSERT INTO t2 VALUES (3, 3.1, 4), (1, 1, NULL);
|
||||
CREATE FUNCTION f1 ( p_num DECIMAL(45,15), p_return DECIMAL(45,15))
|
||||
RETURNS decimal(33,5)
|
||||
LANGUAGE SQL
|
||||
DETERMINISTIC
|
||||
CONTAINS SQL
|
||||
SQL SECURITY INVOKER
|
||||
BEGIN
|
||||
IF p_num IS NULL THEN
|
||||
RETURN p_return;
|
||||
ELSE
|
||||
RETURN p_num;
|
||||
END IF;
|
||||
END |
|
||||
SELECT t1.col1, t2.col1, t2.col3
|
||||
FROM t1 LEFT OUTER JOIN t2 ON t1.col1 = t2.col2
|
||||
WHERE IFNULL(t2.col3,0) = 0;
|
||||
col1 col1 col3
|
||||
2.00000 NULL NULL
|
||||
2.00000 NULL NULL
|
||||
EXPLAIN EXTENDED SELECT t1.col1, t2.col1, t2.col3
|
||||
FROM t1 LEFT OUTER JOIN t2 ON t1.col1 = t2.col2
|
||||
WHERE IFNULL(t2.col3,0) = 0;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`col1` AS `col1`,`test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col3` AS `col3` from `test`.`t1` left join `test`.`t2` on(`test`.`t2`.`col2` = `test`.`t1`.`col1`) where ifnull(`test`.`t2`.`col3`,0) = 0
|
||||
SELECT t1.col1, t2.col1, t2.col3
|
||||
FROM t1 LEFT OUTER JOIN t2 ON t1.col1 = t2.col2
|
||||
WHERE f1(t2.col3,0) = 0;
|
||||
col1 col1 col3
|
||||
2.00000 NULL NULL
|
||||
2.00000 NULL NULL
|
||||
EXPLAIN EXTENDED SELECT t1.col1, t2.col1, t2.col3
|
||||
FROM t1 LEFT OUTER JOIN t2 ON t1.col1 = t2.col2
|
||||
WHERE f1(t2.col3,0) = 0;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`col1` AS `col1`,`test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col3` AS `col3` from `test`.`t1` left join `test`.`t2` on(`test`.`t2`.`col2` = `test`.`t1`.`col1`) where `f1`(`test`.`t2`.`col3`,0) = 0
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1,t2;
|
||||
# end of 5.5 tests
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
|
@ -2348,6 +2348,101 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`i1` AS `i1`,`test`.`t1`.`v1` AS `v1`,`test`.`t2`.`i2` AS `i2`,`test`.`t2`.`v2` AS `v2`,`test`.`t3`.`i3` AS `i3`,`test`.`t3`.`v3` AS `v3` from `test`.`t1` join `test`.`t2` join `test`.`t3` where `test`.`t3`.`v3` = 4 and `test`.`t1`.`i1` = `test`.`t3`.`i3` and `test`.`t2`.`i2` = `test`.`t3`.`i3`
|
||||
drop table t1,t2,t3;
|
||||
#
|
||||
# MDEV-11958: LEFT JOIN with stored routine produces incorrect result
|
||||
#
|
||||
CREATE TABLE t (x INT);
|
||||
INSERT INTO t VALUES(1),(NULL);
|
||||
CREATE FUNCTION f (val INT, ret INT) RETURNS INT DETERMINISTIC RETURN IFNULL(val, ret);
|
||||
SELECT t1.x, t2.x, IFNULL(t2.x,0), f(t2.x,0)
|
||||
FROM t t1 LEFT JOIN t t2
|
||||
ON t1.x = t2.x
|
||||
WHERE IFNULL(t2.x,0)=0;
|
||||
x x IFNULL(t2.x,0) f(t2.x,0)
|
||||
NULL NULL 0 0
|
||||
explain extended
|
||||
SELECT t1.x, t2.x, IFNULL(t2.x,0), f(t2.x,0)
|
||||
FROM t t1 LEFT JOIN t t2
|
||||
ON t1.x = t2.x
|
||||
WHERE IFNULL(t2.x,0)=0;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (flat, BNL join)
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`x` AS `x`,`test`.`t2`.`x` AS `x`,ifnull(`test`.`t2`.`x`,0) AS `IFNULL(t2.x,0)`,`f`(`test`.`t2`.`x`,0) AS `f(t2.x,0)` from `test`.`t` `t1` left join `test`.`t` `t2` on(`test`.`t2`.`x` = `test`.`t1`.`x`) where ifnull(`test`.`t2`.`x`,0) = 0
|
||||
SELECT t1.x, t2.x, IFNULL(t2.x,0), f(t2.x,0)
|
||||
FROM t t1 LEFT JOIN t t2
|
||||
ON t1.x = t2.x
|
||||
WHERE f(t2.x,0)=0;
|
||||
x x IFNULL(t2.x,0) f(t2.x,0)
|
||||
NULL NULL 0 0
|
||||
explain extended
|
||||
SELECT t1.x, t2.x, IFNULL(t2.x,0), f(t2.x,0)
|
||||
FROM t t1 LEFT JOIN t t2
|
||||
ON t1.x = t2.x
|
||||
WHERE f(t2.x,0)=0;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (flat, BNL join)
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`x` AS `x`,`test`.`t2`.`x` AS `x`,ifnull(`test`.`t2`.`x`,0) AS `IFNULL(t2.x,0)`,`f`(`test`.`t2`.`x`,0) AS `f(t2.x,0)` from `test`.`t` `t1` left join `test`.`t` `t2` on(`test`.`t2`.`x` = `test`.`t1`.`x`) where `f`(`test`.`t2`.`x`,0) = 0
|
||||
drop function f;
|
||||
drop table t;
|
||||
CREATE TABLE t1 (
|
||||
col1 DECIMAL(33,5) NULL DEFAULT NULL,
|
||||
col2 DECIMAL(33,5) NULL DEFAULT NULL
|
||||
);
|
||||
CREATE TABLE t2 (
|
||||
col1 DECIMAL(33,5) NULL DEFAULT NULL,
|
||||
col2 DECIMAL(33,5) NULL DEFAULT NULL,
|
||||
col3 DECIMAL(33,5) NULL DEFAULT NULL
|
||||
);
|
||||
INSERT INTO t1 VALUES (2, 1.1), (2, 2.1);
|
||||
INSERT INTO t2 VALUES (3, 3.1, 4), (1, 1, NULL);
|
||||
CREATE FUNCTION f1 ( p_num DECIMAL(45,15), p_return DECIMAL(45,15))
|
||||
RETURNS decimal(33,5)
|
||||
LANGUAGE SQL
|
||||
DETERMINISTIC
|
||||
CONTAINS SQL
|
||||
SQL SECURITY INVOKER
|
||||
BEGIN
|
||||
IF p_num IS NULL THEN
|
||||
RETURN p_return;
|
||||
ELSE
|
||||
RETURN p_num;
|
||||
END IF;
|
||||
END |
|
||||
SELECT t1.col1, t2.col1, t2.col3
|
||||
FROM t1 LEFT OUTER JOIN t2 ON t1.col1 = t2.col2
|
||||
WHERE IFNULL(t2.col3,0) = 0;
|
||||
col1 col1 col3
|
||||
2.00000 NULL NULL
|
||||
2.00000 NULL NULL
|
||||
EXPLAIN EXTENDED SELECT t1.col1, t2.col1, t2.col3
|
||||
FROM t1 LEFT OUTER JOIN t2 ON t1.col1 = t2.col2
|
||||
WHERE IFNULL(t2.col3,0) = 0;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (flat, BNL join)
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`col1` AS `col1`,`test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col3` AS `col3` from `test`.`t1` left join `test`.`t2` on(`test`.`t2`.`col2` = `test`.`t1`.`col1`) where ifnull(`test`.`t2`.`col3`,0) = 0
|
||||
SELECT t1.col1, t2.col1, t2.col3
|
||||
FROM t1 LEFT OUTER JOIN t2 ON t1.col1 = t2.col2
|
||||
WHERE f1(t2.col3,0) = 0;
|
||||
col1 col1 col3
|
||||
2.00000 NULL NULL
|
||||
2.00000 NULL NULL
|
||||
EXPLAIN EXTENDED SELECT t1.col1, t2.col1, t2.col3
|
||||
FROM t1 LEFT OUTER JOIN t2 ON t1.col1 = t2.col2
|
||||
WHERE f1(t2.col3,0) = 0;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (flat, BNL join)
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`col1` AS `col1`,`test`.`t2`.`col1` AS `col1`,`test`.`t2`.`col3` AS `col3` from `test`.`t1` left join `test`.`t2` on(`test`.`t2`.`col2` = `test`.`t1`.`col1`) where `f1`(`test`.`t2`.`col3`,0) = 0
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1,t2;
|
||||
# end of 5.5 tests
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
set join_cache_level=default;
|
||||
show variables like 'join_cache_level';
|
||||
|
@ -425,7 +425,7 @@ c1
|
||||
bb
|
||||
cc
|
||||
Warnings:
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 18 rows, which exceeds LIMIT ROWS EXAMINED (16). The query result may be incomplete
|
||||
Warning 1931 Query execution was interrupted. The query examined at least 17 rows, which exceeds LIMIT ROWS EXAMINED (16). The query result may be incomplete
|
||||
select * from v1 LIMIT ROWS EXAMINED 11;
|
||||
c1
|
||||
bb
|
||||
@ -438,7 +438,8 @@ from (select * from t1
|
||||
where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0)) as tmp
|
||||
LIMIT ROWS EXAMINED 11;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 2 func 1
|
||||
3 MATERIALIZED t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
select *
|
||||
from (select * from t1
|
||||
|
@ -1,8 +1,12 @@
|
||||
set @@global.log_output = 'TABLE';
|
||||
connect con1,localhost,root,,;
|
||||
connect con2,localhost,root,,;
|
||||
connection con1;
|
||||
set session long_query_time=10;
|
||||
select get_lock('bug27638', 1);
|
||||
get_lock('bug27638', 1)
|
||||
1
|
||||
connection con2;
|
||||
set session long_query_time=1;
|
||||
select get_lock('bug27638', 2);
|
||||
get_lock('bug27638', 2)
|
||||
@ -25,7 +29,11 @@ select if (query_time >= '00:01:40', 'OK', 'WRONG') as qt, sql_text from mysql.s
|
||||
where sql_text = 'select get_lock(\'bug27638\', 101)';
|
||||
qt sql_text
|
||||
OK select get_lock('bug27638', 101)
|
||||
connection con1;
|
||||
select release_lock('bug27638');
|
||||
release_lock('bug27638')
|
||||
1
|
||||
connection default;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
set @@global.log_output=default;
|
||||
|
@ -1549,6 +1549,9 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref v v 13 const # Using where; Using index
|
||||
alter table t1 add unique(v);
|
||||
ERROR 23000: Duplicate entry '{ ' for key 'v_2'
|
||||
show warnings;
|
||||
Level Code Message
|
||||
Error 1062 Duplicate entry 'a' for key 'v_2'
|
||||
alter table t1 add key(v);
|
||||
Warnings:
|
||||
Note 1831 Duplicate index `v_2`. This is deprecated and will be disallowed in a future release
|
||||
|
@ -350,6 +350,9 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref v v 13 const # Using where; Using index
|
||||
alter table t1 add unique(v);
|
||||
ERROR 23000: Duplicate entry '{ ' for key 'v_2'
|
||||
show warnings;
|
||||
Level Code Message
|
||||
Error 1062 Duplicate entry 'a' for key 'v_2'
|
||||
alter table t1 add key(v);
|
||||
Warnings:
|
||||
Note 1831 Duplicate index `v_2`. This is deprecated and will be disallowed in a future release
|
||||
|
@ -1255,6 +1255,9 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref v v 13 const # Using where; Using index
|
||||
alter table t1 add unique(v);
|
||||
ERROR 23000: Duplicate entry '{ ' for key 'v_2'
|
||||
show warnings;
|
||||
Level Code Message
|
||||
Error 1062 Duplicate entry 'a' for key 'v_2'
|
||||
alter table t1 add key(v);
|
||||
Warnings:
|
||||
Note 1831 Duplicate index `v_2`. This is deprecated and will be disallowed in a future release
|
||||
|
@ -29,3 +29,15 @@ Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
DROP TABLE t1,t2;
|
||||
disconnect insertConn;
|
||||
call mtr.add_suppression("Index for table '.*test.t1\\.MYI' is corrupt; try to repair it");
|
||||
create table t1 (a int, index(a));
|
||||
lock tables t1 write;
|
||||
insert t1 values (1),(2),(1);
|
||||
set @old_dbug=@@debug_dbug;
|
||||
set debug_dbug='+d,mi_lock_database_failure';
|
||||
unlock tables;
|
||||
Warnings:
|
||||
Error 126 Index for table './test/t1.MYI' is corrupt; try to repair it
|
||||
Error 1030 Got error 22 "Invalid argument" from storage engine MyISAM
|
||||
set debug_dbug=@old_dbug;
|
||||
drop table t1;
|
||||
|
@ -51,3 +51,50 @@ execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
drop table test_data;
|
||||
create table t1(id int, d date not null, b bool not null default 0, primary key(id,d))
|
||||
engine=innodb
|
||||
partition by range columns (d) (
|
||||
partition p1 values less than ('2016-10-18'),
|
||||
partition p2 values less than ('2020-10-19'));
|
||||
insert t1 values (0, '2000-01-02', 0);
|
||||
insert t1 values (1, '2020-01-02', 10);
|
||||
alter table t1 add check (b in (0, 1));
|
||||
ERROR 23000: CONSTRAINT `CONSTRAINT_1` failed for `test`.`#sql-temporary`
|
||||
alter table t1 add check (b in (0, 10));
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) NOT NULL,
|
||||
`d` date NOT NULL,
|
||||
`b` tinyint(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`,`d`),
|
||||
CONSTRAINT `CONSTRAINT_1` CHECK (`b` in (0,10))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
PARTITION BY RANGE COLUMNS(d)
|
||||
(PARTITION p1 VALUES LESS THAN ('2016-10-18') ENGINE = InnoDB,
|
||||
PARTITION p2 VALUES LESS THAN ('2020-10-19') ENGINE = InnoDB)
|
||||
insert t1 values (2, '2020-01-03', 20);
|
||||
ERROR 23000: CONSTRAINT `CONSTRAINT_1` failed for `test`.`t1`
|
||||
drop table t1;
|
||||
create table t1(id int, d date not null, b bool not null default 0, primary key(id,d))
|
||||
partition by range columns (d) (
|
||||
partition p1 values less than ('2016-10-18'),
|
||||
partition p2 values less than ('2020-10-19'));
|
||||
insert t1 values (0, '2000-01-02', 0);
|
||||
insert t1 values (1, '2020-01-02', 10);
|
||||
alter table t1 add check (b in (0, 1));
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`id` int(11) NOT NULL,
|
||||
`d` date NOT NULL,
|
||||
`b` tinyint(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`,`d`),
|
||||
CONSTRAINT `CONSTRAINT_1` CHECK (`b` in (0,1))
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
PARTITION BY RANGE COLUMNS(d)
|
||||
(PARTITION p1 VALUES LESS THAN ('2016-10-18') ENGINE = MyISAM,
|
||||
PARTITION p2 VALUES LESS THAN ('2020-10-19') ENGINE = MyISAM)
|
||||
insert t1 values (2, '2020-01-03', 20);
|
||||
ERROR 23000: CONSTRAINT `CONSTRAINT_1` failed for `test`.`t1`
|
||||
drop table t1;
|
||||
|
@ -576,3 +576,42 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL #
|
||||
2 DEPENDENT SUBQUERY t2 ref key1 key1 5 test.t1.a # Using where; Using filesort
|
||||
drop table t1,t2;
|
||||
#
|
||||
# mdev-12931: semi-join in ON expression of STRAIGHT_JOIN
|
||||
# joining a base table and a mergeable derived table
|
||||
#
|
||||
CREATE TABLE t1 (f1 int) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (3),(2);
|
||||
CREATE TABLE t2 (f2 int) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),(4);
|
||||
CREATE TABLE t3 (f3 int) ENGINE=InnoDB;
|
||||
INSERT INTO t3 VALUES (5),(6);
|
||||
CREATE TABLE t4 (f4 int) ENGINE=InnoDB;
|
||||
INSERT INTO t4 VALUES (1),(8);
|
||||
SELECT *
|
||||
FROM t1
|
||||
INNER JOIN
|
||||
( t2 STRAIGHT_JOIN ( SELECT * FROM t3 ) AS sq
|
||||
ON ( 1 IN ( SELECT f4 FROM t4 ) ) )
|
||||
ON ( f1 >= f2 );
|
||||
f1 f2 f3
|
||||
3 1 5
|
||||
2 1 5
|
||||
3 1 6
|
||||
2 1 6
|
||||
EXPLAIN EXTENDED
|
||||
SELECT *
|
||||
FROM t1
|
||||
INNER JOIN
|
||||
( t2 STRAIGHT_JOIN ( SELECT * FROM t3 ) AS sq
|
||||
ON ( 1 IN ( SELECT f4 FROM t4 ) ) )
|
||||
ON ( f1 >= f2 );
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1 100.00
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 Using join buffer (flat, BNL join)
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (incremental, BNL join)
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 2 100.00 Using join buffer (incremental, BNL join)
|
||||
3 MATERIALIZED t4 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`f1` AS `f1`,`test`.`t2`.`f2` AS `f2`,`test`.`t3`.`f3` AS `f3` from `test`.`t1` join `test`.`t2` semi join (`test`.`t4`) join `test`.`t3` where `test`.`t4`.`f4` = 1 and `test`.`t1`.`f1` >= `test`.`t2`.`f2`
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
|
@ -379,6 +379,7 @@ drop table t3, t4, t5;
|
||||
#
|
||||
# LP BUG#858038 The result of a query with NOT IN subquery depends on the state of the optimizer switch
|
||||
#
|
||||
set @optimizer_switch_save= @@optimizer_switch;
|
||||
create table t1 (c1 char(2) not null, c2 char(2));
|
||||
create table t2 (c3 char(2), c4 char(2));
|
||||
insert into t1 values ('a1', 'b1');
|
||||
@ -400,6 +401,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
select * from t1 where c1 = 'a2' and (c1, c2) not in (select * from t2);
|
||||
c1 c2
|
||||
drop table t1, t2;
|
||||
set optimizer_switch= @optimizer_switch_save;
|
||||
#
|
||||
# MDEV-12673: cost-based choice between materialization and in-to-exists
|
||||
#
|
||||
@ -442,3 +444,44 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
2 DEPENDENT SUBQUERY t3 const PRIMARY PRIMARY 4 const 1
|
||||
2 DEPENDENT SUBQUERY t2 index NULL i2 11 NULL 2 Using where; Using index
|
||||
DROP TABLE t1,t2,t3;
|
||||
#
|
||||
# MDEV-7599: in-to-exists chosen after min/max optimization
|
||||
#
|
||||
set @optimizer_switch_save= @@optimizer_switch;
|
||||
CREATE TABLE t1 (a INT, KEY(a)) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
CREATE TABLE t2 (b INT, c INT) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES (1,6),(2,4), (8,9);
|
||||
SELECT * FROM t2 WHERE b != ALL (SELECT MIN(a) FROM t1, t2 WHERE t2.c = t2.b);
|
||||
b c
|
||||
EXPLAIN EXTENDED SELECT * FROM t2 WHERE b != ALL (SELECT MIN(a) FROM t1, t2 WHERE t2.c = t2.b);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
2 MATERIALIZED t1 index NULL a 5 NULL 2 100.00 Using index
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t2` where !<expr_cache><`test`.`t2`.`b`>(<in_optimizer>(`test`.`t2`.`b`,`test`.`t2`.`b` in ( <materialize> (/* select#2 */ select min(`test`.`t1`.`a`) from `test`.`t1` join `test`.`t2` where `test`.`t2`.`c` = `test`.`t2`.`b` ), <primary_index_lookup>(`test`.`t2`.`b` in <temporary table> on distinct_key where `test`.`t2`.`b` = `<subquery2>`.`MIN(a)`))))
|
||||
set optimizer_switch= 'materialization=off';
|
||||
SELECT * FROM t2 WHERE b != ALL (SELECT MIN(a) FROM t1, t2 WHERE t2.c = t2.b);
|
||||
b c
|
||||
EXPLAIN EXTENDED SELECT * FROM t2 WHERE b != ALL (SELECT MIN(a) FROM t1, t2 WHERE t2.c = t2.b);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY t1 index NULL a 5 NULL 2 100.00 Using index
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t2` where !<expr_cache><`test`.`t2`.`b`>(<in_optimizer>(`test`.`t2`.`b`,<exists>(/* select#2 */ select min(`test`.`t1`.`a`) from `test`.`t1` join `test`.`t2` where `test`.`t2`.`c` = `test`.`t2`.`b` having trigcond(<cache>(`test`.`t2`.`b`) = <ref_null_helper>(min(`test`.`t1`.`a`))))))
|
||||
set optimizer_switch= @optimizer_switch_save;
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (f1 varchar(10)) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES ('foo'),('bar');
|
||||
CREATE TABLE t2 (f2 varchar(10), key(f2)) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES ('baz'),('qux');
|
||||
CREATE TABLE t3 (f3 varchar(10)) ENGINE=MyISAM;
|
||||
INSERT INTO t3 VALUES ('abc'),('def');
|
||||
SELECT * FROM t1
|
||||
WHERE f1 = ALL( SELECT MAX(t2a.f2)
|
||||
FROM t2 AS t2a INNER JOIN t2 t2b INNER JOIN t3
|
||||
ON (f3 = t2b.f2) );
|
||||
f1
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
@ -1652,9 +1652,9 @@ CREATE VIEW v1 AS SELECT 1;
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 INNER JOIN t2 ON t2.a != 0 AND t2.a IN (SELECT * FROM v1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived3> system NULL NULL NULL NULL 1
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join)
|
||||
2 MATERIALIZED <derived3> system NULL NULL NULL NULL 1
|
||||
3 DERIVED NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
SELECT * FROM t1 INNER JOIN t2 ON t2.a != 0 AND t2.a IN (SELECT * FROM v1);
|
||||
a a
|
||||
@ -3072,4 +3072,97 @@ project_number
|
||||
aaa
|
||||
drop table t1, t2, t3;
|
||||
set optimizer_switch= @tmp_mdev6859;
|
||||
#
|
||||
# MDEV-12675: subquery subject to semi-join optimizations
|
||||
# in ON expression of INNER JOIN
|
||||
#
|
||||
set @tmp_mdev12675=@@optimizer_switch;
|
||||
set optimizer_switch=default;
|
||||
create table t1 (a int) engine=myisam;
|
||||
insert into t1 values (5),(3),(2),(7),(2),(5),(1);
|
||||
create table t2 (b int, index idx(b)) engine=myisam;
|
||||
insert into t2 values (2),(3),(2),(1),(3),(4);
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
analyze table t1,t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
test.t2 analyze status OK
|
||||
explain
|
||||
select a from t1, t2 where b between 1 and 2 and a in (select b from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 7 Using where
|
||||
1 PRIMARY t2 ref idx idx 5 test.t1.a 256 Using index; FirstMatch(t1)
|
||||
1 PRIMARY t2 range idx idx 5 NULL 2 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
explain
|
||||
select a from t1 join t2 on b between 1 and 2 and a in (select b from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 7 Using where
|
||||
1 PRIMARY t2 ref idx idx 5 test.t1.a 256 Using index; FirstMatch(t1)
|
||||
1 PRIMARY t2 range idx idx 5 NULL 2 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
drop table t1,t2;
|
||||
set optimizer_switch= @tmp_mdev12675;
|
||||
#
|
||||
# MDEV-12817: subquery NOT subject to semi-join optimizations
|
||||
# in ON expression of INNER JOIN
|
||||
#
|
||||
CREATE TABLE t1 (c1 int) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
CREATE TABLE t2 (c2 int) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES (3),(4);
|
||||
CREATE TABLE t3 (c3 int) ENGINE=MyISAM;
|
||||
INSERT INTO t3 VALUES (5),(6);
|
||||
CREATE TABLE t4 (c4 int) ENGINE=MyISAM;
|
||||
INSERT INTO t4 VALUES (7),(8);
|
||||
SELECT c1
|
||||
FROM t1
|
||||
LEFT JOIN
|
||||
( t2 INNER JOIN t3 ON ( 1 IN ( SELECT c4 FROM t4 ) ) )
|
||||
ON (c1 = c3);
|
||||
c1
|
||||
1
|
||||
2
|
||||
EXPLAIN EXTENDED SELECT c1
|
||||
FROM t1
|
||||
LEFT JOIN
|
||||
( t2 INNER JOIN t3 ON ( 1 IN ( SELECT c4 FROM t4 ) ) )
|
||||
ON (c1 = c3);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
2 SUBQUERY t4 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`c1` AS `c1` from `test`.`t1` left join (`test`.`t2` join `test`.`t3`) on(`test`.`t3`.`c3` = `test`.`t1`.`c1` and <cache>(<in_optimizer>(1,<exists>(/* select#2 */ select `test`.`t4`.`c4` from `test`.`t4` where 1 = `test`.`t4`.`c4`)))) where 1
|
||||
# mdev-12820
|
||||
SELECT *
|
||||
FROM t1
|
||||
LEFT JOIN
|
||||
( ( SELECT * FROM t2 WHERE c2 IN ( SELECT c3 FROM t3 ) ) AS sq INNER JOIN t4 )
|
||||
ON (c1 = c2);
|
||||
c1 c2 c4
|
||||
1 NULL NULL
|
||||
2 NULL NULL
|
||||
EXPLAIN EXTENDED SELECT *
|
||||
FROM t1
|
||||
LEFT JOIN
|
||||
( ( SELECT * FROM t2 WHERE c2 IN ( SELECT c3 FROM t3 ) ) AS sq INNER JOIN t4 )
|
||||
ON (c1 = c2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
1 PRIMARY t4 ALL NULL NULL NULL NULL 2 100.00
|
||||
3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`c1` AS `c1`,`test`.`t2`.`c2` AS `c2`,`test`.`t4`.`c4` AS `c4` from `test`.`t1` left join (`test`.`t2` join `test`.`t4`) on(`test`.`t2`.`c2` = `test`.`t1`.`c1` and <in_optimizer>(`test`.`t1`.`c1`,<exists>(/* select#3 */ select `test`.`t3`.`c3` from `test`.`t3` where <cache>(`test`.`t2`.`c2`) = `test`.`t3`.`c3`))) where 1
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
set optimizer_switch=@subselect_sj_tmp;
|
||||
|
@ -1625,3 +1625,26 @@ i1
|
||||
DROP TABLE t1,t2,t3;
|
||||
set join_cache_level= @save_join_cache_level;
|
||||
set optimizer_switch=@save_optimizer_switch;
|
||||
#
|
||||
# mdev-7791: materialization of a semi-join subquery +
|
||||
# RAND() in WHERE
|
||||
# (materialized table is accessed last)
|
||||
#
|
||||
set @save_optimizer_switch=@@optimizer_switch;
|
||||
set optimizer_switch='materialization=on';
|
||||
create table t1(i int);
|
||||
insert into t1 values (1), (2), (3), (7), (9), (10);
|
||||
create table t2(i int);
|
||||
insert into t2 values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
||||
select * from t1 where (rand() < 0) and i in (select i from t2);
|
||||
i
|
||||
explain extended
|
||||
select * from t1 where (rand() < 0) and i in (select i from t2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 6 100.00 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 100.00
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 10 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join (`test`.`t2`) where rand() < 0
|
||||
drop table t1,t2;
|
||||
set optimizer_switch=@save_optimizer_switch;
|
||||
|
@ -1665,9 +1665,9 @@ CREATE VIEW v1 AS SELECT 1;
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 INNER JOIN t2 ON t2.a != 0 AND t2.a IN (SELECT * FROM v1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived3> system NULL NULL NULL NULL 1
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join)
|
||||
2 MATERIALIZED <derived3> system NULL NULL NULL NULL 1
|
||||
3 DERIVED NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
SELECT * FROM t1 INNER JOIN t2 ON t2.a != 0 AND t2.a IN (SELECT * FROM v1);
|
||||
a a
|
||||
@ -3086,6 +3086,99 @@ project_number
|
||||
aaa
|
||||
drop table t1, t2, t3;
|
||||
set optimizer_switch= @tmp_mdev6859;
|
||||
#
|
||||
# MDEV-12675: subquery subject to semi-join optimizations
|
||||
# in ON expression of INNER JOIN
|
||||
#
|
||||
set @tmp_mdev12675=@@optimizer_switch;
|
||||
set optimizer_switch=default;
|
||||
create table t1 (a int) engine=myisam;
|
||||
insert into t1 values (5),(3),(2),(7),(2),(5),(1);
|
||||
create table t2 (b int, index idx(b)) engine=myisam;
|
||||
insert into t2 values (2),(3),(2),(1),(3),(4);
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
insert into t2 select b+10 from t2;
|
||||
analyze table t1,t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
test.t2 analyze status OK
|
||||
explain
|
||||
select a from t1, t2 where b between 1 and 2 and a in (select b from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 7 Using where
|
||||
1 PRIMARY t2 ref idx idx 5 test.t1.a 256 Using index; FirstMatch(t1)
|
||||
1 PRIMARY t2 range idx idx 5 NULL 2 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
explain
|
||||
select a from t1 join t2 on b between 1 and 2 and a in (select b from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 7 Using where
|
||||
1 PRIMARY t2 ref idx idx 5 test.t1.a 256 Using index; FirstMatch(t1)
|
||||
1 PRIMARY t2 range idx idx 5 NULL 2 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
drop table t1,t2;
|
||||
set optimizer_switch= @tmp_mdev12675;
|
||||
#
|
||||
# MDEV-12817: subquery NOT subject to semi-join optimizations
|
||||
# in ON expression of INNER JOIN
|
||||
#
|
||||
CREATE TABLE t1 (c1 int) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
CREATE TABLE t2 (c2 int) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES (3),(4);
|
||||
CREATE TABLE t3 (c3 int) ENGINE=MyISAM;
|
||||
INSERT INTO t3 VALUES (5),(6);
|
||||
CREATE TABLE t4 (c4 int) ENGINE=MyISAM;
|
||||
INSERT INTO t4 VALUES (7),(8);
|
||||
SELECT c1
|
||||
FROM t1
|
||||
LEFT JOIN
|
||||
( t2 INNER JOIN t3 ON ( 1 IN ( SELECT c4 FROM t4 ) ) )
|
||||
ON (c1 = c3);
|
||||
c1
|
||||
1
|
||||
2
|
||||
EXPLAIN EXTENDED SELECT c1
|
||||
FROM t1
|
||||
LEFT JOIN
|
||||
( t2 INNER JOIN t3 ON ( 1 IN ( SELECT c4 FROM t4 ) ) )
|
||||
ON (c1 = c3);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (flat, BNL join)
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (incremental, BNL join)
|
||||
2 SUBQUERY t4 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`c1` AS `c1` from `test`.`t1` left join (`test`.`t2` join `test`.`t3`) on(`test`.`t3`.`c3` = `test`.`t1`.`c1` and <cache>(<in_optimizer>(1,<exists>(/* select#2 */ select `test`.`t4`.`c4` from `test`.`t4` where 1 = `test`.`t4`.`c4`)))) where 1
|
||||
# mdev-12820
|
||||
SELECT *
|
||||
FROM t1
|
||||
LEFT JOIN
|
||||
( ( SELECT * FROM t2 WHERE c2 IN ( SELECT c3 FROM t3 ) ) AS sq INNER JOIN t4 )
|
||||
ON (c1 = c2);
|
||||
c1 c2 c4
|
||||
1 NULL NULL
|
||||
2 NULL NULL
|
||||
EXPLAIN EXTENDED SELECT *
|
||||
FROM t1
|
||||
LEFT JOIN
|
||||
( ( SELECT * FROM t2 WHERE c2 IN ( SELECT c3 FROM t3 ) ) AS sq INNER JOIN t4 )
|
||||
ON (c1 = c2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (flat, BNL join)
|
||||
1 PRIMARY t4 ALL NULL NULL NULL NULL 2 100.00 Using join buffer (incremental, BNL join)
|
||||
3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select `test`.`t1`.`c1` AS `c1`,`test`.`t2`.`c2` AS `c2`,`test`.`t4`.`c4` AS `c4` from `test`.`t1` left join (`test`.`t2` join `test`.`t4`) on(`test`.`t2`.`c2` = `test`.`t1`.`c1` and <in_optimizer>(`test`.`t1`.`c1`,<exists>(/* select#3 */ select `test`.`t3`.`c3` from `test`.`t3` where <cache>(`test`.`t2`.`c2`) = `test`.`t3`.`c3`))) where 1
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
set optimizer_switch=@subselect_sj_tmp;
|
||||
#
|
||||
# BUG#49129: Wrong result with IN-subquery with join_cache_level=6 and firstmatch=off
|
||||
|
@ -2368,6 +2368,16 @@ tr1 1 2016-01-01 10:10:10.33
|
||||
tr2 2 2016-01-01 10:10:10.99
|
||||
drop table t1;
|
||||
set time_zone= @@global.time_zone;
|
||||
# MDEV-12992: Increasing memory consumption
|
||||
with each invocation of trigger
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
CREATE TABLE t2 (b INT);
|
||||
CREATE TRIGGER tr
|
||||
AFTER UPDATE ON t1 FOR EACH ROW SELECT (SELECT b FROM t2) INTO @x;
|
||||
# Running 20000 queries
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Start of 10.3 tests
|
||||
#
|
||||
|
@ -2178,6 +2178,35 @@ WHERE t1_2.b NOT IN ( SELECT 4 UNION ALL SELECT 5 );
|
||||
a b a b
|
||||
1 1 1 1
|
||||
DROP TABLE t1;
|
||||
# Bug mdev-12788: UNION ALL + impossible having for derived
|
||||
# with IN subquery in WHERE
|
||||
#
|
||||
CREATE TABLE t1 (i int) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
CREATE TABLE t2 (pk int PRIMARY KEY) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES (1),(2);
|
||||
SELECT 1, 2
|
||||
UNION ALL
|
||||
SELECT i, COUNT(*) FROM (
|
||||
SELECT * FROM t1 WHERE i IN ( SELECT pk FROM t2 )
|
||||
) AS sq
|
||||
GROUP BY i
|
||||
HAVING i = 10;
|
||||
1 2
|
||||
1 2
|
||||
EXPLAIN EXTENDED SELECT 1, 2
|
||||
UNION ALL
|
||||
SELECT i, COUNT(*) FROM (
|
||||
SELECT * FROM t1 WHERE i IN ( SELECT pk FROM t2 )
|
||||
) AS sq
|
||||
GROUP BY i
|
||||
HAVING i = 10;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
2 UNION NULL NULL NULL NULL NULL NULL NULL NULL Impossible HAVING noticed after reading const tables
|
||||
Warnings:
|
||||
Note 1003 /* select#1 */ select 1 AS `1`,2 AS `2` union all /* select#2 */ select 1 AS `i`,count(0) AS `COUNT(*)` from `test`.`t2` where 1 group by 1 having 0
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Start of 10.3 tests
|
||||
#
|
||||
|
12
mysql-test/suite/binlog/r/mysqladmin.result
Normal file
12
mysql-test/suite/binlog/r/mysqladmin.result
Normal file
@ -0,0 +1,12 @@
|
||||
create user adm@localhost identified by 'foobar';
|
||||
grant reload on *.* to adm@localhost;
|
||||
reset master;
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # flush status
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # flush status
|
||||
drop user adm@localhost;
|
12
mysql-test/suite/binlog/t/mysqladmin.test
Normal file
12
mysql-test/suite/binlog/t/mysqladmin.test
Normal file
@ -0,0 +1,12 @@
|
||||
source include/have_binlog_format_statement.inc;
|
||||
#
|
||||
# MDEV-12612 mysqladmin --local flush... to use FLUSH LOCAL
|
||||
#
|
||||
create user adm@localhost identified by 'foobar';
|
||||
grant reload on *.* to adm@localhost;
|
||||
reset master;
|
||||
exec $MYSQLADMIN -uadm -pfoobar flush-status;
|
||||
source include/show_binlog_events.inc;
|
||||
exec $MYSQLADMIN --local -uadm -pfoobar flush-status;
|
||||
source include/show_binlog_events.inc;
|
||||
drop user adm@localhost;
|
30
mysql-test/suite/csv/read_only.result
Normal file
30
mysql-test/suite/csv/read_only.result
Normal file
@ -0,0 +1,30 @@
|
||||
create table t1 (a int not null) engine=csv;
|
||||
insert t1 values (1),(2);
|
||||
flush tables;
|
||||
select * from information_schema.tables where table_schema='test';
|
||||
TABLE_CATALOG def
|
||||
TABLE_SCHEMA test
|
||||
TABLE_NAME t1
|
||||
TABLE_TYPE BASE TABLE
|
||||
ENGINE NULL
|
||||
VERSION NULL
|
||||
ROW_FORMAT NULL
|
||||
TABLE_ROWS NULL
|
||||
AVG_ROW_LENGTH NULL
|
||||
DATA_LENGTH NULL
|
||||
MAX_DATA_LENGTH NULL
|
||||
INDEX_LENGTH NULL
|
||||
DATA_FREE NULL
|
||||
AUTO_INCREMENT NULL
|
||||
CREATE_TIME NULL
|
||||
UPDATE_TIME NULL
|
||||
CHECK_TIME NULL
|
||||
TABLE_COLLATION NULL
|
||||
CHECKSUM NULL
|
||||
CREATE_OPTIONS NULL
|
||||
TABLE_COMMENT File './test/t1.CSM' not found (Errcode: 13 "Permission denied")
|
||||
Warnings:
|
||||
Level Warning
|
||||
Code 29
|
||||
Message File './test/t1.CSM' not found (Errcode: 13 "Permission denied")
|
||||
drop table t1;
|
19
mysql-test/suite/csv/read_only.test
Normal file
19
mysql-test/suite/csv/read_only.test
Normal file
@ -0,0 +1,19 @@
|
||||
#
|
||||
# MDEV-11883 MariaDB crashes with out-of-memory when query information_schema
|
||||
#
|
||||
source include/have_csv.inc;
|
||||
|
||||
let datadir=`select @@datadir`;
|
||||
|
||||
create table t1 (a int not null) engine=csv;
|
||||
insert t1 values (1),(2);
|
||||
flush tables;
|
||||
|
||||
chmod 0400 $datadir/test/t1.CSM;
|
||||
chmod 0400 $datadir/test/t1.CSV;
|
||||
|
||||
--replace_result $datadir ./
|
||||
query_vertical select * from information_schema.tables where table_schema='test';
|
||||
|
||||
drop table t1;
|
||||
|
@ -12,4 +12,3 @@
|
||||
|
||||
innodb_scrub : MDEV-8139 scrubbing does not work reliably
|
||||
innodb_scrub_background : MDEV-8139 scrubbing does not work reliably
|
||||
innodb_encryption-page-compression : MDEV-11420
|
||||
|
@ -0,0 +1,38 @@
|
||||
--- suite/encryption/r/innodb-checksum-algorithm.result
|
||||
+++ suite/encryption/r/innodb-checksum-algorithm,32k.reject
|
||||
@@ -13,9 +13,9 @@
|
||||
SET GLOBAL innodb_default_encryption_key_id=4;
|
||||
SET GLOBAL innodb_checksum_algorithm=crc32;
|
||||
create table tce_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
-ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||
+ROW_FORMAT=DYNAMIC encrypted=yes;
|
||||
create table tc_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
-ROW_FORMAT=COMPRESSED encrypted=no;
|
||||
+ROW_FORMAT=DYNAMIC encrypted=no;
|
||||
create table te_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=yes;
|
||||
create table t_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
@@ -222,9 +222,9 @@
|
||||
t_crc32, tpe_crc32, tp_crc32;
|
||||
SET GLOBAL innodb_checksum_algorithm=innodb;
|
||||
create table tce_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
-ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||
+ROW_FORMAT=DYNAMIC encrypted=yes;
|
||||
create table tc_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
-ROW_FORMAT=COMPRESSED encrypted=no;
|
||||
+ROW_FORMAT=DYNAMIC encrypted=no;
|
||||
create table te_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=yes;
|
||||
create table t_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
@@ -431,9 +431,9 @@
|
||||
t_innodb, tpe_innodb, tp_innodb;
|
||||
SET GLOBAL innodb_checksum_algorithm=none;
|
||||
create table tce_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
-ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||
+ROW_FORMAT=DYNAMIC encrypted=yes;
|
||||
create table tc_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
-ROW_FORMAT=COMPRESSED encrypted=no;
|
||||
+ROW_FORMAT=DYNAMIC encrypted=no;
|
||||
create table te_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=yes;
|
||||
create table t_none(a serial, b blob, index(b(10))) engine=innodb
|
@ -0,0 +1,38 @@
|
||||
--- suite/encryption/r/innodb-checksum-algorithm.result
|
||||
+++ suite/encryption/r/innodb-checksum-algorithm,64k.reject
|
||||
@@ -13,9 +13,9 @@
|
||||
SET GLOBAL innodb_default_encryption_key_id=4;
|
||||
SET GLOBAL innodb_checksum_algorithm=crc32;
|
||||
create table tce_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
-ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||
+ROW_FORMAT=DYNAMIC encrypted=yes;
|
||||
create table tc_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
-ROW_FORMAT=COMPRESSED encrypted=no;
|
||||
+ROW_FORMAT=DYNAMIC encrypted=no;
|
||||
create table te_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=yes;
|
||||
create table t_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
@@ -222,9 +222,9 @@
|
||||
t_crc32, tpe_crc32, tp_crc32;
|
||||
SET GLOBAL innodb_checksum_algorithm=innodb;
|
||||
create table tce_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
-ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||
+ROW_FORMAT=DYNAMIC encrypted=yes;
|
||||
create table tc_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
-ROW_FORMAT=COMPRESSED encrypted=no;
|
||||
+ROW_FORMAT=DYNAMIC encrypted=no;
|
||||
create table te_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=yes;
|
||||
create table t_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
@@ -431,9 +431,9 @@
|
||||
t_innodb, tpe_innodb, tp_innodb;
|
||||
SET GLOBAL innodb_checksum_algorithm=none;
|
||||
create table tce_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
-ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||
+ROW_FORMAT=DYNAMIC encrypted=yes;
|
||||
create table tc_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
-ROW_FORMAT=COMPRESSED encrypted=no;
|
||||
+ROW_FORMAT=DYNAMIC encrypted=no;
|
||||
create table te_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=yes;
|
||||
create table t_none(a serial, b blob, index(b(10))) engine=innodb
|
643
mysql-test/suite/encryption/r/innodb-checksum-algorithm.result
Normal file
643
mysql-test/suite/encryption/r/innodb-checksum-algorithm.result
Normal file
@ -0,0 +1,643 @@
|
||||
SET @saved_file_per_table = @@global.innodb_file_per_table;
|
||||
SET @saved_checksum_algorithm = @@global.innodb_checksum_algorithm;
|
||||
SET @saved_encrypt_tables = @@global.innodb_encrypt_tables;
|
||||
SET @saved_encryption_threads = @@global.innodb_encryption_threads;
|
||||
SET @saved_encryption_key_id = @@global.innodb_default_encryption_key_id;
|
||||
SET GLOBAL innodb_file_per_table = ON;
|
||||
SET GLOBAL innodb_encrypt_tables = ON;
|
||||
SET GLOBAL innodb_encryption_threads = 4;
|
||||
call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_(crc32|none|innodb)\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"(innodb|none|crc32)\"");
|
||||
SET GLOBAL innodb_checksum_algorithm = innodb;
|
||||
SET GLOBAL innodb_default_encryption_key_id=4;
|
||||
SET GLOBAL innodb_checksum_algorithm=crc32;
|
||||
create table tce_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||
create table tc_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
ROW_FORMAT=COMPRESSED encrypted=no;
|
||||
create table te_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=yes;
|
||||
create table t_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=no;
|
||||
create table tpe_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
page_compressed=yes encrypted=yes;
|
||||
create table tp_crc32(a serial, b blob, index(b(10))) engine=innodb
|
||||
page_compressed=yes encrypted=no;
|
||||
begin;
|
||||
insert into tce_crc32(b) values (repeat('secret',20));
|
||||
insert into tc_crc32(b) values (repeat('secret',20));
|
||||
insert into te_crc32(b) values (repeat('secret',20));
|
||||
insert into t_crc32(b) values (repeat('secret',20));
|
||||
insert into tpe_crc32(b) values (repeat('secret',20));
|
||||
insert into tp_crc32(b) values (repeat('secret',20));
|
||||
commit;
|
||||
FLUSH TABLES tce_crc32, tc_crc32, te_crc32,
|
||||
t_crc32, tpe_crc32, tp_crc32 FOR EXPORT;
|
||||
backup: tce_crc32
|
||||
backup: tc_crc32
|
||||
backup: te_crc32
|
||||
backup: t_crc32
|
||||
backup: tpe_crc32
|
||||
backup: tp_crc32
|
||||
t_crc32.cfg
|
||||
t_crc32.frm
|
||||
t_crc32.ibd
|
||||
tc_crc32.cfg
|
||||
tc_crc32.frm
|
||||
tc_crc32.ibd
|
||||
tce_crc32.cfg
|
||||
tce_crc32.frm
|
||||
tce_crc32.ibd
|
||||
te_crc32.cfg
|
||||
te_crc32.frm
|
||||
te_crc32.ibd
|
||||
tp_crc32.cfg
|
||||
tp_crc32.frm
|
||||
tp_crc32.ibd
|
||||
tpe_crc32.cfg
|
||||
tpe_crc32.frm
|
||||
tpe_crc32.ibd
|
||||
UNLOCK TABLES;
|
||||
SET GLOBAL innodb_checksum_algorithm=strict_crc32;
|
||||
ALTER TABLE tce_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE te_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE t_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_crc32 DISCARD TABLESPACE;
|
||||
restore: tce_crc32 .ibd and .cfg files
|
||||
restore: tc_crc32 .ibd and .cfg files
|
||||
restore: te_crc32 .ibd and .cfg files
|
||||
restore: t_crc32 .ibd and .cfg files
|
||||
restore: tpe_crc32 .ibd and .cfg files
|
||||
restore: tp_crc32 .ibd and .cfg files
|
||||
ALTER TABLE tce_crc32 IMPORT TABLESPACE;
|
||||
update tce_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tc_crc32 IMPORT TABLESPACE;
|
||||
update tc_crc32 set b=substr(b,1);
|
||||
ALTER TABLE te_crc32 IMPORT TABLESPACE;
|
||||
update te_crc32 set b=substr(b,1);
|
||||
ALTER TABLE t_crc32 IMPORT TABLESPACE;
|
||||
update t_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tpe_crc32 IMPORT TABLESPACE;
|
||||
update tpe_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tp_crc32 IMPORT TABLESPACE;
|
||||
update tp_crc32 set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=crc32;
|
||||
ALTER TABLE tce_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE te_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE t_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_crc32 DISCARD TABLESPACE;
|
||||
restore: tce_crc32 .ibd and .cfg files
|
||||
restore: tc_crc32 .ibd and .cfg files
|
||||
restore: te_crc32 .ibd and .cfg files
|
||||
restore: t_crc32 .ibd and .cfg files
|
||||
restore: tpe_crc32 .ibd and .cfg files
|
||||
restore: tp_crc32 .ibd and .cfg files
|
||||
ALTER TABLE tce_crc32 IMPORT TABLESPACE;
|
||||
update tce_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tc_crc32 IMPORT TABLESPACE;
|
||||
update tc_crc32 set b=substr(b,1);
|
||||
ALTER TABLE te_crc32 IMPORT TABLESPACE;
|
||||
update te_crc32 set b=substr(b,1);
|
||||
ALTER TABLE t_crc32 IMPORT TABLESPACE;
|
||||
update t_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tpe_crc32 IMPORT TABLESPACE;
|
||||
update tpe_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tp_crc32 IMPORT TABLESPACE;
|
||||
update tp_crc32 set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=strict_innodb;
|
||||
ALTER TABLE tce_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE te_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE t_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_crc32 DISCARD TABLESPACE;
|
||||
restore: tce_crc32 .ibd and .cfg files
|
||||
restore: tc_crc32 .ibd and .cfg files
|
||||
restore: te_crc32 .ibd and .cfg files
|
||||
restore: t_crc32 .ibd and .cfg files
|
||||
restore: tpe_crc32 .ibd and .cfg files
|
||||
restore: tp_crc32 .ibd and .cfg files
|
||||
ALTER TABLE tce_crc32 IMPORT TABLESPACE;
|
||||
update tce_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tc_crc32 IMPORT TABLESPACE;
|
||||
update tc_crc32 set b=substr(b,1);
|
||||
ALTER TABLE te_crc32 IMPORT TABLESPACE;
|
||||
update te_crc32 set b=substr(b,1);
|
||||
ALTER TABLE t_crc32 IMPORT TABLESPACE;
|
||||
update t_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tpe_crc32 IMPORT TABLESPACE;
|
||||
update tpe_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tp_crc32 IMPORT TABLESPACE;
|
||||
update tp_crc32 set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=innodb;
|
||||
ALTER TABLE tce_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE te_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE t_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_crc32 DISCARD TABLESPACE;
|
||||
restore: tce_crc32 .ibd and .cfg files
|
||||
restore: tc_crc32 .ibd and .cfg files
|
||||
restore: te_crc32 .ibd and .cfg files
|
||||
restore: t_crc32 .ibd and .cfg files
|
||||
restore: tpe_crc32 .ibd and .cfg files
|
||||
restore: tp_crc32 .ibd and .cfg files
|
||||
ALTER TABLE tce_crc32 IMPORT TABLESPACE;
|
||||
update tce_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tc_crc32 IMPORT TABLESPACE;
|
||||
update tc_crc32 set b=substr(b,1);
|
||||
ALTER TABLE te_crc32 IMPORT TABLESPACE;
|
||||
update te_crc32 set b=substr(b,1);
|
||||
ALTER TABLE t_crc32 IMPORT TABLESPACE;
|
||||
update t_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tpe_crc32 IMPORT TABLESPACE;
|
||||
update tpe_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tp_crc32 IMPORT TABLESPACE;
|
||||
update tp_crc32 set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=strict_none;
|
||||
ALTER TABLE tce_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE te_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE t_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_crc32 DISCARD TABLESPACE;
|
||||
restore: tce_crc32 .ibd and .cfg files
|
||||
restore: tc_crc32 .ibd and .cfg files
|
||||
restore: te_crc32 .ibd and .cfg files
|
||||
restore: t_crc32 .ibd and .cfg files
|
||||
restore: tpe_crc32 .ibd and .cfg files
|
||||
restore: tp_crc32 .ibd and .cfg files
|
||||
ALTER TABLE tce_crc32 IMPORT TABLESPACE;
|
||||
update tce_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tc_crc32 IMPORT TABLESPACE;
|
||||
update tc_crc32 set b=substr(b,1);
|
||||
ALTER TABLE te_crc32 IMPORT TABLESPACE;
|
||||
update te_crc32 set b=substr(b,1);
|
||||
ALTER TABLE t_crc32 IMPORT TABLESPACE;
|
||||
update t_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tpe_crc32 IMPORT TABLESPACE;
|
||||
update tpe_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tp_crc32 IMPORT TABLESPACE;
|
||||
update tp_crc32 set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=none;
|
||||
ALTER TABLE tce_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE te_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE t_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_crc32 DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_crc32 DISCARD TABLESPACE;
|
||||
restore: tce_crc32 .ibd and .cfg files
|
||||
restore: tc_crc32 .ibd and .cfg files
|
||||
restore: te_crc32 .ibd and .cfg files
|
||||
restore: t_crc32 .ibd and .cfg files
|
||||
restore: tpe_crc32 .ibd and .cfg files
|
||||
restore: tp_crc32 .ibd and .cfg files
|
||||
ALTER TABLE tce_crc32 IMPORT TABLESPACE;
|
||||
update tce_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tc_crc32 IMPORT TABLESPACE;
|
||||
update tc_crc32 set b=substr(b,1);
|
||||
ALTER TABLE te_crc32 IMPORT TABLESPACE;
|
||||
update te_crc32 set b=substr(b,1);
|
||||
ALTER TABLE t_crc32 IMPORT TABLESPACE;
|
||||
update t_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tpe_crc32 IMPORT TABLESPACE;
|
||||
update tpe_crc32 set b=substr(b,1);
|
||||
ALTER TABLE tp_crc32 IMPORT TABLESPACE;
|
||||
update tp_crc32 set b=substr(b,1);
|
||||
CHECK TABLE tce_crc32, tc_crc32, te_crc32,
|
||||
t_crc32, tpe_crc32, tp_crc32;
|
||||
Table Op Msg_type Msg_text
|
||||
test.tce_crc32 check status OK
|
||||
test.tc_crc32 check status OK
|
||||
test.te_crc32 check status OK
|
||||
test.t_crc32 check status OK
|
||||
test.tpe_crc32 check status OK
|
||||
test.tp_crc32 check status OK
|
||||
DROP TABLE tce_crc32, tc_crc32, te_crc32,
|
||||
t_crc32, tpe_crc32, tp_crc32;
|
||||
SET GLOBAL innodb_checksum_algorithm=innodb;
|
||||
create table tce_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||
create table tc_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
ROW_FORMAT=COMPRESSED encrypted=no;
|
||||
create table te_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=yes;
|
||||
create table t_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=no;
|
||||
create table tpe_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
page_compressed=yes encrypted=yes;
|
||||
create table tp_innodb(a serial, b blob, index(b(10))) engine=innodb
|
||||
page_compressed=yes encrypted=no;
|
||||
begin;
|
||||
insert into tce_innodb(b) values (repeat('secret',20));
|
||||
insert into tc_innodb(b) values (repeat('secret',20));
|
||||
insert into te_innodb(b) values (repeat('secret',20));
|
||||
insert into t_innodb(b) values (repeat('secret',20));
|
||||
insert into tpe_innodb(b) values (repeat('secret',20));
|
||||
insert into tp_innodb(b) values (repeat('secret',20));
|
||||
commit;
|
||||
FLUSH TABLES tce_innodb, tc_innodb, te_innodb,
|
||||
t_innodb, tpe_innodb, tp_innodb FOR EXPORT;
|
||||
backup: tce_innodb
|
||||
backup: tc_innodb
|
||||
backup: te_innodb
|
||||
backup: t_innodb
|
||||
backup: tpe_innodb
|
||||
backup: tp_innodb
|
||||
t_innodb.cfg
|
||||
t_innodb.frm
|
||||
t_innodb.ibd
|
||||
tc_innodb.cfg
|
||||
tc_innodb.frm
|
||||
tc_innodb.ibd
|
||||
tce_innodb.cfg
|
||||
tce_innodb.frm
|
||||
tce_innodb.ibd
|
||||
te_innodb.cfg
|
||||
te_innodb.frm
|
||||
te_innodb.ibd
|
||||
tp_innodb.cfg
|
||||
tp_innodb.frm
|
||||
tp_innodb.ibd
|
||||
tpe_innodb.cfg
|
||||
tpe_innodb.frm
|
||||
tpe_innodb.ibd
|
||||
UNLOCK TABLES;
|
||||
SET GLOBAL innodb_checksum_algorithm=strict_crc32;
|
||||
ALTER TABLE tce_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE te_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE t_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_innodb DISCARD TABLESPACE;
|
||||
restore: tce_innodb .ibd and .cfg files
|
||||
restore: tc_innodb .ibd and .cfg files
|
||||
restore: te_innodb .ibd and .cfg files
|
||||
restore: t_innodb .ibd and .cfg files
|
||||
restore: tpe_innodb .ibd and .cfg files
|
||||
restore: tp_innodb .ibd and .cfg files
|
||||
ALTER TABLE tce_innodb IMPORT TABLESPACE;
|
||||
update tce_innodb set b=substr(b,1);
|
||||
ALTER TABLE tc_innodb IMPORT TABLESPACE;
|
||||
update tc_innodb set b=substr(b,1);
|
||||
ALTER TABLE te_innodb IMPORT TABLESPACE;
|
||||
update te_innodb set b=substr(b,1);
|
||||
ALTER TABLE t_innodb IMPORT TABLESPACE;
|
||||
update t_innodb set b=substr(b,1);
|
||||
ALTER TABLE tpe_innodb IMPORT TABLESPACE;
|
||||
update tpe_innodb set b=substr(b,1);
|
||||
ALTER TABLE tp_innodb IMPORT TABLESPACE;
|
||||
update tp_innodb set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=crc32;
|
||||
ALTER TABLE tce_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE te_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE t_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_innodb DISCARD TABLESPACE;
|
||||
restore: tce_innodb .ibd and .cfg files
|
||||
restore: tc_innodb .ibd and .cfg files
|
||||
restore: te_innodb .ibd and .cfg files
|
||||
restore: t_innodb .ibd and .cfg files
|
||||
restore: tpe_innodb .ibd and .cfg files
|
||||
restore: tp_innodb .ibd and .cfg files
|
||||
ALTER TABLE tce_innodb IMPORT TABLESPACE;
|
||||
update tce_innodb set b=substr(b,1);
|
||||
ALTER TABLE tc_innodb IMPORT TABLESPACE;
|
||||
update tc_innodb set b=substr(b,1);
|
||||
ALTER TABLE te_innodb IMPORT TABLESPACE;
|
||||
update te_innodb set b=substr(b,1);
|
||||
ALTER TABLE t_innodb IMPORT TABLESPACE;
|
||||
update t_innodb set b=substr(b,1);
|
||||
ALTER TABLE tpe_innodb IMPORT TABLESPACE;
|
||||
update tpe_innodb set b=substr(b,1);
|
||||
ALTER TABLE tp_innodb IMPORT TABLESPACE;
|
||||
update tp_innodb set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=strict_innodb;
|
||||
ALTER TABLE tce_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE te_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE t_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_innodb DISCARD TABLESPACE;
|
||||
restore: tce_innodb .ibd and .cfg files
|
||||
restore: tc_innodb .ibd and .cfg files
|
||||
restore: te_innodb .ibd and .cfg files
|
||||
restore: t_innodb .ibd and .cfg files
|
||||
restore: tpe_innodb .ibd and .cfg files
|
||||
restore: tp_innodb .ibd and .cfg files
|
||||
ALTER TABLE tce_innodb IMPORT TABLESPACE;
|
||||
update tce_innodb set b=substr(b,1);
|
||||
ALTER TABLE tc_innodb IMPORT TABLESPACE;
|
||||
update tc_innodb set b=substr(b,1);
|
||||
ALTER TABLE te_innodb IMPORT TABLESPACE;
|
||||
update te_innodb set b=substr(b,1);
|
||||
ALTER TABLE t_innodb IMPORT TABLESPACE;
|
||||
update t_innodb set b=substr(b,1);
|
||||
ALTER TABLE tpe_innodb IMPORT TABLESPACE;
|
||||
update tpe_innodb set b=substr(b,1);
|
||||
ALTER TABLE tp_innodb IMPORT TABLESPACE;
|
||||
update tp_innodb set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=innodb;
|
||||
ALTER TABLE tce_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE te_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE t_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_innodb DISCARD TABLESPACE;
|
||||
restore: tce_innodb .ibd and .cfg files
|
||||
restore: tc_innodb .ibd and .cfg files
|
||||
restore: te_innodb .ibd and .cfg files
|
||||
restore: t_innodb .ibd and .cfg files
|
||||
restore: tpe_innodb .ibd and .cfg files
|
||||
restore: tp_innodb .ibd and .cfg files
|
||||
ALTER TABLE tce_innodb IMPORT TABLESPACE;
|
||||
update tce_innodb set b=substr(b,1);
|
||||
ALTER TABLE tc_innodb IMPORT TABLESPACE;
|
||||
update tc_innodb set b=substr(b,1);
|
||||
ALTER TABLE te_innodb IMPORT TABLESPACE;
|
||||
update te_innodb set b=substr(b,1);
|
||||
ALTER TABLE t_innodb IMPORT TABLESPACE;
|
||||
update t_innodb set b=substr(b,1);
|
||||
ALTER TABLE tpe_innodb IMPORT TABLESPACE;
|
||||
update tpe_innodb set b=substr(b,1);
|
||||
ALTER TABLE tp_innodb IMPORT TABLESPACE;
|
||||
update tp_innodb set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=strict_none;
|
||||
ALTER TABLE tce_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE te_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE t_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_innodb DISCARD TABLESPACE;
|
||||
restore: tce_innodb .ibd and .cfg files
|
||||
restore: tc_innodb .ibd and .cfg files
|
||||
restore: te_innodb .ibd and .cfg files
|
||||
restore: t_innodb .ibd and .cfg files
|
||||
restore: tpe_innodb .ibd and .cfg files
|
||||
restore: tp_innodb .ibd and .cfg files
|
||||
ALTER TABLE tce_innodb IMPORT TABLESPACE;
|
||||
update tce_innodb set b=substr(b,1);
|
||||
ALTER TABLE tc_innodb IMPORT TABLESPACE;
|
||||
update tc_innodb set b=substr(b,1);
|
||||
ALTER TABLE te_innodb IMPORT TABLESPACE;
|
||||
update te_innodb set b=substr(b,1);
|
||||
ALTER TABLE t_innodb IMPORT TABLESPACE;
|
||||
update t_innodb set b=substr(b,1);
|
||||
ALTER TABLE tpe_innodb IMPORT TABLESPACE;
|
||||
update tpe_innodb set b=substr(b,1);
|
||||
ALTER TABLE tp_innodb IMPORT TABLESPACE;
|
||||
update tp_innodb set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=none;
|
||||
ALTER TABLE tce_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE te_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE t_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_innodb DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_innodb DISCARD TABLESPACE;
|
||||
restore: tce_innodb .ibd and .cfg files
|
||||
restore: tc_innodb .ibd and .cfg files
|
||||
restore: te_innodb .ibd and .cfg files
|
||||
restore: t_innodb .ibd and .cfg files
|
||||
restore: tpe_innodb .ibd and .cfg files
|
||||
restore: tp_innodb .ibd and .cfg files
|
||||
ALTER TABLE tce_innodb IMPORT TABLESPACE;
|
||||
update tce_innodb set b=substr(b,1);
|
||||
ALTER TABLE tc_innodb IMPORT TABLESPACE;
|
||||
update tc_innodb set b=substr(b,1);
|
||||
ALTER TABLE te_innodb IMPORT TABLESPACE;
|
||||
update te_innodb set b=substr(b,1);
|
||||
ALTER TABLE t_innodb IMPORT TABLESPACE;
|
||||
update t_innodb set b=substr(b,1);
|
||||
ALTER TABLE tpe_innodb IMPORT TABLESPACE;
|
||||
update tpe_innodb set b=substr(b,1);
|
||||
ALTER TABLE tp_innodb IMPORT TABLESPACE;
|
||||
update tp_innodb set b=substr(b,1);
|
||||
CHECK TABLE tce_innodb, tc_innodb, te_innodb,
|
||||
t_innodb, tpe_innodb, tp_innodb;
|
||||
Table Op Msg_type Msg_text
|
||||
test.tce_innodb check status OK
|
||||
test.tc_innodb check status OK
|
||||
test.te_innodb check status OK
|
||||
test.t_innodb check status OK
|
||||
test.tpe_innodb check status OK
|
||||
test.tp_innodb check status OK
|
||||
DROP TABLE tce_innodb, tc_innodb, te_innodb,
|
||||
t_innodb, tpe_innodb, tp_innodb;
|
||||
SET GLOBAL innodb_checksum_algorithm=none;
|
||||
create table tce_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
ROW_FORMAT=COMPRESSED encrypted=yes;
|
||||
create table tc_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
ROW_FORMAT=COMPRESSED encrypted=no;
|
||||
create table te_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=yes;
|
||||
create table t_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=no;
|
||||
create table tpe_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
page_compressed=yes encrypted=yes;
|
||||
create table tp_none(a serial, b blob, index(b(10))) engine=innodb
|
||||
page_compressed=yes encrypted=no;
|
||||
begin;
|
||||
insert into tce_none(b) values (repeat('secret',20));
|
||||
insert into tc_none(b) values (repeat('secret',20));
|
||||
insert into te_none(b) values (repeat('secret',20));
|
||||
insert into t_none(b) values (repeat('secret',20));
|
||||
insert into tpe_none(b) values (repeat('secret',20));
|
||||
insert into tp_none(b) values (repeat('secret',20));
|
||||
commit;
|
||||
FLUSH TABLES tce_none, tc_none, te_none,
|
||||
t_none, tpe_none, tp_none FOR EXPORT;
|
||||
backup: tce_none
|
||||
backup: tc_none
|
||||
backup: te_none
|
||||
backup: t_none
|
||||
backup: tpe_none
|
||||
backup: tp_none
|
||||
t_none.cfg
|
||||
t_none.frm
|
||||
t_none.ibd
|
||||
tc_none.cfg
|
||||
tc_none.frm
|
||||
tc_none.ibd
|
||||
tce_none.cfg
|
||||
tce_none.frm
|
||||
tce_none.ibd
|
||||
te_none.cfg
|
||||
te_none.frm
|
||||
te_none.ibd
|
||||
tp_none.cfg
|
||||
tp_none.frm
|
||||
tp_none.ibd
|
||||
tpe_none.cfg
|
||||
tpe_none.frm
|
||||
tpe_none.ibd
|
||||
UNLOCK TABLES;
|
||||
SET GLOBAL innodb_checksum_algorithm=strict_crc32;
|
||||
ALTER TABLE tce_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_none DISCARD TABLESPACE;
|
||||
ALTER TABLE te_none DISCARD TABLESPACE;
|
||||
ALTER TABLE t_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_none DISCARD TABLESPACE;
|
||||
restore: tce_none .ibd and .cfg files
|
||||
restore: tc_none .ibd and .cfg files
|
||||
restore: te_none .ibd and .cfg files
|
||||
restore: t_none .ibd and .cfg files
|
||||
restore: tpe_none .ibd and .cfg files
|
||||
restore: tp_none .ibd and .cfg files
|
||||
ALTER TABLE tce_none IMPORT TABLESPACE;
|
||||
update tce_none set b=substr(b,1);
|
||||
ALTER TABLE tc_none IMPORT TABLESPACE;
|
||||
update tc_none set b=substr(b,1);
|
||||
ALTER TABLE te_none IMPORT TABLESPACE;
|
||||
update te_none set b=substr(b,1);
|
||||
ALTER TABLE t_none IMPORT TABLESPACE;
|
||||
update t_none set b=substr(b,1);
|
||||
ALTER TABLE tpe_none IMPORT TABLESPACE;
|
||||
update tpe_none set b=substr(b,1);
|
||||
ALTER TABLE tp_none IMPORT TABLESPACE;
|
||||
update tp_none set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=crc32;
|
||||
ALTER TABLE tce_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_none DISCARD TABLESPACE;
|
||||
ALTER TABLE te_none DISCARD TABLESPACE;
|
||||
ALTER TABLE t_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_none DISCARD TABLESPACE;
|
||||
restore: tce_none .ibd and .cfg files
|
||||
restore: tc_none .ibd and .cfg files
|
||||
restore: te_none .ibd and .cfg files
|
||||
restore: t_none .ibd and .cfg files
|
||||
restore: tpe_none .ibd and .cfg files
|
||||
restore: tp_none .ibd and .cfg files
|
||||
ALTER TABLE tce_none IMPORT TABLESPACE;
|
||||
update tce_none set b=substr(b,1);
|
||||
ALTER TABLE tc_none IMPORT TABLESPACE;
|
||||
update tc_none set b=substr(b,1);
|
||||
ALTER TABLE te_none IMPORT TABLESPACE;
|
||||
update te_none set b=substr(b,1);
|
||||
ALTER TABLE t_none IMPORT TABLESPACE;
|
||||
update t_none set b=substr(b,1);
|
||||
ALTER TABLE tpe_none IMPORT TABLESPACE;
|
||||
update tpe_none set b=substr(b,1);
|
||||
ALTER TABLE tp_none IMPORT TABLESPACE;
|
||||
update tp_none set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=strict_innodb;
|
||||
ALTER TABLE tce_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_none DISCARD TABLESPACE;
|
||||
ALTER TABLE te_none DISCARD TABLESPACE;
|
||||
ALTER TABLE t_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_none DISCARD TABLESPACE;
|
||||
restore: tce_none .ibd and .cfg files
|
||||
restore: tc_none .ibd and .cfg files
|
||||
restore: te_none .ibd and .cfg files
|
||||
restore: t_none .ibd and .cfg files
|
||||
restore: tpe_none .ibd and .cfg files
|
||||
restore: tp_none .ibd and .cfg files
|
||||
ALTER TABLE tce_none IMPORT TABLESPACE;
|
||||
update tce_none set b=substr(b,1);
|
||||
ALTER TABLE tc_none IMPORT TABLESPACE;
|
||||
update tc_none set b=substr(b,1);
|
||||
ALTER TABLE te_none IMPORT TABLESPACE;
|
||||
update te_none set b=substr(b,1);
|
||||
ALTER TABLE t_none IMPORT TABLESPACE;
|
||||
update t_none set b=substr(b,1);
|
||||
ALTER TABLE tpe_none IMPORT TABLESPACE;
|
||||
update tpe_none set b=substr(b,1);
|
||||
ALTER TABLE tp_none IMPORT TABLESPACE;
|
||||
update tp_none set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=innodb;
|
||||
ALTER TABLE tce_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_none DISCARD TABLESPACE;
|
||||
ALTER TABLE te_none DISCARD TABLESPACE;
|
||||
ALTER TABLE t_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_none DISCARD TABLESPACE;
|
||||
restore: tce_none .ibd and .cfg files
|
||||
restore: tc_none .ibd and .cfg files
|
||||
restore: te_none .ibd and .cfg files
|
||||
restore: t_none .ibd and .cfg files
|
||||
restore: tpe_none .ibd and .cfg files
|
||||
restore: tp_none .ibd and .cfg files
|
||||
ALTER TABLE tce_none IMPORT TABLESPACE;
|
||||
update tce_none set b=substr(b,1);
|
||||
ALTER TABLE tc_none IMPORT TABLESPACE;
|
||||
update tc_none set b=substr(b,1);
|
||||
ALTER TABLE te_none IMPORT TABLESPACE;
|
||||
update te_none set b=substr(b,1);
|
||||
ALTER TABLE t_none IMPORT TABLESPACE;
|
||||
update t_none set b=substr(b,1);
|
||||
ALTER TABLE tpe_none IMPORT TABLESPACE;
|
||||
update tpe_none set b=substr(b,1);
|
||||
ALTER TABLE tp_none IMPORT TABLESPACE;
|
||||
update tp_none set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=strict_none;
|
||||
ALTER TABLE tce_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_none DISCARD TABLESPACE;
|
||||
ALTER TABLE te_none DISCARD TABLESPACE;
|
||||
ALTER TABLE t_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_none DISCARD TABLESPACE;
|
||||
restore: tce_none .ibd and .cfg files
|
||||
restore: tc_none .ibd and .cfg files
|
||||
restore: te_none .ibd and .cfg files
|
||||
restore: t_none .ibd and .cfg files
|
||||
restore: tpe_none .ibd and .cfg files
|
||||
restore: tp_none .ibd and .cfg files
|
||||
ALTER TABLE tce_none IMPORT TABLESPACE;
|
||||
update tce_none set b=substr(b,1);
|
||||
ALTER TABLE tc_none IMPORT TABLESPACE;
|
||||
update tc_none set b=substr(b,1);
|
||||
ALTER TABLE te_none IMPORT TABLESPACE;
|
||||
update te_none set b=substr(b,1);
|
||||
ALTER TABLE t_none IMPORT TABLESPACE;
|
||||
update t_none set b=substr(b,1);
|
||||
ALTER TABLE tpe_none IMPORT TABLESPACE;
|
||||
update tpe_none set b=substr(b,1);
|
||||
ALTER TABLE tp_none IMPORT TABLESPACE;
|
||||
update tp_none set b=substr(b,1);
|
||||
SET GLOBAL innodb_checksum_algorithm=none;
|
||||
ALTER TABLE tce_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tc_none DISCARD TABLESPACE;
|
||||
ALTER TABLE te_none DISCARD TABLESPACE;
|
||||
ALTER TABLE t_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tpe_none DISCARD TABLESPACE;
|
||||
ALTER TABLE tp_none DISCARD TABLESPACE;
|
||||
restore: tce_none .ibd and .cfg files
|
||||
restore: tc_none .ibd and .cfg files
|
||||
restore: te_none .ibd and .cfg files
|
||||
restore: t_none .ibd and .cfg files
|
||||
restore: tpe_none .ibd and .cfg files
|
||||
restore: tp_none .ibd and .cfg files
|
||||
ALTER TABLE tce_none IMPORT TABLESPACE;
|
||||
update tce_none set b=substr(b,1);
|
||||
ALTER TABLE tc_none IMPORT TABLESPACE;
|
||||
update tc_none set b=substr(b,1);
|
||||
ALTER TABLE te_none IMPORT TABLESPACE;
|
||||
update te_none set b=substr(b,1);
|
||||
ALTER TABLE t_none IMPORT TABLESPACE;
|
||||
update t_none set b=substr(b,1);
|
||||
ALTER TABLE tpe_none IMPORT TABLESPACE;
|
||||
update tpe_none set b=substr(b,1);
|
||||
ALTER TABLE tp_none IMPORT TABLESPACE;
|
||||
update tp_none set b=substr(b,1);
|
||||
CHECK TABLE tce_none, tc_none, te_none,
|
||||
t_none, tpe_none, tp_none;
|
||||
Table Op Msg_type Msg_text
|
||||
test.tce_none check status OK
|
||||
test.tc_none check status OK
|
||||
test.te_none check status OK
|
||||
test.t_none check status OK
|
||||
test.tpe_none check status OK
|
||||
test.tp_none check status OK
|
||||
DROP TABLE tce_none, tc_none, te_none,
|
||||
t_none, tpe_none, tp_none;
|
||||
SET GLOBAL innodb_file_per_table = @saved_file_per_table;
|
||||
SET GLOBAL innodb_checksum_algorithm = @saved_checksum_algorithm;
|
||||
SET GLOBAL innodb_encrypt_tables = @saved_encrypt_tables;
|
||||
SET GLOBAL innodb_encryption_threads = @saved_encryption_threads;
|
||||
SET GLOBAL innodb_default_encryption_key_id = @saved_encryption_key_id;
|
@ -1,4 +1,5 @@
|
||||
call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.ibd' cannot be decrypted\\.");
|
||||
call mtr.add_suppression("InnoDB: Unable to decompress ..test.t[1-3]\\.ibd\\[page id: space=[1-9][0-9]*, page number=[0-9]+\\]");
|
||||
# Restart mysqld --file-key-management-filename=keys2.txt
|
||||
SET GLOBAL innodb_file_per_table = ON;
|
||||
set GLOBAL innodb_default_encryption_key_id=4;
|
||||
|
89
mysql-test/suite/encryption/r/innodb-first-page-read.result
Normal file
89
mysql-test/suite/encryption/r/innodb-first-page-read.result
Normal file
@ -0,0 +1,89 @@
|
||||
SET GLOBAL innodb_file_format = `Barracuda`;
|
||||
SET GLOBAL innodb_file_per_table = ON;
|
||||
create database innodb_test;
|
||||
use innodb_test;
|
||||
create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb;
|
||||
create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact;
|
||||
create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic;
|
||||
create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed;
|
||||
create table innodb_compressed1(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=1;
|
||||
create table innodb_compressed2(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=2;
|
||||
create table innodb_compressed4(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=4;
|
||||
create table innodb_compressed8(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=8;
|
||||
create table innodb_compressed16(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=16;
|
||||
create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant;
|
||||
create table innodb_pagecomp(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes;
|
||||
create table innodb_pagecomp1(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=1;
|
||||
create table innodb_pagecomp2(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=2;
|
||||
create table innodb_pagecomp3(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=3;
|
||||
create table innodb_pagecomp4(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=4;
|
||||
create table innodb_pagecomp5(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=5;
|
||||
create table innodb_pagecomp6(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=6;
|
||||
create table innodb_pagecomp7(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=7;
|
||||
create table innodb_pagecomp8(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=8;
|
||||
create table innodb_pagecomp9(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=9;
|
||||
create table innodb_datadir1(c1 bigint not null, b char(200)) engine=innodb DATA DIRECTORY='MYSQL_TMP_DIR';
|
||||
create table innodb_datadir2(c1 bigint not null, b char(200)) engine=innodb row_format=compressed DATA DIRECTORY='MYSQL_TMP_DIR';
|
||||
create table innodb_datadir3(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes DATA DIRECTORY='MYSQL_TMP_DIR';
|
||||
begin;
|
||||
insert into innodb_normal values (1,'secret');
|
||||
insert into innodb_compact select * from innodb_normal;
|
||||
insert into innodb_dynamic select * from innodb_normal;
|
||||
insert into innodb_compressed select * from innodb_normal;
|
||||
insert into innodb_compressed1 select * from innodb_normal;
|
||||
insert into innodb_compressed2 select * from innodb_normal;
|
||||
insert into innodb_compressed4 select * from innodb_normal;
|
||||
insert into innodb_compressed8 select * from innodb_normal;
|
||||
insert into innodb_compressed16 select * from innodb_normal;
|
||||
insert into innodb_redundant select * from innodb_normal;
|
||||
insert into innodb_pagecomp select * from innodb_normal;
|
||||
insert into innodb_pagecomp1 select * from innodb_normal;
|
||||
insert into innodb_pagecomp2 select * from innodb_normal;
|
||||
insert into innodb_pagecomp3 select * from innodb_normal;
|
||||
insert into innodb_pagecomp4 select * from innodb_normal;
|
||||
insert into innodb_pagecomp5 select * from innodb_normal;
|
||||
insert into innodb_pagecomp6 select * from innodb_normal;
|
||||
insert into innodb_pagecomp7 select * from innodb_normal;
|
||||
insert into innodb_pagecomp8 select * from innodb_normal;
|
||||
insert into innodb_pagecomp9 select * from innodb_normal;
|
||||
insert into innodb_datadir1 select * from innodb_normal;
|
||||
insert into innodb_datadir2 select * from innodb_normal;
|
||||
insert into innodb_datadir3 select * from innodb_normal;
|
||||
commit;
|
||||
# Restart server and see how many page 0's are read
|
||||
# result should be less than actual number of tables
|
||||
# i.e. < 23 + 3 = 26
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 26
|
||||
use innodb_test;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 26
|
||||
use test;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 26
|
||||
set global innodb_encrypt_tables=OFF;
|
||||
# wait until tables are decrypted
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 26
|
||||
use innodb_test;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 26
|
||||
use test;
|
||||
# restart and see number read page 0
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 26
|
||||
use innodb_test;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 26
|
||||
use test;
|
||||
drop database innodb_test;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 26
|
@ -62,5 +62,4 @@ FOUND 1 /public/ in t7.ibd
|
||||
FOUND 1 /public/ in t8.ibd
|
||||
# t9 page compressed expecting NOT FOUND
|
||||
NOT FOUND /public/ in t9.ibd
|
||||
use test;
|
||||
drop database enctests;
|
||||
|
@ -1,5 +1,3 @@
|
||||
SET GLOBAL innodb_file_format = `Barracuda`;
|
||||
SET GLOBAL innodb_file_per_table = ON;
|
||||
SET GLOBAL innodb_encryption_threads = 4;
|
||||
SET GLOBAL innodb_encrypt_tables = on;
|
||||
set global innodb_compression_algorithm = 1;
|
||||
|
@ -10,13 +10,13 @@ create database innodb_encrypted_1;
|
||||
use innodb_encrypted_1;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 3
|
||||
Innodb_pages0_read 1
|
||||
set autocommit=0;
|
||||
set autocommit=1;
|
||||
commit work;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 3
|
||||
Innodb_pages0_read 1
|
||||
# should be 100
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME LIKE 'innodb_encrypted%';
|
||||
COUNT(*)
|
||||
@ -86,47 +86,47 @@ Innodb_pages0_read 3
|
||||
# Restart Success!
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 303
|
||||
Innodb_pages0_read 1
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 303
|
||||
Innodb_pages0_read 1
|
||||
use test;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 303
|
||||
Innodb_pages0_read 1
|
||||
use innodb_encrypted_1;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 303
|
||||
Innodb_pages0_read 1
|
||||
use innodb_encrypted_2;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 303
|
||||
Innodb_pages0_read 1
|
||||
use innodb_encrypted_3;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 303
|
||||
Innodb_pages0_read 1
|
||||
use innodb_encrypted_1;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 303
|
||||
Innodb_pages0_read 1
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 303
|
||||
Innodb_pages0_read 101
|
||||
use innodb_encrypted_2;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 303
|
||||
Innodb_pages0_read 101
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 303
|
||||
Innodb_pages0_read 201
|
||||
use innodb_encrypted_3;
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 303
|
||||
Innodb_pages0_read 201
|
||||
show status like 'innodb_pages0_read%';
|
||||
Variable_name Value
|
||||
Innodb_pages0_read 303
|
||||
Innodb_pages0_read 301
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%';
|
||||
COUNT(*)
|
||||
100
|
||||
|
120
mysql-test/suite/encryption/t/innodb-checksum-algorithm.test
Normal file
120
mysql-test/suite/encryption/t/innodb-checksum-algorithm.test
Normal file
@ -0,0 +1,120 @@
|
||||
-- source include/innodb_page_size.inc
|
||||
-- source include/have_file_key_management_plugin.inc
|
||||
|
||||
SET @saved_file_per_table = @@global.innodb_file_per_table;
|
||||
SET @saved_checksum_algorithm = @@global.innodb_checksum_algorithm;
|
||||
SET @saved_encrypt_tables = @@global.innodb_encrypt_tables;
|
||||
SET @saved_encryption_threads = @@global.innodb_encryption_threads;
|
||||
SET @saved_encryption_key_id = @@global.innodb_default_encryption_key_id;
|
||||
|
||||
SET GLOBAL innodb_file_per_table = ON;
|
||||
SET GLOBAL innodb_encrypt_tables = ON;
|
||||
SET GLOBAL innodb_encryption_threads = 4;
|
||||
|
||||
call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_(crc32|none|innodb)\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"(innodb|none|crc32)\"");
|
||||
|
||||
SET GLOBAL innodb_checksum_algorithm = innodb;
|
||||
SET GLOBAL innodb_default_encryption_key_id=4;
|
||||
|
||||
let MYSQLD_DATADIR =`SELECT @@datadir`;
|
||||
|
||||
# ROW_FORMAT=COMPRESSED is unavailable with innodb_page_size=32k or 64k
|
||||
let $row_format_compressed= `select case when @@global.innodb_page_size>16384
|
||||
then 'ROW_FORMAT=DYNAMIC' else 'ROW_FORMAT=COMPRESSED' end`;
|
||||
|
||||
let $from = 3;
|
||||
while ($from)
|
||||
{
|
||||
dec $from;
|
||||
let checksum = `select case $from
|
||||
when 0 then 'none'
|
||||
when 1 then 'innodb'
|
||||
when 2 then 'crc32'
|
||||
end`;
|
||||
eval SET GLOBAL innodb_checksum_algorithm=$checksum;
|
||||
|
||||
eval create table tce_$checksum(a serial, b blob, index(b(10))) engine=innodb
|
||||
$row_format_compressed encrypted=yes;
|
||||
eval create table tc_$checksum(a serial, b blob, index(b(10))) engine=innodb
|
||||
$row_format_compressed encrypted=no;
|
||||
eval create table te_$checksum(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=yes;
|
||||
eval create table t_$checksum(a serial, b blob, index(b(10))) engine=innodb
|
||||
encrypted=no;
|
||||
eval create table tpe_$checksum(a serial, b blob, index(b(10))) engine=innodb
|
||||
page_compressed=yes encrypted=yes;
|
||||
eval create table tp_$checksum(a serial, b blob, index(b(10))) engine=innodb
|
||||
page_compressed=yes encrypted=no;
|
||||
|
||||
begin;
|
||||
eval insert into tce_$checksum(b) values (repeat('secret',20));
|
||||
eval insert into tc_$checksum(b) values (repeat('secret',20));
|
||||
eval insert into te_$checksum(b) values (repeat('secret',20));
|
||||
eval insert into t_$checksum(b) values (repeat('secret',20));
|
||||
eval insert into tpe_$checksum(b) values (repeat('secret',20));
|
||||
eval insert into tp_$checksum(b) values (repeat('secret',20));
|
||||
commit;
|
||||
|
||||
eval FLUSH TABLES tce_$checksum, tc_$checksum, te_$checksum,
|
||||
t_$checksum, tpe_$checksum, tp_$checksum FOR EXPORT;
|
||||
perl;
|
||||
do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl";
|
||||
my @tables = ("tce_", "tc_", "te_", "t_", "tpe_", "tp_");
|
||||
ib_backup_tablespaces("test", map{ $_ . $ENV{checksum} } @tables);
|
||||
EOF
|
||||
--list_files $MYSQLD_DATADIR/test
|
||||
UNLOCK TABLES;
|
||||
|
||||
let $to = 6;
|
||||
while ($to)
|
||||
{
|
||||
dec $to;
|
||||
let $tocksum = `select case $to
|
||||
when 0 then 'none'
|
||||
when 1 then 'strict_none'
|
||||
when 2 then 'innodb'
|
||||
when 3 then 'strict_innodb'
|
||||
when 4 then 'crc32'
|
||||
when 5 then 'strict_crc32'
|
||||
end`;
|
||||
|
||||
eval SET GLOBAL innodb_checksum_algorithm=$tocksum;
|
||||
|
||||
eval ALTER TABLE tce_$checksum DISCARD TABLESPACE;
|
||||
eval ALTER TABLE tc_$checksum DISCARD TABLESPACE;
|
||||
eval ALTER TABLE te_$checksum DISCARD TABLESPACE;
|
||||
eval ALTER TABLE t_$checksum DISCARD TABLESPACE;
|
||||
eval ALTER TABLE tpe_$checksum DISCARD TABLESPACE;
|
||||
eval ALTER TABLE tp_$checksum DISCARD TABLESPACE;
|
||||
|
||||
perl;
|
||||
do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl";
|
||||
my @tables = ("tce_", "tc_", "te_", "t_", "tpe_", "tp_");
|
||||
ib_restore_tablespaces("test", map{ $_ . $ENV{checksum} } @tables);
|
||||
EOF
|
||||
|
||||
eval ALTER TABLE tce_$checksum IMPORT TABLESPACE;
|
||||
eval update tce_$checksum set b=substr(b,1);
|
||||
eval ALTER TABLE tc_$checksum IMPORT TABLESPACE;
|
||||
eval update tc_$checksum set b=substr(b,1);
|
||||
eval ALTER TABLE te_$checksum IMPORT TABLESPACE;
|
||||
eval update te_$checksum set b=substr(b,1);
|
||||
eval ALTER TABLE t_$checksum IMPORT TABLESPACE;
|
||||
eval update t_$checksum set b=substr(b,1);
|
||||
eval ALTER TABLE tpe_$checksum IMPORT TABLESPACE;
|
||||
eval update tpe_$checksum set b=substr(b,1);
|
||||
eval ALTER TABLE tp_$checksum IMPORT TABLESPACE;
|
||||
eval update tp_$checksum set b=substr(b,1);
|
||||
}
|
||||
|
||||
eval CHECK TABLE tce_$checksum, tc_$checksum, te_$checksum,
|
||||
t_$checksum, tpe_$checksum, tp_$checksum;
|
||||
eval DROP TABLE tce_$checksum, tc_$checksum, te_$checksum,
|
||||
t_$checksum, tpe_$checksum, tp_$checksum;
|
||||
}
|
||||
|
||||
SET GLOBAL innodb_file_per_table = @saved_file_per_table;
|
||||
SET GLOBAL innodb_checksum_algorithm = @saved_checksum_algorithm;
|
||||
SET GLOBAL innodb_encrypt_tables = @saved_encrypt_tables;
|
||||
SET GLOBAL innodb_encryption_threads = @saved_encryption_threads;
|
||||
SET GLOBAL innodb_default_encryption_key_id = @saved_encryption_key_id;
|
@ -0,0 +1,12 @@
|
||||
[crc32]
|
||||
loose-innodb-tablespaces-encryption
|
||||
loose-innodb-encrypt-tables=on
|
||||
loose-innodb-encryption-threads=4
|
||||
max_allowed_packet=64K
|
||||
loose-innodb-checksum-algorithm=crc32
|
||||
[none]
|
||||
loose-innodb-tablespaces-encryption
|
||||
loose-innodb-encrypt-tables=on
|
||||
loose-innodb-encryption-threads=4
|
||||
max_allowed_packet=64K
|
||||
loose-innodb-checksum-algorithm=none
|
@ -1,4 +0,0 @@
|
||||
--innodb-tablespaces-encryption
|
||||
--innodb-encrypt-tables=on
|
||||
--innodb-encryption-threads=2
|
||||
--max_allowed_packet=64K
|
@ -1,10 +1,11 @@
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/innodb_page_size_small.inc
|
||||
-- source include/have_file_key_management_plugin.inc
|
||||
|
||||
# embedded does not support restart
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.ibd' cannot be decrypted\\.");
|
||||
call mtr.add_suppression("InnoDB: Unable to decompress ..test.t[1-3]\\.ibd\\[page id: space=[1-9][0-9]*, page number=[0-9]+\\]");
|
||||
|
||||
--echo # Restart mysqld --file-key-management-filename=keys2.txt
|
||||
-- let $restart_parameters=--file-key-management-filename=$MYSQL_TEST_DIR/std_data/keys2.txt
|
||||
|
5
mysql-test/suite/encryption/t/innodb-first-page-read.opt
Normal file
5
mysql-test/suite/encryption/t/innodb-first-page-read.opt
Normal file
@ -0,0 +1,5 @@
|
||||
--innodb-encrypt-tables=ON
|
||||
--innodb-encrypt-log=ON
|
||||
--innodb-encryption-rotate-key-age=15
|
||||
--innodb-encryption-threads=4
|
||||
--innodb-tablespaces-encryption
|
97
mysql-test/suite/encryption/t/innodb-first-page-read.test
Normal file
97
mysql-test/suite/encryption/t/innodb-first-page-read.test
Normal file
@ -0,0 +1,97 @@
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_file_key_management_plugin.inc
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
--disable_warnings
|
||||
SET GLOBAL innodb_file_format = `Barracuda`;
|
||||
SET GLOBAL innodb_file_per_table = ON;
|
||||
--enable_warnings
|
||||
|
||||
create database innodb_test;
|
||||
use innodb_test;
|
||||
create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb;
|
||||
create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact;
|
||||
create table innodb_dynamic(c1 bigint not null, b char(200)) engine=innodb row_format=dynamic;
|
||||
create table innodb_compressed(c1 bigint not null, b char(200)) engine=innodb row_format=compressed;
|
||||
create table innodb_compressed1(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=1;
|
||||
create table innodb_compressed2(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=2;
|
||||
create table innodb_compressed4(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=4;
|
||||
create table innodb_compressed8(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=8;
|
||||
create table innodb_compressed16(c1 bigint not null, b char(200)) engine=innodb row_format=compressed key_block_size=16;
|
||||
create table innodb_redundant(c1 bigint not null, b char(200)) engine=innodb row_format=redundant;
|
||||
create table innodb_pagecomp(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes;
|
||||
create table innodb_pagecomp1(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=1;
|
||||
create table innodb_pagecomp2(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=2;
|
||||
create table innodb_pagecomp3(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=3;
|
||||
create table innodb_pagecomp4(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=4;
|
||||
create table innodb_pagecomp5(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=5;
|
||||
create table innodb_pagecomp6(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=6;
|
||||
create table innodb_pagecomp7(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=7;
|
||||
create table innodb_pagecomp8(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=8;
|
||||
create table innodb_pagecomp9(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes page_compression_level=9;
|
||||
|
||||
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
||||
eval create table innodb_datadir1(c1 bigint not null, b char(200)) engine=innodb DATA DIRECTORY='$MYSQL_TMP_DIR';
|
||||
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
||||
eval create table innodb_datadir2(c1 bigint not null, b char(200)) engine=innodb row_format=compressed DATA DIRECTORY='$MYSQL_TMP_DIR';
|
||||
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
||||
eval create table innodb_datadir3(c1 bigint not null, b char(200)) engine=innodb page_compressed=yes DATA DIRECTORY='$MYSQL_TMP_DIR';
|
||||
|
||||
begin;
|
||||
insert into innodb_normal values (1,'secret');
|
||||
insert into innodb_compact select * from innodb_normal;
|
||||
insert into innodb_dynamic select * from innodb_normal;
|
||||
insert into innodb_compressed select * from innodb_normal;
|
||||
insert into innodb_compressed1 select * from innodb_normal;
|
||||
insert into innodb_compressed2 select * from innodb_normal;
|
||||
insert into innodb_compressed4 select * from innodb_normal;
|
||||
insert into innodb_compressed8 select * from innodb_normal;
|
||||
insert into innodb_compressed16 select * from innodb_normal;
|
||||
insert into innodb_redundant select * from innodb_normal;
|
||||
insert into innodb_pagecomp select * from innodb_normal;
|
||||
insert into innodb_pagecomp1 select * from innodb_normal;
|
||||
insert into innodb_pagecomp2 select * from innodb_normal;
|
||||
insert into innodb_pagecomp3 select * from innodb_normal;
|
||||
insert into innodb_pagecomp4 select * from innodb_normal;
|
||||
insert into innodb_pagecomp5 select * from innodb_normal;
|
||||
insert into innodb_pagecomp6 select * from innodb_normal;
|
||||
insert into innodb_pagecomp7 select * from innodb_normal;
|
||||
insert into innodb_pagecomp8 select * from innodb_normal;
|
||||
insert into innodb_pagecomp9 select * from innodb_normal;
|
||||
insert into innodb_datadir1 select * from innodb_normal;
|
||||
insert into innodb_datadir2 select * from innodb_normal;
|
||||
insert into innodb_datadir3 select * from innodb_normal;
|
||||
commit;
|
||||
|
||||
--echo # Restart server and see how many page 0's are read
|
||||
--source include/restart_mysqld.inc
|
||||
|
||||
--echo # result should be less than actual number of tables
|
||||
--echo # i.e. < 23 + 3 = 26
|
||||
show status like 'innodb_pages0_read%';
|
||||
use innodb_test;
|
||||
show status like 'innodb_pages0_read%';
|
||||
use test;
|
||||
show status like 'innodb_pages0_read%';
|
||||
|
||||
set global innodb_encrypt_tables=OFF;
|
||||
|
||||
--echo # wait until tables are decrypted
|
||||
--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0
|
||||
--source include/wait_condition.inc
|
||||
|
||||
show status like 'innodb_pages0_read%';
|
||||
use innodb_test;
|
||||
show status like 'innodb_pages0_read%';
|
||||
use test;
|
||||
|
||||
--echo # restart and see number read page 0
|
||||
-- source include/restart_mysqld.inc
|
||||
|
||||
show status like 'innodb_pages0_read%';
|
||||
use innodb_test;
|
||||
show status like 'innodb_pages0_read%';
|
||||
use test;
|
||||
|
||||
drop database innodb_test;
|
||||
show status like 'innodb_pages0_read%';
|
@ -8,9 +8,6 @@ SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_
|
||||
|
||||
--disable_query_log
|
||||
--disable_warnings
|
||||
let $innodb_compression_algorithm_orig=`SELECT @@innodb_compression_algorithm`;
|
||||
let $innodb_file_format_orig = `SELECT @@innodb_file_format`;
|
||||
let $innodb_file_per_table_orig = `SELECT @@innodb_file_per_table`;
|
||||
let $encryption = `SELECT @@innodb_encrypt_tables`;
|
||||
SET GLOBAL innodb_file_format = `Barracuda`;
|
||||
SET GLOBAL innodb_file_per_table = ON;
|
||||
@ -88,15 +85,4 @@ SET GLOBAL innodb_encrypt_tables=ON;
|
||||
|
||||
-- source include/start_mysqld.inc
|
||||
|
||||
use test;
|
||||
drop database enctests;
|
||||
# reset system
|
||||
|
||||
--disable_query_log
|
||||
--disable_warnings
|
||||
EVAL SET GLOBAL innodb_compression_algorithm = $innodb_compression_algorithm_orig;
|
||||
EVAL SET GLOBAL innodb_file_per_table = $innodb_file_per_table_orig;
|
||||
EVAL SET GLOBAL innodb_file_format = $innodb_file_format_orig;
|
||||
set global innodb_compression_algorithm = DEFAULT;
|
||||
--enable_warnings
|
||||
--enable_query_log
|
||||
|
@ -38,6 +38,40 @@ id group a\\b a\\ name
|
||||
1 1 2 NULL foo
|
||||
2 1 2 NULL fee
|
||||
DROP TABLE t1;
|
||||
create table t1 (
|
||||
a bigint(20) not null auto_increment,
|
||||
b bigint(20) not null,
|
||||
c tinyint(4) not null,
|
||||
d varchar(4096) not null,
|
||||
primary key (a),
|
||||
key (b,c,d(255))
|
||||
);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`b` bigint(20) NOT NULL,
|
||||
`c` tinyint(4) NOT NULL,
|
||||
`d` varchar(4096) NOT NULL,
|
||||
PRIMARY KEY (`a`),
|
||||
KEY `b` (`b`,`c`,`d`(255))
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
connection master;
|
||||
create table t1 engine=federated
|
||||
connection='mysql://root@127.0.0.1:SLAVE_PORT/test/t1';
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`b` bigint(20) NOT NULL,
|
||||
`c` tinyint(4) NOT NULL,
|
||||
`d` varchar(4096) NOT NULL,
|
||||
PRIMARY KEY (`a`),
|
||||
KEY `b` (`b`,`c`,`d`(255))
|
||||
) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/t1'
|
||||
drop table t1;
|
||||
connection slave;
|
||||
drop table t1;
|
||||
connection master;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
|
@ -30,5 +30,29 @@ connection slave;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
create table t1 (
|
||||
a bigint(20) not null auto_increment,
|
||||
b bigint(20) not null,
|
||||
c tinyint(4) not null,
|
||||
d varchar(4096) not null,
|
||||
primary key (a),
|
||||
key (b,c,d(255))
|
||||
);
|
||||
show create table t1;
|
||||
|
||||
connection master;
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
eval create table t1 engine=federated
|
||||
connection='mysql://root@127.0.0.1:$SLAVE_MYPORT/test/t1';
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
connection slave;
|
||||
drop table t1;
|
||||
|
||||
source include/federated_cleanup.inc;
|
||||
|
||||
|
@ -16,7 +16,7 @@ wsrep-sync-wait=7
|
||||
#ist_port=@OPT.port
|
||||
#sst_port=@OPT.port
|
||||
wsrep-cluster-address=gcomm://
|
||||
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.1.#galera_port;gcache.size=10M;evs.suspect_timeout=PT10S'
|
||||
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.1.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;gcache.size=10M'
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port'
|
||||
|
||||
|
22
mysql-test/suite/galera/r/MW-309.result
Normal file
22
mysql-test/suite/galera/r/MW-309.result
Normal file
@ -0,0 +1,22 @@
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
SET GLOBAL wsrep_max_ws_rows = 2;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
SELECT * FROM t1 GROUP BY f1;
|
||||
f1
|
||||
1
|
||||
SELECT * FROM t1 GROUP BY f1;
|
||||
f1
|
||||
1
|
||||
SELECT * FROM t1 GROUP BY f1;
|
||||
f1
|
||||
1
|
||||
SHOW STATUS LIKE '%wsrep%';
|
||||
SET GLOBAL wsrep_max_ws_rows = 0;
|
||||
DROP TABLE t1;
|
32
mysql-test/suite/galera/t/MW-309.test
Normal file
32
mysql-test/suite/galera/t/MW-309.test
Normal file
@ -0,0 +1,32 @@
|
||||
#
|
||||
# MW-309 Regression: wsrep_max_ws_rows limit also applies to certain SELECT queries
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
|
||||
SET GLOBAL wsrep_max_ws_rows = 2;
|
||||
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
SELECT * FROM t1 GROUP BY f1;
|
||||
SELECT * FROM t1 GROUP BY f1;
|
||||
|
||||
--error 0
|
||||
SELECT * FROM t1 GROUP BY f1;
|
||||
|
||||
--disable_result_log
|
||||
--error 0
|
||||
SHOW STATUS LIKE '%wsrep%';
|
||||
--enable_result_log
|
||||
|
||||
SET GLOBAL wsrep_max_ws_rows = 0;
|
||||
DROP TABLE t1;
|
@ -1,9 +1,8 @@
|
||||
!include ../galera_2nodes.cnf
|
||||
|
||||
[mysqld]
|
||||
#wsrep_sst_method=xtrabackup-v2
|
||||
#wsrep_sst_auth="root:"
|
||||
#wsrep_debug=ON
|
||||
wsrep_sst_method=xtrabackup-v2
|
||||
wsrep_sst_auth="root:"
|
||||
|
||||
[mysqld.1]
|
||||
wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=1;pc.ignore_sb=true'
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# Test that autoincrement works correctly while the cluster membership
|
||||
# is changing and IST takes place.
|
||||
# is changing and SST takes place.
|
||||
#
|
||||
|
||||
--source include/big_test.inc
|
||||
|
@ -76,4 +76,3 @@ CALL mtr.add_suppression("WSREP: wsrep::connect\\(gcomm://192.0.2.1\\) failed: 7
|
||||
|
||||
--source include/galera_end.inc
|
||||
--echo # End of test
|
||||
|
||||
|
@ -5,3 +5,4 @@ galera_slave_options_do :MDEV-8798
|
||||
galera_slave_options_ignore : MDEV-8798
|
||||
galera_pc_bootstrap : TODO: Investigate: Timeout in wait_condition.inc
|
||||
galera_pc_weight : Test times out
|
||||
galera_safe_to_bootstrap : I Really dont know :(
|
||||
|
@ -14,11 +14,10 @@ wsrep-causal-reads=ON
|
||||
wsrep-sync-wait=7
|
||||
|
||||
[mysqld.1]
|
||||
#galera_port=@OPT.port
|
||||
#ist_port=@OPT.port
|
||||
#sst_port=@OPT.port
|
||||
wsrep-cluster-address=gcomm://
|
||||
wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=10M;evs.suspect_timeout=PT10S'
|
||||
wsrep-cluster-address='gcomm://'
|
||||
wsrep_provider_options='base_port=@mysqld.1.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S'
|
||||
|
||||
wsrep_sst_receive_address=127.0.0.2:@mysqld.1.#sst_port
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port'
|
||||
|
||||
|
131
mysql-test/suite/innodb/include/innodb-page-compression.inc
Normal file
131
mysql-test/suite/innodb/include/innodb-page-compression.inc
Normal file
@ -0,0 +1,131 @@
|
||||
--disable_warnings
|
||||
set global innodb_file_format = `Barracuda`;
|
||||
set global innodb_file_per_table = on;
|
||||
--enable_warnings
|
||||
|
||||
create table innodb_normal (c1 int not null auto_increment primary key, b char(200)) engine=innodb;
|
||||
create table innodb_page_compressed1 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=1;
|
||||
create table innodb_page_compressed2 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=2;
|
||||
create table innodb_page_compressed3 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=3;
|
||||
create table innodb_page_compressed4 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=4;
|
||||
create table innodb_page_compressed5 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=5;
|
||||
create table innodb_page_compressed6 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=6;
|
||||
create table innodb_page_compressed7 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=7;
|
||||
create table innodb_page_compressed8 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=8;
|
||||
create table innodb_page_compressed9 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=9;
|
||||
|
||||
--disable_query_log
|
||||
begin;
|
||||
let $i = 2000;
|
||||
while ($i)
|
||||
{
|
||||
insert into innodb_normal(b) values(REPEAT('Aa',50));
|
||||
insert into innodb_normal(b) values(REPEAT('a',100));
|
||||
insert into innodb_normal(b) values(REPEAT('b',100));
|
||||
insert into innodb_normal(b) values(REPEAT('0',100));
|
||||
insert into innodb_normal(b) values(REPEAT('1',100));
|
||||
dec $i;
|
||||
}
|
||||
|
||||
insert into innodb_page_compressed1 select * from innodb_normal;
|
||||
insert into innodb_page_compressed2 select * from innodb_normal;
|
||||
insert into innodb_page_compressed3 select * from innodb_normal;
|
||||
insert into innodb_page_compressed4 select * from innodb_normal;
|
||||
insert into innodb_page_compressed5 select * from innodb_normal;
|
||||
insert into innodb_page_compressed6 select * from innodb_normal;
|
||||
insert into innodb_page_compressed7 select * from innodb_normal;
|
||||
insert into innodb_page_compressed8 select * from innodb_normal;
|
||||
insert into innodb_page_compressed9 select * from innodb_normal;
|
||||
commit;
|
||||
--enable_query_log
|
||||
|
||||
select count(*) from innodb_page_compressed1;
|
||||
select count(*) from innodb_page_compressed3;
|
||||
select count(*) from innodb_page_compressed4;
|
||||
select count(*) from innodb_page_compressed5;
|
||||
select count(*) from innodb_page_compressed6;
|
||||
select count(*) from innodb_page_compressed6;
|
||||
select count(*) from innodb_page_compressed7;
|
||||
select count(*) from innodb_page_compressed8;
|
||||
select count(*) from innodb_page_compressed9;
|
||||
|
||||
#
|
||||
# Wait until pages are really compressed
|
||||
#
|
||||
let $wait_condition= select variable_value > 0 from information_schema.global_status where variable_name = 'INNODB_NUM_PAGES_PAGE_COMPRESSED';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--let $MYSQLD_DATADIR=`select @@datadir`
|
||||
|
||||
# shutdown before grep
|
||||
|
||||
--source include/shutdown_mysqld.inc
|
||||
|
||||
--let t1_IBD = $MYSQLD_DATADIR/test/innodb_normal.ibd
|
||||
--let SEARCH_RANGE = 10000000
|
||||
--let SEARCH_PATTERN=AaAaAaAa
|
||||
--echo # innodb_normal expected FOUND
|
||||
-- let SEARCH_FILE=$t1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
--let t1_IBD = $MYSQLD_DATADIR/test/innodb_page_compressed1.ibd
|
||||
--echo # innodb_page_compressed1 page compressed expected NOT FOUND
|
||||
-- let SEARCH_FILE=$t1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
--let t1_IBD = $MYSQLD_DATADIR/test/innodb_page_compressed2.ibd
|
||||
--echo # innodb_page_compressed2 page compressed expected NOT FOUND
|
||||
-- let SEARCH_FILE=$t1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
--let t1_IBD = $MYSQLD_DATADIR/test/innodb_page_compressed3.ibd
|
||||
--echo # innodb_page_compressed3 page compressed expected NOT FOUND
|
||||
-- let SEARCH_FILE=$t1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
--let t1_IBD = $MYSQLD_DATADIR/test/innodb_page_compressed4.ibd
|
||||
--echo # innodb_page_compressed4 page compressed expected NOT FOUND
|
||||
-- let SEARCH_FILE=$t1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
--let t1_IBD = $MYSQLD_DATADIR/test/innodb_page_compressed5.ibd
|
||||
--echo # innodb_page_compressed5 page compressed expected NOT FOUND
|
||||
-- let SEARCH_FILE=$t1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
--let t1_IBD = $MYSQLD_DATADIR/test/innodb_page_compressed6.ibd
|
||||
--echo # innodb_page_compressed6 page compressed expected NOT FOUND
|
||||
-- let SEARCH_FILE=$t1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
--let t1_IBD = $MYSQLD_DATADIR/test/innodb_page_compressed7.ibd
|
||||
--echo # innodb_page_compressed7 page compressed expected NOT FOUND
|
||||
-- let SEARCH_FILE=$t1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
--let t1_IBD = $MYSQLD_DATADIR/test/innodb_page_compressed8.ibd
|
||||
--echo # innodb_page_compressed8 page compressed expected NOT FOUND
|
||||
-- let SEARCH_FILE=$t1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
--let t1_IBD = $MYSQLD_DATADIR/test/innodb_page_compressed9.ibd
|
||||
--echo # innodb_page_compressed9 page compressed expected NOT FOUND
|
||||
-- let SEARCH_FILE=$t1_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
|
||||
-- source include/start_mysqld.inc
|
||||
|
||||
select count(*) from innodb_page_compressed1;
|
||||
select count(*) from innodb_page_compressed3;
|
||||
select count(*) from innodb_page_compressed4;
|
||||
select count(*) from innodb_page_compressed5;
|
||||
select count(*) from innodb_page_compressed6;
|
||||
select count(*) from innodb_page_compressed6;
|
||||
select count(*) from innodb_page_compressed7;
|
||||
select count(*) from innodb_page_compressed8;
|
||||
select count(*) from innodb_page_compressed9;
|
||||
|
||||
let $wait_condition= select variable_value > 0 from information_schema.global_status where variable_name = 'INNODB_NUM_PAGES_PAGE_DECOMPRESSED';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
drop table innodb_normal;
|
||||
drop table innodb_page_compressed1;
|
||||
drop table innodb_page_compressed2;
|
||||
drop table innodb_page_compressed3;
|
||||
drop table innodb_page_compressed4;
|
||||
drop table innodb_page_compressed5;
|
||||
drop table innodb_page_compressed6;
|
||||
drop table innodb_page_compressed7;
|
||||
drop table innodb_page_compressed8;
|
||||
drop table innodb_page_compressed9;
|
19
mysql-test/suite/innodb/include/wait_all_purged.inc
Normal file
19
mysql-test/suite/innodb/include/wait_all_purged.inc
Normal file
@ -0,0 +1,19 @@
|
||||
# Wait for everything to be purged.
|
||||
# The user should have set innodb_purge_rseg_truncate_frequency=1.
|
||||
|
||||
let $wait_counter= 300;
|
||||
while ($wait_counter)
|
||||
{
|
||||
--replace_regex /.*History list length ([0-9]+).*/\1/
|
||||
let $remaining= `SHOW ENGINE INNODB STATUS`;
|
||||
if ($remaining == 'InnoDB 0')
|
||||
{
|
||||
let $wait_counter= 0;
|
||||
}
|
||||
if ($wait_counter)
|
||||
{
|
||||
real_sleep 0.1;
|
||||
dec $wait_counter;
|
||||
}
|
||||
}
|
||||
echo $remaining transactions not purged;
|
@ -231,6 +231,7 @@ set global innodb_buf_flush_list_now = 1;
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
FOUND 1 /\[ERROR\] InnoDB: .*test.t1\.ibd.*/ in mysqld.1.err
|
||||
select f1, f2 from t1;
|
||||
f1 f2
|
||||
1 ############
|
||||
@ -238,6 +239,13 @@ f1 f2
|
||||
3 ////////////
|
||||
4 ------------
|
||||
5 ............
|
||||
# Test End
|
||||
# ---------------------------------------------------------------
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-12600 crash during install_db with innodb_page_size=32K
|
||||
# and ibdata1=3M
|
||||
#
|
||||
SELECT * FROM INFORMATION_SCHEMA.ENGINES
|
||||
WHERE engine = 'innodb'
|
||||
AND support IN ('YES', 'DEFAULT', 'ENABLED');
|
||||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
|
||||
FOUND 1 /\[ERROR\] InnoDB: Cannot create doublewrite buffer/ in mysqld.1.err
|
||||
|
9
mysql-test/suite/innodb/r/drop_table_background.result
Normal file
9
mysql-test/suite/innodb/r/drop_table_background.result
Normal file
@ -0,0 +1,9 @@
|
||||
CREATE TABLE t(c0 SERIAL, c1 INT, c2 INT, c3 INT, c4 INT,
|
||||
KEY(c1), KEY(c2), KEY(c2,c1),
|
||||
KEY(c3), KEY(c3,c1), KEY(c3,c2), KEY(c3,c2,c1),
|
||||
KEY(c4), KEY(c4,c1), KEY(c4,c2), KEY(c4,c2,c1),
|
||||
KEY(c4,c3), KEY(c4,c3,c1), KEY(c4,c3,c2), KEY(c4,c3,c2,c1)) ENGINE=InnoDB;
|
||||
SET DEBUG_DBUG='+d,row_drop_table_add_to_background';
|
||||
DROP TABLE t;
|
||||
CREATE TABLE t (a INT) ENGINE=InnoDB;
|
||||
DROP TABLE t;
|
@ -1,20 +1,98 @@
|
||||
SET GLOBAL innodb_file_format = `Barracuda`;
|
||||
SET GLOBAL innodb_file_per_table = ON;
|
||||
create table t1 (c1 int not null primary key auto_increment, b char(200)) engine=innodb page_compressed=1;
|
||||
insert into t1 values(NULL,'compressed_text_aaaaaaaaabbbbbbbbbbbbbccccccccccccc');
|
||||
insert into t1(b) select b from t1;
|
||||
insert into t1(b) select b from t1;
|
||||
insert into t1(b) select b from t1;
|
||||
insert into t1(b) select b from t1;
|
||||
insert into t1(b) select b from t1;
|
||||
insert into t1(b) select b from t1;
|
||||
insert into t1(b) select b from t1;
|
||||
insert into t1(b) select b from t1;
|
||||
insert into t1(b) select b from t1;
|
||||
insert into t1(b) select b from t1;
|
||||
insert into t1(b) select b from t1;
|
||||
insert into t1(b) select b from t1;
|
||||
insert into t1(b) select b from t1;
|
||||
# t1 compressed expected NOT FOUND
|
||||
NOT FOUND /compressed_text/ in t1.ibd
|
||||
drop table t1;
|
||||
call mtr.add_suppression("InnoDB: Compression failed for space [0-9]+ name test/innodb_page_compressed[0-9] len [0-9]+ err 2 write_size [0-9]+.");
|
||||
set global innodb_file_format = `Barracuda`;
|
||||
set global innodb_file_per_table = on;
|
||||
create table innodb_normal (c1 int not null auto_increment primary key, b char(200)) engine=innodb;
|
||||
create table innodb_page_compressed1 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=1;
|
||||
create table innodb_page_compressed2 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=2;
|
||||
create table innodb_page_compressed3 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=3;
|
||||
create table innodb_page_compressed4 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=4;
|
||||
create table innodb_page_compressed5 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=5;
|
||||
create table innodb_page_compressed6 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=6;
|
||||
create table innodb_page_compressed7 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=7;
|
||||
create table innodb_page_compressed8 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=8;
|
||||
create table innodb_page_compressed9 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=9;
|
||||
select count(*) from innodb_page_compressed1;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed3;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed4;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed5;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed6;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed6;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed7;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed8;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed9;
|
||||
count(*)
|
||||
10000
|
||||
# innodb_normal expected FOUND
|
||||
FOUND 24084 /AaAaAaAa/ in innodb_normal.ibd
|
||||
# innodb_page_compressed1 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed1.ibd
|
||||
# innodb_page_compressed2 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed2.ibd
|
||||
# innodb_page_compressed3 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed3.ibd
|
||||
# innodb_page_compressed4 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed4.ibd
|
||||
# innodb_page_compressed5 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed5.ibd
|
||||
# innodb_page_compressed6 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed6.ibd
|
||||
# innodb_page_compressed7 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed7.ibd
|
||||
# innodb_page_compressed8 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed8.ibd
|
||||
# innodb_page_compressed9 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed9.ibd
|
||||
select count(*) from innodb_page_compressed1;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed3;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed4;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed5;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed6;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed6;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed7;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed8;
|
||||
count(*)
|
||||
10000
|
||||
select count(*) from innodb_page_compressed9;
|
||||
count(*)
|
||||
10000
|
||||
drop table innodb_normal;
|
||||
drop table innodb_page_compressed1;
|
||||
drop table innodb_page_compressed2;
|
||||
drop table innodb_page_compressed3;
|
||||
drop table innodb_page_compressed4;
|
||||
drop table innodb_page_compressed5;
|
||||
drop table innodb_page_compressed6;
|
||||
drop table innodb_page_compressed7;
|
||||
drop table innodb_page_compressed8;
|
||||
drop table innodb_page_compressed9;
|
||||
#done
|
||||
|
@ -1,430 +1,92 @@
|
||||
call mtr.add_suppression("InnoDB: Compression failed for space.*");
|
||||
set global innodb_compression_algorithm = 6;
|
||||
create table innodb_compressed(c1 int, b char(200)) engine=innodb row_format=compressed key_block_size=8;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
create table innodb_normal (c1 int, b char(200)) engine=innodb;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
create table innodb_page_compressed1 (c1 int, b char(200)) engine=innodb page_compressed=1 page_compression_level=1;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
show create table innodb_page_compressed1;
|
||||
Table Create Table
|
||||
innodb_page_compressed1 CREATE TABLE `innodb_page_compressed1` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`b` char(200) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `page_compressed`=1 `page_compression_level`=1
|
||||
create table innodb_page_compressed2 (c1 int, b char(200)) engine=innodb page_compressed=1 page_compression_level=2;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
show create table innodb_page_compressed2;
|
||||
Table Create Table
|
||||
innodb_page_compressed2 CREATE TABLE `innodb_page_compressed2` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`b` char(200) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `page_compressed`=1 `page_compression_level`=2
|
||||
create table innodb_page_compressed3 (c1 int, b char(200)) engine=innodb page_compressed=1 page_compression_level=3;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
show create table innodb_page_compressed3;
|
||||
Table Create Table
|
||||
innodb_page_compressed3 CREATE TABLE `innodb_page_compressed3` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`b` char(200) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `page_compressed`=1 `page_compression_level`=3
|
||||
create table innodb_page_compressed4 (c1 int, b char(200)) engine=innodb page_compressed=1 page_compression_level=4;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
show create table innodb_page_compressed4;
|
||||
Table Create Table
|
||||
innodb_page_compressed4 CREATE TABLE `innodb_page_compressed4` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`b` char(200) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `page_compressed`=1 `page_compression_level`=4
|
||||
create table innodb_page_compressed5 (c1 int, b char(200)) engine=innodb page_compressed=1 page_compression_level=5;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
show create table innodb_page_compressed5;
|
||||
Table Create Table
|
||||
innodb_page_compressed5 CREATE TABLE `innodb_page_compressed5` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`b` char(200) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `page_compressed`=1 `page_compression_level`=5
|
||||
create table innodb_page_compressed6 (c1 int, b char(200)) engine=innodb page_compressed=1 page_compression_level=6;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
show create table innodb_page_compressed6;
|
||||
Table Create Table
|
||||
innodb_page_compressed6 CREATE TABLE `innodb_page_compressed6` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`b` char(200) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `page_compressed`=1 `page_compression_level`=6
|
||||
create table innodb_page_compressed7 (c1 int, b char(200)) engine=innodb page_compressed=1 page_compression_level=7;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
show create table innodb_page_compressed7;
|
||||
Table Create Table
|
||||
innodb_page_compressed7 CREATE TABLE `innodb_page_compressed7` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`b` char(200) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `page_compressed`=1 `page_compression_level`=7
|
||||
create table innodb_page_compressed8 (c1 int, b char(200)) engine=innodb page_compressed=1 page_compression_level=8;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
show create table innodb_page_compressed8;
|
||||
Table Create Table
|
||||
innodb_page_compressed8 CREATE TABLE `innodb_page_compressed8` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`b` char(200) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `page_compressed`=1 `page_compression_level`=8
|
||||
create table innodb_page_compressed9 (c1 int, b char(200)) engine=innodb page_compressed=1 page_compression_level=9;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
show create table innodb_page_compressed9;
|
||||
Table Create Table
|
||||
innodb_page_compressed9 CREATE TABLE `innodb_page_compressed9` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`b` char(200) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `page_compressed`=1 `page_compression_level`=9
|
||||
create procedure innodb_insert_proc (repeat_count int)
|
||||
begin
|
||||
declare current_num int;
|
||||
set current_num = 0;
|
||||
while current_num < repeat_count do
|
||||
insert into innodb_normal values(current_num,'aaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccc');
|
||||
set current_num = current_num + 1;
|
||||
end while;
|
||||
end//
|
||||
commit;
|
||||
set autocommit=0;
|
||||
call innodb_insert_proc(5000);
|
||||
commit;
|
||||
set autocommit=1;
|
||||
select count(*) from innodb_normal;
|
||||
count(*)
|
||||
5000
|
||||
insert into innodb_compressed select * from innodb_normal;
|
||||
insert into innodb_page_compressed1 select * from innodb_normal;
|
||||
insert into innodb_page_compressed2 select * from innodb_normal;
|
||||
insert into innodb_page_compressed3 select * from innodb_normal;
|
||||
insert into innodb_page_compressed4 select * from innodb_normal;
|
||||
insert into innodb_page_compressed5 select * from innodb_normal;
|
||||
insert into innodb_page_compressed6 select * from innodb_normal;
|
||||
insert into innodb_page_compressed7 select * from innodb_normal;
|
||||
insert into innodb_page_compressed8 select * from innodb_normal;
|
||||
insert into innodb_page_compressed9 select * from innodb_normal;
|
||||
commit;
|
||||
select count(*) from innodb_compressed;
|
||||
count(*)
|
||||
5000
|
||||
call mtr.add_suppression("InnoDB: Compression failed for space [0-9]+ name test/innodb_page_compressed[0-9] len [0-9]+ err 2 write_size [0-9]+.");
|
||||
set global innodb_compression_algorithm = snappy;
|
||||
set global innodb_file_format = `Barracuda`;
|
||||
set global innodb_file_per_table = on;
|
||||
create table innodb_normal (c1 int not null auto_increment primary key, b char(200)) engine=innodb;
|
||||
create table innodb_page_compressed1 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=1;
|
||||
create table innodb_page_compressed2 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=2;
|
||||
create table innodb_page_compressed3 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=3;
|
||||
create table innodb_page_compressed4 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=4;
|
||||
create table innodb_page_compressed5 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=5;
|
||||
create table innodb_page_compressed6 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=6;
|
||||
create table innodb_page_compressed7 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=7;
|
||||
create table innodb_page_compressed8 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=8;
|
||||
create table innodb_page_compressed9 (c1 int not null auto_increment primary key, b char(200)) engine=innodb page_compressed=1 page_compression_level=9;
|
||||
select count(*) from innodb_page_compressed1;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed1 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed3;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed2 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed4;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed3 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed5;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed4 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed6;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed5 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed6;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed6 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed7;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed7 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed8;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed8 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed9;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed9 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
alter table innodb_normal page_compressed=1 page_compression_level=8;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
show create table innodb_normal;
|
||||
Table Create Table
|
||||
innodb_normal CREATE TABLE `innodb_normal` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`b` char(200) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `page_compressed`=1 `page_compression_level`=8
|
||||
alter table innodb_compressed row_format=default page_compressed=1 page_compression_level=8 key_block_size=0;
|
||||
show warnings;
|
||||
Level Code Message
|
||||
show create table innodb_compressed;
|
||||
Table Create Table
|
||||
innodb_compressed CREATE TABLE `innodb_compressed` (
|
||||
`c1` int(11) DEFAULT NULL,
|
||||
`b` char(200) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `page_compressed`=1 `page_compression_level`=8
|
||||
update innodb_page_compressed1 set c1 = c1 + 1;
|
||||
update innodb_page_compressed2 set c1 = c1 + 1;
|
||||
update innodb_page_compressed3 set c1 = c1 + 1;
|
||||
update innodb_page_compressed4 set c1 = c1 + 1;
|
||||
update innodb_page_compressed5 set c1 = c1 + 1;
|
||||
update innodb_page_compressed6 set c1 = c1 + 1;
|
||||
update innodb_page_compressed7 set c1 = c1 + 1;
|
||||
update innodb_page_compressed8 set c1 = c1 + 1;
|
||||
update innodb_page_compressed9 set c1 = c1 + 1;
|
||||
select count(*) from innodb_compressed;
|
||||
count(*)
|
||||
5000
|
||||
10000
|
||||
# innodb_normal expected FOUND
|
||||
FOUND 24084 /AaAaAaAa/ in innodb_normal.ibd
|
||||
# innodb_page_compressed1 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed1.ibd
|
||||
# innodb_page_compressed2 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed2.ibd
|
||||
# innodb_page_compressed3 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed3.ibd
|
||||
# innodb_page_compressed4 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed4.ibd
|
||||
# innodb_page_compressed5 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed5.ibd
|
||||
# innodb_page_compressed6 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed6.ibd
|
||||
# innodb_page_compressed7 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed7.ibd
|
||||
# innodb_page_compressed8 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed8.ibd
|
||||
# innodb_page_compressed9 page compressed expected NOT FOUND
|
||||
NOT FOUND /AaAaAaAa/ in innodb_page_compressed9.ibd
|
||||
select count(*) from innodb_page_compressed1;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed1 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed3;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed2 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed4;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed3 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed5;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed4 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed6;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed5 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed6;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed6 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed7;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed7 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed8;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed8 where c1 < 500000;
|
||||
10000
|
||||
select count(*) from innodb_page_compressed9;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed9 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
update innodb_page_compressed1 set c1 = c1 + 1;
|
||||
update innodb_page_compressed2 set c1 = c1 + 1;
|
||||
update innodb_page_compressed3 set c1 = c1 + 1;
|
||||
update innodb_page_compressed4 set c1 = c1 + 1;
|
||||
update innodb_page_compressed5 set c1 = c1 + 1;
|
||||
update innodb_page_compressed6 set c1 = c1 + 1;
|
||||
update innodb_page_compressed7 set c1 = c1 + 1;
|
||||
update innodb_page_compressed8 set c1 = c1 + 1;
|
||||
update innodb_page_compressed9 set c1 = c1 + 1;
|
||||
select count(*) from innodb_compressed;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed1;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed1 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed2 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed3 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed4 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed5 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed6 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed7 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed8 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed9 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
set global innodb_compression_algorithm = 1;
|
||||
update innodb_page_compressed1 set c1 = c1 + 1;
|
||||
update innodb_page_compressed2 set c1 = c1 + 1;
|
||||
update innodb_page_compressed3 set c1 = c1 + 1;
|
||||
update innodb_page_compressed4 set c1 = c1 + 1;
|
||||
update innodb_page_compressed5 set c1 = c1 + 1;
|
||||
update innodb_page_compressed6 set c1 = c1 + 1;
|
||||
update innodb_page_compressed7 set c1 = c1 + 1;
|
||||
update innodb_page_compressed8 set c1 = c1 + 1;
|
||||
update innodb_page_compressed9 set c1 = c1 + 1;
|
||||
commit;
|
||||
select count(*) from innodb_compressed;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed1;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed1 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed2 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed3 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed4 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed5 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed6 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed7 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed8 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed9 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
update innodb_page_compressed1 set c1 = c1 + 1;
|
||||
update innodb_page_compressed2 set c1 = c1 + 1;
|
||||
update innodb_page_compressed3 set c1 = c1 + 1;
|
||||
update innodb_page_compressed4 set c1 = c1 + 1;
|
||||
update innodb_page_compressed5 set c1 = c1 + 1;
|
||||
update innodb_page_compressed6 set c1 = c1 + 1;
|
||||
update innodb_page_compressed7 set c1 = c1 + 1;
|
||||
update innodb_page_compressed8 set c1 = c1 + 1;
|
||||
update innodb_page_compressed9 set c1 = c1 + 1;
|
||||
select count(*) from innodb_compressed;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed1;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed1 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed2 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed3 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed4 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed5 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed6 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed7 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed8 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed9 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
set global innodb_compression_algorithm = 0;
|
||||
update innodb_page_compressed1 set c1 = c1 + 1;
|
||||
update innodb_page_compressed2 set c1 = c1 + 1;
|
||||
update innodb_page_compressed3 set c1 = c1 + 1;
|
||||
update innodb_page_compressed4 set c1 = c1 + 1;
|
||||
update innodb_page_compressed5 set c1 = c1 + 1;
|
||||
update innodb_page_compressed6 set c1 = c1 + 1;
|
||||
update innodb_page_compressed7 set c1 = c1 + 1;
|
||||
update innodb_page_compressed8 set c1 = c1 + 1;
|
||||
update innodb_page_compressed9 set c1 = c1 + 1;
|
||||
commit;
|
||||
select count(*) from innodb_compressed;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed1;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed1 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed2 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed3 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed4 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed5 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed6 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed7 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed8 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed9 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
update innodb_page_compressed1 set c1 = c1 + 1;
|
||||
update innodb_page_compressed2 set c1 = c1 + 1;
|
||||
update innodb_page_compressed3 set c1 = c1 + 1;
|
||||
update innodb_page_compressed4 set c1 = c1 + 1;
|
||||
update innodb_page_compressed5 set c1 = c1 + 1;
|
||||
update innodb_page_compressed6 set c1 = c1 + 1;
|
||||
update innodb_page_compressed7 set c1 = c1 + 1;
|
||||
update innodb_page_compressed8 set c1 = c1 + 1;
|
||||
update innodb_page_compressed9 set c1 = c1 + 1;
|
||||
select count(*) from innodb_compressed;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed1;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed1 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed2 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed3 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed4 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed5 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed6 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed7 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed8 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
select count(*) from innodb_page_compressed9 where c1 < 500000;
|
||||
count(*)
|
||||
5000
|
||||
drop procedure innodb_insert_proc;
|
||||
10000
|
||||
drop table innodb_normal;
|
||||
drop table innodb_compressed;
|
||||
drop table innodb_page_compressed1;
|
||||
drop table innodb_page_compressed2;
|
||||
drop table innodb_page_compressed3;
|
||||
@ -434,3 +96,4 @@ drop table innodb_page_compressed6;
|
||||
drop table innodb_page_compressed7;
|
||||
drop table innodb_page_compressed8;
|
||||
drop table innodb_page_compressed9;
|
||||
#done
|
||||
|
@ -1917,6 +1917,9 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref v v 13 const # Using where; Using index
|
||||
alter table t1 add unique(v);
|
||||
ERROR 23000: Duplicate entry '{ ' for key 'v_2'
|
||||
show warnings;
|
||||
Level Code Message
|
||||
Error 1062 Duplicate entry 'v' for key 'v_2'
|
||||
alter table t1 add key(v);
|
||||
Warnings:
|
||||
Note 1831 Duplicate index `v_2`. This is deprecated and will be disallowed in a future release
|
||||
|
@ -1,91 +0,0 @@
|
||||
#
|
||||
# Bug 23333990 PERSISTENT INDEX STATISTICS UPDATE BEFORE
|
||||
# TRANSACTION IS COMMITTED
|
||||
#
|
||||
"Test 1:- Uncommited delete test"
|
||||
CREATE TABLE t1 (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
val INT UNSIGNED NOT NULL,
|
||||
INDEX (val)) ENGINE=INNODB
|
||||
STATS_PERSISTENT=1,STATS_AUTO_RECALC=1;
|
||||
INSERT INTO t1 (val) VALUES (CEIL(RAND()*20));
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
INSERT INTO t1 (val) SELECT CEIL(RAND()*20) FROM t1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
262144
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
connect con1, localhost, root,,;
|
||||
START TRANSACTION;
|
||||
DELETE FROM t1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
connection default;
|
||||
Test correctly estimates the number of rows as > 20000
|
||||
even when in other uncommmited transaction
|
||||
all rows have been deleted.
|
||||
connection con1;
|
||||
COUNT(*)
|
||||
0
|
||||
commit;
|
||||
connection default;
|
||||
Test 2:- Insert and rollback test
|
||||
CREATE TABLE t2 (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
val INT UNSIGNED NOT NULL,
|
||||
INDEX (val)) ENGINE=INNODB
|
||||
STATS_PERSISTENT=1,STATS_AUTO_RECALC=1;
|
||||
connection con1;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t2 (val) VALUES (CEIL(RAND()*20));
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
INSERT INTO t2 (val) SELECT CEIL(RAND()*20) FROM t2;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
connection default;
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
0
|
||||
Test correctly estimates the number of rows as > 20000
|
||||
even when in other uncommited transaction
|
||||
many rows are inserted.
|
||||
connection con1;
|
||||
COUNT(*)
|
||||
262144
|
||||
Rollback the insert
|
||||
rollback;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
Test correctly estimates the number of rows as 1
|
||||
after rollback.
|
||||
DROP TABLE t1,t2;
|
116
mysql-test/suite/innodb/r/innodb_stats_persistent.result
Normal file
116
mysql-test/suite/innodb/r/innodb_stats_persistent.result
Normal file
@ -0,0 +1,116 @@
|
||||
SET @saved_include_delete_marked = @@GLOBAL.innodb_stats_include_delete_marked;
|
||||
SET GLOBAL innodb_stats_include_delete_marked = ON;
|
||||
SET @saved_traditional = @@GLOBAL.innodb_stats_traditional;
|
||||
SET GLOBAL innodb_stats_traditional=false;
|
||||
SET @saved_modified_counter = @@GLOBAL.innodb_stats_modified_counter;
|
||||
SET GLOBAL innodb_stats_modified_counter=1;
|
||||
CREATE TABLE t0 (id SERIAL, val INT UNSIGNED NOT NULL, KEY(val))
|
||||
ENGINE=INNODB STATS_PERSISTENT=1,STATS_AUTO_RECALC=1;
|
||||
CREATE TABLE t1 LIKE t0;
|
||||
CREATE TABLE t2 LIKE t0;
|
||||
INSERT INTO t0 (val) VALUES (4);
|
||||
INSERT INTO t0 (val) SELECT 4 FROM t0;
|
||||
INSERT INTO t0 (val) SELECT 4 FROM t0;
|
||||
INSERT INTO t0 (val) SELECT 4 FROM t0;
|
||||
INSERT INTO t0 (val) SELECT 4 FROM t0;
|
||||
INSERT INTO t1 SELECT * FROM t0;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
16
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
connect con1, localhost, root,,;
|
||||
START TRANSACTION;
|
||||
DELETE FROM t1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
connection default;
|
||||
# With innodb_stats_include_delete_marked=ON,
|
||||
# DELETE must not affect statistics before COMMIT.
|
||||
EXPLAIN SELECT * FROM t1 WHERE val=4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref val val 4 const 16 Using index
|
||||
connection con1;
|
||||
COUNT(*)
|
||||
0
|
||||
ROLLBACK;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
16
|
||||
EXPLAIN SELECT * FROM t1 WHERE val=4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref val val 4 const 16 Using index
|
||||
BEGIN;
|
||||
DELETE FROM t1;
|
||||
COMMIT;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
connection default;
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t0;
|
||||
# The INSERT will show up before COMMIT.
|
||||
EXPLAIN SELECT * FROM t2 WHERE val=4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ref val val 4 const 16 Using index
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
16
|
||||
# The ROLLBACK of the INSERT must affect the statistics.
|
||||
ROLLBACK;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
connection con1;
|
||||
EXPLAIN SELECT * FROM t2 WHERE val=4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ref val val 4 const 1 Using index
|
||||
SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency;
|
||||
SET GLOBAL innodb_purge_rseg_truncate_frequency = 1;
|
||||
InnoDB 0 transactions not purged
|
||||
SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency;
|
||||
# After COMMIT and purge, the DELETE must show up.
|
||||
EXPLAIN SELECT * FROM t1 WHERE val=4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref val val 4 const 1 Using index
|
||||
SET GLOBAL innodb_stats_include_delete_marked = OFF;
|
||||
BEGIN;
|
||||
INSERT INTO t1 SELECT * FROM t0;
|
||||
EXPLAIN SELECT * FROM t1 WHERE val=4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref val val 4 const 16 Using index
|
||||
ROLLBACK;
|
||||
EXPLAIN SELECT * FROM t1 WHERE val=4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref val val 4 const 1 Using index
|
||||
BEGIN;
|
||||
INSERT INTO t1 SELECT * FROM t0;
|
||||
COMMIT;
|
||||
EXPLAIN SELECT * FROM t1 WHERE val=4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref val val 4 const 16 Using index
|
||||
BEGIN;
|
||||
DELETE FROM t1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
# With innodb_stats_include_delete_marked=OFF,
|
||||
# DELETE must affect statistics even before COMMIT.
|
||||
# However, if there was a WHERE condition,
|
||||
# ha_innobase::records_in_range() would count the delete-marked records.
|
||||
EXPLAIN SELECT * FROM t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL val 4 NULL 1 Using index
|
||||
ROLLBACK;
|
||||
EXPLAIN SELECT * FROM t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL val 4 NULL 16 Using index
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
16
|
||||
disconnect con1;
|
||||
connection default;
|
||||
DROP TABLE t0,t1,t2;
|
||||
SET GLOBAL innodb_stats_include_delete_marked = @saved_include_delete_marked;
|
||||
SET GLOBAL innodb_stats_traditional = @saved_traditional;
|
||||
SET GLOBAL innodb_stats_modified_counter = @saved_modified_counter;
|
79
mysql-test/suite/innodb/r/row_format_redundant.result
Normal file
79
mysql-test/suite/innodb/r/row_format_redundant.result
Normal file
@ -0,0 +1,79 @@
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
#
|
||||
# Bug#21644827 - FTS, ASSERT !SRV_READ_ONLY_MODE || M_IMPL.M_LOG_MODE ==
|
||||
# MTR_LOG_NO_REDO
|
||||
#
|
||||
SET GLOBAL innodb_file_per_table=ON;
|
||||
create table t1 (a int not null, d varchar(15) not null, b
|
||||
varchar(198) not null, c char(156),
|
||||
fulltext ftsic(c)) engine=InnoDB
|
||||
row_format=redundant;
|
||||
insert into t1 values(123, 'abcdef', 'jghikl', 'mnop');
|
||||
insert into t1 values(456, 'abcdef', 'jghikl', 'mnop');
|
||||
insert into t1 values(789, 'abcdef', 'jghikl', 'mnop');
|
||||
insert into t1 values(134, 'kasdfsdsadf', 'adfjlasdkfjasd', 'adfsadflkasdasdfljasdf');
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
SET GLOBAL innodb_file_per_table=OFF;
|
||||
create table t2 (a int not null, d varchar(15) not null, b
|
||||
varchar(198) not null, c char(156), fulltext ftsic(c)) engine=InnoDB
|
||||
row_format=redundant;
|
||||
insert into t2 select * from t1;
|
||||
create table t3 (a int not null, d varchar(15) not null, b varchar(198),
|
||||
c varchar(150), index k1(c(99), b(56)), index k2(b(5), c(10))) engine=InnoDB
|
||||
row_format=redundant;
|
||||
insert into t3 values(444, 'dddd', 'bbbbb', 'aaaaa');
|
||||
insert into t3 values(555, 'eeee', 'ccccc', 'aaaaa');
|
||||
SET GLOBAL innodb_fast_shutdown=0;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
4096
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4096
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
2
|
||||
TRUNCATE TABLE t1;
|
||||
ERROR HY000: Table 't1' is read only
|
||||
TRUNCATE TABLE t2;
|
||||
ERROR HY000: Table 't2' is read only
|
||||
TRUNCATE TABLE t3;
|
||||
ERROR HY000: Table 't3' is read only
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
TRUNCATE TABLE t3;
|
||||
corrupted SYS_TABLES.MIX_LEN for test/t1
|
||||
corrupted SYS_TABLES.MIX_LEN for test/t2
|
||||
corrupted SYS_TABLES.MIX_LEN for test/t3
|
||||
TRUNCATE TABLE t1;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist in engine
|
||||
TRUNCATE TABLE t2;
|
||||
TRUNCATE TABLE t3;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist in engine
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
0
|
||||
RENAME TABLE t1 TO tee_one;
|
||||
ERROR HY000: Error on rename of './test/t1' to './test/tee_one' (errno: 155 "The table does not exist in engine")
|
||||
DROP TABLE t1;
|
||||
Warnings:
|
||||
Warning 1932 Table 'test.t1' doesn't exist in engine
|
||||
DROP TABLE t2,t3;
|
||||
FOUND 49 /\[ERROR\] InnoDB: Table `test`\.`t1` in InnoDB data dictionary contains invalid flags\. SYS_TABLES.MIX_LEN=255\b/ in mysqld.1.err
|
||||
ib_buffer_pool
|
||||
ib_logfile0
|
||||
ib_logfile1
|
||||
ibdata1
|
@ -149,10 +149,6 @@ FOUND 2 /support raw device/ in mysqld.1.err
|
||||
SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE engine = 'innodb'
|
||||
AND support IN ('YES', 'DEFAULT', 'ENABLED');
|
||||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
|
||||
FOUND 1 /The innodb_temporary data file 'ibtmp1' must be at least/ in mysqld.1.err
|
||||
SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE engine = 'innodb'
|
||||
AND support IN ('YES', 'DEFAULT', 'ENABLED');
|
||||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
|
||||
FOUND 1 /InnoDB: syntax error in file path/ in mysqld.1.err
|
||||
SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE engine = 'innodb'
|
||||
AND support IN ('YES', 'DEFAULT', 'ENABLED');
|
||||
|
@ -1,4 +1,4 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/innodb_page_size.inc
|
||||
--source include/not_embedded.inc
|
||||
|
||||
-- echo #
|
||||
|
@ -1,5 +1,5 @@
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/innodb_page_size.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug#13955083 ALLOW IN-PLACE DDL OPERATIONS ON MISSING
|
||||
|
@ -4,22 +4,27 @@
|
||||
--echo # PAGE OF SYSTEM TABLESPACE
|
||||
--echo #
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/innodb_page_size.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/not_embedded.inc
|
||||
|
||||
# Slow shutdown and restart to make sure ibuf merge is finished
|
||||
SET GLOBAL innodb_fast_shutdown = 0;
|
||||
--disable_query_log
|
||||
call mtr.add_suppression("Header page consists of zero bytes");
|
||||
call mtr.add_suppression("Checksum mismatch in datafile");
|
||||
call mtr.add_suppression("but the innodb_page_size start-up parameter is");
|
||||
call mtr.add_suppression("adjusting FSP_SPACE_FLAGS");
|
||||
call mtr.add_suppression("InnoDB: Header page consists of zero bytes");
|
||||
call mtr.add_suppression("InnoDB: Checksum mismatch in datafile: .*, Space ID:0, Flags: 0");
|
||||
call mtr.add_suppression("InnoDB: Data file .* uses page size .* but the innodb_page_size start-up parameter is");
|
||||
call mtr.add_suppression("InnoDB: adjusting FSP_SPACE_FLAGS");
|
||||
call mtr.add_suppression("InnoDB: New log files created");
|
||||
call mtr.add_suppression("InnoDB: Cannot create doublewrite buffer: the first file in innodb_data_file_path must be at least (3|6|12)M\\.");
|
||||
call mtr.add_suppression("InnoDB: Database creation was aborted");
|
||||
call mtr.add_suppression("Plugin 'InnoDB' (init function returned error|registration as a STORAGE ENGINE failed)");
|
||||
--enable_query_log
|
||||
--source include/restart_mysqld.inc
|
||||
|
||||
let INNODB_PAGE_SIZE=`select @@innodb_page_size`;
|
||||
let MYSQLD_DATADIR=`select @@datadir`;
|
||||
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err;
|
||||
|
||||
show variables like 'innodb_doublewrite';
|
||||
show variables like 'innodb_fil_make_page_dirty_debug';
|
||||
@ -392,9 +397,38 @@ EOF
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
check table t1;
|
||||
--let SEARCH_PATTERN= \[ERROR\] InnoDB: .*test.t1\\.ibd.*
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
select f1, f2 from t1;
|
||||
|
||||
--echo # Test End
|
||||
--echo # ---------------------------------------------------------------
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-12600 crash during install_db with innodb_page_size=32K
|
||||
--echo # and ibdata1=3M
|
||||
--echo #
|
||||
let bugdir= $MYSQLTEST_VARDIR/tmp/doublewrite;
|
||||
--mkdir $bugdir
|
||||
|
||||
let $check_no_innodb=SELECT * FROM INFORMATION_SCHEMA.ENGINES
|
||||
WHERE engine = 'innodb'
|
||||
AND support IN ('YES', 'DEFAULT', 'ENABLED');
|
||||
|
||||
--let $ibp=--innodb-log-group-home-dir=$bugdir --innodb-data-home-dir=$bugdir
|
||||
--let $ibd=$ibp --innodb-undo-tablespaces=0 --innodb-log-files-in-group=2
|
||||
--let $ibp=$ibp --innodb-data-file-path=ibdata1:1M;ibdata2:1M:autoextend
|
||||
|
||||
--let $restart_parameters= $ibp
|
||||
--source include/restart_mysqld.inc
|
||||
eval $check_no_innodb;
|
||||
--let SEARCH_PATTERN= \[ERROR\] InnoDB: Cannot create doublewrite buffer
|
||||
--source include/search_pattern_in_file.inc
|
||||
--let $restart_parameters=
|
||||
--source include/restart_mysqld.inc
|
||||
|
||||
--remove_file $bugdir/ibdata1
|
||||
--remove_file $bugdir/ibdata2
|
||||
--remove_file $bugdir/ib_logfile0
|
||||
--remove_file $bugdir/ib_logfile1
|
||||
--rmdir $bugdir
|
||||
|
30
mysql-test/suite/innodb/t/drop_table_background.test
Normal file
30
mysql-test/suite/innodb/t/drop_table_background.test
Normal file
@ -0,0 +1,30 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
# Embedded server does not support restarting
|
||||
--source include/not_embedded.inc
|
||||
|
||||
CREATE TABLE t(c0 SERIAL, c1 INT, c2 INT, c3 INT, c4 INT,
|
||||
KEY(c1), KEY(c2), KEY(c2,c1),
|
||||
KEY(c3), KEY(c3,c1), KEY(c3,c2), KEY(c3,c2,c1),
|
||||
KEY(c4), KEY(c4,c1), KEY(c4,c2), KEY(c4,c2,c1),
|
||||
KEY(c4,c3), KEY(c4,c3,c1), KEY(c4,c3,c2), KEY(c4,c3,c2,c1)) ENGINE=InnoDB;
|
||||
|
||||
let $n= 10;
|
||||
|
||||
SET DEBUG_DBUG='+d,row_drop_table_add_to_background';
|
||||
--disable_query_log
|
||||
let $i= $n;
|
||||
while ($i) {
|
||||
eval CREATE TABLE t$i LIKE t;
|
||||
dec $i;
|
||||
}
|
||||
let $i= $n;
|
||||
while ($i) {
|
||||
eval DROP TABLE t$i;
|
||||
dec $i;
|
||||
}
|
||||
--enable_query_log
|
||||
DROP TABLE t;
|
||||
--source include/restart_mysqld.inc
|
||||
CREATE TABLE t (a INT) ENGINE=InnoDB;
|
||||
DROP TABLE t;
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user