mirror of
https://github.com/MariaDB/server.git
synced 2025-07-13 02:22:51 +03:00
Merge branch '10.2' into bb-10.2-mdev9543
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@ -59,6 +59,9 @@ include/mysql_version.h
|
|||||||
include/mysqld_ername.h
|
include/mysqld_ername.h
|
||||||
include/mysqld_error.h
|
include/mysqld_error.h
|
||||||
include/sql_state.h
|
include/sql_state.h
|
||||||
|
include/probes_mysql.d
|
||||||
|
include/probes_mysql_dtrace.h
|
||||||
|
include/probes_mysql_nodtrace.h
|
||||||
info_macros.cmake
|
info_macros.cmake
|
||||||
libmysql*/libmysql*_exports_file.cc
|
libmysql*/libmysql*_exports_file.cc
|
||||||
libmysql*/merge_archives_mysql*.cmake
|
libmysql*/merge_archives_mysql*.cmake
|
||||||
@ -112,6 +115,8 @@ scripts/wsrep_sst_mysqldump
|
|||||||
scripts/wsrep_sst_rsync
|
scripts/wsrep_sst_rsync
|
||||||
scripts/wsrep_sst_xtrabackup
|
scripts/wsrep_sst_xtrabackup
|
||||||
scripts/wsrep_sst_xtrabackup-v2
|
scripts/wsrep_sst_xtrabackup-v2
|
||||||
|
scripts/maria_add_gis_sp.sql
|
||||||
|
scripts/maria_add_gis_sp_bootstrap.sql
|
||||||
sql-bench/bench-count-distinct
|
sql-bench/bench-count-distinct
|
||||||
sql-bench/bench-init.pl
|
sql-bench/bench-init.pl
|
||||||
sql-bench/compare-results
|
sql-bench/compare-results
|
||||||
|
@ -31,6 +31,7 @@ Usage: $0 [-h|-n] [configure-options]
|
|||||||
-h, --help Show this help message.
|
-h, --help Show this help message.
|
||||||
-n, --just-print Don't actually run any commands; just print them.
|
-n, --just-print Don't actually run any commands; just print them.
|
||||||
-c, --just-configure Stop after running configure.
|
-c, --just-configure Stop after running configure.
|
||||||
|
Combined with --just-print shows configure options.
|
||||||
--extra-configs=xxx Add this to configure options
|
--extra-configs=xxx Add this to configure options
|
||||||
--extra-flags=xxx Add this C and CXX flags
|
--extra-flags=xxx Add this C and CXX flags
|
||||||
--extra-cflags=xxx Add this to C flags
|
--extra-cflags=xxx Add this to C flags
|
||||||
|
@ -348,11 +348,9 @@ IF(WITH_UNIT_TESTS)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(NOT WITHOUT_SERVER)
|
SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
|
||||||
SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
|
# Add storage engines and plugins.
|
||||||
# Add storage engines and plugins.
|
CONFIGURE_PLUGINS()
|
||||||
CONFIGURE_PLUGINS()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
ADD_SUBDIRECTORY(include)
|
ADD_SUBDIRECTORY(include)
|
||||||
ADD_SUBDIRECTORY(dbug)
|
ADD_SUBDIRECTORY(dbug)
|
||||||
@ -382,6 +380,10 @@ IF(NOT WITHOUT_SERVER)
|
|||||||
ADD_SUBDIRECTORY(mysql-test)
|
ADD_SUBDIRECTORY(mysql-test)
|
||||||
ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess)
|
ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess)
|
||||||
ADD_SUBDIRECTORY(sql-bench)
|
ADD_SUBDIRECTORY(sql-bench)
|
||||||
|
IF(WIN32)
|
||||||
|
ADD_SUBDIRECTORY(win/upgrade_wizard)
|
||||||
|
ADD_SUBDIRECTORY(win/packaging)
|
||||||
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(UNIX)
|
IF(UNIX)
|
||||||
@ -391,10 +393,7 @@ ENDIF()
|
|||||||
INCLUDE(cmake/abi_check.cmake)
|
INCLUDE(cmake/abi_check.cmake)
|
||||||
INCLUDE(cmake/tags.cmake)
|
INCLUDE(cmake/tags.cmake)
|
||||||
|
|
||||||
IF(WIN32)
|
|
||||||
ADD_SUBDIRECTORY(win/upgrade_wizard)
|
|
||||||
ADD_SUBDIRECTORY(win/packaging)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
|
|
||||||
INCLUDE(for_clients)
|
INCLUDE(for_clients)
|
||||||
|
45
CREDITS
45
CREDITS
@ -1,25 +1,30 @@
|
|||||||
MariaDB is brought to you by the MariaDB foundation, a USA non profit
|
MariaDB is brought to you by the MariaDB Foundation, a non profit
|
||||||
organization.
|
organization registered in the USA.
|
||||||
|
|
||||||
The current main members and sponsors of the MariaDB foundation are:
|
The current main members and sponsors of the MariaDB Foundation are:
|
||||||
|
|
||||||
Automattic http://automattic.com (2014)
|
MariaDB Corporation http://www.mariadb.com (2013 - 2016)
|
||||||
SkySQL Ab http://www.skysql.com (2013, 2014)
|
Booking.com http://www.booking.com (2013 - 2016)
|
||||||
Booking.com http://www.booking.com (2013)
|
Parallels http://www.parallels.com/products/plesk (2013 - 2016)
|
||||||
Parallels http://www.parallels.com/products/plesk (2013)
|
Automattic http://automattic.com (2014 - 2016)
|
||||||
|
Verkkokauppa.com http://verkkokauppa.com (2015 - 2016)
|
||||||
|
Visma http://visma.com/ (2015 - 2016)
|
||||||
|
Webyog http://webyog.com (2015 - 2016)
|
||||||
|
Wikimedia Foundation http://wikimedia.org (2015 - 2016)
|
||||||
|
Acronis http://acronis.com (2016)
|
||||||
|
|
||||||
For a full list of supporters and sponsors see
|
For a full list of supporters and sponsors see
|
||||||
https://mariadb.org/en/supporters/
|
https://mariadb.org/about/supporters/
|
||||||
|
|
||||||
You can also do this by doing SHOW CONTRIBUTORS.
|
You can also do this by running SHOW CONTRIBUTORS.
|
||||||
|
|
||||||
For all corporate memberships and sponsorships please contact the
|
For all corporate memberships and sponsorships please contact the
|
||||||
MariaDB foundation Board via foundation@mariadb.org.
|
MariaDB Foundation Board via foundation@mariadb.org.
|
||||||
|
|
||||||
The MariaDB foundation is responsible for the MariaDB source
|
The MariaDB Foundation is responsible for the MariaDB source
|
||||||
repository, the official MariaDB binaries and http://mariadb.org.
|
repository, the official MariaDB binaries and http://mariadb.org.
|
||||||
|
|
||||||
The MariaDB foundation provides also, among other things, the
|
The MariaDB Foundation also provides, among other things, the
|
||||||
following services to the MariaDB community:
|
following services to the MariaDB community:
|
||||||
|
|
||||||
- Code reviews and applying patches for MariaDB
|
- Code reviews and applying patches for MariaDB
|
||||||
@ -28,17 +33,19 @@ following services to the MariaDB community:
|
|||||||
- Bug fixing in MariaDB (for bugs that affects a large part of the community)
|
- Bug fixing in MariaDB (for bugs that affects a large part of the community)
|
||||||
- Building the official MariaDB binaries
|
- Building the official MariaDB binaries
|
||||||
- Maintaining http://mariadb.org
|
- Maintaining http://mariadb.org
|
||||||
|
- Documenting MariaDB in the MariaDB Knowledge Base http://mariadb.com/kb
|
||||||
|
|
||||||
To be able to do the above we need help from cooperations and individuals!
|
To be able to do the above we need help from corporations and individuals!
|
||||||
|
|
||||||
You can help support MariaDB by be becoming a MariaDB developer or a
|
You can help support MariaDB by becoming a MariaDB developer or a
|
||||||
member or sponsor of the MariaDB foundation!
|
member or sponsor of the MariaDB Foundation. To donate or sponsor,
|
||||||
|
go to https://mariadb.org/donate/
|
||||||
|
|
||||||
You can get a list of all main authors of MariaDB / MySQL by doing
|
You can get a list of all the main authors of MariaDB / MySQL by running
|
||||||
SHOW AUTHORS;
|
SHOW AUTHORS;
|
||||||
|
|
||||||
You can get a list sponsors and contributors by doing
|
You can get a list sponsors and contributors by running
|
||||||
SHOW CONTRIBUTORS;
|
SHOW CONTRIBUTORS;
|
||||||
|
|
||||||
You can read more about the MariaDB foundation at:
|
You can read more about the MariaDB Foundation at:
|
||||||
https://mariadb.org/en/foundation/
|
https://mariadb.org/about/
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
MariaDB is in most aspects identical to MySQL.
|
MariaDB is in most aspects identical to MySQL.
|
||||||
|
|
||||||
Differences between MySQL and MariaDB can be found at:
|
Differences between MySQL and MariaDB can be found at:
|
||||||
http://kb.askmonty.org/en/mariadb-versus-mysql-features/
|
https://mariadb.com/kb/en/mariadb-vs-mysql-features/
|
||||||
http://kb.askmonty.org/en/mariadb-versus-mysql-compatibility/
|
https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/
|
||||||
|
|
||||||
The MariaDB manual can be found at:
|
The MariaDB manual can be found at:
|
||||||
http://kb.askmonty.org/
|
https://mariadb.com/kb/
|
||||||
|
|
||||||
The MySQL Reference Manual is available in various formats on
|
The MySQL Reference Manual is available in various formats on
|
||||||
http://dev.mysql.com/doc.
|
http://dev.mysql.com/doc.
|
||||||
|
@ -243,7 +243,7 @@
|
|||||||
in the caller's frame is set in the new context as well.
|
in the caller's frame is set in the new context as well.
|
||||||
4) For each instruction, call its execute() method.
|
4) For each instruction, call its execute() method.
|
||||||
The result is a pointer to the next instruction to execute (or NULL)
|
The result is a pointer to the next instruction to execute (or NULL)
|
||||||
if an error occured.
|
if an error occurred.
|
||||||
5) On success, set the new values of the OUT and INOUT parameters in
|
5) On success, set the new values of the OUT and INOUT parameters in
|
||||||
the caller's frame.
|
the caller's frame.
|
||||||
|
|
||||||
@ -853,7 +853,7 @@
|
|||||||
// '*nextp' will be set to the index of the next instruction
|
// '*nextp' will be set to the index of the next instruction
|
||||||
// to execute. (For most instruction this will be the
|
// to execute. (For most instruction this will be the
|
||||||
// instruction following this one.)
|
// instruction following this one.)
|
||||||
// Returns 0 on success, non-zero if some error occured.
|
// Returns 0 on success, non-zero if some error occurred.
|
||||||
virtual int execute(THD *, uint *nextp)
|
virtual int execute(THD *, uint *nextp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
Instructions for building MariaDB can be found at:
|
Instructions for building MariaDB can be found at:
|
||||||
https://kb.askmonty.org/en/compiling-mariadb-from-source/
|
https://mariadb.com/kb/en/compiling-mariadb-from-source
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
Up-to-date instructions about building MariaDB on Windows can be found
|
Up-to-date instructions about building MariaDB on Windows can be found
|
||||||
at: http://kb.askmonty.org/en/building-mariadb-on-windows
|
at: https://mariadb.com/kb/en/Building_MariaDB_on_Windows
|
||||||
|
|
||||||
|
8
README
8
README
@ -1,17 +1,17 @@
|
|||||||
MariaDB is designed as a drop-in replacement of MySQL(R) with more
|
MariaDB is designed as a drop-in replacement of MySQL(R) with more
|
||||||
features, new storage engines, fewer bugs, and better performance.
|
features, new storage engines, fewer bugs, and better performance.
|
||||||
|
|
||||||
MariaDB is brought to you by the MariaDB foundation.
|
MariaDB is brought to you by the MariaDB Foundation.
|
||||||
Please read the file CREDITS for details about the MariaDB foundation,
|
Please read the CREDITS file for details about the MariaDB Foundation,
|
||||||
and who is developing MariaDB.
|
and who is developing MariaDB.
|
||||||
|
|
||||||
MariaDB is developed by many of the original developers of MySQL who
|
MariaDB is developed by many of the original developers of MySQL who
|
||||||
now work for MariadB foundation and SkySQL Ab, and by many people in
|
now work for the MariadB Foundation and the MariaDB Corporation, and by many people in
|
||||||
the community.
|
the community.
|
||||||
|
|
||||||
MySQL, which is the base of MariaDB, is a product and trademark of Oracle
|
MySQL, which is the base of MariaDB, is a product and trademark of Oracle
|
||||||
Corporation, Inc. For a list of developers and other contributors,
|
Corporation, Inc. For a list of developers and other contributors,
|
||||||
see the Credits appendix. You can also do 'SHOW authors' to get a
|
see the Credits appendix. You can also run 'SHOW authors' to get a
|
||||||
list of active contributors.
|
list of active contributors.
|
||||||
|
|
||||||
A description of the MariaDB project and a manual can be found at:
|
A description of the MariaDB project and a manual can be found at:
|
||||||
|
1
VERSION
1
VERSION
@ -1,4 +1,3 @@
|
|||||||
MYSQL_VERSION_MAJOR=10
|
MYSQL_VERSION_MAJOR=10
|
||||||
MYSQL_VERSION_MINOR=2
|
MYSQL_VERSION_MINOR=2
|
||||||
MYSQL_VERSION_PATCH=0
|
MYSQL_VERSION_PATCH=0
|
||||||
MYSQL_VERSION_EXTRA=
|
|
||||||
|
@ -1344,6 +1344,44 @@ sig_handler mysql_end(int sig)
|
|||||||
exit(status.exit_status);
|
exit(status.exit_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
set connection-specific options and call mysql_real_connect
|
||||||
|
*/
|
||||||
|
static bool do_connect(MYSQL *mysql, const char *host, const char *user,
|
||||||
|
const char *password, const char *database, ulong flags)
|
||||||
|
{
|
||||||
|
if (opt_secure_auth)
|
||||||
|
mysql_options(mysql, MYSQL_SECURE_AUTH, (char *) &opt_secure_auth);
|
||||||
|
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
|
||||||
|
if (opt_use_ssl)
|
||||||
|
{
|
||||||
|
mysql_ssl_set(mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
|
||||||
|
opt_ssl_capath, opt_ssl_cipher);
|
||||||
|
mysql_options(mysql, MYSQL_OPT_SSL_CRL, opt_ssl_crl);
|
||||||
|
mysql_options(mysql, MYSQL_OPT_SSL_CRLPATH, opt_ssl_crlpath);
|
||||||
|
}
|
||||||
|
mysql_options(mysql,MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
|
||||||
|
(char*)&opt_ssl_verify_server_cert);
|
||||||
|
#endif
|
||||||
|
if (opt_protocol)
|
||||||
|
mysql_options(mysql,MYSQL_OPT_PROTOCOL,(char*)&opt_protocol);
|
||||||
|
#ifdef HAVE_SMEM
|
||||||
|
if (shared_memory_base_name)
|
||||||
|
mysql_options(mysql,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name);
|
||||||
|
#endif
|
||||||
|
if (opt_plugin_dir && *opt_plugin_dir)
|
||||||
|
mysql_options(mysql, MYSQL_PLUGIN_DIR, opt_plugin_dir);
|
||||||
|
|
||||||
|
if (opt_default_auth && *opt_default_auth)
|
||||||
|
mysql_options(mysql, MYSQL_DEFAULT_AUTH, opt_default_auth);
|
||||||
|
|
||||||
|
mysql_options(mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0);
|
||||||
|
mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD,
|
||||||
|
"program_name", "mysql");
|
||||||
|
return mysql_real_connect(mysql, host, user, password, database,
|
||||||
|
opt_mysql_port, opt_mysql_unix_port, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This function handles sigint calls
|
This function handles sigint calls
|
||||||
@ -1365,11 +1403,7 @@ sig_handler handle_sigint(int sig)
|
|||||||
}
|
}
|
||||||
|
|
||||||
kill_mysql= mysql_init(kill_mysql);
|
kill_mysql= mysql_init(kill_mysql);
|
||||||
mysql_options(kill_mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0);
|
if (!do_connect(kill_mysql,current_host, current_user, opt_password, "", 0))
|
||||||
mysql_options4(kill_mysql, MYSQL_OPT_CONNECT_ATTR_ADD,
|
|
||||||
"program_name", "mysql");
|
|
||||||
if (!mysql_real_connect(kill_mysql,current_host, current_user, opt_password,
|
|
||||||
"", opt_mysql_port, opt_mysql_unix_port,0))
|
|
||||||
{
|
{
|
||||||
tee_fprintf(stdout, "Ctrl-C -- sorry, cannot connect to server to kill query, giving up ...\n");
|
tee_fprintf(stdout, "Ctrl-C -- sorry, cannot connect to server to kill query, giving up ...\n");
|
||||||
goto err;
|
goto err;
|
||||||
@ -1921,7 +1955,7 @@ static int get_options(int argc, char **argv)
|
|||||||
connect_flag|= CLIENT_IGNORE_SPACE;
|
connect_flag|= CLIENT_IGNORE_SPACE;
|
||||||
|
|
||||||
if (opt_progress_reports)
|
if (opt_progress_reports)
|
||||||
connect_flag|= CLIENT_PROGRESS;
|
connect_flag|= CLIENT_PROGRESS_OBSOLETE;
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@ -3320,7 +3354,7 @@ com_go(String *buffer,char *line __attribute__((unused)))
|
|||||||
|
|
||||||
end:
|
end:
|
||||||
|
|
||||||
/* Show warnings if any or error occured */
|
/* Show warnings if any or error occurred */
|
||||||
if (show_warnings == 1 && (warnings >= 1 || error))
|
if (show_warnings == 1 && (warnings >= 1 || error))
|
||||||
print_warnings();
|
print_warnings();
|
||||||
|
|
||||||
@ -4575,27 +4609,8 @@ sql_real_connect(char *host,char *database,char *user,char *password,
|
|||||||
}
|
}
|
||||||
if (opt_compress)
|
if (opt_compress)
|
||||||
mysql_options(&mysql,MYSQL_OPT_COMPRESS,NullS);
|
mysql_options(&mysql,MYSQL_OPT_COMPRESS,NullS);
|
||||||
if (opt_secure_auth)
|
|
||||||
mysql_options(&mysql, MYSQL_SECURE_AUTH, (char *) &opt_secure_auth);
|
|
||||||
if (using_opt_local_infile)
|
if (using_opt_local_infile)
|
||||||
mysql_options(&mysql,MYSQL_OPT_LOCAL_INFILE, (char*) &opt_local_infile);
|
mysql_options(&mysql,MYSQL_OPT_LOCAL_INFILE, (char*) &opt_local_infile);
|
||||||
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
|
|
||||||
if (opt_use_ssl)
|
|
||||||
{
|
|
||||||
mysql_ssl_set(&mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
|
|
||||||
opt_ssl_capath, opt_ssl_cipher);
|
|
||||||
mysql_options(&mysql, MYSQL_OPT_SSL_CRL, opt_ssl_crl);
|
|
||||||
mysql_options(&mysql, MYSQL_OPT_SSL_CRLPATH, opt_ssl_crlpath);
|
|
||||||
}
|
|
||||||
mysql_options(&mysql,MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
|
|
||||||
(char*)&opt_ssl_verify_server_cert);
|
|
||||||
#endif
|
|
||||||
if (opt_protocol)
|
|
||||||
mysql_options(&mysql,MYSQL_OPT_PROTOCOL,(char*)&opt_protocol);
|
|
||||||
#ifdef HAVE_SMEM
|
|
||||||
if (shared_memory_base_name)
|
|
||||||
mysql_options(&mysql,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name);
|
|
||||||
#endif
|
|
||||||
if (safe_updates)
|
if (safe_updates)
|
||||||
{
|
{
|
||||||
char init_command[100];
|
char init_command[100];
|
||||||
@ -4607,18 +4622,8 @@ sql_real_connect(char *host,char *database,char *user,char *password,
|
|||||||
|
|
||||||
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, default_charset);
|
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, default_charset);
|
||||||
|
|
||||||
if (opt_plugin_dir && *opt_plugin_dir)
|
if (!do_connect(&mysql, host, user, password, database,
|
||||||
mysql_options(&mysql, MYSQL_PLUGIN_DIR, opt_plugin_dir);
|
connect_flag | CLIENT_MULTI_STATEMENTS))
|
||||||
|
|
||||||
if (opt_default_auth && *opt_default_auth)
|
|
||||||
mysql_options(&mysql, MYSQL_DEFAULT_AUTH, opt_default_auth);
|
|
||||||
|
|
||||||
mysql_options(&mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 0);
|
|
||||||
mysql_options4(&mysql, MYSQL_OPT_CONNECT_ATTR_ADD,
|
|
||||||
"program_name", "mysql");
|
|
||||||
if (!mysql_real_connect(&mysql, host, user, password,
|
|
||||||
database, opt_mysql_port, opt_mysql_unix_port,
|
|
||||||
connect_flag | CLIENT_MULTI_STATEMENTS))
|
|
||||||
{
|
{
|
||||||
if (!silent ||
|
if (!silent ||
|
||||||
(mysql_errno(&mysql) != CR_CONN_HOST_ERROR &&
|
(mysql_errno(&mysql) != CR_CONN_HOST_ERROR &&
|
||||||
@ -4638,10 +4643,10 @@ sql_real_connect(char *host,char *database,char *user,char *password,
|
|||||||
mysql.reconnect= debug_info_flag; // We want to know if this happens
|
mysql.reconnect= debug_info_flag; // We want to know if this happens
|
||||||
|
|
||||||
/*
|
/*
|
||||||
CLIENT_PROGRESS is set only if we requsted it in mysql_real_connect()
|
CLIENT_PROGRESS_OBSOLETE is set only if we requested it in
|
||||||
and the server also supports it
|
mysql_real_connect() and the server also supports it
|
||||||
*/
|
*/
|
||||||
if (mysql.client_flag & CLIENT_PROGRESS)
|
if (mysql.client_flag & CLIENT_PROGRESS_OBSOLETE)
|
||||||
mysql_options(&mysql, MYSQL_PROGRESS_CALLBACK, (void*) report_progress);
|
mysql_options(&mysql, MYSQL_PROGRESS_CALLBACK, (void*) report_progress);
|
||||||
#else
|
#else
|
||||||
mysql.reconnect= 1;
|
mysql.reconnect= 1;
|
||||||
|
@ -184,7 +184,8 @@ static const char *load_default_groups[]=
|
|||||||
static void free_used_memory(void)
|
static void free_used_memory(void)
|
||||||
{
|
{
|
||||||
/* Free memory allocated by 'load_defaults' */
|
/* Free memory allocated by 'load_defaults' */
|
||||||
free_defaults(defaults_argv);
|
if (defaults_argv)
|
||||||
|
free_defaults(defaults_argv);
|
||||||
|
|
||||||
dynstr_free(&ds_args);
|
dynstr_free(&ds_args);
|
||||||
dynstr_free(&conn_args);
|
dynstr_free(&conn_args);
|
||||||
@ -657,7 +658,7 @@ static int get_upgrade_info_file_name(char* name)
|
|||||||
/*
|
/*
|
||||||
Read the content of mysql_upgrade_info file and
|
Read the content of mysql_upgrade_info file and
|
||||||
compare the version number form file against
|
compare the version number form file against
|
||||||
version number wich mysql_upgrade was compiled for
|
version number which mysql_upgrade was compiled for
|
||||||
|
|
||||||
NOTE
|
NOTE
|
||||||
This is an optimization to avoid running mysql_upgrade
|
This is an optimization to avoid running mysql_upgrade
|
||||||
@ -1110,7 +1111,6 @@ int main(int argc, char **argv)
|
|||||||
if (opt_systables_only && !opt_silent)
|
if (opt_systables_only && !opt_silent)
|
||||||
printf("The --upgrade-system-tables option was used, user tables won't be touched.\n");
|
printf("The --upgrade-system-tables option was used, user tables won't be touched.\n");
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Read the mysql_upgrade_info file to check if mysql_upgrade
|
Read the mysql_upgrade_info file to check if mysql_upgrade
|
||||||
already has been run for this installation of MySQL
|
already has been run for this installation of MySQL
|
||||||
|
@ -73,6 +73,8 @@ ulong opt_binlog_rows_event_max_size;
|
|||||||
uint test_flags = 0;
|
uint test_flags = 0;
|
||||||
static uint opt_protocol= 0;
|
static uint opt_protocol= 0;
|
||||||
static FILE *result_file;
|
static FILE *result_file;
|
||||||
|
static char *result_file_name= 0;
|
||||||
|
static const char *output_prefix= "";
|
||||||
|
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
static const char* default_dbug_option = "d:t:o,/tmp/mysqlbinlog.trace";
|
static const char* default_dbug_option = "d:t:o,/tmp/mysqlbinlog.trace";
|
||||||
@ -96,6 +98,8 @@ static char* database= 0;
|
|||||||
static my_bool force_opt= 0, short_form= 0, remote_opt= 0;
|
static my_bool force_opt= 0, short_form= 0, remote_opt= 0;
|
||||||
static my_bool debug_info_flag, debug_check_flag;
|
static my_bool debug_info_flag, debug_check_flag;
|
||||||
static my_bool force_if_open_opt= 1;
|
static my_bool force_if_open_opt= 1;
|
||||||
|
static my_bool opt_raw_mode= 0, opt_stop_never= 0;
|
||||||
|
static ulong opt_stop_never_slave_server_id= 0;
|
||||||
static my_bool opt_verify_binlog_checksum= 1;
|
static my_bool opt_verify_binlog_checksum= 1;
|
||||||
static ulonglong offset = 0;
|
static ulonglong offset = 0;
|
||||||
static char* host = 0;
|
static char* host = 0;
|
||||||
@ -120,7 +124,6 @@ static ulonglong start_position, stop_position;
|
|||||||
static char *start_datetime_str, *stop_datetime_str;
|
static char *start_datetime_str, *stop_datetime_str;
|
||||||
static my_time_t start_datetime= 0, stop_datetime= MY_TIME_T_MAX;
|
static my_time_t start_datetime= 0, stop_datetime= MY_TIME_T_MAX;
|
||||||
static ulonglong rec_count= 0;
|
static ulonglong rec_count= 0;
|
||||||
static short binlog_flags = 0;
|
|
||||||
static MYSQL* mysql = NULL;
|
static MYSQL* mysql = NULL;
|
||||||
static const char* dirname_for_local_load= 0;
|
static const char* dirname_for_local_load= 0;
|
||||||
static bool opt_skip_annotate_row_events= 0;
|
static bool opt_skip_annotate_row_events= 0;
|
||||||
@ -142,7 +145,9 @@ enum Exit_status {
|
|||||||
/** An error occurred and execution should stop. */
|
/** An error occurred and execution should stop. */
|
||||||
ERROR_STOP,
|
ERROR_STOP,
|
||||||
/** No error occurred but execution should stop. */
|
/** No error occurred but execution should stop. */
|
||||||
OK_STOP
|
OK_STOP,
|
||||||
|
/** No error occurred - end of file reached. */
|
||||||
|
OK_EOF,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1368,8 +1373,14 @@ static struct my_option my_options[] =
|
|||||||
{"read-from-remote-server", 'R', "Read binary logs from a MySQL server.",
|
{"read-from-remote-server", 'R', "Read binary logs from a MySQL server.",
|
||||||
&remote_opt, &remote_opt, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
&remote_opt, &remote_opt, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
||||||
0, 0},
|
0, 0},
|
||||||
{"result-file", 'r', "Direct output to a given file.", 0, 0, 0, GET_STR,
|
{"raw", 0, "Requires -R. Output raw binlog data instead of SQL "
|
||||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
"statements. Output files named after server logs.",
|
||||||
|
&opt_raw_mode, &opt_raw_mode, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
||||||
|
0, 0},
|
||||||
|
{"result-file", 'r', "Direct output to a given file. With --raw this is a "
|
||||||
|
"prefix for the file names.",
|
||||||
|
&result_file_name, &result_file_name, 0, GET_STR, REQUIRED_ARG,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
{"server-id", 0,
|
{"server-id", 0,
|
||||||
"Extract only binlog entries created by the server having the given id.",
|
"Extract only binlog entries created by the server having the given id.",
|
||||||
&server_id, &server_id, 0, GET_ULONG,
|
&server_id, &server_id, 0, GET_ULONG,
|
||||||
@ -1418,6 +1429,14 @@ static struct my_option my_options[] =
|
|||||||
"(you should probably use quotes for your shell to set it properly).",
|
"(you should probably use quotes for your shell to set it properly).",
|
||||||
&stop_datetime_str, &stop_datetime_str,
|
&stop_datetime_str, &stop_datetime_str,
|
||||||
0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"stop-never", 0, "Wait for more data from the server "
|
||||||
|
"instead of stopping at the end of the last log. Implies --to-last-log.",
|
||||||
|
&opt_stop_never, &opt_stop_never, 0,
|
||||||
|
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"stop-never-slave-server-id", 0,
|
||||||
|
"The slave server_id used for --read-from-remote-server --stop-never.",
|
||||||
|
&opt_stop_never_slave_server_id, &opt_stop_never_slave_server_id, 0,
|
||||||
|
GET_ULONG, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"stop-position", OPT_STOP_POSITION,
|
{"stop-position", OPT_STOP_POSITION,
|
||||||
"Stop reading the binlog at position N. Applies to the last binlog "
|
"Stop reading the binlog at position N. Applies to the last binlog "
|
||||||
"passed on the command line.",
|
"passed on the command line.",
|
||||||
@ -1620,10 +1639,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
else
|
else
|
||||||
tty_password=1;
|
tty_password=1;
|
||||||
break;
|
break;
|
||||||
case 'r':
|
|
||||||
if (!(result_file = my_fopen(argument, O_WRONLY | O_BINARY, MYF(MY_WME))))
|
|
||||||
exit(1);
|
|
||||||
break;
|
|
||||||
case 'R':
|
case 'R':
|
||||||
remote_opt= 1;
|
remote_opt= 1;
|
||||||
break;
|
break;
|
||||||
@ -1719,7 +1734,6 @@ static int parse_args(int *argc, char*** argv)
|
|||||||
{
|
{
|
||||||
int ho_error;
|
int ho_error;
|
||||||
|
|
||||||
result_file = stdout;
|
|
||||||
if ((ho_error=handle_options(argc, argv, my_options, get_one_option)))
|
if ((ho_error=handle_options(argc, argv, my_options, get_one_option)))
|
||||||
exit(ho_error);
|
exit(ho_error);
|
||||||
if (debug_info_flag)
|
if (debug_info_flag)
|
||||||
@ -1809,7 +1823,8 @@ static Exit_status dump_log_entries(const char* logname)
|
|||||||
Set safe delimiter, to dump things
|
Set safe delimiter, to dump things
|
||||||
like CREATE PROCEDURE safely
|
like CREATE PROCEDURE safely
|
||||||
*/
|
*/
|
||||||
fprintf(result_file, "DELIMITER /*!*/;\n");
|
if (!opt_raw_mode)
|
||||||
|
fprintf(result_file, "DELIMITER /*!*/;\n");
|
||||||
strmov(print_event_info.delimiter, "/*!*/;");
|
strmov(print_event_info.delimiter, "/*!*/;");
|
||||||
|
|
||||||
print_event_info.verbose= short_form ? 0 : verbose;
|
print_event_info.verbose= short_form ? 0 : verbose;
|
||||||
@ -1818,7 +1833,8 @@ static Exit_status dump_log_entries(const char* logname)
|
|||||||
dump_local_log_entries(&print_event_info, logname));
|
dump_local_log_entries(&print_event_info, logname));
|
||||||
|
|
||||||
/* Set delimiter back to semicolon */
|
/* Set delimiter back to semicolon */
|
||||||
fprintf(result_file, "DELIMITER ;\n");
|
if (!opt_raw_mode)
|
||||||
|
fprintf(result_file, "DELIMITER ;\n");
|
||||||
strmov(print_event_info.delimiter, ";");
|
strmov(print_event_info.delimiter, ";");
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -1924,6 +1940,247 @@ err:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static Exit_status handle_event_text_mode(PRINT_EVENT_INFO *print_event_info,
|
||||||
|
ulong *len,
|
||||||
|
const char* logname,
|
||||||
|
uint logname_len, my_off_t old_off)
|
||||||
|
{
|
||||||
|
const char *error_msg;
|
||||||
|
Log_event *ev;
|
||||||
|
NET *net= &mysql->net;
|
||||||
|
DBUG_ENTER("handle_event_text_mode");
|
||||||
|
|
||||||
|
if (net->read_pos[5] == ANNOTATE_ROWS_EVENT)
|
||||||
|
{
|
||||||
|
if (!(ev= read_remote_annotate_event(net->read_pos + 1, *len - 1,
|
||||||
|
&error_msg)))
|
||||||
|
{
|
||||||
|
error("Could not construct annotate event object: %s", error_msg);
|
||||||
|
DBUG_RETURN(ERROR_STOP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!(ev= Log_event::read_log_event((const char*) net->read_pos + 1 ,
|
||||||
|
*len - 1, &error_msg,
|
||||||
|
glob_description_event,
|
||||||
|
opt_verify_binlog_checksum)))
|
||||||
|
{
|
||||||
|
error("Could not construct log event object: %s", error_msg);
|
||||||
|
DBUG_RETURN(ERROR_STOP);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
If reading from a remote host, ensure the temp_buf for the
|
||||||
|
Log_event class is pointing to the incoming stream.
|
||||||
|
*/
|
||||||
|
ev->register_temp_buf((char *) net->read_pos + 1, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
Log_event_type type= ev->get_type_code();
|
||||||
|
if (glob_description_event->binlog_version >= 3 ||
|
||||||
|
(type != LOAD_EVENT && type != CREATE_FILE_EVENT))
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
If this is a Rotate event, maybe it's the end of the requested binlog;
|
||||||
|
in this case we are done (stop transfer).
|
||||||
|
This is suitable for binlogs, not relay logs (but for now we don't read
|
||||||
|
relay logs remotely because the server is not able to do that). If one
|
||||||
|
day we read relay logs remotely, then we will have a problem with the
|
||||||
|
detection below: relay logs contain Rotate events which are about the
|
||||||
|
binlogs, so which would trigger the end-detection below.
|
||||||
|
*/
|
||||||
|
if (type == ROTATE_EVENT)
|
||||||
|
{
|
||||||
|
Rotate_log_event *rev= (Rotate_log_event *)ev;
|
||||||
|
/*
|
||||||
|
If this is a fake Rotate event, and not about our log, we can stop
|
||||||
|
transfer. If this a real Rotate event (so it's not about our log,
|
||||||
|
it's in our log describing the next log), we print it (because it's
|
||||||
|
part of our log) and then we will stop when we receive the fake one
|
||||||
|
soon.
|
||||||
|
*/
|
||||||
|
if (rev->when == 0)
|
||||||
|
{
|
||||||
|
*len= 1; // fake Rotate, so don't increment old_off
|
||||||
|
if (!to_last_remote_log)
|
||||||
|
{
|
||||||
|
if ((rev->ident_len != logname_len) ||
|
||||||
|
memcmp(rev->new_log_ident, logname, logname_len))
|
||||||
|
{
|
||||||
|
delete ev;
|
||||||
|
DBUG_RETURN(OK_EOF);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Otherwise, this is a fake Rotate for our log, at the very
|
||||||
|
beginning for sure. Skip it, because it was not in the original
|
||||||
|
log. If we are running with to_last_remote_log, we print it,
|
||||||
|
because it serves as a useful marker between binlogs then.
|
||||||
|
*/
|
||||||
|
delete ev;
|
||||||
|
DBUG_RETURN(OK_CONTINUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (type == FORMAT_DESCRIPTION_EVENT)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
This could be an fake Format_description_log_event that server
|
||||||
|
(5.0+) automatically sends to a slave on connect, before sending
|
||||||
|
a first event at the requested position. If this is the case,
|
||||||
|
don't increment old_off. Real Format_description_log_event always
|
||||||
|
starts from BIN_LOG_HEADER_SIZE position.
|
||||||
|
*/
|
||||||
|
if (old_off != BIN_LOG_HEADER_SIZE)
|
||||||
|
*len= 1; // fake event, don't increment old_off
|
||||||
|
}
|
||||||
|
Exit_status retval= process_event(print_event_info, ev, old_off, logname);
|
||||||
|
if (retval != OK_CONTINUE)
|
||||||
|
DBUG_RETURN(retval);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Load_log_event *le= (Load_log_event*)ev;
|
||||||
|
const char *old_fname= le->fname;
|
||||||
|
uint old_len= le->fname_len;
|
||||||
|
File file;
|
||||||
|
Exit_status retval;
|
||||||
|
char fname[FN_REFLEN+1];
|
||||||
|
|
||||||
|
if ((file= load_processor.prepare_new_file_for_old_format(le,fname)) < 0)
|
||||||
|
{
|
||||||
|
DBUG_RETURN(ERROR_STOP);
|
||||||
|
}
|
||||||
|
|
||||||
|
retval= process_event(print_event_info, ev, old_off, logname);
|
||||||
|
if (retval != OK_CONTINUE)
|
||||||
|
{
|
||||||
|
my_close(file,MYF(MY_WME));
|
||||||
|
DBUG_RETURN(retval);
|
||||||
|
}
|
||||||
|
retval= load_processor.load_old_format_file(net,old_fname,old_len,file);
|
||||||
|
my_close(file,MYF(MY_WME));
|
||||||
|
if (retval != OK_CONTINUE)
|
||||||
|
DBUG_RETURN(retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
DBUG_RETURN(OK_CONTINUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static char out_file_name[FN_REFLEN + 1];
|
||||||
|
|
||||||
|
static Exit_status handle_event_raw_mode(PRINT_EVENT_INFO *print_event_info,
|
||||||
|
ulong *len,
|
||||||
|
const char* logname, uint logname_len)
|
||||||
|
{
|
||||||
|
const char *error_msg;
|
||||||
|
const unsigned char *read_pos= mysql->net.read_pos + 1;
|
||||||
|
Log_event_type type;
|
||||||
|
DBUG_ENTER("handle_event_raw_mode");
|
||||||
|
DBUG_ASSERT(opt_raw_mode && remote_opt);
|
||||||
|
|
||||||
|
type= (Log_event_type) read_pos[EVENT_TYPE_OFFSET];
|
||||||
|
|
||||||
|
if (type == HEARTBEAT_LOG_EVENT)
|
||||||
|
DBUG_RETURN(OK_CONTINUE);
|
||||||
|
|
||||||
|
if (type == ROTATE_EVENT || type == FORMAT_DESCRIPTION_EVENT)
|
||||||
|
{
|
||||||
|
Log_event *ev;
|
||||||
|
if (!(ev= Log_event::read_log_event((const char*) read_pos ,
|
||||||
|
*len - 1, &error_msg,
|
||||||
|
glob_description_event,
|
||||||
|
opt_verify_binlog_checksum)))
|
||||||
|
{
|
||||||
|
error("Could not construct %s event object: %s",
|
||||||
|
type == ROTATE_EVENT ? "rotate" : "format description", error_msg);
|
||||||
|
DBUG_RETURN(ERROR_STOP);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
If reading from a remote host, ensure the temp_buf for the
|
||||||
|
Log_event class is pointing to the incoming stream.
|
||||||
|
*/
|
||||||
|
ev->register_temp_buf((char *) read_pos, FALSE);
|
||||||
|
|
||||||
|
if (type == ROTATE_EVENT)
|
||||||
|
{
|
||||||
|
Exit_status ret_val= OK_CONTINUE;
|
||||||
|
Rotate_log_event *rev= (Rotate_log_event *)ev;
|
||||||
|
char *pe= strmake(out_file_name, output_prefix, sizeof(out_file_name)-1);
|
||||||
|
strmake(pe, rev->new_log_ident, sizeof(out_file_name) - (pe-out_file_name));
|
||||||
|
|
||||||
|
/*
|
||||||
|
If this is a fake Rotate event, and not about our log, we can stop
|
||||||
|
transfer. If this a real Rotate event (so it's not about our log,
|
||||||
|
it's in our log describing the next log), we print it (because it's
|
||||||
|
part of our log) and then we will stop when we receive the fake one
|
||||||
|
soon.
|
||||||
|
*/
|
||||||
|
if (rev->when == 0)
|
||||||
|
{
|
||||||
|
if (!to_last_remote_log)
|
||||||
|
{
|
||||||
|
if ((rev->ident_len != logname_len) ||
|
||||||
|
memcmp(rev->new_log_ident, logname, logname_len))
|
||||||
|
{
|
||||||
|
ret_val= OK_EOF;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Otherwise, this is a fake Rotate for our log, at the very
|
||||||
|
beginning for sure. Skip it, because it was not in the original
|
||||||
|
log. If we are running with to_last_remote_log, we print it,
|
||||||
|
because it serves as a useful marker between binlogs then.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
*len= 1; // fake Rotate, so don't increment old_off
|
||||||
|
ev->temp_buf= 0;
|
||||||
|
delete ev;
|
||||||
|
DBUG_RETURN(ret_val);
|
||||||
|
}
|
||||||
|
ev->temp_buf= 0;
|
||||||
|
delete ev;
|
||||||
|
}
|
||||||
|
else /* if (type == FORMAT_DESCRIPTION_EVENT) */
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(type == FORMAT_DESCRIPTION_EVENT);
|
||||||
|
|
||||||
|
if (result_file)
|
||||||
|
my_fclose(result_file, MYF(0));
|
||||||
|
|
||||||
|
if (!(result_file= my_fopen(out_file_name,
|
||||||
|
O_WRONLY | O_BINARY, MYF(MY_WME))))
|
||||||
|
{
|
||||||
|
error("Could not create output log file: %s", out_file_name);
|
||||||
|
DBUG_RETURN(ERROR_STOP);
|
||||||
|
}
|
||||||
|
/* TODO - add write error simulation here */
|
||||||
|
|
||||||
|
if (my_fwrite(result_file, (const uchar *) BINLOG_MAGIC,
|
||||||
|
BIN_LOG_HEADER_SIZE, MYF(MY_NABP)))
|
||||||
|
{
|
||||||
|
error("Could not write into log file '%s'", out_file_name);
|
||||||
|
DBUG_RETURN(ERROR_STOP);
|
||||||
|
}
|
||||||
|
|
||||||
|
delete glob_description_event;
|
||||||
|
glob_description_event= (Format_description_log_event*) ev;
|
||||||
|
print_event_info->common_header_len=
|
||||||
|
glob_description_event->common_header_len;
|
||||||
|
ev->temp_buf= 0;
|
||||||
|
/* We do not want to delete the event here. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (my_fwrite(result_file, read_pos, *len - 1, MYF(MY_NABP)))
|
||||||
|
{
|
||||||
|
error("Could not write into log file '%s'", out_file_name);
|
||||||
|
DBUG_RETURN(ERROR_STOP);
|
||||||
|
}
|
||||||
|
|
||||||
|
DBUG_RETURN(OK_CONTINUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Requests binlog dump from a remote server and prints the events it
|
Requests binlog dump from a remote server and prints the events it
|
||||||
receives.
|
receives.
|
||||||
@ -1946,8 +2203,9 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
|
|||||||
uint logname_len;
|
uint logname_len;
|
||||||
NET* net;
|
NET* net;
|
||||||
my_off_t old_off= start_position_mot;
|
my_off_t old_off= start_position_mot;
|
||||||
char fname[FN_REFLEN+1];
|
|
||||||
Exit_status retval= OK_CONTINUE;
|
Exit_status retval= OK_CONTINUE;
|
||||||
|
short binlog_flags = 0;
|
||||||
|
ulong slave_id;
|
||||||
DBUG_ENTER("dump_remote_log_entries");
|
DBUG_ENTER("dump_remote_log_entries");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1970,6 +2228,9 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
|
|||||||
int4store(buf, (uint32)start_position);
|
int4store(buf, (uint32)start_position);
|
||||||
if (!opt_skip_annotate_row_events)
|
if (!opt_skip_annotate_row_events)
|
||||||
binlog_flags|= BINLOG_SEND_ANNOTATE_ROWS_EVENT;
|
binlog_flags|= BINLOG_SEND_ANNOTATE_ROWS_EVENT;
|
||||||
|
if (!opt_stop_never)
|
||||||
|
binlog_flags|= BINLOG_DUMP_NON_BLOCK;
|
||||||
|
|
||||||
int2store(buf + BIN_LOG_HEADER_SIZE, binlog_flags);
|
int2store(buf + BIN_LOG_HEADER_SIZE, binlog_flags);
|
||||||
|
|
||||||
size_t tlen = strlen(logname);
|
size_t tlen = strlen(logname);
|
||||||
@ -1979,7 +2240,15 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
|
|||||||
DBUG_RETURN(ERROR_STOP);
|
DBUG_RETURN(ERROR_STOP);
|
||||||
}
|
}
|
||||||
logname_len = (uint) tlen;
|
logname_len = (uint) tlen;
|
||||||
int4store(buf + 6, 0);
|
if (opt_stop_never)
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(to_last_remote_log);
|
||||||
|
slave_id= (opt_stop_never_slave_server_id == 0) ?
|
||||||
|
1 : opt_stop_never_slave_server_id;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
slave_id= 0;
|
||||||
|
int4store(buf + 6, slave_id);
|
||||||
memcpy(buf + 10, logname, logname_len);
|
memcpy(buf + 10, logname, logname_len);
|
||||||
if (simple_command(mysql, COM_BINLOG_DUMP, buf, logname_len + 10, 1))
|
if (simple_command(mysql, COM_BINLOG_DUMP, buf, logname_len + 10, 1))
|
||||||
{
|
{
|
||||||
@ -1989,9 +2258,6 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
|
|||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
const char *error_msg;
|
|
||||||
Log_event *ev;
|
|
||||||
|
|
||||||
len= cli_safe_read(mysql);
|
len= cli_safe_read(mysql);
|
||||||
if (len == packet_error)
|
if (len == packet_error)
|
||||||
{
|
{
|
||||||
@ -2002,117 +2268,23 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
|
|||||||
break; // end of data
|
break; // end of data
|
||||||
DBUG_PRINT("info",( "len: %lu net->read_pos[5]: %d\n",
|
DBUG_PRINT("info",( "len: %lu net->read_pos[5]: %d\n",
|
||||||
len, net->read_pos[5]));
|
len, net->read_pos[5]));
|
||||||
if (net->read_pos[5] == ANNOTATE_ROWS_EVENT)
|
if (opt_raw_mode)
|
||||||
{
|
{
|
||||||
if (!(ev= read_remote_annotate_event(net->read_pos + 1, len - 1,
|
retval= handle_event_raw_mode(print_event_info, &len,
|
||||||
&error_msg)))
|
logname, logname_len);
|
||||||
{
|
|
||||||
error("Could not construct annotate event object: %s", error_msg);
|
|
||||||
DBUG_RETURN(ERROR_STOP);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!(ev= Log_event::read_log_event((const char*) net->read_pos + 1 ,
|
retval= handle_event_text_mode(print_event_info, &len,
|
||||||
len - 1, &error_msg,
|
logname, logname_len, old_off);
|
||||||
glob_description_event,
|
|
||||||
opt_verify_binlog_checksum)))
|
|
||||||
{
|
|
||||||
error("Could not construct log event object: %s", error_msg);
|
|
||||||
DBUG_RETURN(ERROR_STOP);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
If reading from a remote host, ensure the temp_buf for the
|
|
||||||
Log_event class is pointing to the incoming stream.
|
|
||||||
*/
|
|
||||||
ev->register_temp_buf((char *) net->read_pos + 1, FALSE);
|
|
||||||
}
|
}
|
||||||
|
if (retval != OK_CONTINUE)
|
||||||
Log_event_type type= ev->get_type_code();
|
|
||||||
if (glob_description_event->binlog_version >= 3 ||
|
|
||||||
(type != LOAD_EVENT && type != CREATE_FILE_EVENT))
|
|
||||||
{
|
{
|
||||||
/*
|
if (retval == OK_EOF)
|
||||||
If this is a Rotate event, maybe it's the end of the requested binlog;
|
break;
|
||||||
in this case we are done (stop transfer).
|
DBUG_RETURN(retval);
|
||||||
This is suitable for binlogs, not relay logs (but for now we don't read
|
|
||||||
relay logs remotely because the server is not able to do that). If one
|
|
||||||
day we read relay logs remotely, then we will have a problem with the
|
|
||||||
detection below: relay logs contain Rotate events which are about the
|
|
||||||
binlogs, so which would trigger the end-detection below.
|
|
||||||
*/
|
|
||||||
if (type == ROTATE_EVENT)
|
|
||||||
{
|
|
||||||
Rotate_log_event *rev= (Rotate_log_event *)ev;
|
|
||||||
/*
|
|
||||||
If this is a fake Rotate event, and not about our log, we can stop
|
|
||||||
transfer. If this a real Rotate event (so it's not about our log,
|
|
||||||
it's in our log describing the next log), we print it (because it's
|
|
||||||
part of our log) and then we will stop when we receive the fake one
|
|
||||||
soon.
|
|
||||||
*/
|
|
||||||
if (rev->when == 0)
|
|
||||||
{
|
|
||||||
if (!to_last_remote_log)
|
|
||||||
{
|
|
||||||
if ((rev->ident_len != logname_len) ||
|
|
||||||
memcmp(rev->new_log_ident, logname, logname_len))
|
|
||||||
{
|
|
||||||
delete ev;
|
|
||||||
DBUG_RETURN(OK_CONTINUE);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
Otherwise, this is a fake Rotate for our log, at the very
|
|
||||||
beginning for sure. Skip it, because it was not in the original
|
|
||||||
log. If we are running with to_last_remote_log, we print it,
|
|
||||||
because it serves as a useful marker between binlogs then.
|
|
||||||
*/
|
|
||||||
delete ev;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
len= 1; // fake Rotate, so don't increment old_off
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (type == FORMAT_DESCRIPTION_EVENT)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
This could be an fake Format_description_log_event that server
|
|
||||||
(5.0+) automatically sends to a slave on connect, before sending
|
|
||||||
a first event at the requested position. If this is the case,
|
|
||||||
don't increment old_off. Real Format_description_log_event always
|
|
||||||
starts from BIN_LOG_HEADER_SIZE position.
|
|
||||||
*/
|
|
||||||
if (old_off != BIN_LOG_HEADER_SIZE)
|
|
||||||
len= 1; // fake event, don't increment old_off
|
|
||||||
}
|
|
||||||
Exit_status retval= process_event(print_event_info, ev, old_off, logname);
|
|
||||||
if (retval != OK_CONTINUE)
|
|
||||||
DBUG_RETURN(retval);
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
Load_log_event *le= (Load_log_event*)ev;
|
|
||||||
const char *old_fname= le->fname;
|
|
||||||
uint old_len= le->fname_len;
|
|
||||||
File file;
|
|
||||||
Exit_status retval;
|
|
||||||
|
|
||||||
if ((file= load_processor.prepare_new_file_for_old_format(le,fname)) < 0)
|
|
||||||
{
|
|
||||||
DBUG_RETURN(ERROR_STOP);
|
|
||||||
}
|
|
||||||
|
|
||||||
retval= process_event(print_event_info, ev, old_off, logname);
|
|
||||||
if (retval != OK_CONTINUE)
|
|
||||||
{
|
|
||||||
my_close(file,MYF(MY_WME));
|
|
||||||
DBUG_RETURN(retval);
|
|
||||||
}
|
|
||||||
retval= load_processor.load_old_format_file(net,old_fname,old_len,file);
|
|
||||||
my_close(file,MYF(MY_WME));
|
|
||||||
if (retval != OK_CONTINUE)
|
|
||||||
DBUG_RETURN(retval);
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
Let's adjust offset for remote log as for local log to produce
|
Let's adjust offset for remote log as for local log to produce
|
||||||
similar text and to have --stop-position to work identically.
|
similar text and to have --stop-position to work identically.
|
||||||
@ -2449,6 +2621,7 @@ end:
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
char **defaults_argv;
|
char **defaults_argv;
|
||||||
@ -2495,6 +2668,43 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
my_set_max_open_files(open_files_limit);
|
my_set_max_open_files(open_files_limit);
|
||||||
|
|
||||||
|
if (opt_stop_never)
|
||||||
|
to_last_remote_log= TRUE;
|
||||||
|
|
||||||
|
if (opt_raw_mode)
|
||||||
|
{
|
||||||
|
if (!remote_opt)
|
||||||
|
{
|
||||||
|
error("The --raw mode only works with --read-from-remote-server");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (one_database)
|
||||||
|
warning("The --database option is ignored in raw mode");
|
||||||
|
|
||||||
|
if (stop_position != (ulonglong)(~(my_off_t)0))
|
||||||
|
warning("The --stop-position option is ignored in raw mode");
|
||||||
|
|
||||||
|
if (stop_datetime != MY_TIME_T_MAX)
|
||||||
|
warning("The --stop-datetime option is ignored in raw mode");
|
||||||
|
result_file= 0;
|
||||||
|
if (result_file_name)
|
||||||
|
output_prefix= result_file_name;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (result_file_name)
|
||||||
|
{
|
||||||
|
if (!(result_file= my_fopen(result_file_name,
|
||||||
|
O_WRONLY | O_BINARY, MYF(MY_WME))))
|
||||||
|
{
|
||||||
|
error("Could not create log file '%s'", result_file_name);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
result_file= stdout;
|
||||||
|
}
|
||||||
|
|
||||||
MY_TMPDIR tmpdir;
|
MY_TMPDIR tmpdir;
|
||||||
tmpdir.list= 0;
|
tmpdir.list= 0;
|
||||||
if (!dirname_for_local_load)
|
if (!dirname_for_local_load)
|
||||||
@ -2517,29 +2727,32 @@ int main(int argc, char** argv)
|
|||||||
else
|
else
|
||||||
load_processor.init_by_cur_dir();
|
load_processor.init_by_cur_dir();
|
||||||
|
|
||||||
fprintf(result_file, "/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;\n");
|
if (!opt_raw_mode)
|
||||||
|
{
|
||||||
|
fprintf(result_file, "/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;\n");
|
||||||
|
|
||||||
fprintf(result_file,
|
|
||||||
"/*!40019 SET @@session.max_insert_delayed_threads=0*/;\n");
|
|
||||||
|
|
||||||
if (disable_log_bin)
|
|
||||||
fprintf(result_file,
|
fprintf(result_file,
|
||||||
"/*!32316 SET @OLD_SQL_LOG_BIN=@@SQL_LOG_BIN, SQL_LOG_BIN=0*/;\n");
|
"/*!40019 SET @@session.max_insert_delayed_threads=0*/;\n");
|
||||||
|
|
||||||
/*
|
if (disable_log_bin)
|
||||||
In mysqlbinlog|mysql, don't want mysql to be disconnected after each
|
fprintf(result_file,
|
||||||
transaction (which would be the case with GLOBAL.COMPLETION_TYPE==2).
|
"/*!32316 SET @OLD_SQL_LOG_BIN=@@SQL_LOG_BIN, SQL_LOG_BIN=0*/;\n");
|
||||||
*/
|
|
||||||
fprintf(result_file,
|
|
||||||
"/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,"
|
|
||||||
"COMPLETION_TYPE=0*/;\n");
|
|
||||||
|
|
||||||
if (charset)
|
/*
|
||||||
|
In mysqlbinlog|mysql, don't want mysql to be disconnected after each
|
||||||
|
transaction (which would be the case with GLOBAL.COMPLETION_TYPE==2).
|
||||||
|
*/
|
||||||
fprintf(result_file,
|
fprintf(result_file,
|
||||||
"\n/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;"
|
"/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,"
|
||||||
"\n/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;"
|
"COMPLETION_TYPE=0*/;\n");
|
||||||
"\n/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;"
|
|
||||||
"\n/*!40101 SET NAMES %s */;\n", charset);
|
if (charset)
|
||||||
|
fprintf(result_file,
|
||||||
|
"\n/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;"
|
||||||
|
"\n/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;"
|
||||||
|
"\n/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;"
|
||||||
|
"\n/*!40101 SET NAMES %s */;\n", charset);
|
||||||
|
}
|
||||||
|
|
||||||
for (save_stop_position= stop_position, stop_position= ~(my_off_t)0 ;
|
for (save_stop_position= stop_position, stop_position= ~(my_off_t)0 ;
|
||||||
(--argc >= 0) ; )
|
(--argc >= 0) ; )
|
||||||
@ -2553,27 +2766,30 @@ int main(int argc, char** argv)
|
|||||||
start_position= BIN_LOG_HEADER_SIZE;
|
start_position= BIN_LOG_HEADER_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (!opt_raw_mode)
|
||||||
Issue a ROLLBACK in case the last printed binlog was crashed and had half
|
{
|
||||||
of transaction.
|
/*
|
||||||
*/
|
Issue a ROLLBACK in case the last printed binlog was crashed and had half
|
||||||
fprintf(result_file,
|
of transaction.
|
||||||
"# End of log file\nROLLBACK /* added by mysqlbinlog */;\n"
|
*/
|
||||||
"/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;\n");
|
|
||||||
if (disable_log_bin)
|
|
||||||
fprintf(result_file, "/*!32316 SET SQL_LOG_BIN=@OLD_SQL_LOG_BIN*/;\n");
|
|
||||||
|
|
||||||
if (charset)
|
|
||||||
fprintf(result_file,
|
fprintf(result_file,
|
||||||
"/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;\n"
|
"# End of log file\nROLLBACK /* added by mysqlbinlog */;\n"
|
||||||
"/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;\n"
|
"/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;\n");
|
||||||
"/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;\n");
|
if (disable_log_bin)
|
||||||
|
fprintf(result_file, "/*!32316 SET SQL_LOG_BIN=@OLD_SQL_LOG_BIN*/;\n");
|
||||||
|
|
||||||
fprintf(result_file, "/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;\n");
|
if (charset)
|
||||||
|
fprintf(result_file,
|
||||||
|
"/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;\n"
|
||||||
|
"/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;\n"
|
||||||
|
"/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;\n");
|
||||||
|
|
||||||
|
fprintf(result_file, "/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;\n");
|
||||||
|
}
|
||||||
|
|
||||||
if (tmpdir.list)
|
if (tmpdir.list)
|
||||||
free_tmpdir(&tmpdir);
|
free_tmpdir(&tmpdir);
|
||||||
if (result_file != stdout)
|
if (result_file && result_file != stdout)
|
||||||
my_fclose(result_file, MYF(0));
|
my_fclose(result_file, MYF(0));
|
||||||
cleanup();
|
cleanup();
|
||||||
free_annotate_event();
|
free_annotate_event();
|
||||||
|
@ -277,8 +277,8 @@ static void usage(void)
|
|||||||
printf("Usage: %s [OPTIONS] database [tables]\n", my_progname);
|
printf("Usage: %s [OPTIONS] database [tables]\n", my_progname);
|
||||||
printf("OR %s [OPTIONS] --databases DB1 [DB2 DB3...]\n",
|
printf("OR %s [OPTIONS] --databases DB1 [DB2 DB3...]\n",
|
||||||
my_progname);
|
my_progname);
|
||||||
puts("Please consult the MariaDB/MySQL knowledgebase at");
|
puts("Please consult the MariaDB Knowledge Base at");
|
||||||
puts("http://kb.askmonty.org/v/mysqlcheck for latest information about");
|
puts("https://mariadb.com/kb/en/mysqlcheck for latest information about");
|
||||||
puts("this program.");
|
puts("this program.");
|
||||||
print_defaults("my", load_default_groups);
|
print_defaults("my", load_default_groups);
|
||||||
puts("");
|
puts("");
|
||||||
@ -523,7 +523,6 @@ static int is_view(const char *table)
|
|||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to %s\n", query);
|
fprintf(stderr, "Failed to %s\n", query);
|
||||||
fprintf(stderr, "Error: %s\n", mysql_error(sock));
|
fprintf(stderr, "Error: %s\n", mysql_error(sock));
|
||||||
my_free(query);
|
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
}
|
}
|
||||||
res= mysql_store_result(sock);
|
res= mysql_store_result(sock);
|
||||||
|
@ -1104,7 +1104,7 @@ void do_eval(DYNAMIC_STRING *query_eval, const char *query,
|
|||||||
Run query and dump the result to stderr in vertical format
|
Run query and dump the result to stderr in vertical format
|
||||||
|
|
||||||
NOTE! This function should be safe to call when an error
|
NOTE! This function should be safe to call when an error
|
||||||
has occured and thus any further errors will be ignored(although logged)
|
has occurred and thus any further errors will be ignored (although logged)
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
show_query
|
show_query
|
||||||
@ -1170,7 +1170,7 @@ static void show_query(MYSQL* mysql, const char* query)
|
|||||||
is added to the warning stack, only print @@warning_count-1 warnings.
|
is added to the warning stack, only print @@warning_count-1 warnings.
|
||||||
|
|
||||||
NOTE! This function should be safe to call when an error
|
NOTE! This function should be safe to call when an error
|
||||||
has occured and this any further errors will be ignored(although logged)
|
has occurred and this any further errors will be ignored(although logged)
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
show_warnings_before_error
|
show_warnings_before_error
|
||||||
@ -4699,7 +4699,7 @@ void do_sync_with_master2(struct st_command *command, long offset,
|
|||||||
master_pos_wait returned NULL. This indicates that
|
master_pos_wait returned NULL. This indicates that
|
||||||
slave SQL thread is not started, the slave's master
|
slave SQL thread is not started, the slave's master
|
||||||
information is not initialized, the arguments are
|
information is not initialized, the arguments are
|
||||||
incorrect, or an error has occured
|
incorrect, or an error has occurred
|
||||||
*/
|
*/
|
||||||
die("%.*s failed: '%s' returned NULL " \
|
die("%.*s failed: '%s' returned NULL " \
|
||||||
"indicating slave SQL thread failure",
|
"indicating slave SQL thread failure",
|
||||||
@ -4977,12 +4977,13 @@ static int my_kill(int pid, int sig)
|
|||||||
{
|
{
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
HANDLE proc;
|
HANDLE proc;
|
||||||
if ((proc= OpenProcess(PROCESS_TERMINATE, FALSE, pid)) == NULL)
|
if ((proc= OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE, pid)) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
if (sig == 0)
|
if (sig == 0)
|
||||||
{
|
{
|
||||||
|
DWORD wait_result= WaitForSingleObject(proc, 0);
|
||||||
CloseHandle(proc);
|
CloseHandle(proc);
|
||||||
return 0;
|
return wait_result == WAIT_OBJECT_0?-1:0;
|
||||||
}
|
}
|
||||||
(void)TerminateProcess(proc, 201);
|
(void)TerminateProcess(proc, 201);
|
||||||
CloseHandle(proc);
|
CloseHandle(proc);
|
||||||
|
@ -94,6 +94,7 @@ ELSEIF(DEB)
|
|||||||
ELSE()
|
ELSE()
|
||||||
SET(WITH_SSL bundled CACHE STRING "")
|
SET(WITH_SSL bundled CACHE STRING "")
|
||||||
SET(WITH_ZLIB bundled CACHE STRING "")
|
SET(WITH_ZLIB bundled CACHE STRING "")
|
||||||
|
SET(WITH_JEMALLOC static CACHE STRING "")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(NOT COMPILATION_COMMENT)
|
IF(NOT COMPILATION_COMMENT)
|
||||||
|
@ -43,8 +43,8 @@ SET(CPACK_RPM_PACKAGE_DESCRIPTION "${CPACK_RPM_PACKAGE_SUMMARY}
|
|||||||
It is GPL v2 licensed, which means you can use the it free of charge under the
|
It is GPL v2 licensed, which means you can use the it free of charge under the
|
||||||
conditions of the GNU General Public License Version 2 (http://www.gnu.org/licenses/).
|
conditions of the GNU General Public License Version 2 (http://www.gnu.org/licenses/).
|
||||||
|
|
||||||
MariaDB documentation can be found at http://kb.askmonty.org/
|
MariaDB documentation can be found at https://mariadb.com/kb
|
||||||
MariaDB bug reports should be submitted through https://mariadb.atlassian.net/
|
MariaDB bug reports should be submitted through https://jira.mariadb.org
|
||||||
|
|
||||||
")
|
")
|
||||||
|
|
||||||
@ -78,14 +78,17 @@ SET(ignored
|
|||||||
"%ignore ${CMAKE_INSTALL_PREFIX}/bin"
|
"%ignore ${CMAKE_INSTALL_PREFIX}/bin"
|
||||||
"%ignore ${CMAKE_INSTALL_PREFIX}/include"
|
"%ignore ${CMAKE_INSTALL_PREFIX}/include"
|
||||||
"%ignore ${CMAKE_INSTALL_PREFIX}/lib"
|
"%ignore ${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
"%ignore ${CMAKE_INSTALL_PREFIX}/lib/systemd"
|
||||||
|
"%ignore ${CMAKE_INSTALL_PREFIX}/lib/systemd/system"
|
||||||
"%ignore ${CMAKE_INSTALL_PREFIX}/lib64"
|
"%ignore ${CMAKE_INSTALL_PREFIX}/lib64"
|
||||||
"%ignore ${CMAKE_INSTALL_PREFIX}/sbin"
|
"%ignore ${CMAKE_INSTALL_PREFIX}/sbin"
|
||||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share"
|
"%ignore ${CMAKE_INSTALL_PREFIX}/share"
|
||||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/aclocal"
|
"%ignore ${CMAKE_INSTALL_PREFIX}/share/aclocal"
|
||||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/doc"
|
"%ignore ${CMAKE_INSTALL_PREFIX}/share/doc"
|
||||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man"
|
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man"
|
||||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man1*"
|
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man1"
|
||||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man8*"
|
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man8"
|
||||||
|
"%ignore ${CMAKE_INSTALL_PREFIX}/share/pkgconfig"
|
||||||
)
|
)
|
||||||
|
|
||||||
SET(CPACK_RPM_server_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*")
|
SET(CPACK_RPM_server_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*")
|
||||||
@ -122,6 +125,7 @@ SETA(CPACK_RPM_server_PACKAGE_OBSOLETES
|
|||||||
"MySQL"
|
"MySQL"
|
||||||
"mysql-server"
|
"mysql-server"
|
||||||
"MySQL-server"
|
"MySQL-server"
|
||||||
|
"MariaDB-Galera-server"
|
||||||
"MySQL-OurDelta-server")
|
"MySQL-OurDelta-server")
|
||||||
SETA(CPACK_RPM_server_PACKAGE_PROVIDES
|
SETA(CPACK_RPM_server_PACKAGE_PROVIDES
|
||||||
"MariaDB"
|
"MariaDB"
|
||||||
@ -175,7 +179,7 @@ MACRO(ALTERNATIVE_NAME real alt)
|
|||||||
SET(p "CPACK_RPM_${real}_PACKAGE_PROVIDES")
|
SET(p "CPACK_RPM_${real}_PACKAGE_PROVIDES")
|
||||||
SET(${p} "${${p}} ${alt} = ${ver} ${alt}%{?_isa} = ${ver} config(${alt}) = ${ver}")
|
SET(${p} "${${p}} ${alt} = ${ver} ${alt}%{?_isa} = ${ver} config(${alt}) = ${ver}")
|
||||||
SET(o "CPACK_RPM_${real}_PACKAGE_OBSOLETES")
|
SET(o "CPACK_RPM_${real}_PACKAGE_OBSOLETES")
|
||||||
SET(${o} "${${o}} ${alt} ${alt}%{_isa}")
|
SET(${o} "${${o}} ${alt} ${alt}%{?_isa}")
|
||||||
ENDMACRO(ALTERNATIVE_NAME)
|
ENDMACRO(ALTERNATIVE_NAME)
|
||||||
|
|
||||||
ALTERNATIVE_NAME("devel" "mysql-devel")
|
ALTERNATIVE_NAME("devel" "mysql-devel")
|
||||||
|
@ -86,6 +86,9 @@ IF(ENABLE_DTRACE)
|
|||||||
${CMAKE_BINARY_DIR}/include/probes_mysql_dtrace.h
|
${CMAKE_BINARY_DIR}/include/probes_mysql_dtrace.h
|
||||||
${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.h
|
${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.h
|
||||||
)
|
)
|
||||||
|
ELSE()
|
||||||
|
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/probes_mysql_nodtrace.h.in
|
||||||
|
${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.h COPYONLY)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
FUNCTION(DTRACE_INSTRUMENT target)
|
FUNCTION(DTRACE_INSTRUMENT target)
|
||||||
|
@ -25,7 +25,7 @@ MACRO(EXTRACT_LINK_LIBRARIES target var)
|
|||||||
# Filter out "general", it is not a library, just CMake hint
|
# Filter out "general", it is not a library, just CMake hint
|
||||||
# Also, remove duplicates
|
# Also, remove duplicates
|
||||||
IF(NOT lib STREQUAL "general" AND NOT ${var} MATCHES "-l${lib} ")
|
IF(NOT lib STREQUAL "general" AND NOT ${var} MATCHES "-l${lib} ")
|
||||||
IF (lib MATCHES "^\\-l")
|
IF (lib MATCHES "^\\-")
|
||||||
SET(${var} "${${var}} ${lib} ")
|
SET(${var} "${${var}} ${lib} ")
|
||||||
ELSEIF(lib MATCHES "^/")
|
ELSEIF(lib MATCHES "^/")
|
||||||
IF (lib MATCHES "\\.(a|so([0-9.]*)|lib|dll|dylib)$")
|
IF (lib MATCHES "\\.(a|so([0-9.]*)|lib|dll|dylib)$")
|
||||||
|
@ -137,7 +137,7 @@ SET(INSTALL_SCRIPTDIR_RPM "bin")
|
|||||||
SET(INSTALL_SYSCONFDIR_RPM "/etc")
|
SET(INSTALL_SYSCONFDIR_RPM "/etc")
|
||||||
SET(INSTALL_SYSCONF2DIR_RPM "/etc/my.cnf.d")
|
SET(INSTALL_SYSCONF2DIR_RPM "/etc/my.cnf.d")
|
||||||
#
|
#
|
||||||
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
|
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
SET(INSTALL_LIBDIR_RPM "lib64")
|
SET(INSTALL_LIBDIR_RPM "lib64")
|
||||||
SET(INSTALL_PLUGINDIR_RPM "lib64/mysql/plugin")
|
SET(INSTALL_PLUGINDIR_RPM "lib64/mysql/plugin")
|
||||||
ELSE()
|
ELSE()
|
||||||
|
@ -44,11 +44,10 @@ FUNCTION (INSTALL_DEBUG_SYMBOLS)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
set(comp "")
|
set(comp "")
|
||||||
IF(ARG_COMPONENT STREQUAL "Server")
|
|
||||||
IF(target MATCHES "mysqld" OR type MATCHES "MODULE")
|
IF(target MATCHES "mysqld" OR type MATCHES "MODULE")
|
||||||
#MESSAGE("PDB: ${targets}")
|
#MESSAGE("PDB: ${targets}")
|
||||||
SET(comp Server)
|
SET(comp Server)
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(NOT comp MATCHES Server)
|
IF(NOT comp MATCHES Server)
|
||||||
|
@ -3,20 +3,6 @@ INCLUDE (CheckLibraryExists)
|
|||||||
SET(WITH_JEMALLOC auto CACHE STRING
|
SET(WITH_JEMALLOC auto CACHE STRING
|
||||||
"Build with jemalloc. Possible values are 'yes', 'no', 'static', 'auto'")
|
"Build with jemalloc. Possible values are 'yes', 'no', 'static', 'auto'")
|
||||||
|
|
||||||
MACRO(JEMALLOC_TRY_STATIC)
|
|
||||||
SET(libname jemalloc_pic)
|
|
||||||
SET(CMAKE_REQUIRED_LIBRARIES pthread dl m)
|
|
||||||
SET(what bundled)
|
|
||||||
CHECK_LIBRARY_EXISTS(${libname} malloc_stats_print "" HAVE_STATIC_JEMALLOC)
|
|
||||||
SET(CMAKE_REQUIRED_LIBRARIES)
|
|
||||||
ENDMACRO()
|
|
||||||
|
|
||||||
MACRO(JEMALLOC_TRY_DYNAMIC)
|
|
||||||
SET(libname jemalloc)
|
|
||||||
SET(what system)
|
|
||||||
CHECK_LIBRARY_EXISTS(${libname} malloc_stats_print "" HAVE_DYNAMIC_JEMALLOC)
|
|
||||||
ENDMACRO()
|
|
||||||
|
|
||||||
MACRO (CHECK_JEMALLOC)
|
MACRO (CHECK_JEMALLOC)
|
||||||
# compatibility with old WITH_JEMALLOC values
|
# compatibility with old WITH_JEMALLOC values
|
||||||
IF(WITH_JEMALLOC STREQUAL "bundled")
|
IF(WITH_JEMALLOC STREQUAL "bundled")
|
||||||
@ -26,21 +12,30 @@ MACRO (CHECK_JEMALLOC)
|
|||||||
SET(WITH_JEMALLOC "yes")
|
SET(WITH_JEMALLOC "yes")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF (WITH_JEMALLOC STREQUAL "yes" OR WITH_JEMALLOC STREQUAL "auto")
|
IF(WITH_JEMALLOC STREQUAL "yes" OR WITH_JEMALLOC STREQUAL "auto" OR
|
||||||
JEMALLOC_TRY_DYNAMIC()
|
WITH_JEMALLOC STREQUAL "static")
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF (WITH_JEMALLOC STREQUAL "static" OR WITH_JEMALLOC STREQUAL "auto"
|
IF(WITH_JEMALLOC STREQUAL "static")
|
||||||
AND NOT HAVE_DYNAMIC_JEMALLOC)
|
SET(libname jemalloc_pic)
|
||||||
JEMALLOC_TRY_STATIC()
|
SET(CMAKE_REQUIRED_LIBRARIES pthread dl m)
|
||||||
ENDIF()
|
SET(what bundled)
|
||||||
|
ELSE()
|
||||||
|
SET(libname jemalloc c)
|
||||||
|
SET(what system)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
IF (libname)
|
FOREACH(lib ${libname})
|
||||||
IF (HAVE_DYNAMIC_JEMALLOC OR HAVE_STATIC_JEMALLOC)
|
CHECK_LIBRARY_EXISTS(${lib} malloc_stats_print "" HAVE_JEMALLOC_IN_${lib})
|
||||||
SET(LIBJEMALLOC ${libname})
|
IF (HAVE_JEMALLOC_IN_${lib})
|
||||||
SET(MALLOC_LIBRARY "${what} jemalloc")
|
SET(LIBJEMALLOC ${lib})
|
||||||
ELSEIF (NOT WITH_JEMALLOC STREQUAL "auto")
|
SET(MALLOC_LIBRARY "${what} jemalloc")
|
||||||
MESSAGE(FATAL_ERROR "${libname} is not found")
|
BREAK()
|
||||||
|
ENDIF()
|
||||||
|
ENDFOREACH()
|
||||||
|
SET(CMAKE_REQUIRED_LIBRARIES)
|
||||||
|
|
||||||
|
IF (NOT LIBJEMALLOC AND NOT WITH_JEMALLOC STREQUAL "auto")
|
||||||
|
MESSAGE(FATAL_ERROR "jemalloc is not found")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDMACRO()
|
ENDMACRO()
|
||||||
|
@ -87,6 +87,11 @@ MACRO(CREATE_EXPORT_FILE VAR TARGET API_FUNCTIONS)
|
|||||||
ENDFOREACH()
|
ENDFOREACH()
|
||||||
SET(CONTENT "${CONTENT} (void *)0\n}\;")
|
SET(CONTENT "${CONTENT} (void *)0\n}\;")
|
||||||
CONFIGURE_FILE_CONTENT(${CONTENT} ${EXPORTS})
|
CONFIGURE_FILE_CONTENT(${CONTENT} ${EXPORTS})
|
||||||
|
# Avoid "function redeclared as variable" error
|
||||||
|
# when using gcc/clang option -flto(link time optimization)
|
||||||
|
IF(" ${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS} " MATCHES " -flto")
|
||||||
|
SET_SOURCE_FILES_PROPERTIES(${EXPORTS} PROPERTIES COMPILE_FLAGS "-fno-lto")
|
||||||
|
ENDIF()
|
||||||
SET(${VAR} ${EXPORTS})
|
SET(${VAR} ${EXPORTS})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDMACRO()
|
ENDMACRO()
|
||||||
|
@ -56,3 +56,10 @@ ELSEIF(MYSQL_MAINTAINER_MODE MATCHES "AUTO")
|
|||||||
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${MY_MAINTAINER_C_WARNINGS}")
|
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${MY_MAINTAINER_C_WARNINGS}")
|
||||||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${MY_MAINTAINER_CXX_WARNINGS}")
|
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${MY_MAINTAINER_CXX_WARNINGS}")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
IF(CMAKE_C_COMPILER_ID MATCHES "GNU")
|
||||||
|
STRING(REPLACE " -E " " -E -dDI " CMAKE_C_CREATE_PREPROCESSED_SOURCE ${CMAKE_C_CREATE_PREPROCESSED_SOURCE})
|
||||||
|
ENDIF()
|
||||||
|
IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||||
|
STRING(REPLACE " -E " " -E -dDI " CMAKE_CXX_CREATE_PREPROCESSED_SOURCE ${CMAKE_CXX_CREATE_PREPROCESSED_SOURCE})
|
||||||
|
ENDIF()
|
||||||
|
@ -18,6 +18,7 @@ INCLUDE(CMakeParseArguments)
|
|||||||
|
|
||||||
# MYSQL_ADD_PLUGIN(plugin_name source1...sourceN
|
# MYSQL_ADD_PLUGIN(plugin_name source1...sourceN
|
||||||
# [STORAGE_ENGINE]
|
# [STORAGE_ENGINE]
|
||||||
|
# [CLIENT]
|
||||||
# [MANDATORY|DEFAULT]
|
# [MANDATORY|DEFAULT]
|
||||||
# [STATIC_ONLY|DYNAMIC_ONLY]
|
# [STATIC_ONLY|DYNAMIC_ONLY]
|
||||||
# [MODULE_OUTPUT_NAME module_name]
|
# [MODULE_OUTPUT_NAME module_name]
|
||||||
@ -28,11 +29,12 @@ INCLUDE(CMakeParseArguments)
|
|||||||
|
|
||||||
MACRO(MYSQL_ADD_PLUGIN)
|
MACRO(MYSQL_ADD_PLUGIN)
|
||||||
CMAKE_PARSE_ARGUMENTS(ARG
|
CMAKE_PARSE_ARGUMENTS(ARG
|
||||||
"STORAGE_ENGINE;STATIC_ONLY;MODULE_ONLY;MANDATORY;DEFAULT;DISABLED;RECOMPILE_FOR_EMBEDDED"
|
"STORAGE_ENGINE;STATIC_ONLY;MODULE_ONLY;MANDATORY;DEFAULT;DISABLED;RECOMPILE_FOR_EMBEDDED;CLIENT"
|
||||||
"MODULE_OUTPUT_NAME;STATIC_OUTPUT_NAME;COMPONENT;CONFIG"
|
"MODULE_OUTPUT_NAME;STATIC_OUTPUT_NAME;COMPONENT;CONFIG"
|
||||||
"LINK_LIBRARIES;DEPENDENCIES"
|
"LINK_LIBRARIES;DEPENDENCIES"
|
||||||
${ARGN}
|
${ARGN}
|
||||||
)
|
)
|
||||||
|
IF(NOT WITHOUT_SERVER OR ARG_CLIENT)
|
||||||
|
|
||||||
# Add common include directories
|
# Add common include directories
|
||||||
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
|
||||||
@ -72,7 +74,9 @@ MACRO(MYSQL_ADD_PLUGIN)
|
|||||||
SET(compat "with${compat}")
|
SET(compat "with${compat}")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF (compat STREQUAL ".")
|
IF (ARG_DISABLED)
|
||||||
|
SET(howtobuild NO)
|
||||||
|
ELSEIF (compat STREQUAL ".")
|
||||||
SET(howtobuild DYNAMIC)
|
SET(howtobuild DYNAMIC)
|
||||||
ELSEIF (compat STREQUAL "with.")
|
ELSEIF (compat STREQUAL "with.")
|
||||||
IF (NOT ARG_MODULE_ONLY)
|
IF (NOT ARG_MODULE_ONLY)
|
||||||
@ -120,7 +124,7 @@ MACRO(MYSQL_ADD_PLUGIN)
|
|||||||
|
|
||||||
# Build either static library or module
|
# Build either static library or module
|
||||||
IF (PLUGIN_${plugin} MATCHES "(STATIC|AUTO|YES)" AND NOT ARG_MODULE_ONLY
|
IF (PLUGIN_${plugin} MATCHES "(STATIC|AUTO|YES)" AND NOT ARG_MODULE_ONLY
|
||||||
AND NOT ARG_DISABLED)
|
AND NOT ARG_CLIENT)
|
||||||
|
|
||||||
IF(CMAKE_GENERATOR MATCHES "Makefiles|Ninja")
|
IF(CMAKE_GENERATOR MATCHES "Makefiles|Ninja")
|
||||||
# If there is a shared library from previous shared build,
|
# If there is a shared library from previous shared build,
|
||||||
@ -176,8 +180,7 @@ MACRO(MYSQL_ADD_PLUGIN)
|
|||||||
SET (mysql_optional_plugins ${mysql_optional_plugins} PARENT_SCOPE)
|
SET (mysql_optional_plugins ${mysql_optional_plugins} PARENT_SCOPE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ELSEIF(PLUGIN_${plugin} MATCHES "(DYNAMIC|AUTO|YES)"
|
ELSEIF(PLUGIN_${plugin} MATCHES "(DYNAMIC|AUTO|YES)"
|
||||||
AND NOT ARG_STATIC_ONLY AND NOT WITHOUT_DYNAMIC_PLUGINS
|
AND NOT ARG_STATIC_ONLY AND NOT WITHOUT_DYNAMIC_PLUGINS)
|
||||||
AND NOT ARG_DISABLED)
|
|
||||||
|
|
||||||
ADD_VERSION_INFO(${target} MODULE SOURCES)
|
ADD_VERSION_INFO(${target} MODULE SOURCES)
|
||||||
ADD_LIBRARY(${target} MODULE ${SOURCES})
|
ADD_LIBRARY(${target} MODULE ${SOURCES})
|
||||||
@ -188,14 +191,14 @@ MACRO(MYSQL_ADD_PLUGIN)
|
|||||||
|
|
||||||
TARGET_LINK_LIBRARIES (${target} mysqlservices ${ARG_LINK_LIBRARIES})
|
TARGET_LINK_LIBRARIES (${target} mysqlservices ${ARG_LINK_LIBRARIES})
|
||||||
|
|
||||||
# Plugin uses symbols defined in mysqld executable.
|
# Server plugins use symbols defined in mysqld executable.
|
||||||
# Some operating systems like Windows and OSX and are pretty strict about
|
# Some operating systems like Windows and OSX and are pretty strict about
|
||||||
# unresolved symbols. Others are less strict and allow unresolved symbols
|
# unresolved symbols. Others are less strict and allow unresolved symbols
|
||||||
# in shared libraries. On Linux for example, CMake does not even add
|
# in shared libraries. On Linux for example, CMake does not even add
|
||||||
# executable to the linker command line (it would result into link error).
|
# executable to the linker command line (it would result into link error).
|
||||||
# Thus we skip TARGET_LINK_LIBRARIES on Linux, as it would only generate
|
# Thus we skip TARGET_LINK_LIBRARIES on Linux, as it would only generate
|
||||||
# an additional dependency.
|
# an additional dependency.
|
||||||
IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT ARG_CLIENT)
|
||||||
TARGET_LINK_LIBRARIES (${target} mysqld)
|
TARGET_LINK_LIBRARIES (${target} mysqld)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ADD_DEPENDENCIES(${target} GenError ${ARG_DEPENDENCIES})
|
ADD_DEPENDENCIES(${target} GenError ${ARG_DEPENDENCIES})
|
||||||
@ -206,19 +209,22 @@ MACRO(MYSQL_ADD_PLUGIN)
|
|||||||
IF(ARG_COMPONENT)
|
IF(ARG_COMPONENT)
|
||||||
IF(CPACK_COMPONENTS_ALL AND
|
IF(CPACK_COMPONENTS_ALL AND
|
||||||
NOT CPACK_COMPONENTS_ALL MATCHES ${ARG_COMPONENT})
|
NOT CPACK_COMPONENTS_ALL MATCHES ${ARG_COMPONENT})
|
||||||
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${ARG_COMPONENT} PARENT_SCOPE)
|
|
||||||
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_REQUIRES "MariaDB" PARENT_SCOPE)
|
|
||||||
|
|
||||||
IF (NOT ARG_CONFIG)
|
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${ARG_COMPONENT})
|
||||||
SET(ARG_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/${target}.cnf")
|
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} PARENT_SCOPE)
|
||||||
FILE(WRITE ${ARG_CONFIG} "[mariadb]\nplugin-load-add=${ARG_MODULE_OUTPUT_NAME}.so\n")
|
IF (NOT ARG_CLIENT)
|
||||||
|
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_REQUIRES "MariaDB" PARENT_SCOPE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
INSTALL(FILES ${ARG_CONFIG} COMPONENT ${ARG_COMPONENT} DESTINATION ${INSTALL_SYSCONF2DIR})
|
|
||||||
|
|
||||||
# workarounds for cmake issues #13248 and #12864:
|
# workarounds for cmake issues #13248 and #12864:
|
||||||
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_PROVIDES "cmake_bug_13248" PARENT_SCOPE)
|
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_PROVIDES "cmake_bug_13248" PARENT_SCOPE)
|
||||||
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_OBSOLETES "cmake_bug_13248" PARENT_SCOPE)
|
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_OBSOLETES "cmake_bug_13248" PARENT_SCOPE)
|
||||||
SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*" PARENT_SCOPE)
|
SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} PARENT_SCOPE)
|
||||||
|
IF(NOT ARG_CLIENT AND NOT ARG_CONFIG AND UNIX)
|
||||||
|
SET(ARG_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/${target}.cnf")
|
||||||
|
FILE(WRITE ${ARG_CONFIG} "[mariadb]\nplugin-load-add=${ARG_MODULE_OUTPUT_NAME}.so\n")
|
||||||
|
INSTALL(FILES ${ARG_CONFIG} COMPONENT ${ARG_COMPONENT} DESTINATION ${INSTALL_SYSCONF2DIR})
|
||||||
|
SET(CPACK_RPM_${ARG_COMPONENT}_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*" PARENT_SCOPE)
|
||||||
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(ARG_COMPONENT Server)
|
SET(ARG_COMPONENT Server)
|
||||||
@ -232,13 +238,17 @@ MACRO(MYSQL_ADD_PLUGIN)
|
|||||||
INSTALL_MYSQL_TEST("${CMAKE_CURRENT_SOURCE_DIR}/mysql-test/" "plugin/${subpath}")
|
INSTALL_MYSQL_TEST("${CMAKE_CURRENT_SOURCE_DIR}/mysql-test/" "plugin/${subpath}")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
ENDIF(NOT WITHOUT_SERVER OR ARG_CLIENT)
|
||||||
ENDMACRO()
|
ENDMACRO()
|
||||||
|
|
||||||
|
|
||||||
# Add all CMake projects under storage and plugin
|
# Add all CMake projects under storage and plugin
|
||||||
# subdirectories, configure sql_builtins.cc
|
# subdirectories, configure sql_builtins.cc
|
||||||
MACRO(CONFIGURE_PLUGINS)
|
MACRO(CONFIGURE_PLUGINS)
|
||||||
FILE(GLOB dirs_storage ${CMAKE_SOURCE_DIR}/storage/*)
|
IF(NOT WITHOUT_SERVER)
|
||||||
|
FILE(GLOB dirs_storage ${CMAKE_SOURCE_DIR}/storage/*)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
FILE(GLOB dirs_plugin ${CMAKE_SOURCE_DIR}/plugin/*)
|
FILE(GLOB dirs_plugin ${CMAKE_SOURCE_DIR}/plugin/*)
|
||||||
FOREACH(dir ${dirs_storage} ${dirs_plugin})
|
FOREACH(dir ${dirs_storage} ${dirs_plugin})
|
||||||
IF (EXISTS ${dir}/CMakeLists.txt)
|
IF (EXISTS ${dir}/CMakeLists.txt)
|
||||||
|
@ -26,7 +26,7 @@ ENDIF()
|
|||||||
OPTION(WITH_WSREP "WSREP replication API (to use, e.g. Galera Replication library)" ${with_wsrep_default})
|
OPTION(WITH_WSREP "WSREP replication API (to use, e.g. Galera Replication library)" ${with_wsrep_default})
|
||||||
|
|
||||||
# Set the patch version
|
# Set the patch version
|
||||||
SET(WSREP_PATCH_VERSION "11")
|
SET(WSREP_PATCH_VERSION "13")
|
||||||
|
|
||||||
# Obtain wsrep API version
|
# Obtain wsrep API version
|
||||||
FILE(STRINGS "${MySQL_SOURCE_DIR}/wsrep/wsrep_api.h" WSREP_API_VERSION
|
FILE(STRINGS "${MySQL_SOURCE_DIR}/wsrep/wsrep_api.h" WSREP_API_VERSION
|
||||||
|
@ -88,6 +88,7 @@
|
|||||||
#cmakedefine HAVE_SYS_UN_H 1
|
#cmakedefine HAVE_SYS_UN_H 1
|
||||||
#cmakedefine HAVE_SYS_VADVISE_H 1
|
#cmakedefine HAVE_SYS_VADVISE_H 1
|
||||||
#cmakedefine HAVE_SYS_STATVFS_H 1
|
#cmakedefine HAVE_SYS_STATVFS_H 1
|
||||||
|
#cmakedefine HAVE_UCONTEXT_H 1
|
||||||
#cmakedefine HAVE_TERM_H 1
|
#cmakedefine HAVE_TERM_H 1
|
||||||
#cmakedefine HAVE_TERMBITS_H 1
|
#cmakedefine HAVE_TERMBITS_H 1
|
||||||
#cmakedefine HAVE_TERMIOS_H 1
|
#cmakedefine HAVE_TERMIOS_H 1
|
||||||
@ -236,7 +237,6 @@
|
|||||||
#cmakedefine HAVE_THR_YIELD 1
|
#cmakedefine HAVE_THR_YIELD 1
|
||||||
#cmakedefine HAVE_TIME 1
|
#cmakedefine HAVE_TIME 1
|
||||||
#cmakedefine HAVE_TIMES 1
|
#cmakedefine HAVE_TIMES 1
|
||||||
#cmakedefine HAVE_UCONTEXT 1
|
|
||||||
#cmakedefine HAVE_VIDATTR 1
|
#cmakedefine HAVE_VIDATTR 1
|
||||||
#define HAVE_VIO_READ_BUFF 1
|
#define HAVE_VIO_READ_BUFF 1
|
||||||
#cmakedefine HAVE_VASPRINTF 1
|
#cmakedefine HAVE_VASPRINTF 1
|
||||||
|
@ -196,6 +196,7 @@ CHECK_INCLUDE_FILES (ndir.h HAVE_NDIR_H)
|
|||||||
CHECK_INCLUDE_FILES (netinet/in.h HAVE_NETINET_IN_H)
|
CHECK_INCLUDE_FILES (netinet/in.h HAVE_NETINET_IN_H)
|
||||||
CHECK_INCLUDE_FILES (paths.h HAVE_PATHS_H)
|
CHECK_INCLUDE_FILES (paths.h HAVE_PATHS_H)
|
||||||
CHECK_INCLUDE_FILES (poll.h HAVE_POLL_H)
|
CHECK_INCLUDE_FILES (poll.h HAVE_POLL_H)
|
||||||
|
CHECK_INCLUDE_FILES (sys/poll.h HAVE_SYS_POLL_H)
|
||||||
CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
|
CHECK_INCLUDE_FILES (pwd.h HAVE_PWD_H)
|
||||||
CHECK_INCLUDE_FILES (sched.h HAVE_SCHED_H)
|
CHECK_INCLUDE_FILES (sched.h HAVE_SCHED_H)
|
||||||
CHECK_INCLUDE_FILES (select.h HAVE_SELECT_H)
|
CHECK_INCLUDE_FILES (select.h HAVE_SELECT_H)
|
||||||
@ -727,16 +728,36 @@ ENDIF()
|
|||||||
#
|
#
|
||||||
# Test for how the C compiler does inline, if at all
|
# Test for how the C compiler does inline, if at all
|
||||||
#
|
#
|
||||||
|
# SunPro is weird, apparently it only supports inline at -xO3 or -xO4.
|
||||||
|
# And if CMAKE_C_FLAGS has -xO4 but CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE} has -xO2
|
||||||
|
# then CHECK_C_SOURCE_COMPILES will succeed but the built will fail.
|
||||||
|
# We must test all flags here.
|
||||||
|
# XXX actually, we can do this for all compilers, not only SunPro
|
||||||
|
IF (CMAKE_CXX_COMPILER_ID MATCHES "SunPro" AND
|
||||||
|
CMAKE_GENERATOR MATCHES "Makefiles")
|
||||||
|
STRING(TOUPPER "CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}" flags)
|
||||||
|
SET(CMAKE_REQUIRED_FLAGS "${${flags}}")
|
||||||
|
ENDIF()
|
||||||
CHECK_C_SOURCE_COMPILES("
|
CHECK_C_SOURCE_COMPILES("
|
||||||
static inline int foo(){return 0;}
|
extern int bar(int x);
|
||||||
|
static inline int foo(){return bar(1);}
|
||||||
int main(int argc, char *argv[]){return 0;}"
|
int main(int argc, char *argv[]){return 0;}"
|
||||||
C_HAS_inline)
|
C_HAS_inline)
|
||||||
IF(NOT C_HAS_inline)
|
IF(NOT C_HAS_inline)
|
||||||
CHECK_C_SOURCE_COMPILES("
|
CHECK_C_SOURCE_COMPILES("
|
||||||
static __inline int foo(){return 0;}
|
extern int bar(int x);
|
||||||
|
static __inline int foo(){return bar(1);}
|
||||||
int main(int argc, char *argv[]){return 0;}"
|
int main(int argc, char *argv[]){return 0;}"
|
||||||
C_HAS___inline)
|
C_HAS___inline)
|
||||||
SET(C_INLINE __inline)
|
IF(C_HAS___inline)
|
||||||
|
SET(C_INLINE __inline)
|
||||||
|
ElSE()
|
||||||
|
SET(C_INLINE)
|
||||||
|
MESSAGE(WARNING "C compiler does not support funcion inlining")
|
||||||
|
IF(NOT NOINLINE)
|
||||||
|
MESSAGE(FATAL_ERROR "Use -DNOINLINE=TRUE to allow compilation without inlining")
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(NOT CMAKE_CROSSCOMPILING AND NOT MSVC)
|
IF(NOT CMAKE_CROSSCOMPILING AND NOT MSVC)
|
||||||
@ -977,6 +998,11 @@ CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6" sin6_len
|
|||||||
|
|
||||||
SET(CMAKE_EXTRA_INCLUDE_FILES)
|
SET(CMAKE_EXTRA_INCLUDE_FILES)
|
||||||
|
|
||||||
|
CHECK_INCLUDE_FILE(ucontext.h HAVE_UCONTEXT_H)
|
||||||
|
IF(NOT HAVE_UCONTEXT_H)
|
||||||
|
CHECK_INCLUDE_FILE(sys/ucontext.h HAVE_UCONTEXT_H)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
CHECK_STRUCT_HAS_MEMBER("struct timespec" tv_sec "time.h" STRUCT_TIMESPEC_HAS_TV_SEC)
|
CHECK_STRUCT_HAS_MEMBER("struct timespec" tv_sec "time.h" STRUCT_TIMESPEC_HAS_TV_SEC)
|
||||||
CHECK_STRUCT_HAS_MEMBER("struct timespec" tv_nsec "time.h" STRUCT_TIMESPEC_HAS_TV_NSEC)
|
CHECK_STRUCT_HAS_MEMBER("struct timespec" tv_nsec "time.h" STRUCT_TIMESPEC_HAS_TV_NSEC)
|
||||||
|
|
||||||
@ -997,4 +1023,3 @@ IF(NOT MSVC)
|
|||||||
HAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE
|
HAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE
|
||||||
)
|
)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
4
debian/additions/innotop/innotop
vendored
4
debian/additions/innotop/innotop
vendored
@ -1503,7 +1503,7 @@ my %exprs = (
|
|||||||
|
|
||||||
my %columns = (
|
my %columns = (
|
||||||
active_secs => { hdr => 'SecsActive', num => 1, label => 'Seconds transaction has been active', },
|
active_secs => { hdr => 'SecsActive', num => 1, label => 'Seconds transaction has been active', },
|
||||||
add_pool_alloc => { hdr => 'Add\'l Pool', num => 1, label => 'Additonal pool allocated' },
|
add_pool_alloc => { hdr => 'Add\'l Pool', num => 1, label => 'Additional pool allocated' },
|
||||||
attempted_op => { hdr => 'Action', num => 0, label => 'The action that caused the error' },
|
attempted_op => { hdr => 'Action', num => 0, label => 'The action that caused the error' },
|
||||||
awe_mem_alloc => { hdr => 'AWE Memory', num => 1, label => '[Windows] AWE memory allocated' },
|
awe_mem_alloc => { hdr => 'AWE Memory', num => 1, label => '[Windows] AWE memory allocated' },
|
||||||
binlog_cache_overflow => { hdr => 'Binlog Cache', num => 1, label => 'Transactions too big for binlog cache that went to disk' },
|
binlog_cache_overflow => { hdr => 'Binlog Cache', num => 1, label => 'Transactions too big for binlog cache that went to disk' },
|
||||||
@ -10365,7 +10365,7 @@ show you something like this:
|
|||||||
pages_modified Dirty Pages Pages modified (dirty IB_bp_pages_m
|
pages_modified Dirty Pages Pages modified (dirty IB_bp_pages_m
|
||||||
buf_pool_hit_rate Hit Rate Buffer pool hit rate IB_bp_buf_poo
|
buf_pool_hit_rate Hit Rate Buffer pool hit rate IB_bp_buf_poo
|
||||||
total_mem_alloc Memory Total memory allocate IB_bp_total_m
|
total_mem_alloc Memory Total memory allocate IB_bp_total_m
|
||||||
add_pool_alloc Add'l Pool Additonal pool alloca IB_bp_add_poo
|
add_pool_alloc Add'l Pool Additional pool alloca IB_bp_add_poo
|
||||||
|
|
||||||
The first line shows which table you're editing, and reminds you again to press
|
The first line shows which table you're editing, and reminds you again to press
|
||||||
'?' for a list of key mappings. The rest is a tabular representation of the
|
'?' for a list of key mappings. The rest is a tabular representation of the
|
||||||
|
2
debian/additions/innotop/innotop.1
vendored
2
debian/additions/innotop/innotop.1
vendored
@ -1579,7 +1579,7 @@ show you something like this:
|
|||||||
\& pages_modified Dirty Pages Pages modified (dirty IB_bp_pages_m
|
\& pages_modified Dirty Pages Pages modified (dirty IB_bp_pages_m
|
||||||
\& buf_pool_hit_rate Hit Rate Buffer pool hit rate IB_bp_buf_poo
|
\& buf_pool_hit_rate Hit Rate Buffer pool hit rate IB_bp_buf_poo
|
||||||
\& total_mem_alloc Memory Total memory allocate IB_bp_total_m
|
\& total_mem_alloc Memory Total memory allocate IB_bp_total_m
|
||||||
\& add_pool_alloc Add\*(Aql Pool Additonal pool alloca IB_bp_add_poo
|
\& add_pool_alloc Add\*(Aql Pool Additional pool alloca IB_bp_add_poo
|
||||||
.Ve
|
.Ve
|
||||||
.PP
|
.PP
|
||||||
The first line shows which table you're editing, and reminds you again to press
|
The first line shows which table you're editing, and reminds you again to press
|
||||||
|
2
debian/additions/my.cnf
vendored
2
debian/additions/my.cnf
vendored
@ -177,7 +177,7 @@ quote-names
|
|||||||
max_allowed_packet = 16M
|
max_allowed_packet = 16M
|
||||||
|
|
||||||
[mysql]
|
[mysql]
|
||||||
#no-auto-rehash # faster start of mysql but no tab completition
|
#no-auto-rehash # faster start of mysql but no tab completion
|
||||||
|
|
||||||
[isamchk]
|
[isamchk]
|
||||||
key_buffer = 16M
|
key_buffer = 16M
|
||||||
|
538
debian/additions/mysqlreport
vendored
538
debian/additions/mysqlreport
vendored
@ -1,10 +1,11 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
# mysqlreport v3.5 Apr 16 2008
|
# mysqlreport v4.0 Oct 23 2015
|
||||||
# http://hackmysql.com/mysqlreport
|
# http://hackmysql.com/mysqlreport
|
||||||
|
|
||||||
# mysqlreport makes an easy-to-read report of important MySQL status values.
|
# mysqlreport makes an easy-to-read report of important MySQL/MariaDB status values.
|
||||||
# Copyright 2006-2008 Daniel Nichter
|
# Copyright 2006-2008 Daniel Nichter
|
||||||
|
# Copyright 2012-2015 Jean Weisbuch
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
@ -36,15 +37,18 @@ my ($stat_name, $stat_val, $stat_label);
|
|||||||
my $MySQL_version;
|
my $MySQL_version;
|
||||||
my (%stats, %vars); # SHOW STATUS, SHOW VARIABLES
|
my (%stats, %vars); # SHOW STATUS, SHOW VARIABLES
|
||||||
my (%DMS_vals, %Com_vals, %ib_vals);
|
my (%DMS_vals, %Com_vals, %ib_vals);
|
||||||
my ($dbh, $query);
|
my $dbh;
|
||||||
my ($questions, $key_read_ratio, $key_write_ratio, $dms, $slow_query_t);
|
my ($questions, $key_read_ratio, $key_write_ratio, $dms, $slow_query_t);
|
||||||
my ($key_cache_block_size, $key_buffer_used, $key_buffer_usage);
|
my ($key_cache_block_size, $key_buffer_used, $key_buffer_usage);
|
||||||
my ($qc_mem_used, $qc_hi_r, $qc_ip_r); # Query Cache
|
my ($qc_mem_used, $qc_hi_r, $qc_ip_r); # Query Cache
|
||||||
my $have_innodb_vals;
|
|
||||||
my ($ib_bp_used, $ib_bp_total, $ib_bp_read_ratio);
|
my ($ib_bp_used, $ib_bp_total, $ib_bp_read_ratio);
|
||||||
my ($relative_live, $relative_infiles);
|
my ($relative_live, $relative_infiles);
|
||||||
my $real_uptime;
|
my $real_uptime;
|
||||||
my (%stats_present, %stats_past); # For relative reports
|
my (%stats_present, %stats_past); # For relative reports
|
||||||
|
my ($pagecache_read_ratio, $pagecache_write_ratio, $pagecache_block_size, $pagecache_buffer_used, $pagecache_buffer_usage); # AriaDB pagecache stats
|
||||||
|
my ($binlog_cache_ratio, $binlog_stmt_cache_ratio); # binary log cache
|
||||||
|
my $dbms;
|
||||||
|
my ($rows, $rows_using_indexes);
|
||||||
|
|
||||||
GetOptions (
|
GetOptions (
|
||||||
\%op,
|
\%op,
|
||||||
@ -127,13 +131,19 @@ $| = 1 if ($op{'detach'} || $relative_live);
|
|||||||
|
|
||||||
print "tmp file: $tmpfile\n" if $op{debug};
|
print "tmp file: $tmpfile\n" if $op{debug};
|
||||||
|
|
||||||
# Connect to MySQL
|
# Connect to MySQL/MariaDB
|
||||||
if(!$op{'infile'} && !$relative_infiles)
|
if(!$op{'infile'} && !$relative_infiles)
|
||||||
{
|
{
|
||||||
connect_to_MySQL();
|
connect_to_MySQL();
|
||||||
}
|
}
|
||||||
|
|
||||||
$have_innodb_vals = 1; # This might be set to 0 later in get_MySQL_version()
|
my $have_innodb_vals = 1; # This might be set to 0 later in get_MySQL_version()
|
||||||
|
my $have_aria_vals = 0;
|
||||||
|
my $have_subquerycache_vals = 0;
|
||||||
|
my $have_binlog_vals = 0;
|
||||||
|
my $have_tokudb_engine = 0;
|
||||||
|
my $use_thread_pool = 0;
|
||||||
|
my $use_xtradb = 0;
|
||||||
|
|
||||||
if(defined $op{'r'})
|
if(defined $op{'r'})
|
||||||
{
|
{
|
||||||
@ -163,6 +173,9 @@ else
|
|||||||
|
|
||||||
set_myisam_vals();
|
set_myisam_vals();
|
||||||
set_ib_vals() if $have_innodb_vals;
|
set_ib_vals() if $have_innodb_vals;
|
||||||
|
set_aria_vals() if $have_aria_vals;
|
||||||
|
set_subquerycache_vals() if $have_subquerycache_vals;
|
||||||
|
set_binlog_vals() if $have_binlog_vals;
|
||||||
|
|
||||||
write_report();
|
write_report();
|
||||||
}
|
}
|
||||||
@ -177,8 +190,8 @@ exit;
|
|||||||
sub show_help_and_exit
|
sub show_help_and_exit
|
||||||
{
|
{
|
||||||
print <<"HELP";
|
print <<"HELP";
|
||||||
mysqlreport v3.5 Apr 16 2008
|
mysqlreport v4.0 Oct 23 2015
|
||||||
mysqlreport makes an easy-to-read report of important MySQL status values.
|
mysqlreport makes an easy-to-read report of important MySQL/MariaDB status values.
|
||||||
|
|
||||||
Command line options (abbreviations work):
|
Command line options (abbreviations work):
|
||||||
--user USER Connect to MySQL as USER
|
--user USER Connect to MySQL as USER
|
||||||
@ -264,6 +277,9 @@ sub collect_reports
|
|||||||
|
|
||||||
set_myisam_vals();
|
set_myisam_vals();
|
||||||
set_ib_vals() if $have_innodb_vals;
|
set_ib_vals() if $have_innodb_vals;
|
||||||
|
set_aria_vals() if $have_aria_vals;
|
||||||
|
set_subquerycache_vals() if $have_subquerycache_vals;
|
||||||
|
set_binlog_vals() if $have_binlog_vals;
|
||||||
|
|
||||||
print "#\n# Beginning report, 0 0:0:0\n#\n";
|
print "#\n# Beginning report, 0 0:0:0\n#\n";
|
||||||
|
|
||||||
@ -350,7 +366,7 @@ sub read_relative_infiles
|
|||||||
|
|
||||||
# The infile must begin with the system variable values.
|
# The infile must begin with the system variable values.
|
||||||
# Therefore, the first occurance of Aborted_clients indicates the beginning
|
# Therefore, the first occurance of Aborted_clients indicates the beginning
|
||||||
# of the first set of status values if no sets have occured yet ($stat_n == 0).
|
# of the first set of status values if no sets have occurred yet ($stat_n == 0).
|
||||||
# In this case, the following status values are printed to the current fh,
|
# In this case, the following status values are printed to the current fh,
|
||||||
# along with the system variable values read thus far, until Aborted_clients
|
# along with the system variable values read thus far, until Aborted_clients
|
||||||
# occurs again. Then begins the second and subsequent sets of status values.
|
# occurs again. Then begins the second and subsequent sets of status values.
|
||||||
@ -403,6 +419,9 @@ sub relative_infile_report
|
|||||||
|
|
||||||
set_myisam_vals();
|
set_myisam_vals();
|
||||||
set_ib_vals() if $have_innodb_vals;
|
set_ib_vals() if $have_innodb_vals;
|
||||||
|
set_aria_vals() if $have_aria_vals;
|
||||||
|
set_subquerycache_vals() if $have_subquerycache_vals;
|
||||||
|
set_binlog_vals() if $have_binlog_vals;
|
||||||
|
|
||||||
print "#\n# Beginning report, 0 0:0:0\n#\n";
|
print "#\n# Beginning report, 0 0:0:0\n#\n";
|
||||||
|
|
||||||
@ -422,7 +441,7 @@ sub get_vals
|
|||||||
{
|
{
|
||||||
print "get_vals\n" if $op{debug};
|
print "get_vals\n" if $op{debug};
|
||||||
|
|
||||||
my @row;
|
my (@row, $query);
|
||||||
|
|
||||||
# Get status values
|
# Get status values
|
||||||
if($MySQL_version >= 50002)
|
if($MySQL_version >= 50002)
|
||||||
@ -434,7 +453,9 @@ sub get_vals
|
|||||||
$query = $dbh->prepare("SHOW STATUS;");
|
$query = $dbh->prepare("SHOW STATUS;");
|
||||||
}
|
}
|
||||||
$query->execute();
|
$query->execute();
|
||||||
while(@row = $query->fetchrow_array()) { $stats{$row[0]} = $row[1]; }
|
# To avoid problems if the variable capitalization would change (eg. TokuDB on MariaDB 5.5 => 10.0), the $stats index is forced to have its first char uppercase and the rest lowercase
|
||||||
|
while(@row = $query->fetchrow_array()) { $stats{ucfirst(lc($row[0]))} = $row[1]; }
|
||||||
|
$query->finish();
|
||||||
|
|
||||||
$real_uptime = $stats{'Uptime'};
|
$real_uptime = $stats{'Uptime'};
|
||||||
}
|
}
|
||||||
@ -443,18 +464,23 @@ sub get_vars
|
|||||||
{
|
{
|
||||||
print "get_vars\n" if $op{debug};
|
print "get_vars\n" if $op{debug};
|
||||||
|
|
||||||
my @row;
|
my (@row, $query);
|
||||||
|
|
||||||
# Get server system variables
|
# Get server system variables
|
||||||
$query = $dbh->prepare("SHOW VARIABLES;");
|
$query = $dbh->prepare("SHOW VARIABLES;");
|
||||||
$query->execute();
|
$query->execute();
|
||||||
while(@row = $query->fetchrow_array()) { $vars{$row[0]} = $row[1]; }
|
while(@row = $query->fetchrow_array()) { $vars{$row[0]} = $row[1]; }
|
||||||
|
$query->finish();
|
||||||
# table_cache was renamed to table_open_cache in MySQL 5.1.3
|
# table_cache was renamed to table_open_cache in MySQL 5.1.3
|
||||||
if($MySQL_version >= 50103)
|
if($MySQL_version >= 50103)
|
||||||
{
|
{
|
||||||
$vars{'table_cache'} = $vars{'table_open_cache'};
|
$vars{'table_cache'} = $vars{'table_open_cache'};
|
||||||
}
|
}
|
||||||
|
# log_slow_queries was renamed to slow_query_log in MySQL 5.1.29
|
||||||
|
if($MySQL_version >= 50129)
|
||||||
|
{
|
||||||
|
$vars{'log_slow_queries'} = $vars{'slow_query_log'};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub read_infile
|
sub read_infile
|
||||||
@ -507,10 +533,10 @@ sub read_infile
|
|||||||
else { print "read_infile: ignore '$_'\n" if $op{debug}; }
|
else { print "read_infile: ignore '$_'\n" if $op{debug}; }
|
||||||
|
|
||||||
last if $1 eq 'Uptime'; # exit while() if end of status values
|
last if $1 eq 'Uptime'; # exit while() if end of status values
|
||||||
$_ = <INFILE>; # otherwise, read next line of status values
|
$_ = <INFILE>; # otherwise, read next line of status values
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif($1 eq 'back_log') # system variable values
|
elsif($1 eq 'back_log') # system variable values
|
||||||
{
|
{
|
||||||
print "read_infile: start vars\n" if $op{debug};
|
print "read_infile: start vars\n" if $op{debug};
|
||||||
|
|
||||||
@ -525,7 +551,7 @@ sub read_infile
|
|||||||
else { print "read_infile: ignore '$_'\n" if $op{debug}; }
|
else { print "read_infile: ignore '$_'\n" if $op{debug}; }
|
||||||
|
|
||||||
last if $1 eq 'wait_timeout'; # exit while() if end of vars
|
last if $1 eq 'wait_timeout'; # exit while() if end of vars
|
||||||
$_ = <INFILE>; # otherwise, read next line of vars
|
$_ = <INFILE>; # otherwise, read next line of vars
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif($1 eq '=') # old style, manually added system variable values
|
elsif($1 eq '=') # old style, manually added system variable values
|
||||||
@ -542,7 +568,7 @@ sub read_infile
|
|||||||
}
|
}
|
||||||
else { print "read_infile: ignore '$_'\n" if $op{debug}; }
|
else { print "read_infile: ignore '$_'\n" if $op{debug}; }
|
||||||
|
|
||||||
$_ = <INFILE>; # otherwise, read next line of old vars
|
$_ = <INFILE>; # otherwise, read next line of old vars
|
||||||
}
|
}
|
||||||
|
|
||||||
redo;
|
redo;
|
||||||
@ -572,25 +598,116 @@ sub get_MySQL_version
|
|||||||
|
|
||||||
if($op{'infile'} || $relative_infiles)
|
if($op{'infile'} || $relative_infiles)
|
||||||
{
|
{
|
||||||
($major, $minor, $patch) = ($vars{'version'} =~ /(\d{1,2})\.(\d{1,2})\.(\d{1,2})/);
|
($major, $minor, $patch) = ($vars{'version'} =~ /^(\d{1,2})\.(\d{1,2})\.(\d{1,2})/);
|
||||||
|
if($vars{'version'} =~ /^\d{1,2}\.\d{1,2}\.\d{1,2}-MariaDB/) {
|
||||||
|
print "MariaDB detected\n" if $op{debug};
|
||||||
|
$dbms = "MariaDB";
|
||||||
|
} else {
|
||||||
|
$dbms = "MySQL";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
my @row;
|
my (@row, $query);
|
||||||
|
|
||||||
$query = $dbh->prepare("SHOW VARIABLES LIKE 'version';");
|
$query = $dbh->prepare("SHOW VARIABLES LIKE 'version';");
|
||||||
$query->execute();
|
$query->execute();
|
||||||
@row = $query->fetchrow_array();
|
@row = $query->fetchrow_array();
|
||||||
($major, $minor, $patch) = ($row[1] =~ /(\d{1,2})\.(\d{1,2})\.(\d{1,2})/);
|
$query->finish();
|
||||||
|
($major, $minor, $patch) = ($row[1] =~ /^(\d{1,2})\.(\d{1,2})\.(\d{1,2})/);
|
||||||
|
if($row[1] =~ /^\d{1,2}\.\d{1,2}\.\d{1,2}-MariaDB/)
|
||||||
|
{
|
||||||
|
print "MariaDB detected\n" if $op{debug};
|
||||||
|
$dbms = "MariaDB";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$dbms = "MySQL";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# The major version number is kept as is while the minor version and the revision number are forced to 2 digits
|
||||||
|
# e.g.: 5.5.9 will be 50509, 10.0.5 will be 100005 and 10.1.23 will be 100123
|
||||||
$MySQL_version = sprintf("%d%02d%02d", $major, $minor, $patch);
|
$MySQL_version = sprintf("%d%02d%02d", $major, $minor, $patch);
|
||||||
|
print "Version $MySQL_version\n" if $op{debug};
|
||||||
|
|
||||||
# Innodb_ status values were added in 5.0.2
|
# Innodb_ status values were added in 5.0.2
|
||||||
if($MySQL_version < 50002)
|
if($MySQL_version < 50002)
|
||||||
{
|
{
|
||||||
$have_innodb_vals = 0;
|
$have_innodb_vals = 0;
|
||||||
print "get_MySQL_version: no InnoDB reports because MySQL version is older than 5.0.2\n" if $op{debug};
|
print "get_MySQL_version: no InnoDB reports because MySQL version is older than 5.0.2\n" if $op{debug};
|
||||||
|
} else {
|
||||||
|
$have_innodb_vals = $dbh->selectall_arrayref("SELECT SUPPORT FROM information_schema.engines WHERE ENGINE = 'InnoDB';", undef)->[0][0];
|
||||||
|
if(defined($have_innodb_vals) && ($have_innodb_vals eq "YES" || $have_innodb_vals eq "DEFAULT"))
|
||||||
|
{
|
||||||
|
print "InnoDB detected\n" if $op{debug};
|
||||||
|
$have_innodb_vals = 1;
|
||||||
|
} else {
|
||||||
|
print "InnoDB is not activated\n" if $op{debug};
|
||||||
|
$have_innodb_vals = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($dbms eq "MariaDB") {
|
||||||
|
$have_aria_vals = $dbh->selectall_arrayref("SELECT SUPPORT FROM information_schema.engines WHERE ENGINE = 'Aria';", undef)->[0][0];
|
||||||
|
if(defined($have_aria_vals) && $have_aria_vals eq "YES")
|
||||||
|
{
|
||||||
|
print "Aria engine detected\n" if $op{debug};
|
||||||
|
$have_aria_vals = 1;
|
||||||
|
} else {
|
||||||
|
$have_aria_vals = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
# MariaDB 5.3+, activated by default since 5.3.2
|
||||||
|
$have_subquerycache_vals = $dbh->selectall_arrayref("SELECT VARIABLE_VALUE REGEXP ',subquery_cache=on,|^subquery_cache=on,|,subquery_cache=on\$' AS SUBQUERY_CACHE FROM information_schema.global_variables WHERE VARIABLE_NAME = 'optimizer_switch';", undef)->[0][0];
|
||||||
|
if(defined($have_subquerycache_vals) && $have_subquerycache_vals eq "1")
|
||||||
|
{
|
||||||
|
print "Subquery cache is activated\n" if $op{debug};
|
||||||
|
$have_subquerycache_vals = 1;
|
||||||
|
} else {
|
||||||
|
$have_subquerycache_vals = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($MySQL_version >= 50000)
|
||||||
|
{
|
||||||
|
# These checks use the 'information_schema' virtual database that has been added on MySQL 5.0
|
||||||
|
|
||||||
|
# MariaDB 5.5.21+ and Percona Server 5.5.30+ use the same thread pool implementation
|
||||||
|
$use_thread_pool = $dbh->selectall_arrayref("SELECT VARIABLE_VALUE FROM information_schema.global_variables WHERE VARIABLE_NAME = 'thread_handling';", undef)->[0][0];
|
||||||
|
if(defined($use_thread_pool) && $use_thread_pool eq "pool-of-threads") {
|
||||||
|
print "Thread pool is used\n" if $op{debug};
|
||||||
|
$use_thread_pool = 1;
|
||||||
|
} else {
|
||||||
|
$use_thread_pool = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$have_binlog_vals = $dbh->selectall_arrayref("SELECT VARIABLE_VALUE FROM information_schema.global_variables WHERE VARIABLE_NAME = 'log_bin';", undef)->[0][0];
|
||||||
|
if(defined($have_binlog_vals) && $have_binlog_vals eq "ON")
|
||||||
|
{
|
||||||
|
print "Binary log is activated\n" if $op{debug};
|
||||||
|
$have_binlog_vals = 1;
|
||||||
|
} else {
|
||||||
|
$have_binlog_vals = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$have_tokudb_engine = $dbh->selectall_arrayref("SELECT SUPPORT FROM information_schema.engines WHERE ENGINE = 'TokuDB';", undef)->[0][0];
|
||||||
|
if(defined($have_tokudb_engine) && ($have_tokudb_engine eq "YES" || $have_tokudb_engine eq "DEFAULT"))
|
||||||
|
{
|
||||||
|
print "TokuDB detected\n" if $op{debug};
|
||||||
|
$have_tokudb_engine = 1;
|
||||||
|
} else {
|
||||||
|
$have_tokudb_engine = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$use_xtradb = $dbh->selectall_arrayref("SELECT 1 FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE = 'InnoDB' AND COMMENT LIKE 'Percona-XtraDB%';", undef)->[0][0];
|
||||||
|
if(defined($use_xtradb) && $use_xtradb eq "1")
|
||||||
|
{
|
||||||
|
print "XtraDB detected\n" if $op{debug};
|
||||||
|
$use_xtradb = 1;
|
||||||
|
} else {
|
||||||
|
$use_xtradb = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -598,6 +715,7 @@ sub set_myisam_vals
|
|||||||
{
|
{
|
||||||
print "set_myisam_vals\n" if $op{debug};
|
print "set_myisam_vals\n" if $op{debug};
|
||||||
|
|
||||||
|
# should be moved elsewere
|
||||||
$questions = $stats{'Questions'};
|
$questions = $stats{'Questions'};
|
||||||
|
|
||||||
$key_read_ratio = sprintf "%.2f",
|
$key_read_ratio = sprintf "%.2f",
|
||||||
@ -638,7 +756,6 @@ sub set_myisam_vals
|
|||||||
$dms = $DMS_vals{SELECT} + $DMS_vals{INSERT} + $DMS_vals{REPLACE} + $DMS_vals{UPDATE} + $DMS_vals{DELETE};
|
$dms = $DMS_vals{SELECT} + $DMS_vals{INSERT} + $DMS_vals{REPLACE} + $DMS_vals{UPDATE} + $DMS_vals{DELETE};
|
||||||
|
|
||||||
$slow_query_t = format_u_time($vars{long_query_time});
|
$slow_query_t = format_u_time($vars{long_query_time});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub set_ib_vals
|
sub set_ib_vals
|
||||||
@ -658,6 +775,46 @@ sub set_ib_vals
|
|||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub set_aria_vals
|
||||||
|
{
|
||||||
|
print "set_aria_vals\n" if $op{debug};
|
||||||
|
|
||||||
|
$pagecache_read_ratio = sprintf "%.2f",
|
||||||
|
($stats{'Aria_pagecache_read_requests'} ?
|
||||||
|
100 - ($stats{'Aria_pagecache_reads'} / $stats{'Aria_pagecache_read_requests'}) * 100 :
|
||||||
|
0);
|
||||||
|
|
||||||
|
$pagecache_write_ratio = sprintf "%.2f",
|
||||||
|
($stats{'Aria_pagecache_write_requests'} ?
|
||||||
|
100 - ($stats{'Aria_pagecache_writes'} / $stats{'Aria_pagecache_write_requests'}) * 100 :
|
||||||
|
0);
|
||||||
|
|
||||||
|
$pagecache_block_size = (defined $vars{'aria_block_size'} ?
|
||||||
|
$vars{'aria_block_size'} :
|
||||||
|
1024);
|
||||||
|
|
||||||
|
$pagecache_buffer_used = $stats{'Aria_pagecache_blocks_used'} * $pagecache_block_size;
|
||||||
|
|
||||||
|
$pagecache_buffer_usage = $vars{'aria_pagecache_buffer_size'} -
|
||||||
|
($stats{'Aria_pagecache_blocks_unused'} * $pagecache_block_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub set_subquerycache_vals
|
||||||
|
{
|
||||||
|
print "set_subquerycache_vals\n" if $op{debug};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub set_binlog_vals
|
||||||
|
{
|
||||||
|
print "set_binlog_vals\n" if $op{debug};
|
||||||
|
|
||||||
|
if($stats{'Binlog_cache_use'} gt 0) { $binlog_cache_ratio = $stats{'Binlog_cache_disk_use'} / $stats{'Binlog_cache_use'}; }
|
||||||
|
else { $binlog_cache_ratio = 0; }
|
||||||
|
|
||||||
|
if(defined($stats{'Binlog_stmt_cache_use'}) && $stats{'Binlog_stmt_cache_use'} gt 0) { $binlog_stmt_cache_ratio = $stats{'Binlog_stmt_cache_disk_use'} / $stats{'Binlog_stmt_cache_use'}; }
|
||||||
|
else { $binlog_stmt_cache_ratio = 0; }
|
||||||
|
}
|
||||||
|
|
||||||
sub write_relative_report
|
sub write_relative_report
|
||||||
{
|
{
|
||||||
print "write_relative_report\n" if $op{debug};
|
print "write_relative_report\n" if $op{debug};
|
||||||
@ -708,6 +865,10 @@ sub write_relative_report
|
|||||||
$stats{'Innodb_row_lock_time_max'} = $stats_present{'Innodb_row_lock_time_max'};
|
$stats{'Innodb_row_lock_time_max'} = $stats_present{'Innodb_row_lock_time_max'};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if($have_aria_vals)
|
||||||
|
{
|
||||||
|
$stats{'Aria_pagecache_blocks_used'} = $stats_present{'Aria_pagecache_blocks_used'};
|
||||||
|
}
|
||||||
|
|
||||||
get_Com_values();
|
get_Com_values();
|
||||||
|
|
||||||
@ -715,6 +876,9 @@ sub write_relative_report
|
|||||||
|
|
||||||
set_myisam_vals();
|
set_myisam_vals();
|
||||||
set_ib_vals() if $have_innodb_vals;
|
set_ib_vals() if $have_innodb_vals;
|
||||||
|
set_aria_vals() if $have_aria_vals;
|
||||||
|
set_subquerycache_vals() if $have_subquerycache_vals;
|
||||||
|
set_binlog_vals() if $have_binlog_vals;
|
||||||
|
|
||||||
write_report();
|
write_report();
|
||||||
}
|
}
|
||||||
@ -731,15 +895,27 @@ sub write_report
|
|||||||
$~ = 'SLOW_DMS', write;
|
$~ = 'SLOW_DMS', write;
|
||||||
write_DMS();
|
write_DMS();
|
||||||
write_Com();
|
write_Com();
|
||||||
|
write_Rows();
|
||||||
$~ = 'SAS', write;
|
$~ = 'SAS', write;
|
||||||
write_qcache();
|
write_qcache();
|
||||||
$~ = 'REPORT_END', write;
|
$~ = 'REPORT_END', write;
|
||||||
|
$~ = 'THREADS', write;
|
||||||
|
if($use_thread_pool)
|
||||||
|
{
|
||||||
|
$~ = 'THREADPOOL', write;
|
||||||
|
} else {
|
||||||
|
$~ = 'THREADPERCONNECTION', write;
|
||||||
|
}
|
||||||
$~ = 'TAB', write;
|
$~ = 'TAB', write;
|
||||||
|
|
||||||
write_InnoDB() if $have_innodb_vals;
|
write_InnoDB() if $have_innodb_vals;
|
||||||
|
write_Aria() if $have_aria_vals;
|
||||||
|
write_Subquerycache() if $have_subquerycache_vals;
|
||||||
|
write_Binlog() if $have_binlog_vals;
|
||||||
|
write_TokuDB() if $have_tokudb_engine;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub sec_to_dhms # Seconds to days hours:minutes:seconds
|
sub sec_to_dhms # Seconds to days+hours:minutes:seconds
|
||||||
{
|
{
|
||||||
my $s = shift;
|
my $s = shift;
|
||||||
my ($d, $h, $m) = (0, 0, 0);
|
my ($d, $h, $m) = (0, 0, 0);
|
||||||
@ -761,7 +937,7 @@ sub sec_to_dhms # Seconds to days hours:minutes:seconds
|
|||||||
$m = int $s / 60;
|
$m = int $s / 60;
|
||||||
$s -= $m * 60;
|
$s -= $m * 60;
|
||||||
|
|
||||||
return "$d $h:$m:$s";
|
return "$d+$h:$m:$s";
|
||||||
}
|
}
|
||||||
|
|
||||||
sub make_short
|
sub make_short
|
||||||
@ -782,12 +958,11 @@ sub make_short
|
|||||||
}
|
}
|
||||||
|
|
||||||
# What began as a simple but great idea has become the new standard:
|
# What began as a simple but great idea has become the new standard:
|
||||||
# long_query_time in microseconds. For MySQL 5.1.21+ and 6.0.4+ this
|
# long_query_time in microseconds. For MySQL 5.1.21+ this is now
|
||||||
# is now standard. For 4.1 and 5.0 patches, the architects of this
|
# standard. For 4.1 and 5.0 patches, the architects of this idea
|
||||||
# idea provide: http://www.mysqlperformanceblog.com/mysql-patches/
|
# provide: http://www.mysqlperformanceblog.com/mysql-patches/
|
||||||
# Relevant notes in MySQL manual:
|
# Relevant notes in MySQL manual:
|
||||||
# http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
|
# http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
|
||||||
# http://dev.mysql.com/doc/refman/6.0/en/slow-query-log.html
|
|
||||||
#
|
#
|
||||||
# The format_u_time sub simply beautifies long_query_time.
|
# The format_u_time sub simply beautifies long_query_time.
|
||||||
|
|
||||||
@ -848,7 +1023,7 @@ sub email_report # Email given report to $op{'email'}
|
|||||||
open SENDMAIL, "|/usr/sbin/sendmail -t";
|
open SENDMAIL, "|/usr/sbin/sendmail -t";
|
||||||
print SENDMAIL "From: mysqlreport\n";
|
print SENDMAIL "From: mysqlreport\n";
|
||||||
print SENDMAIL "To: $op{email}\n";
|
print SENDMAIL "To: $op{email}\n";
|
||||||
print SENDMAIL "Subject: MySQL status report on " . ($mycnf{'host'} || 'localhost') . "\n\n";
|
print SENDMAIL "Subject: $dbms status report on " . ($mycnf{'host'} || 'localhost') . "\n\n";
|
||||||
print SENDMAIL `cat $report`;
|
print SENDMAIL `cat $report`;
|
||||||
close SENDMAIL;
|
close SENDMAIL;
|
||||||
}
|
}
|
||||||
@ -979,6 +1154,7 @@ sub write_qcache
|
|||||||
# ergo this method is slightly more reliable
|
# ergo this method is slightly more reliable
|
||||||
return if not exists $vars{'query_cache_size'};
|
return if not exists $vars{'query_cache_size'};
|
||||||
return if $vars{'query_cache_size'} == 0;
|
return if $vars{'query_cache_size'} == 0;
|
||||||
|
return if defined($vars{'query_cache_type'}) and $vars{'query_cache_type'} eq 'OFF';
|
||||||
|
|
||||||
$qc_mem_used = $vars{'query_cache_size'} - $stats{'Qcache_free_memory'};
|
$qc_mem_used = $vars{'query_cache_size'} - $stats{'Qcache_free_memory'};
|
||||||
$qc_hi_r = sprintf "%.2f", $stats{'Qcache_hits'} / ($stats{'Qcache_inserts'} ||= 1);
|
$qc_hi_r = sprintf "%.2f", $stats{'Qcache_hits'} / ($stats{'Qcache_inserts'} ||= 1);
|
||||||
@ -988,6 +1164,36 @@ sub write_qcache
|
|||||||
write;
|
write;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub write_Subquerycache
|
||||||
|
{
|
||||||
|
print "write_Subquerycache\n" if $op{debug};
|
||||||
|
|
||||||
|
return if not defined $stats{'Subquery_cache_hit'};
|
||||||
|
return if $stats{'Subquery_cache_hit'} == 0 && $stats{'Subquery_cache_miss'} == 0;
|
||||||
|
|
||||||
|
$~ = 'SUBQUERYCACHE';
|
||||||
|
write;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub write_Binlog
|
||||||
|
{
|
||||||
|
print "write_Binlog\n" if $op{debug};
|
||||||
|
|
||||||
|
return if $binlog_cache_ratio == 0 && $binlog_stmt_cache_ratio == 0;
|
||||||
|
$~ = 'BINLOG';
|
||||||
|
write;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub write_TokuDB
|
||||||
|
{
|
||||||
|
print "write_TokuDB\n" if $op{debug};
|
||||||
|
|
||||||
|
return if $stats{'Tokudb_cachetable_size_current'} == 0;
|
||||||
|
|
||||||
|
$~ = 'TOKUDB';
|
||||||
|
write;
|
||||||
|
}
|
||||||
|
|
||||||
sub write_InnoDB
|
sub write_InnoDB
|
||||||
{
|
{
|
||||||
print "write_InnoDB\n" if $op{debug};
|
print "write_InnoDB\n" if $op{debug};
|
||||||
@ -998,6 +1204,11 @@ sub write_InnoDB
|
|||||||
|
|
||||||
$~ = 'IB';
|
$~ = 'IB';
|
||||||
write;
|
write;
|
||||||
|
if($use_xtradb)
|
||||||
|
{
|
||||||
|
$~ = 'IB_XTRADB';
|
||||||
|
write;
|
||||||
|
}
|
||||||
|
|
||||||
# Innodb_row_lock_ values were added in MySQL 5.0.3
|
# Innodb_row_lock_ values were added in MySQL 5.0.3
|
||||||
if($MySQL_version >= 50003)
|
if($MySQL_version >= 50003)
|
||||||
@ -1005,12 +1216,44 @@ sub write_InnoDB
|
|||||||
$~ = 'IB_LOCK';
|
$~ = 'IB_LOCK';
|
||||||
write;
|
write;
|
||||||
}
|
}
|
||||||
|
if($use_xtradb)
|
||||||
|
{
|
||||||
|
$~ = 'IB_LOCK_XTRADB';
|
||||||
|
write;
|
||||||
|
}
|
||||||
|
|
||||||
# Data, Pages, Rows
|
# Data, Pages, Rows
|
||||||
$~ = 'IB_DPR';
|
$~ = 'IB_DPR';
|
||||||
write;
|
write;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub write_Aria
|
||||||
|
{
|
||||||
|
print "write_Aria\n" if $op{debug};
|
||||||
|
|
||||||
|
return if not defined $stats{'Aria_pagecache_blocks_used'};
|
||||||
|
|
||||||
|
$~ = 'PAGECACHE_BUFF_MAX';
|
||||||
|
write;
|
||||||
|
|
||||||
|
if($pagecache_buffer_usage != -1) { $~ = 'PAGECACHE_BUFF_USAGE', write }
|
||||||
|
|
||||||
|
$~ = 'PAGECACHE_RATIOS';
|
||||||
|
write;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub write_Rows
|
||||||
|
{
|
||||||
|
print "write_Rows\n" if $op{debug};
|
||||||
|
|
||||||
|
$rows_using_indexes = $stats{'Handler_read_first'} + $stats{'Handler_read_key'} + $stats{'Handler_read_next'} + $stats{'Handler_read_prev'};
|
||||||
|
$rows = $rows_using_indexes + $stats{'Handler_read_rnd'} + $stats{'Handler_read_rnd_next'} + $stats{'Sort_rows'};
|
||||||
|
|
||||||
|
$~ = 'ROWS';
|
||||||
|
write;
|
||||||
|
}
|
||||||
|
|
||||||
sub have_op
|
sub have_op
|
||||||
{
|
{
|
||||||
my $key = shift;
|
my $key = shift;
|
||||||
@ -1043,19 +1286,17 @@ sub exit_tasks_and_cleanup
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if($WIN) { `del $tmpfile`; }
|
unlink $tmpfile;
|
||||||
else { `rm -f $tmpfile`; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$op{'infile'} && !$relative_infiles)
|
if(!$op{'infile'} && !$relative_infiles)
|
||||||
{
|
{
|
||||||
if($op{'flush-status'})
|
if($op{'flush-status'})
|
||||||
{
|
{
|
||||||
$query = $dbh->prepare("FLUSH STATUS;");
|
my $query = $dbh->prepare("FLUSH STATUS;");
|
||||||
$query->execute();
|
$query->execute();
|
||||||
|
$query->finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
$query->finish();
|
|
||||||
$dbh->disconnect();
|
$dbh->disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1065,19 +1306,19 @@ sub exit_tasks_and_cleanup
|
|||||||
#
|
#
|
||||||
|
|
||||||
format MYSQL_TIME =
|
format MYSQL_TIME =
|
||||||
MySQL @<<<<<<<<<<<<<<<< uptime @<<<<<<<<<<< @>>>>>>>>>>>>>>>>>>>>>>>>
|
@<<<<<< @<<<<<<<<<<<<<<<<<< uptime @<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
$vars{'version'}, sec_to_dhms($real_uptime), (($op{infile} || $relative_infiles) ? '' : scalar localtime)
|
$dbms, $vars{'version'}, sec_to_dhms($real_uptime), (($op{infile} || $relative_infiles) ? '' : scalar localtime)
|
||||||
.
|
.
|
||||||
|
|
||||||
format KEY_BUFF_MAX =
|
format KEY_BUFF_MAX =
|
||||||
|
|
||||||
__ Key _________________________________________________________________
|
__ Key _________________________________________________________________
|
||||||
Buffer used @>>>>>> of @>>>>>> %Used: @>>>>>
|
Buffer used @>>>>>> of @>>>>>> %Used: @>>>>>
|
||||||
make_short($key_buffer_used, 1), make_short($vars{'key_buffer_size'}, 1), perc($key_buffer_used, $vars{'key_buffer_size'})
|
make_short($key_buffer_used, 1), make_short($vars{'key_buffer_size'}, 1), perc($key_buffer_used, $vars{'key_buffer_size'})
|
||||||
.
|
.
|
||||||
|
|
||||||
format KEY_BUFF_USAGE =
|
format KEY_BUFF_USAGE =
|
||||||
Current @>>>>>> %Usage: @>>>>>
|
Current @>>>>>> %Usage: @>>>>>
|
||||||
make_short($key_buffer_usage, 1), perc($key_buffer_usage, $vars{'key_buffer_size'})
|
make_short($key_buffer_usage, 1), perc($key_buffer_usage, $vars{'key_buffer_size'})
|
||||||
.
|
.
|
||||||
|
|
||||||
@ -1088,166 +1329,197 @@ Read hit @>>>>>%
|
|||||||
$key_read_ratio
|
$key_read_ratio
|
||||||
|
|
||||||
__ Questions ___________________________________________________________
|
__ Questions ___________________________________________________________
|
||||||
Total @>>>>>>>> @>>>>>/s
|
Total @>>>>>>>> @>>>>>/s
|
||||||
make_short($questions), t($questions)
|
make_short($questions), t($questions)
|
||||||
.
|
.
|
||||||
|
|
||||||
format DTQ =
|
format DTQ =
|
||||||
@<<<<<<< @>>>>>>>> @>>>>>/s @>>>>>> @>>>>>
|
@<<<<<<< @>>>>>>>> @>>>>>/s @>>>>>> @>>>>>
|
||||||
$stat_name, make_short($stat_val), t($stat_val), $stat_label, perc($stat_val, $questions)
|
$stat_name, make_short($stat_val), t($stat_val), $stat_label, perc($stat_val, $questions)
|
||||||
.
|
.
|
||||||
|
|
||||||
format SLOW_DMS =
|
format SLOW_DMS =
|
||||||
Slow @<<<<<<< @>>>>>> @>>>>>/s @>>>>> %DMS: @>>>>> Log: @>>
|
Slow @<<<<<<< @>>>>>> @>>>>>/s @>>>>> %DMS: @>>>>> Log: @>>
|
||||||
$slow_query_t, make_short($stats{'Slow_queries'}), t($stats{'Slow_queries'}), perc($stats{'Slow_queries'}, $questions), perc($stats{'Slow_queries'}, $dms), $vars{'log_slow_queries'}
|
$slow_query_t, make_short($stats{'Slow_queries'}), t($stats{'Slow_queries'}), perc($stats{'Slow_queries'}, $questions), perc($stats{'Slow_queries'}, $dms), $vars{'log_slow_queries'}
|
||||||
DMS @>>>>>>>> @>>>>>/s @>>>>>
|
DMS @>>>>>>>> @>>>>>/s @>>>>>
|
||||||
make_short($dms), t($dms), perc($dms, $questions)
|
make_short($dms), t($dms), perc($dms, $questions)
|
||||||
.
|
.
|
||||||
|
|
||||||
format DMS =
|
format DMS =
|
||||||
@<<<<<<< @>>>>>>>> @>>>>>/s @>>>>> @>>>>>
|
@<<<<<<< @>>>>>>>> @>>>>>/s @>>>>> @>>>>>
|
||||||
$stat_name, make_short($stat_val), t($stat_val), perc($stat_val, $questions), perc($stat_val, $dms)
|
$stat_name, make_short($stat_val), t($stat_val), perc($stat_val, $questions), perc($stat_val, $dms)
|
||||||
.
|
.
|
||||||
|
|
||||||
format COM_1 =
|
format COM_1 =
|
||||||
Com_ @>>>>>>>> @>>>>>/s @>>>>>
|
Com_ @>>>>>>>> @>>>>>/s @>>>>>
|
||||||
make_short($stat_val), t($stat_val), perc($stat_val, $questions)
|
make_short($stat_val), t($stat_val), perc($stat_val, $questions)
|
||||||
.
|
.
|
||||||
|
|
||||||
format COM_2 =
|
format COM_2 =
|
||||||
@<<<<<<<<<< @>>>>>> @>>>>>/s @>>>>>
|
@<<<<<<<<<< @>>>>>> @>>>>>/s @>>>>>
|
||||||
$stat_name, make_short($stat_val), t($stat_val), perc($stat_val, $questions)
|
$stat_name, make_short($stat_val), t($stat_val), perc($stat_val, $questions)
|
||||||
.
|
.
|
||||||
|
|
||||||
format SAS =
|
format SAS =
|
||||||
|
|
||||||
__ SELECT and Sort _____________________________________________________
|
__ SELECT and Sort _____________________________________________________
|
||||||
Scan @>>>>>> @>>>>/s %SELECT: @>>>>>
|
Scan @>>>>>> @>>>>>/s %SELECT: @>>>>>
|
||||||
make_short($stats{'Select_scan'}), t($stats{'Select_scan'}), perc($stats{'Select_scan'}, $stats{'Com_select'})
|
make_short($stats{'Select_scan'}), t($stats{'Select_scan'}), perc($stats{'Select_scan'}, $stats{'Com_select'})
|
||||||
Range @>>>>>> @>>>>/s @>>>>>
|
Range @>>>>>> @>>>>>/s @>>>>>
|
||||||
make_short($stats{'Select_range'}), t($stats{'Select_range'}), perc($stats{'Select_range'}, $stats{'Com_select'})
|
make_short($stats{'Select_range'}), t($stats{'Select_range'}), perc($stats{'Select_range'}, $stats{'Com_select'})
|
||||||
Full join @>>>>>> @>>>>/s @>>>>>
|
Full join @>>>>>> @>>>>>/s @>>>>>
|
||||||
make_short($stats{'Select_full_join'}), t($stats{'Select_full_join'}), perc($stats{'Select_full_join'}, $stats{'Com_select'})
|
make_short($stats{'Select_full_join'}), t($stats{'Select_full_join'}), perc($stats{'Select_full_join'}, $stats{'Com_select'})
|
||||||
Range check @>>>>>> @>>>>/s @>>>>>
|
Range check @>>>>>> @>>>>>/s @>>>>>
|
||||||
make_short($stats{'Select_range_check'}), t($stats{'Select_range_check'}), perc($stats{'Select_range_check'}, $stats{'Com_select'})
|
make_short($stats{'Select_range_check'}), t($stats{'Select_range_check'}), perc($stats{'Select_range_check'}, $stats{'Com_select'})
|
||||||
Full rng join @>>>>>> @>>>>/s @>>>>>
|
Full rng join @>>>>>> @>>>>>/s @>>>>>
|
||||||
make_short($stats{'Select_full_range_join'}), t($stats{'Select_full_range_join'}), perc($stats{'Select_full_range_join'}, $stats{'Com_select'})
|
make_short($stats{'Select_full_range_join'}), t($stats{'Select_full_range_join'}), perc($stats{'Select_full_range_join'}, $stats{'Com_select'})
|
||||||
Sort scan @>>>>>> @>>>>/s
|
Sort scan @>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Sort_scan'}), t($stats{'Sort_scan'})
|
make_short($stats{'Sort_scan'}), t($stats{'Sort_scan'})
|
||||||
Sort range @>>>>>> @>>>>/s
|
Sort range @>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Sort_range'}), t($stats{'Sort_range'})
|
make_short($stats{'Sort_range'}), t($stats{'Sort_range'})
|
||||||
Sort mrg pass @>>>>>> @>>>>/s
|
Sort mrg pass @>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Sort_merge_passes'}), t($stats{'Sort_merge_passes'})
|
make_short($stats{'Sort_merge_passes'}), t($stats{'Sort_merge_passes'})
|
||||||
.
|
.
|
||||||
|
|
||||||
format QCACHE =
|
format QCACHE =
|
||||||
|
|
||||||
__ Query Cache _________________________________________________________
|
__ Query Cache _________________________________________________________
|
||||||
Memory usage @>>>>>> of @>>>>>> %Used: @>>>>>
|
Memory usage @>>>>>> of @>>>>>> %Usage: @>>>>>
|
||||||
make_short($qc_mem_used, 1), make_short($vars{'query_cache_size'}, 1), perc($qc_mem_used, $vars{'query_cache_size'})
|
make_short($qc_mem_used, 1), make_short($vars{'query_cache_size'}, 1), perc($qc_mem_used, $vars{'query_cache_size'})
|
||||||
Block Fragmnt @>>>>>%
|
Block Fragmnt @>>>>>%
|
||||||
perc($stats{'Qcache_free_blocks'}, $stats{'Qcache_total_blocks'})
|
perc($stats{'Qcache_free_blocks'}, $stats{'Qcache_total_blocks'})
|
||||||
Hits @>>>>>> @>>>>/s
|
Hits @>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Qcache_hits'}), t($stats{'Qcache_hits'})
|
make_short($stats{'Qcache_hits'}), t($stats{'Qcache_hits'})
|
||||||
Inserts @>>>>>> @>>>>/s
|
Inserts @>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Qcache_inserts'}), t($stats{'Qcache_inserts'})
|
make_short($stats{'Qcache_inserts'}), t($stats{'Qcache_inserts'})
|
||||||
Insrt:Prune @>>>>>>:1 @>>>>/s
|
Insrt:Prune @>>>>>>:1 @>>>>>/s
|
||||||
make_short($qc_ip_r), t($stats{'Qcache_inserts'} - $stats{'Qcache_lowmem_prunes'})
|
make_short($qc_ip_r), t($stats{'Qcache_inserts'} - $stats{'Qcache_lowmem_prunes'})
|
||||||
Hit:Insert @>>>>>>:1
|
Hit:Insert @>>>>>>:1
|
||||||
$qc_hi_r, t($qc_hi_r)
|
$qc_hi_r, t($qc_hi_r)
|
||||||
.
|
.
|
||||||
|
|
||||||
|
format SUBQUERYCACHE =
|
||||||
|
|
||||||
|
__ Subquery Cache ______________________________________________________
|
||||||
|
Hit ratio @>>>>>%
|
||||||
|
perc($stats{'Subquery_cache_hit'} / ($stats{'Subquery_cache_hit'} + $stats{'Subquery_cache_miss'}))
|
||||||
|
Hits @>>>>>> @>>>>>/s
|
||||||
|
make_short($stats{'Subquery_cache_hit'}), t($stats{'Subquery_cache_hit'})
|
||||||
|
Miss @>>>>>> @>>>>>/s
|
||||||
|
make_short($stats{'Subquery_cache_miss'}), t($stats{'Subquery_cache_miss'})
|
||||||
|
.
|
||||||
|
|
||||||
# Not really the end...
|
# Not really the end...
|
||||||
format REPORT_END =
|
format REPORT_END =
|
||||||
|
|
||||||
__ Table Locks _________________________________________________________
|
__ Table Locks _________________________________________________________
|
||||||
Waited @>>>>>>>> @>>>>>/s %Total: @>>>>>
|
Waited @>>>>>>>> @>>>>>/s %Total: @>>>>>
|
||||||
make_short($stats{'Table_locks_waited'}), t($stats{'Table_locks_waited'}), perc($stats{'Table_locks_waited'}, $stats{'Table_locks_waited'} + $stats{'Table_locks_immediate'});
|
make_short($stats{'Table_locks_waited'}), t($stats{'Table_locks_waited'}), perc($stats{'Table_locks_waited'}, $stats{'Table_locks_waited'} + $stats{'Table_locks_immediate'});
|
||||||
Immediate @>>>>>>>> @>>>>>/s
|
Immediate @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Table_locks_immediate'}), t($stats{'Table_locks_immediate'})
|
make_short($stats{'Table_locks_immediate'}), t($stats{'Table_locks_immediate'})
|
||||||
|
|
||||||
__ Tables ______________________________________________________________
|
__ Tables ______________________________________________________________
|
||||||
Open @>>>>>>>> of @>>> %Cache: @>>>>>
|
Open @>>>>>>>> of @>>>>> %Cache: @>>>>>
|
||||||
$stats{'Open_tables'}, $vars{'table_cache'}, perc($stats{'Open_tables'}, $vars{'table_cache'})
|
$stats{'Open_tables'}, $vars{'table_cache'}, perc($stats{'Open_tables'}, $vars{'table_cache'})
|
||||||
Opened @>>>>>>>> @>>>>>/s
|
Opened @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Opened_tables'}), t($stats{'Opened_tables'})
|
make_short($stats{'Opened_tables'}), t($stats{'Opened_tables'})
|
||||||
|
|
||||||
__ Connections _________________________________________________________
|
__ Connections _________________________________________________________
|
||||||
Max used @>>>>>>>> of @>>> %Max: @>>>>>
|
Max used @>>>>>>>> of @>>>>> %Max: @>>>>>
|
||||||
$stats{'Max_used_connections'}, $vars{'max_connections'}, perc($stats{'Max_used_connections'}, $vars{'max_connections'})
|
$stats{'Max_used_connections'}, $vars{'max_connections'}, perc($stats{'Max_used_connections'}, $vars{'max_connections'})
|
||||||
Total @>>>>>>>> @>>>>>/s
|
Total @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Connections'}), t($stats{'Connections'})
|
make_short($stats{'Connections'}), t($stats{'Connections'})
|
||||||
|
|
||||||
__ Created Temp ________________________________________________________
|
__ Created Temp ________________________________________________________
|
||||||
Disk table @>>>>>>>> @>>>>>/s
|
Disk table @>>>>>>>> @>>>>>/s %Disk: @>>>>>
|
||||||
make_short($stats{'Created_tmp_disk_tables'}), t($stats{'Created_tmp_disk_tables'})
|
make_short($stats{'Created_tmp_disk_tables'}), t($stats{'Created_tmp_disk_tables'}), perc($stats{'Created_tmp_disk_tables'}, $stats{'Created_tmp_tables'})
|
||||||
Table @>>>>>>>> @>>>>>/s Size: @>>>>>
|
Table @>>>>>>>> @>>>>>/s Size: @>>>>>
|
||||||
make_short($stats{'Created_tmp_tables'}), t($stats{'Created_tmp_tables'}), make_short($vars{'tmp_table_size'}, 1, 1)
|
make_short($stats{'Created_tmp_tables'}), t($stats{'Created_tmp_tables'}), make_short($vars{'tmp_table_size'}, 1, 1)
|
||||||
File @>>>>>>>> @>>>>>/s
|
File @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Created_tmp_files'}), t($stats{'Created_tmp_files'})
|
make_short($stats{'Created_tmp_files'}), t($stats{'Created_tmp_files'})
|
||||||
.
|
.
|
||||||
|
|
||||||
|
format THREADS =
|
||||||
|
|
||||||
|
__ Threads _____________________________________________________________
|
||||||
|
Running @>>>>>>>> of @>>>>>
|
||||||
|
$stats{'Threads_running'}, $stats{'Threads_connected'}
|
||||||
|
Created @>>>>>>>> @>>>>>/s
|
||||||
|
make_short($stats{'Threads_created'}), t($stats{'Threads_created'})
|
||||||
|
Slow @>>>>>>>> @>>>>>/s
|
||||||
|
$stats{'Slow_launch_threads'}, t($stats{'Slow_launch_threads'})
|
||||||
|
.
|
||||||
|
|
||||||
|
format THREADPERCONNECTION =
|
||||||
|
Cached @>>>>>>>> of @>>>>> %Hit: @>>>>>
|
||||||
|
$stats{'Threads_cached'}, $vars{'thread_cache_size'}, make_short(100 - perc($stats{'Threads_created'}, $stats{'Connections'}))
|
||||||
|
.
|
||||||
|
|
||||||
|
format THREADPOOL =
|
||||||
|
Threadpool @>>>>>>>> of @>>>>> %Used: @>>>>>
|
||||||
|
$stats{'Threadpool_threads'} + $stats{'Threadpool_idle_threads'}, $vars{'thread_pool_max_threads'}, make_short(perc($stats{'Threadpool_threads'} + $stats{'Threadpool_idle_threads'}, $vars{'thread_pool_max_threads'}))
|
||||||
|
Running @>>>>>>>> of @>>>>> %Running: @>>>>>
|
||||||
|
$stats{'Threadpool_threads'}, $vars{'thread_pool_max_threads'}, make_short(perc($stats{'Threadpool_threads'}, $vars{'thread_pool_max_threads'}))
|
||||||
|
Idle @>>>>>>>> of @>>>>> %Idle: @>>>>>
|
||||||
|
$stats{'Threadpool_idle_threads'}, $vars{'thread_pool_max_threads'}, make_short(perc($stats{'Threadpool_idle_threads'}, $vars{'thread_pool_max_threads'}))
|
||||||
|
.
|
||||||
|
|
||||||
format TAB =
|
format TAB =
|
||||||
|
|
||||||
__ Threads _____________________________________________________________
|
|
||||||
Running @>>>>>>>> of @>>>
|
|
||||||
$stats{'Threads_running'}, $stats{'Threads_connected'}
|
|
||||||
Cached @>>>>>>>> of @>>> %Hit: @>>>>>
|
|
||||||
$stats{'Threads_cached'}, $vars{'thread_cache_size'}, make_short(100 - perc($stats{'Threads_created'}, $stats{'Connections'}))
|
|
||||||
Created @>>>>>>>> @>>>>>/s
|
|
||||||
make_short($stats{'Threads_created'}), t($stats{'Threads_created'})
|
|
||||||
Slow @>>>>>>>> @>>>>>/s
|
|
||||||
$stats{'Slow_launch_threads'}, t($stats{'Slow_launch_threads'})
|
|
||||||
|
|
||||||
__ Aborted _____________________________________________________________
|
__ Aborted _____________________________________________________________
|
||||||
Clients @>>>>>>>> @>>>>>/s
|
Clients @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Aborted_clients'}), t($stats{'Aborted_clients'})
|
make_short($stats{'Aborted_clients'}), t($stats{'Aborted_clients'})
|
||||||
Connects @>>>>>>>> @>>>>>/s
|
Connects @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Aborted_connects'}), t($stats{'Aborted_connects'})
|
make_short($stats{'Aborted_connects'}), t($stats{'Aborted_connects'})
|
||||||
|
|
||||||
__ Bytes _______________________________________________________________
|
__ Bytes _______________________________________________________________
|
||||||
Sent @>>>>>>>> @>>>>>/s
|
Sent @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Bytes_sent'}), t($stats{'Bytes_sent'})
|
make_short($stats{'Bytes_sent'}), t($stats{'Bytes_sent'})
|
||||||
Received @>>>>>>>> @>>>>>/s
|
Received @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Bytes_received'}), t($stats{'Bytes_received'})
|
make_short($stats{'Bytes_received'}), t($stats{'Bytes_received'})
|
||||||
.
|
.
|
||||||
|
|
||||||
format IB =
|
format IB =
|
||||||
|
|
||||||
__ InnoDB Buffer Pool __________________________________________________
|
__ InnoDB Buffer Pool __________________________________________________
|
||||||
Usage @>>>>>> of @>>>>>> %Used: @>>>>>
|
Usage @>>>>>> of @>>>>>> %Usage: @>>>>>
|
||||||
make_short($ib_bp_used, 1), make_short($ib_bp_total, 1), perc($ib_bp_used, $ib_bp_total)
|
make_short($ib_bp_used, 1), make_short($ib_bp_total, 1), perc($ib_bp_used, $ib_bp_total)
|
||||||
Read hit @>>>>>%
|
Read hit @>>>>>%
|
||||||
$ib_bp_read_ratio;
|
$ib_bp_read_ratio;
|
||||||
Pages
|
Pages
|
||||||
Free @>>>>>>>> %Total: @>>>>>
|
Free @>>>>>>>> %Total: @>>>>>
|
||||||
make_short($stats{'Innodb_buffer_pool_pages_free'}), perc($stats{'Innodb_buffer_pool_pages_free'}, $stats{'Innodb_buffer_pool_pages_total'})
|
make_short($stats{'Innodb_buffer_pool_pages_free'}), perc($stats{'Innodb_buffer_pool_pages_free'}, $stats{'Innodb_buffer_pool_pages_total'})
|
||||||
Data @>>>>>>>> @>>>>> %Drty: @>>>>>
|
Data @>>>>>>>> @>>>>> %Drty: @>>>>>
|
||||||
make_short($stats{'Innodb_buffer_pool_pages_data'}), perc($stats{'Innodb_buffer_pool_pages_data'}, $stats{'Innodb_buffer_pool_pages_total'}), perc($stats{'Innodb_buffer_pool_pages_dirty'}, $stats{'Innodb_buffer_pool_pages_data'})
|
make_short($stats{'Innodb_buffer_pool_pages_data'}), perc($stats{'Innodb_buffer_pool_pages_data'}, $stats{'Innodb_buffer_pool_pages_total'}), perc($stats{'Innodb_buffer_pool_pages_dirty'}, $stats{'Innodb_buffer_pool_pages_data'})
|
||||||
Misc @>>>>>>>> @>>>>>
|
Misc @>>>>>>>> @>>>>>
|
||||||
$stats{'Innodb_buffer_pool_pages_misc'}, perc($stats{'Innodb_buffer_pool_pages_misc'}, $stats{'Innodb_buffer_pool_pages_total'})
|
$stats{'Innodb_buffer_pool_pages_misc'}, perc($stats{'Innodb_buffer_pool_pages_misc'}, $stats{'Innodb_buffer_pool_pages_total'})
|
||||||
Latched @>>>>>>>> @>>>>>
|
Latched @>>>>>>>> @>>>>>
|
||||||
$stats{'Innodb_buffer_pool_pages_latched'}, perc($stats{'Innodb_buffer_pool_pages_latched'}, $stats{'Innodb_buffer_pool_pages_total'})
|
$stats{'Innodb_buffer_pool_pages_latched'}, perc($stats{'Innodb_buffer_pool_pages_latched'}, $stats{'Innodb_buffer_pool_pages_total'})
|
||||||
Reads @>>>>>>>> @>>>>>/s
|
Reads @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_buffer_pool_read_requests'}), t($stats{'Innodb_buffer_pool_read_requests'})
|
make_short($stats{'Innodb_buffer_pool_read_requests'}), t($stats{'Innodb_buffer_pool_read_requests'})
|
||||||
From file @>>>>>>>> @>>>>>/s @>>>>>
|
From disk @>>>>>>>> @>>>>>/s %Disk: @>>>>>
|
||||||
make_short($stats{'Innodb_buffer_pool_reads'}), t($stats{'Innodb_buffer_pool_reads'}), perc($stats{'Innodb_buffer_pool_reads'}, $stats{'Innodb_buffer_pool_read_requests'})
|
make_short($stats{'Innodb_buffer_pool_reads'}), t($stats{'Innodb_buffer_pool_reads'}), perc($stats{'Innodb_buffer_pool_reads'}, $stats{'Innodb_buffer_pool_read_requests'})
|
||||||
Ahead Rnd @>>>>>>>> @>>>>>/s
|
Ahead Rnd @>>>>>>>> @>>>>>/s
|
||||||
$stats{'Innodb_buffer_pool_read_ahead_rnd'}, t($stats{'Innodb_buffer_pool_read_ahead_rnd'})
|
$stats{'Innodb_buffer_pool_read_ahead_rnd'}, t($stats{'Innodb_buffer_pool_read_ahead_rnd'})
|
||||||
Ahead Sql @>>>>>>>> @>>>>>/s
|
# Ahead Sql @>>>>>>>> @>>>>>/s
|
||||||
$stats{'Innodb_buffer_pool_read_ahead_seq'}, t($stats{'Innodb_buffer_pool_read_ahead_seq'})
|
#$stats{'Innodb_buffer_pool_read_ahead_seq'}, t($stats{'Innodb_buffer_pool_read_ahead_seq'})
|
||||||
Writes @>>>>>>>> @>>>>>/s
|
Writes @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_buffer_pool_write_requests'}), t($stats{'Innodb_buffer_pool_write_requests'})
|
make_short($stats{'Innodb_buffer_pool_write_requests'}), t($stats{'Innodb_buffer_pool_write_requests'})
|
||||||
Flushes @>>>>>>>> @>>>>>/s
|
Wait Free @>>>>>>>> @>>>>>/s %Wait: @>>>>>
|
||||||
|
$stats{'Innodb_buffer_pool_wait_free'}, t($stats{'Innodb_buffer_pool_wait_free'}), perc($stats{'Innodb_buffer_pool_wait_free'}, $stats{'Innodb_buffer_pool_write_requests'})
|
||||||
|
Flushes @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_buffer_pool_pages_flushed'}), t($stats{'Innodb_buffer_pool_pages_flushed'})
|
make_short($stats{'Innodb_buffer_pool_pages_flushed'}), t($stats{'Innodb_buffer_pool_pages_flushed'})
|
||||||
Wait Free @>>>>>>>> @>>>>>/s
|
.
|
||||||
$stats{'Innodb_buffer_pool_wait_free'}, t($stats{'Innodb_buffer_pool_wait_free'})
|
|
||||||
|
format IB_XTRADB =
|
||||||
|
LRU @>>>>>>>> @>>>>>/s %LRU: @>>>>>
|
||||||
|
make_short($stats{'Innodb_buffer_pool_pages_lru_flushed'}), t($stats{'Innodb_buffer_pool_pages_lru_flushed'}), perc($stats{'Innodb_buffer_pool_pages_lru_flushed'}, $stats{'Innodb_buffer_pool_pages_flushed'})
|
||||||
.
|
.
|
||||||
|
|
||||||
format IB_LOCK =
|
format IB_LOCK =
|
||||||
|
|
||||||
__ InnoDB Lock _________________________________________________________
|
__ InnoDB Lock _________________________________________________________
|
||||||
Waits @>>>>>>>> @>>>>>/s
|
Waits @>>>>>>>> @>>>>>/s
|
||||||
$stats{'Innodb_row_lock_waits'}, t($stats{'Innodb_row_lock_waits'})
|
$stats{'Innodb_row_lock_waits'}, t($stats{'Innodb_row_lock_waits'})
|
||||||
Current @>>>>>>>>
|
Current @>>>>>>>>
|
||||||
$stats{'Innodb_row_lock_current_waits'}
|
$stats{'Innodb_row_lock_current_waits'}
|
||||||
@ -1260,15 +1532,20 @@ $stats{'Innodb_row_lock_time_avg'}
|
|||||||
$stats{'Innodb_row_lock_time_max'}
|
$stats{'Innodb_row_lock_time_max'}
|
||||||
.
|
.
|
||||||
|
|
||||||
|
format IB_LOCK_XTRADB =
|
||||||
|
Trx history @>>>>>>>>
|
||||||
|
make_short($stats{'Innodb_history_list_length'})
|
||||||
|
.
|
||||||
|
|
||||||
format IB_DPR =
|
format IB_DPR =
|
||||||
|
|
||||||
__ InnoDB Data, Pages, Rows ____________________________________________
|
__ InnoDB Data, Pages, Rows ____________________________________________
|
||||||
Data
|
Data
|
||||||
Reads @>>>>>>>> @>>>>>/s
|
Reads @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_data_reads'}), t($stats{'Innodb_data_reads'})
|
make_short($stats{'Innodb_data_reads'}), t($stats{'Innodb_data_reads'})
|
||||||
Writes @>>>>>>>> @>>>>>/s
|
Writes @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_data_writes'}), t($stats{'Innodb_data_writes'})
|
make_short($stats{'Innodb_data_writes'}), t($stats{'Innodb_data_writes'})
|
||||||
fsync @>>>>>>>> @>>>>>/s
|
fsync @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_data_fsyncs'}), t($stats{'Innodb_data_fsyncs'})
|
make_short($stats{'Innodb_data_fsyncs'}), t($stats{'Innodb_data_fsyncs'})
|
||||||
Pending
|
Pending
|
||||||
Reads @>>>>>>>>
|
Reads @>>>>>>>>
|
||||||
@ -1279,20 +1556,71 @@ $stats{'Innodb_data_pending_writes'}, t($stats{'Innodb_data_pending_writes'})
|
|||||||
$stats{'Innodb_data_pending_fsyncs'}, t($stats{'Innodb_data_pending_fsyncs'})
|
$stats{'Innodb_data_pending_fsyncs'}, t($stats{'Innodb_data_pending_fsyncs'})
|
||||||
|
|
||||||
Pages
|
Pages
|
||||||
Created @>>>>>>>> @>>>>>/s
|
Created @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_pages_created'}), t($stats{'Innodb_pages_created'})
|
make_short($stats{'Innodb_pages_created'}), t($stats{'Innodb_pages_created'})
|
||||||
Read @>>>>>>>> @>>>>>/s
|
Read @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_pages_read'}), t($stats{'Innodb_pages_read'})
|
make_short($stats{'Innodb_pages_read'}), t($stats{'Innodb_pages_read'})
|
||||||
Written @>>>>>>>> @>>>>>/s
|
Written @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_pages_written'}), t($stats{'Innodb_pages_written'})
|
make_short($stats{'Innodb_pages_written'}), t($stats{'Innodb_pages_written'})
|
||||||
|
|
||||||
Rows
|
Rows
|
||||||
Deleted @>>>>>>>> @>>>>>/s
|
Deleted @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_rows_deleted'}), t($stats{'Innodb_rows_deleted'})
|
make_short($stats{'Innodb_rows_deleted'}), t($stats{'Innodb_rows_deleted'})
|
||||||
Inserted @>>>>>>>> @>>>>>/s
|
Inserted @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_rows_inserted'}), t($stats{'Innodb_rows_inserted'})
|
make_short($stats{'Innodb_rows_inserted'}), t($stats{'Innodb_rows_inserted'})
|
||||||
Read @>>>>>>>> @>>>>>/s
|
Read @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_rows_read'}), t($stats{'Innodb_rows_read'})
|
make_short($stats{'Innodb_rows_read'}), t($stats{'Innodb_rows_read'})
|
||||||
Updated @>>>>>>>> @>>>>>/s
|
Updated @>>>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Innodb_rows_updated'}), t($stats{'Innodb_rows_updated'})
|
make_short($stats{'Innodb_rows_updated'}), t($stats{'Innodb_rows_updated'})
|
||||||
.
|
.
|
||||||
|
|
||||||
|
format PAGECACHE_BUFF_MAX =
|
||||||
|
|
||||||
|
__ Aria Pagecache ______________________________________________________
|
||||||
|
Buffer used @>>>>>> of @>>>>>> %Used: @>>>>>
|
||||||
|
make_short($pagecache_buffer_used, 1), make_short($vars{'aria_pagecache_buffer_size'}, 1), perc($pagecache_buffer_used, $vars{'aria_pagecache_buffer_size'})
|
||||||
|
.
|
||||||
|
|
||||||
|
format PAGECACHE_BUFF_USAGE =
|
||||||
|
Current @>>>>>> %Usage: @>>>>>
|
||||||
|
make_short($pagecache_buffer_usage, 1), perc($pagecache_buffer_usage, $vars{'aria_pagecache_buffer_size'})
|
||||||
|
.
|
||||||
|
|
||||||
|
format PAGECACHE_RATIOS =
|
||||||
|
Write hit @>>>>>%
|
||||||
|
$pagecache_write_ratio
|
||||||
|
Read hit @>>>>>%
|
||||||
|
$pagecache_read_ratio
|
||||||
|
.
|
||||||
|
|
||||||
|
format BINLOG =
|
||||||
|
|
||||||
|
__ Binary Log Cache _____________________________________________________
|
||||||
|
Disk use
|
||||||
|
Transactional @>>>>>%
|
||||||
|
perc($binlog_cache_ratio)
|
||||||
|
Non transactional @>>>>>%
|
||||||
|
perc($binlog_stmt_cache_ratio)
|
||||||
|
.
|
||||||
|
|
||||||
|
format TOKUDB =
|
||||||
|
|
||||||
|
__ TokuDB ______________________________________________________________
|
||||||
|
Cachetable @>>>>>> of @>>>>>> %Usage: @>>>>>
|
||||||
|
make_short($stats{Tokudb_cachetable_size_current}, 1), make_short($vars{tokudb_cache_size}, 1), perc($stats{Tokudb_cachetable_size_current}, $vars{tokudb_cache_size})
|
||||||
|
Miss @>>>>>> @>>>>>/s
|
||||||
|
make_short($stats{'Tokudb_cachetable_miss'}), t($stats{'Tokudb_cachetable_miss'})
|
||||||
|
Evictions @>>>>>> @>>>>>/s
|
||||||
|
make_short($stats{'Tokudb_cachetable_evictions'}), t($stats{'Tokudb_cachetable_evictions'})
|
||||||
|
.
|
||||||
|
|
||||||
|
format ROWS =
|
||||||
|
|
||||||
|
__ Rows ________________________________________________________________
|
||||||
|
Rows @>>>>>>>> @>>>>>/s
|
||||||
|
make_short($rows), t($rows)
|
||||||
|
Using idx @>>>>>>>> @>>>>>/s %Index: @>>>>>
|
||||||
|
make_short($rows_using_indexes), t($rows_using_indexes), perc($rows_using_indexes,$rows)
|
||||||
|
Rows/question @>>>>>>
|
||||||
|
make_short($rows/$questions)
|
||||||
|
.
|
||||||
|
13
debian/control
vendored
13
debian/control
vendored
@ -12,6 +12,7 @@ Build-Depends: bison,
|
|||||||
libaio-dev,
|
libaio-dev,
|
||||||
libboost-dev,
|
libboost-dev,
|
||||||
libjudy-dev,
|
libjudy-dev,
|
||||||
|
libkrb5-dev,
|
||||||
libncurses5-dev (>= 5.0-6~),
|
libncurses5-dev (>= 5.0-6~),
|
||||||
libpam0g-dev,
|
libpam0g-dev,
|
||||||
libreadline-gplv2-dev,
|
libreadline-gplv2-dev,
|
||||||
@ -441,3 +442,15 @@ Depends: libcrack2 (>= 2.9.0), mariadb-server-10.2
|
|||||||
Description: CrackLib Password Validation Plugin for MariaDB
|
Description: CrackLib Password Validation Plugin for MariaDB
|
||||||
This password validation plugin uses cracklib to allow only
|
This password validation plugin uses cracklib to allow only
|
||||||
sufficiently secure (as defined by cracklib) user passwords in MariaDB.
|
sufficiently secure (as defined by cracklib) user passwords in MariaDB.
|
||||||
|
|
||||||
|
Package: mariadb-gssapi-server-10.1
|
||||||
|
Section: database
|
||||||
|
Architecture: any
|
||||||
|
Depends: libgssapi-krb5-2, mariadb-server-10.1
|
||||||
|
Description: GSSAPI authentication plugin for MariaDB server
|
||||||
|
|
||||||
|
Package: mariadb-gssapi-client-10.1
|
||||||
|
Section: database
|
||||||
|
Architecture: any
|
||||||
|
Depends: libgssapi-krb5-2, mariadb-client-10.1
|
||||||
|
Description: GSSAPI authentication plugin for MariaDB client
|
||||||
|
2
debian/copyright
vendored
2
debian/copyright
vendored
@ -9,7 +9,7 @@ The MariaDB packages were initally made by http://ourdelta.org/, and
|
|||||||
are now managed by the MariaDB development team,
|
are now managed by the MariaDB development team,
|
||||||
maria-developers@lists.launchpad.net
|
maria-developers@lists.launchpad.net
|
||||||
|
|
||||||
MariaDB can be downloaded from http://downloads.askmonty.org/mariadb/
|
MariaDB can be downloaded from https://downloads.mariadb.org/
|
||||||
|
|
||||||
Copyright:
|
Copyright:
|
||||||
|
|
||||||
|
2
debian/mariadb-client-10.2.README.Debian
vendored
2
debian/mariadb-client-10.2.README.Debian
vendored
@ -1,4 +1,4 @@
|
|||||||
FAQ:
|
FAQ:
|
||||||
|
|
||||||
Q: My <tab> completition is gone, why?
|
Q: My <tab> completion is gone, why?
|
||||||
A: You have "no-auto-rehash" in the "[mysql]" section of /etc/mysql/my.cnf!
|
A: You have "no-auto-rehash" in the "[mysql]" section of /etc/mysql/my.cnf!
|
||||||
|
1
debian/mariadb-gssapi-client-10.1.files
vendored
Normal file
1
debian/mariadb-gssapi-client-10.1.files
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
usr/lib/mysql/plugin/auth_gssapi_client.so
|
1
debian/mariadb-gssapi-server-10.1.files
vendored
Normal file
1
debian/mariadb-gssapi-server-10.1.files
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
usr/lib/mysql/plugin/auth_gssapi.so
|
4
debian/mariadb-server-10.2.files.in
vendored
4
debian/mariadb-server-10.2.files.in
vendored
@ -6,6 +6,7 @@ usr/lib/mysql/plugin/ha_blackhole.so
|
|||||||
usr/lib/mysql/plugin/ha_federated.so
|
usr/lib/mysql/plugin/ha_federated.so
|
||||||
usr/lib/mysql/plugin/ha_federatedx.so
|
usr/lib/mysql/plugin/ha_federatedx.so
|
||||||
usr/lib/mysql/plugin/ha_innodb.so
|
usr/lib/mysql/plugin/ha_innodb.so
|
||||||
|
usr/lib/mysql/plugin/ha_mroonga.so
|
||||||
usr/lib/mysql/plugin/ha_sphinx.so
|
usr/lib/mysql/plugin/ha_sphinx.so
|
||||||
usr/lib/mysql/plugin/handlersocket.so
|
usr/lib/mysql/plugin/handlersocket.so
|
||||||
usr/lib/mysql/plugin/locales.so
|
usr/lib/mysql/plugin/locales.so
|
||||||
@ -18,6 +19,7 @@ usr/lib/mysql/plugin/server_audit.so
|
|||||||
usr/lib/mysql/plugin/simple_password_check.so
|
usr/lib/mysql/plugin/simple_password_check.so
|
||||||
usr/lib/mysql/plugin/sql_errlog.so
|
usr/lib/mysql/plugin/sql_errlog.so
|
||||||
usr/lib/mysql/plugin/wsrep_info.so
|
usr/lib/mysql/plugin/wsrep_info.so
|
||||||
|
usr/lib/mysql/plugin/user_variables.so
|
||||||
usr/lib/libhsclient.so.*
|
usr/lib/libhsclient.so.*
|
||||||
etc/apparmor.d/usr.sbin.mysqld
|
etc/apparmor.d/usr.sbin.mysqld
|
||||||
usr/share/apport/package-hooks/source_mariadb-10.2.py
|
usr/share/apport/package-hooks/source_mariadb-10.2.py
|
||||||
@ -83,6 +85,8 @@ usr/share/mysql/echo_stderr
|
|||||||
usr/share/mysql/errmsg-utf8.txt
|
usr/share/mysql/errmsg-utf8.txt
|
||||||
usr/share/mysql/fill_help_tables.sql
|
usr/share/mysql/fill_help_tables.sql
|
||||||
usr/share/mysql/maria_add_gis_sp_bootstrap.sql
|
usr/share/mysql/maria_add_gis_sp_bootstrap.sql
|
||||||
|
usr/share/mysql/mroonga/install.sql
|
||||||
|
usr/share/mysql/mroonga/uninstall.sql
|
||||||
usr/share/mysql/mysql_system_tables_data.sql
|
usr/share/mysql/mysql_system_tables_data.sql
|
||||||
usr/share/mysql/mysql_system_tables.sql
|
usr/share/mysql/mysql_system_tables.sql
|
||||||
usr/share/mysql/mysql_performance_tables.sql
|
usr/share/mysql/mysql_performance_tables.sql
|
||||||
|
@ -10,18 +10,11 @@
|
|||||||
compress
|
compress
|
||||||
sharedscripts
|
sharedscripts
|
||||||
postrotate
|
postrotate
|
||||||
test -x /usr/bin/mysqladmin || exit 0
|
test -x /usr/bin/mysqladmin || exit 0
|
||||||
|
|
||||||
# If this fails, check debian.conf!
|
if [ -f `my_print_defaults --mysqld | grep -oP "pid-file=\K[^$]+"` ]; then
|
||||||
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
|
# If this fails, check debian.conf!
|
||||||
if [ -z "`$MYADMIN ping 2>/dev/null`" ]; then
|
mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
|
||||||
# Really no mysqld or rather a missing debian-sys-maint user?
|
fi
|
||||||
# If this occurs and is not a error please report a bug.
|
|
||||||
if ps cax | grep -q mysqld; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
$MYADMIN flush-logs
|
|
||||||
fi
|
|
||||||
endscript
|
endscript
|
||||||
}
|
}
|
||||||
|
5
debian/mariadb-server-10.2.mysql.init
vendored
5
debian/mariadb-server-10.2.mysql.init
vendored
@ -37,6 +37,9 @@ umask 077
|
|||||||
# so break my scripts.
|
# so break my scripts.
|
||||||
export HOME=/etc/mysql/
|
export HOME=/etc/mysql/
|
||||||
|
|
||||||
|
# Source default config file.
|
||||||
|
[ -r /etc/default/mariadb ] && . /etc/default/mariadb
|
||||||
|
|
||||||
## Fetch a particular option from mysql's invocation.
|
## Fetch a particular option from mysql's invocation.
|
||||||
#
|
#
|
||||||
# Usage: void mysqld_get_param option
|
# Usage: void mysqld_get_param option
|
||||||
@ -109,7 +112,7 @@ case "${1:-''}" in
|
|||||||
/usr/bin/mysqld_safe "${@:2}" > /dev/null 2>&1 &
|
/usr/bin/mysqld_safe "${@:2}" > /dev/null 2>&1 &
|
||||||
|
|
||||||
# 6s was reported in #352070 to be too little
|
# 6s was reported in #352070 to be too little
|
||||||
for i in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-30}"); do
|
for i in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-60}"); do
|
||||||
sleep 1
|
sleep 1
|
||||||
if mysqld_status check_alive nowarn ; then break; fi
|
if mysqld_status check_alive nowarn ; then break; fi
|
||||||
log_progress_msg "."
|
log_progress_msg "."
|
||||||
|
5
debian/mariadb-server-10.2.postinst
vendored
5
debian/mariadb-server-10.2.postinst
vendored
@ -240,7 +240,10 @@ db_stop # in case invoke failes
|
|||||||
# Thus MariaDB server is started via init.d script, which in turn redirects to
|
# Thus MariaDB server is started via init.d script, which in turn redirects to
|
||||||
# systemctl. If we upgrade from MySQL mysql.service may be masked, which also
|
# systemctl. If we upgrade from MySQL mysql.service may be masked, which also
|
||||||
# means init.d script is disabled. Unmask mysql service explicitely.
|
# means init.d script is disabled. Unmask mysql service explicitely.
|
||||||
deb-systemd-helper unmask mysql.service >/dev/null || true
|
# Check first that the command exists, to avoid emitting any warning messages.
|
||||||
|
if [ -x "$(command -v deb-systemd-helper)" ]; then
|
||||||
|
deb-systemd-helper unmask mysql.service > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
#DEBHELPER#
|
#DEBHELPER#
|
||||||
|
|
||||||
|
@ -694,14 +694,14 @@ int main(int argc, char **argv)
|
|||||||
if (*filename == '\0')
|
if (*filename == '\0')
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error; File name missing\n");
|
fprintf(stderr, "Error; File name missing\n");
|
||||||
goto error;
|
goto error_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* stat the file to get size and page count */
|
/* stat the file to get size and page count */
|
||||||
if (stat(filename, &st))
|
if (stat(filename, &st))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error; %s cannot be found\n", filename);
|
fprintf(stderr, "Error; %s cannot be found\n", filename);
|
||||||
goto error;
|
goto error_out;
|
||||||
}
|
}
|
||||||
size= st.st_size;
|
size= st.st_size;
|
||||||
|
|
||||||
@ -711,7 +711,7 @@ int main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
fprintf(stderr, "Error; %s cannot be opened", filename);
|
fprintf(stderr, "Error; %s cannot be opened", filename);
|
||||||
perror(" ");
|
perror(" ");
|
||||||
goto error;
|
goto error_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
big_buf = (unsigned char *)malloc(2 * UNIV_PAGE_SIZE_MAX);
|
big_buf = (unsigned char *)malloc(2 * UNIV_PAGE_SIZE_MAX);
|
||||||
@ -719,7 +719,7 @@ int main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
fprintf(stderr, "Error; failed to allocate memory\n");
|
fprintf(stderr, "Error; failed to allocate memory\n");
|
||||||
perror("");
|
perror("");
|
||||||
goto error;
|
goto error_f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure the page is aligned */
|
/* Make sure the page is aligned */
|
||||||
@ -731,7 +731,7 @@ int main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
fprintf(stderr, "Error; failed to allocate memory\n");
|
fprintf(stderr, "Error; failed to allocate memory\n");
|
||||||
perror("");
|
perror("");
|
||||||
return 1;
|
goto error_big_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure the page is aligned */
|
/* Make sure the page is aligned */
|
||||||
@ -983,12 +983,17 @@ ok:
|
|||||||
print_stats();
|
print_stats();
|
||||||
free(big_xdes);
|
free(big_xdes);
|
||||||
free(big_buf);
|
free(big_buf);
|
||||||
|
fclose(f);
|
||||||
my_end(0);
|
my_end(0);
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
free(big_xdes);
|
free(big_xdes);
|
||||||
|
error_big_buf:
|
||||||
free(big_buf);
|
free(big_buf);
|
||||||
|
error_f:
|
||||||
|
fclose(f);
|
||||||
|
error_out:
|
||||||
my_end(0);
|
my_end(0);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,17 @@ before calling SSL_new();
|
|||||||
|
|
||||||
*** end Note ***
|
*** end Note ***
|
||||||
|
|
||||||
|
yaSSL Release notes, version 2.3.9 (12/01/2015)
|
||||||
|
This release of yaSSL fixes two client side Diffie-Hellman problems.
|
||||||
|
yaSSL was only handling the cases of zero or one leading zeros for the key
|
||||||
|
agreement instead of potentially any number. This caused about 1 in 50,000
|
||||||
|
connections to fail when using DHE cipher suites. The second problem was
|
||||||
|
the case where a server would send a public value shorter than the prime
|
||||||
|
value, causing about 1 in 128 client connections to fail, and also
|
||||||
|
caused the yaSSL client to read off the end of memory. All client side
|
||||||
|
DHE cipher suite users should update.
|
||||||
|
Thanks to Adam Langely (agl@imperialviolet.org) for the detailed report!
|
||||||
|
|
||||||
yaSSL Release notes, version 2.3.8 (9/17/2015)
|
yaSSL Release notes, version 2.3.8 (9/17/2015)
|
||||||
This release of yaSSL fixes a high security vulnerability. All users
|
This release of yaSSL fixes a high security vulnerability. All users
|
||||||
SHOULD update. If using yaSSL for TLS on the server side with private
|
SHOULD update. If using yaSSL for TLS on the server side with private
|
||||||
|
@ -378,6 +378,7 @@ public:
|
|||||||
|
|
||||||
uint get_agreedKeyLength() const;
|
uint get_agreedKeyLength() const;
|
||||||
const byte* get_agreedKey() const;
|
const byte* get_agreedKey() const;
|
||||||
|
uint get_publicKeyLength() const;
|
||||||
const byte* get_publicKey() const;
|
const byte* get_publicKey() const;
|
||||||
void makeAgreement(const byte*, unsigned int);
|
void makeAgreement(const byte*, unsigned int);
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
#include "rsa.h"
|
#include "rsa.h"
|
||||||
|
|
||||||
|
|
||||||
#define YASSL_VERSION "2.3.8"
|
#define YASSL_VERSION "2.3.9"
|
||||||
|
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
|
@ -342,6 +342,7 @@ private:
|
|||||||
Sessions& GetSessions(); // forward singletons
|
Sessions& GetSessions(); // forward singletons
|
||||||
sslFactory& GetSSL_Factory();
|
sslFactory& GetSSL_Factory();
|
||||||
Errors& GetErrors();
|
Errors& GetErrors();
|
||||||
|
bool HasErrors();
|
||||||
|
|
||||||
|
|
||||||
// openSSL method and context types
|
// openSSL method and context types
|
||||||
|
@ -751,9 +751,10 @@ struct DiffieHellman::DHImpl {
|
|||||||
byte* publicKey_;
|
byte* publicKey_;
|
||||||
byte* privateKey_;
|
byte* privateKey_;
|
||||||
byte* agreedKey_;
|
byte* agreedKey_;
|
||||||
|
uint pubKeyLength_;
|
||||||
|
|
||||||
DHImpl(TaoCrypt::RandomNumberGenerator& r) : ranPool_(r), publicKey_(0),
|
DHImpl(TaoCrypt::RandomNumberGenerator& r) : ranPool_(r), publicKey_(0),
|
||||||
privateKey_(0), agreedKey_(0) {}
|
privateKey_(0), agreedKey_(0), pubKeyLength_(0) {}
|
||||||
~DHImpl()
|
~DHImpl()
|
||||||
{
|
{
|
||||||
ysArrayDelete(agreedKey_);
|
ysArrayDelete(agreedKey_);
|
||||||
@ -762,7 +763,7 @@ struct DiffieHellman::DHImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
DHImpl(const DHImpl& that) : dh_(that.dh_), ranPool_(that.ranPool_),
|
DHImpl(const DHImpl& that) : dh_(that.dh_), ranPool_(that.ranPool_),
|
||||||
publicKey_(0), privateKey_(0), agreedKey_(0)
|
publicKey_(0), privateKey_(0), agreedKey_(0), pubKeyLength_(0)
|
||||||
{
|
{
|
||||||
uint length = dh_.GetByteLength();
|
uint length = dh_.GetByteLength();
|
||||||
AllocKeys(length, length, length);
|
AllocKeys(length, length, length);
|
||||||
@ -810,7 +811,7 @@ DiffieHellman::DiffieHellman(const byte* p, unsigned int pSz, const byte* g,
|
|||||||
using TaoCrypt::Integer;
|
using TaoCrypt::Integer;
|
||||||
|
|
||||||
pimpl_->dh_.Initialize(Integer(p, pSz).Ref(), Integer(g, gSz).Ref());
|
pimpl_->dh_.Initialize(Integer(p, pSz).Ref(), Integer(g, gSz).Ref());
|
||||||
pimpl_->publicKey_ = NEW_YS opaque[pubSz];
|
pimpl_->publicKey_ = NEW_YS opaque[pimpl_->pubKeyLength_ = pubSz];
|
||||||
memcpy(pimpl_->publicKey_, pub, pubSz);
|
memcpy(pimpl_->publicKey_, pub, pubSz);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -869,6 +870,10 @@ const byte* DiffieHellman::get_agreedKey() const
|
|||||||
return pimpl_->agreedKey_;
|
return pimpl_->agreedKey_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint DiffieHellman::get_publicKeyLength() const
|
||||||
|
{
|
||||||
|
return pimpl_->pubKeyLength_;
|
||||||
|
}
|
||||||
|
|
||||||
const byte* DiffieHellman::get_publicKey() const
|
const byte* DiffieHellman::get_publicKey() const
|
||||||
{
|
{
|
||||||
|
@ -1493,7 +1493,8 @@ int SSLeay_add_ssl_algorithms() // compatibility only
|
|||||||
|
|
||||||
void ERR_remove_state(unsigned long)
|
void ERR_remove_state(unsigned long)
|
||||||
{
|
{
|
||||||
GetErrors().Remove();
|
if (HasErrors())
|
||||||
|
GetErrors().Remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -121,11 +121,11 @@ void SetErrorString(YasslError error, char* buffer)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case certificate_error :
|
case certificate_error :
|
||||||
strncpy(buffer, "unable to proccess cerificate", max);
|
strncpy(buffer, "unable to process cerificate", max);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case privateKey_error :
|
case privateKey_error :
|
||||||
strncpy(buffer, "unable to proccess private key, bad format", max);
|
strncpy(buffer, "unable to process private key, bad format", max);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case badVersion_error :
|
case badVersion_error :
|
||||||
|
@ -109,15 +109,12 @@ void ClientDiffieHellmanPublic::build(SSL& ssl)
|
|||||||
uint keyLength = dhClient.get_agreedKeyLength(); // pub and agree same
|
uint keyLength = dhClient.get_agreedKeyLength(); // pub and agree same
|
||||||
|
|
||||||
alloc(keyLength, true);
|
alloc(keyLength, true);
|
||||||
dhClient.makeAgreement(dhServer.get_publicKey(), keyLength);
|
dhClient.makeAgreement(dhServer.get_publicKey(),
|
||||||
|
dhServer.get_publicKeyLength());
|
||||||
c16toa(keyLength, Yc_);
|
c16toa(keyLength, Yc_);
|
||||||
memcpy(Yc_ + KEY_OFFSET, dhClient.get_publicKey(), keyLength);
|
memcpy(Yc_ + KEY_OFFSET, dhClient.get_publicKey(), keyLength);
|
||||||
|
|
||||||
// because of encoding first byte might be zero, don't use it for preMaster
|
ssl.set_preMaster(dhClient.get_agreedKey(), keyLength);
|
||||||
if (*dhClient.get_agreedKey() == 0)
|
|
||||||
ssl.set_preMaster(dhClient.get_agreedKey() + 1, keyLength - 1);
|
|
||||||
else
|
|
||||||
ssl.set_preMaster(dhClient.get_agreedKey(), keyLength);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -321,11 +318,7 @@ void ClientDiffieHellmanPublic::read(SSL& ssl, input_buffer& input)
|
|||||||
}
|
}
|
||||||
dh.makeAgreement(Yc_, keyLength);
|
dh.makeAgreement(Yc_, keyLength);
|
||||||
|
|
||||||
// because of encoding, first byte might be 0, don't use for preMaster
|
ssl.set_preMaster(dh.get_agreedKey(), dh.get_agreedKeyLength());
|
||||||
if (*dh.get_agreedKey() == 0)
|
|
||||||
ssl.set_preMaster(dh.get_agreedKey() + 1, dh.get_agreedKeyLength() - 1);
|
|
||||||
else
|
|
||||||
ssl.set_preMaster(dh.get_agreedKey(), dh.get_agreedKeyLength());
|
|
||||||
ssl.makeMasterSecret();
|
ssl.makeMasterSecret();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -807,6 +807,19 @@ void SSL::set_random(const opaque* random, ConnectionEnd sender)
|
|||||||
// store client pre master secret
|
// store client pre master secret
|
||||||
void SSL::set_preMaster(const opaque* pre, uint sz)
|
void SSL::set_preMaster(const opaque* pre, uint sz)
|
||||||
{
|
{
|
||||||
|
uint i(0); // trim leading zeros
|
||||||
|
uint fullSz(sz);
|
||||||
|
|
||||||
|
while (i++ < fullSz && *pre == 0) {
|
||||||
|
sz--;
|
||||||
|
pre++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sz == 0) {
|
||||||
|
SetError(bad_input);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
secure_.use_connection().AllocPreSecret(sz);
|
secure_.use_connection().AllocPreSecret(sz);
|
||||||
memcpy(secure_.use_connection().pre_master_secret_, pre, sz);
|
memcpy(secure_.use_connection().pre_master_secret_, pre, sz);
|
||||||
}
|
}
|
||||||
@ -924,6 +937,8 @@ void SSL::order_error()
|
|||||||
// Create and store the master secret see page 32, 6.1
|
// Create and store the master secret see page 32, 6.1
|
||||||
void SSL::makeMasterSecret()
|
void SSL::makeMasterSecret()
|
||||||
{
|
{
|
||||||
|
if (GetError()) return;
|
||||||
|
|
||||||
if (isTLS())
|
if (isTLS())
|
||||||
makeTLSMasterSecret();
|
makeTLSMasterSecret();
|
||||||
else {
|
else {
|
||||||
@ -1673,6 +1688,11 @@ Errors& GetErrors()
|
|||||||
return *errorsInstance;
|
return *errorsInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool HasErrors()
|
||||||
|
{
|
||||||
|
return (errorsInstance != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
typedef Mutex::Lock Lock;
|
typedef Mutex::Lock Lock;
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
/*
|
/*
|
||||||
Optimized function-like macros for the x86 architecture (_WIN32 included).
|
Optimized function-like macros for the x86 architecture (_WIN32 included).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define sint2korr(A) (int16) (*((int16 *) (A)))
|
#define sint2korr(A) (int16) (*((int16 *) (A)))
|
||||||
#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \
|
#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \
|
||||||
(((uint32) 255L << 24) | \
|
(((uint32) 255L << 24) | \
|
||||||
@ -31,7 +32,7 @@
|
|||||||
Attention: Please, note, uint3korr reads 4 bytes (not 3)!
|
Attention: Please, note, uint3korr reads 4 bytes (not 3)!
|
||||||
It means, that you have to provide enough allocated space.
|
It means, that you have to provide enough allocated space.
|
||||||
*/
|
*/
|
||||||
#if defined(HAVE_purify) && !defined(_WIN32)
|
#if defined(HAVE_valgrind) && !defined(_WIN32)
|
||||||
#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\
|
#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\
|
||||||
(((uint32) ((uchar) (A)[1])) << 8) +\
|
(((uint32) ((uchar) (A)[1])) << 8) +\
|
||||||
(((uint32) ((uchar) (A)[2])) << 16))
|
(((uint32) ((uchar) (A)[2])) << 16))
|
||||||
@ -39,17 +40,21 @@
|
|||||||
#define uint3korr(A) (uint32) (*((unsigned int *) (A)) & 0xFFFFFF)
|
#define uint3korr(A) (uint32) (*((unsigned int *) (A)) & 0xFFFFFF)
|
||||||
#endif
|
#endif
|
||||||
#define uint4korr(A) (uint32) (*((uint32 *) (A)))
|
#define uint4korr(A) (uint32) (*((uint32 *) (A)))
|
||||||
#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\
|
|
||||||
(((uint32) ((uchar) (A)[1])) << 8) +\
|
|
||||||
(((uint32) ((uchar) (A)[2])) << 16) +\
|
static inline ulonglong uint5korr(const void *p)
|
||||||
(((uint32) ((uchar) (A)[3])) << 24)) +\
|
{
|
||||||
(((ulonglong) ((uchar) (A)[4])) << 32))
|
ulonglong a= *(uint32 *) p;
|
||||||
#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \
|
ulonglong b= *(4 + (uchar *) p);
|
||||||
(((uint32) ((uchar) (A)[1])) << 8) + \
|
return a | (b << 32);
|
||||||
(((uint32) ((uchar) (A)[2])) << 16) + \
|
}
|
||||||
(((uint32) ((uchar) (A)[3])) << 24)) + \
|
static inline ulonglong uint6korr(const void *p)
|
||||||
(((ulonglong) ((uchar) (A)[4])) << 32) + \
|
{
|
||||||
(((ulonglong) ((uchar) (A)[5])) << 40))
|
ulonglong a= *(uint32 *) p;
|
||||||
|
ulonglong b= *(uint16 *) (4 + (char *) p);
|
||||||
|
return a | (b << 32);
|
||||||
|
}
|
||||||
|
|
||||||
#define uint8korr(A) (ulonglong) (*((ulonglong *) (A)))
|
#define uint8korr(A) (ulonglong) (*((ulonglong *) (A)))
|
||||||
#define sint8korr(A) (longlong) (*((longlong *) (A)))
|
#define sint8korr(A) (longlong) (*((longlong *) (A)))
|
||||||
|
|
||||||
@ -61,23 +66,67 @@
|
|||||||
*(T+1)=(uchar) (((uint) (A) >> 8));\
|
*(T+1)=(uchar) (((uint) (A) >> 8));\
|
||||||
*(T+2)=(uchar) (((A) >> 16));\
|
*(T+2)=(uchar) (((A) >> 16));\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define int4store(T,A) do { uchar *pT= (uchar*)(T);\
|
#define int4store(T,A) do { uchar *pT= (uchar*)(T);\
|
||||||
*((uint32 *) (pT))= (uint32) (A); \
|
*((uint32 *) (pT))= (uint32) (A); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define int5store(T,A) do { *(T)= (uchar)((A));\
|
#define int5store(T,A) do { uchar *pT= (uchar*)(T);\
|
||||||
*((T)+1)=(uchar) (((A) >> 8));\
|
*((uint32 *) (pT))= (uint32) (A); \
|
||||||
*((T)+2)=(uchar) (((A) >> 16));\
|
*((pT)+4)=(uchar) (((A) >> 32));\
|
||||||
*((T)+3)=(uchar) (((A) >> 24));\
|
} while (0)
|
||||||
*((T)+4)=(uchar) (((A) >> 32));\
|
|
||||||
} while(0)
|
#define int6store(T,A) do { uchar *pT= (uchar*)(T);\
|
||||||
#define int6store(T,A) do { *(T)= (uchar)((A)); \
|
*((uint32 *) (pT))= (uint32) (A); \
|
||||||
*((T)+1)=(uchar) (((A) >> 8)); \
|
*((uint16*)(pT+4))= (uint16) (A >> 32);\
|
||||||
*((T)+2)=(uchar) (((A) >> 16)); \
|
} while (0)
|
||||||
*((T)+3)=(uchar) (((A) >> 24)); \
|
|
||||||
*((T)+4)=(uchar) (((A) >> 32)); \
|
|
||||||
*((T)+5)=(uchar) (((A) >> 40)); \
|
|
||||||
} while(0)
|
|
||||||
#define int8store(T,A) do { uchar *pT= (uchar*)(T);\
|
#define int8store(T,A) do { uchar *pT= (uchar*)(T);\
|
||||||
*((ulonglong *) (pT))= (ulonglong) (A);\
|
*((ulonglong *) (pT))= (ulonglong) (A);\
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
|
||||||
|
#define HAVE_mi_uint5korr
|
||||||
|
#define HAVE_mi_uint6korr
|
||||||
|
#define HAVE_mi_uint7korr
|
||||||
|
#define HAVE_mi_uint78orr
|
||||||
|
|
||||||
|
/* Read numbers stored in high-bytes-first order */
|
||||||
|
|
||||||
|
static inline ulonglong mi_uint5korr(const void *p)
|
||||||
|
{
|
||||||
|
ulonglong a= *(uint32 *) p;
|
||||||
|
ulonglong b= *(4 + (uchar *) p);
|
||||||
|
ulonglong v= (a | (b << 32)) << 24;
|
||||||
|
asm ("bswapq %0" : "=r" (v) : "0" (v));
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline ulonglong mi_uint6korr(const void *p)
|
||||||
|
{
|
||||||
|
ulonglong a= *(uint32 *) p;
|
||||||
|
ulonglong b= *(uint16 *) (4 + (char *) p);
|
||||||
|
ulonglong v= (a | (b << 32)) << 16;
|
||||||
|
asm ("bswapq %0" : "=r" (v) : "0" (v));
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline ulonglong mi_uint7korr(const void *p)
|
||||||
|
{
|
||||||
|
ulonglong a= *(uint32 *) p;
|
||||||
|
ulonglong b= *(uint16 *) (4 + (char *) p);
|
||||||
|
ulonglong c= *(6 + (uchar *) p);
|
||||||
|
ulonglong v= (a | (b << 32) | (c << 48)) << 8;
|
||||||
|
asm ("bswapq %0" : "=r" (v) : "0" (v));
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline ulonglong mi_uint8korr(const void *p)
|
||||||
|
{
|
||||||
|
ulonglong v= *(ulonglong *) p;
|
||||||
|
asm ("bswapq %0" : "=r" (v) : "0" (v));
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -400,7 +400,6 @@ struct my_charset_handler_st
|
|||||||
{
|
{
|
||||||
my_bool (*init)(struct charset_info_st *, MY_CHARSET_LOADER *loader);
|
my_bool (*init)(struct charset_info_st *, MY_CHARSET_LOADER *loader);
|
||||||
/* Multibyte routines */
|
/* Multibyte routines */
|
||||||
uint (*ismbchar)(CHARSET_INFO *, const char *, const char *);
|
|
||||||
uint (*mbcharlen)(CHARSET_INFO *, uint c);
|
uint (*mbcharlen)(CHARSET_INFO *, uint c);
|
||||||
size_t (*numchars)(CHARSET_INFO *, const char *b, const char *e);
|
size_t (*numchars)(CHARSET_INFO *, const char *b, const char *e);
|
||||||
size_t (*charpos)(CHARSET_INFO *, const char *b, const char *e,
|
size_t (*charpos)(CHARSET_INFO *, const char *b, const char *e,
|
||||||
@ -533,6 +532,7 @@ struct my_charset_handler_st
|
|||||||
|
|
||||||
extern MY_CHARSET_HANDLER my_charset_8bit_handler;
|
extern MY_CHARSET_HANDLER my_charset_8bit_handler;
|
||||||
extern MY_CHARSET_HANDLER my_charset_ucs2_handler;
|
extern MY_CHARSET_HANDLER my_charset_ucs2_handler;
|
||||||
|
extern MY_CHARSET_HANDLER my_charset_utf8_handler;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -800,16 +800,6 @@ uint my_instr_mb(CHARSET_INFO *,
|
|||||||
const char *s, size_t s_length,
|
const char *s, size_t s_length,
|
||||||
my_match_t *match, uint nmatch);
|
my_match_t *match, uint nmatch);
|
||||||
|
|
||||||
int my_strnncoll_mb_bin(CHARSET_INFO * cs,
|
|
||||||
const uchar *s, size_t slen,
|
|
||||||
const uchar *t, size_t tlen,
|
|
||||||
my_bool t_is_prefix);
|
|
||||||
|
|
||||||
int my_strnncollsp_mb_bin(CHARSET_INFO *cs,
|
|
||||||
const uchar *a, size_t a_length,
|
|
||||||
const uchar *b, size_t b_length,
|
|
||||||
my_bool diff_if_only_endspace_difference);
|
|
||||||
|
|
||||||
int my_wildcmp_mb_bin(CHARSET_INFO *cs,
|
int my_wildcmp_mb_bin(CHARSET_INFO *cs,
|
||||||
const char *str,const char *str_end,
|
const char *str,const char *str_end,
|
||||||
const char *wildstr,const char *wildend,
|
const char *wildstr,const char *wildend,
|
||||||
@ -889,6 +879,18 @@ uint32 my_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs,
|
|||||||
const char *from, uint32 from_length,
|
const char *from, uint32 from_length,
|
||||||
CHARSET_INFO *from_cs, uint *errors);
|
CHARSET_INFO *from_cs, uint *errors);
|
||||||
|
|
||||||
|
/**
|
||||||
|
An extended version of my_convert(), to pass non-default mb_wc() and wc_mb().
|
||||||
|
For example, String::copy_printable() which is used in
|
||||||
|
Protocol::store_warning() uses this to escape control
|
||||||
|
and non-convertable characters.
|
||||||
|
*/
|
||||||
|
uint32 my_convert_using_func(char *to, uint32 to_length, CHARSET_INFO *to_cs,
|
||||||
|
my_charset_conv_wc_mb mb_wc,
|
||||||
|
const char *from, uint32 from_length,
|
||||||
|
CHARSET_INFO *from_cs,
|
||||||
|
my_charset_conv_mb_wc wc_mb,
|
||||||
|
uint *errors);
|
||||||
/*
|
/*
|
||||||
Convert a string between two character sets.
|
Convert a string between two character sets.
|
||||||
Bad byte sequences as well as characters that cannot be
|
Bad byte sequences as well as characters that cannot be
|
||||||
@ -959,8 +961,42 @@ size_t my_convert_fix(CHARSET_INFO *dstcs, char *dst, size_t dst_length,
|
|||||||
#define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b)))
|
#define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b)))
|
||||||
#define my_charpos(cs, b, e, num) (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num))
|
#define my_charpos(cs, b, e, num) (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num))
|
||||||
|
|
||||||
#define use_mb(s) ((s)->cset->ismbchar != NULL)
|
#define use_mb(s) ((s)->mbmaxlen > 1)
|
||||||
#define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b)))
|
/**
|
||||||
|
Detect if the leftmost character in a string is a valid multi-byte character
|
||||||
|
and return its length, or return 0 otherwise.
|
||||||
|
@param cs - character set
|
||||||
|
@param str - the beginning of the string
|
||||||
|
@param end - the string end (the next byte after the string)
|
||||||
|
@return >0, for a multi-byte character
|
||||||
|
@rerurn 0, for a single byte character, broken sequence, empty string.
|
||||||
|
*/
|
||||||
|
static inline
|
||||||
|
uint my_ismbchar(CHARSET_INFO *cs, const char *str, const char *end)
|
||||||
|
{
|
||||||
|
int char_length= (cs->cset->charlen)(cs, (const uchar *) str,
|
||||||
|
(const uchar *) end);
|
||||||
|
return char_length > 1 ? (uint) char_length : 0U;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Return length of the leftmost character in a string.
|
||||||
|
@param cs - character set
|
||||||
|
@param str - the beginning of the string
|
||||||
|
@param end - the string end (the next byte after the string)
|
||||||
|
@return <=0 on errors (EOL, wrong byte sequence)
|
||||||
|
@return 1 on a single byte character
|
||||||
|
@return >1 on a multi-byte character
|
||||||
|
|
||||||
|
Note, inlike my_ismbchar(), 1 is returned for a single byte character.
|
||||||
|
*/
|
||||||
|
static inline
|
||||||
|
int my_charlen(CHARSET_INFO *cs, const char *str, const char *end)
|
||||||
|
{
|
||||||
|
return (cs->cset->charlen)(cs, (const uchar *) str,
|
||||||
|
(const uchar *) end);
|
||||||
|
}
|
||||||
#ifdef USE_MB
|
#ifdef USE_MB
|
||||||
#define my_mbcharlen(s, a) ((s)->cset->mbcharlen((s),(a)))
|
#define my_mbcharlen(s, a) ((s)->cset->mbcharlen((s),(a)))
|
||||||
#else
|
#else
|
||||||
|
@ -280,6 +280,12 @@ make_atomic_store(32)
|
|||||||
make_atomic_store(64)
|
make_atomic_store(64)
|
||||||
make_atomic_store(ptr)
|
make_atomic_store(ptr)
|
||||||
|
|
||||||
|
#if SIZEOF_LONG == 4
|
||||||
|
#define my_atomic_addlong(A,B) my_atomic_add32((int32*) (A), (B))
|
||||||
|
#else
|
||||||
|
#define my_atomic_addlong(A,B) my_atomic_add64((int64*) (A), (B))
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef _atomic_h_cleanup_
|
#ifdef _atomic_h_cleanup_
|
||||||
#include _atomic_h_cleanup_
|
#include _atomic_h_cleanup_
|
||||||
#undef _atomic_h_cleanup_
|
#undef _atomic_h_cleanup_
|
||||||
|
@ -121,6 +121,15 @@ static inline uint32 my_reverse_bits(uint32 key)
|
|||||||
_my_bits_reverse_table[(key>>24) ];
|
_my_bits_reverse_table[(key>>24) ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
a number with the n lowest bits set
|
||||||
|
an overflow-safe version of (1 << n) - 1
|
||||||
|
*/
|
||||||
|
static inline uint32 my_set_bits(int n)
|
||||||
|
{
|
||||||
|
return (((1UL << (n - 1)) - 1) << 1) | 1;
|
||||||
|
}
|
||||||
|
|
||||||
C_MODE_END
|
C_MODE_END
|
||||||
|
|
||||||
#endif /* MY_BIT_INCLUDED */
|
#endif /* MY_BIT_INCLUDED */
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
#define MY_CONTEXT_USE_X86_64_GCC_ASM
|
#define MY_CONTEXT_USE_X86_64_GCC_ASM
|
||||||
#elif defined(__GNUC__) && __GNUC__ >= 3 && defined(__i386__)
|
#elif defined(__GNUC__) && __GNUC__ >= 3 && defined(__i386__)
|
||||||
#define MY_CONTEXT_USE_I386_GCC_ASM
|
#define MY_CONTEXT_USE_I386_GCC_ASM
|
||||||
#elif defined(HAVE_UCONTEXT)
|
#elif defined(HAVE_UCONTEXT_H)
|
||||||
#define MY_CONTEXT_USE_UCONTEXT
|
#define MY_CONTEXT_USE_UCONTEXT
|
||||||
#else
|
#else
|
||||||
#define MY_CONTEXT_DISABLE
|
#define MY_CONTEXT_DISABLE
|
||||||
@ -178,7 +178,7 @@ struct mysql_async_context {
|
|||||||
resumed, eg. whether we woke up due to connection completed or timeout
|
resumed, eg. whether we woke up due to connection completed or timeout
|
||||||
in mysql_real_connect_cont().
|
in mysql_real_connect_cont().
|
||||||
*/
|
*/
|
||||||
unsigned int events_occured;
|
unsigned int events_occurred;
|
||||||
/*
|
/*
|
||||||
This is set to the result of the whole asynchronous operation when it
|
This is set to the result of the whole asynchronous operation when it
|
||||||
completes. It uses a union, as different calls have different return
|
completes. It uses a union, as different calls have different return
|
||||||
|
@ -198,20 +198,6 @@
|
|||||||
#define likely(x) __builtin_expect(((x) != 0),1)
|
#define likely(x) __builtin_expect(((x) != 0),1)
|
||||||
#define unlikely(x) __builtin_expect(((x) != 0),0)
|
#define unlikely(x) __builtin_expect(((x) != 0),0)
|
||||||
|
|
||||||
/*
|
|
||||||
now let's figure out if inline functions are supported
|
|
||||||
autoconf defines 'inline' to be empty, if not
|
|
||||||
*/
|
|
||||||
#define inline_test_1(X) X ## 1
|
|
||||||
#define inline_test_2(X) inline_test_1(X)
|
|
||||||
#if inline_test_2(inline) != 1
|
|
||||||
#define HAVE_INLINE
|
|
||||||
#else
|
|
||||||
#error Compiler does not support inline!
|
|
||||||
#endif
|
|
||||||
#undef inline_test_2
|
|
||||||
#undef inline_test_1
|
|
||||||
|
|
||||||
/* Fix problem with S_ISLNK() on Linux */
|
/* Fix problem with S_ISLNK() on Linux */
|
||||||
#if defined(TARGET_OS_LINUX) || defined(__GLIBC__)
|
#if defined(TARGET_OS_LINUX) || defined(__GLIBC__)
|
||||||
#undef _GNU_SOURCE
|
#undef _GNU_SOURCE
|
||||||
@ -452,7 +438,7 @@ extern "C" int madvise(void *addr, size_t len, int behav);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef STDERR_FILENO
|
#ifndef STDERR_FILENO
|
||||||
#define STDERR_FILENO 2
|
#define STDERR_FILENO fileno(stderr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef SO_EXT
|
#ifndef SO_EXT
|
||||||
@ -823,6 +809,9 @@ inline unsigned long long my_double2ulonglong(double d)
|
|||||||
#else
|
#else
|
||||||
#define finite(x) (1.0 / fabs(x) > 0.0)
|
#define finite(x) (1.0 / fabs(x) > 0.0)
|
||||||
#endif /* HAVE_FINITE */
|
#endif /* HAVE_FINITE */
|
||||||
|
#elif (__cplusplus >= 201103L)
|
||||||
|
#include <cmath>
|
||||||
|
static inline bool isfinite(double x) { return std::isfinite(x); }
|
||||||
#endif /* isfinite */
|
#endif /* isfinite */
|
||||||
|
|
||||||
#ifndef HAVE_ISNAN
|
#ifndef HAVE_ISNAN
|
||||||
|
@ -36,9 +36,11 @@ C_MODE_START
|
|||||||
#ifdef HAVE_ARPA_INET_H
|
#ifdef HAVE_ARPA_INET_H
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_POLL
|
#if defined(HAVE_POLL_H)
|
||||||
|
#include <poll.h>
|
||||||
|
#elif defined(HAVE_SYS_POLL_H)
|
||||||
#include <sys/poll.h>
|
#include <sys/poll.h>
|
||||||
#endif
|
#endif /* defined(HAVE_POLL_H) */
|
||||||
#ifdef HAVE_SYS_IOCTL_H
|
#ifdef HAVE_SYS_IOCTL_H
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -672,7 +672,7 @@ extern pthread_mutexattr_t my_errorcheck_mutexattr;
|
|||||||
#define ESRCH 1
|
#define ESRCH 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef ulong my_thread_id;
|
typedef int64 my_thread_id;
|
||||||
|
|
||||||
extern void my_threadattr_global_init(void);
|
extern void my_threadattr_global_init(void);
|
||||||
extern my_bool my_thread_global_init(void);
|
extern my_bool my_thread_global_init(void);
|
||||||
@ -694,7 +694,7 @@ extern void my_mutex_end(void);
|
|||||||
We need to have at least 256K stack to handle calls to myisamchk_init()
|
We need to have at least 256K stack to handle calls to myisamchk_init()
|
||||||
with the current number of keys and key parts.
|
with the current number of keys and key parts.
|
||||||
*/
|
*/
|
||||||
#define DEFAULT_THREAD_STACK (288*1024L)
|
#define DEFAULT_THREAD_STACK (290*1024L)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MY_PTHREAD_LOCK_READ 0
|
#define MY_PTHREAD_LOCK_READ 0
|
||||||
|
@ -52,11 +52,16 @@
|
|||||||
(((uint32) (((const uchar*) (A))[2])) << 8) +\
|
(((uint32) (((const uchar*) (A))[2])) << 8) +\
|
||||||
(((uint32) (((const uchar*) (A))[1])) << 16) +\
|
(((uint32) (((const uchar*) (A))[1])) << 16) +\
|
||||||
(((uint32) (((const uchar*) (A))[0])) << 24)))
|
(((uint32) (((const uchar*) (A))[0])) << 24)))
|
||||||
|
|
||||||
|
#ifndef HAVE_mi_uint5korr
|
||||||
#define mi_uint5korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[4])) +\
|
#define mi_uint5korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[4])) +\
|
||||||
(((uint32) (((const uchar*) (A))[3])) << 8) +\
|
(((uint32) (((const uchar*) (A))[3])) << 8) +\
|
||||||
(((uint32) (((const uchar*) (A))[2])) << 16) +\
|
(((uint32) (((const uchar*) (A))[2])) << 16) +\
|
||||||
(((uint32) (((const uchar*) (A))[1])) << 24)) +\
|
(((uint32) (((const uchar*) (A))[1])) << 24)) +\
|
||||||
(((ulonglong) (((const uchar*) (A))[0])) << 32))
|
(((ulonglong) (((const uchar*) (A))[0])) << 32))
|
||||||
|
#endif /* HAVE_mi_uint5korr */
|
||||||
|
|
||||||
|
#ifndef HAVE_mi_uint6korr
|
||||||
#define mi_uint6korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[5])) +\
|
#define mi_uint6korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[5])) +\
|
||||||
(((uint32) (((const uchar*) (A))[4])) << 8) +\
|
(((uint32) (((const uchar*) (A))[4])) << 8) +\
|
||||||
(((uint32) (((const uchar*) (A))[3])) << 16) +\
|
(((uint32) (((const uchar*) (A))[3])) << 16) +\
|
||||||
@ -64,6 +69,9 @@
|
|||||||
(((ulonglong) (((uint32) (((const uchar*) (A))[1])) +\
|
(((ulonglong) (((uint32) (((const uchar*) (A))[1])) +\
|
||||||
(((uint32) (((const uchar*) (A))[0]) << 8)))) <<\
|
(((uint32) (((const uchar*) (A))[0]) << 8)))) <<\
|
||||||
32))
|
32))
|
||||||
|
#endif /* HAVE_mi_uint6korr */
|
||||||
|
|
||||||
|
#ifndef HAVE_mi_uint7korr
|
||||||
#define mi_uint7korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[6])) +\
|
#define mi_uint7korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[6])) +\
|
||||||
(((uint32) (((const uchar*) (A))[5])) << 8) +\
|
(((uint32) (((const uchar*) (A))[5])) << 8) +\
|
||||||
(((uint32) (((const uchar*) (A))[4])) << 16) +\
|
(((uint32) (((const uchar*) (A))[4])) << 16) +\
|
||||||
@ -72,6 +80,9 @@
|
|||||||
(((uint32) (((const uchar*) (A))[1])) << 8) +\
|
(((uint32) (((const uchar*) (A))[1])) << 8) +\
|
||||||
(((uint32) (((const uchar*) (A))[0])) << 16))) <<\
|
(((uint32) (((const uchar*) (A))[0])) << 16))) <<\
|
||||||
32))
|
32))
|
||||||
|
#endif /* HAVE_mi_uint7korr */
|
||||||
|
|
||||||
|
#ifndef HAVE_mi_uint8korr
|
||||||
#define mi_uint8korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[7])) +\
|
#define mi_uint8korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[7])) +\
|
||||||
(((uint32) (((const uchar*) (A))[6])) << 8) +\
|
(((uint32) (((const uchar*) (A))[6])) << 8) +\
|
||||||
(((uint32) (((const uchar*) (A))[5])) << 16) +\
|
(((uint32) (((const uchar*) (A))[5])) << 16) +\
|
||||||
@ -81,6 +92,7 @@
|
|||||||
(((uint32) (((const uchar*) (A))[1])) << 16) +\
|
(((uint32) (((const uchar*) (A))[1])) << 16) +\
|
||||||
(((uint32) (((const uchar*) (A))[0])) << 24))) <<\
|
(((uint32) (((const uchar*) (A))[0])) << 24))) <<\
|
||||||
32))
|
32))
|
||||||
|
#endif /* HAVE_mi_uint8korr */
|
||||||
|
|
||||||
/* This one is for uniformity */
|
/* This one is for uniformity */
|
||||||
#define mi_int1store(T,A) *((uchar*)(T))= (uchar) (A)
|
#define mi_int1store(T,A) *((uchar*)(T))= (uchar) (A)
|
||||||
|
@ -9,6 +9,9 @@ enum enum_server_command
|
|||||||
COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE,
|
COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE,
|
||||||
COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE,
|
COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE,
|
||||||
COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON,
|
COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON,
|
||||||
|
COM_MDB_GAP_BEG,
|
||||||
|
COM_MDB_GAP_END=253,
|
||||||
|
COM_MULTI,
|
||||||
COM_END
|
COM_END
|
||||||
};
|
};
|
||||||
struct st_vio;
|
struct st_vio;
|
||||||
|
@ -56,7 +56,7 @@ struct mysql_event_general
|
|||||||
unsigned int general_command_length;
|
unsigned int general_command_length;
|
||||||
const char *general_query;
|
const char *general_query;
|
||||||
unsigned int general_query_length;
|
unsigned int general_query_length;
|
||||||
struct charset_info_st *general_charset;
|
const struct charset_info_st *general_charset;
|
||||||
unsigned long long general_time;
|
unsigned long long general_time;
|
||||||
unsigned long long general_rows;
|
unsigned long long general_rows;
|
||||||
/* Added in version 0x302 */
|
/* Added in version 0x302 */
|
||||||
|
@ -422,7 +422,7 @@ struct mysql_event_general
|
|||||||
unsigned int general_command_length;
|
unsigned int general_command_length;
|
||||||
const char *general_query;
|
const char *general_query;
|
||||||
unsigned int general_query_length;
|
unsigned int general_query_length;
|
||||||
struct charset_info_st *general_charset;
|
const struct charset_info_st *general_charset;
|
||||||
unsigned long long general_time;
|
unsigned long long general_time;
|
||||||
unsigned long long general_rows;
|
unsigned long long general_rows;
|
||||||
unsigned long long query_id;
|
unsigned long long query_id;
|
||||||
|
@ -19,8 +19,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|||||||
#ifndef MYSQL_SOCKET_H
|
#ifndef MYSQL_SOCKET_H
|
||||||
#define MYSQL_SOCKET_H
|
#define MYSQL_SOCKET_H
|
||||||
|
|
||||||
/* For strlen() */
|
|
||||||
#include <string.h>
|
|
||||||
/* For MY_STAT */
|
/* For MY_STAT */
|
||||||
#include <my_dir.h>
|
#include <my_dir.h>
|
||||||
/* For my_chsize */
|
/* For my_chsize */
|
||||||
|
@ -1240,7 +1240,7 @@ static inline int inline_mysql_thread_create(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void inline_mysql_thread_set_psi_id(ulong id)
|
static inline void inline_mysql_thread_set_psi_id(my_thread_id id)
|
||||||
{
|
{
|
||||||
struct PSI_thread *psi= PSI_THREAD_CALL(get_thread)();
|
struct PSI_thread *psi= PSI_THREAD_CALL(get_thread)();
|
||||||
PSI_THREAD_CALL(set_thread_id)(psi, id);
|
PSI_THREAD_CALL(set_thread_id)(psi, id);
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
if requested.
|
if requested.
|
||||||
|
|
||||||
The functions are documented at
|
The functions are documented at
|
||||||
http://kb.askmonty.org/en/progress-reporting#how-to-add-support-for-progress-reporting-to-a-storage-engine
|
https://mariadb.com/kb/en/progress-reporting/#how-to-add-support-for-progress-reporting-to-a-storage-engine
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -104,7 +104,7 @@ extern struct wsrep_service_st {
|
|||||||
const char * (*wsrep_thd_query_state_str_func)(THD *thd);
|
const char * (*wsrep_thd_query_state_str_func)(THD *thd);
|
||||||
int (*wsrep_thd_retry_counter_func)(THD *thd);
|
int (*wsrep_thd_retry_counter_func)(THD *thd);
|
||||||
void (*wsrep_thd_set_conflict_state_func)(THD *thd, enum wsrep_conflict_state state);
|
void (*wsrep_thd_set_conflict_state_func)(THD *thd, enum wsrep_conflict_state state);
|
||||||
bool (*wsrep_thd_skip_append_keys_func)(THD *thd);
|
bool (*wsrep_thd_ignore_table_func)(THD *thd);
|
||||||
long long (*wsrep_thd_trx_seqno_func)(THD *thd);
|
long long (*wsrep_thd_trx_seqno_func)(THD *thd);
|
||||||
struct wsrep_ws_handle * (*wsrep_thd_ws_handle_func)(THD *thd);
|
struct wsrep_ws_handle * (*wsrep_thd_ws_handle_func)(THD *thd);
|
||||||
int (*wsrep_trx_is_aborting_func)(MYSQL_THD thd);
|
int (*wsrep_trx_is_aborting_func)(MYSQL_THD thd);
|
||||||
@ -145,7 +145,7 @@ extern struct wsrep_service_st {
|
|||||||
#define wsrep_thd_query_state_str(T) wsrep_service->wsrep_thd_query_state_str_func(T)
|
#define wsrep_thd_query_state_str(T) wsrep_service->wsrep_thd_query_state_str_func(T)
|
||||||
#define wsrep_thd_retry_counter(T) wsrep_service->wsrep_thd_retry_counter_func(T)
|
#define wsrep_thd_retry_counter(T) wsrep_service->wsrep_thd_retry_counter_func(T)
|
||||||
#define wsrep_thd_set_conflict_state(T,S) wsrep_service->wsrep_thd_set_conflict_state_func(T,S)
|
#define wsrep_thd_set_conflict_state(T,S) wsrep_service->wsrep_thd_set_conflict_state_func(T,S)
|
||||||
#define wsrep_thd_skip_append_keys(T) wsrep_service->wsrep_thd_skip_append_keys_func(T)
|
#define wsrep_thd_ignore_table(T) wsrep_service->wsrep_thd_ignore_table_func(T)
|
||||||
#define wsrep_thd_trx_seqno(T) wsrep_service->wsrep_thd_trx_seqno_func(T)
|
#define wsrep_thd_trx_seqno(T) wsrep_service->wsrep_thd_trx_seqno_func(T)
|
||||||
#define wsrep_thd_ws_handle(T) wsrep_service->wsrep_thd_ws_handle_func(T)
|
#define wsrep_thd_ws_handle(T) wsrep_service->wsrep_thd_ws_handle_func(T)
|
||||||
#define wsrep_trx_is_aborting(T) wsrep_service->wsrep_trx_is_aborting_func(T)
|
#define wsrep_trx_is_aborting(T) wsrep_service->wsrep_trx_is_aborting_func(T)
|
||||||
@ -206,7 +206,7 @@ void wsrep_thd_LOCK(THD *thd);
|
|||||||
void wsrep_thd_UNLOCK(THD *thd);
|
void wsrep_thd_UNLOCK(THD *thd);
|
||||||
void wsrep_thd_awake(THD *thd, my_bool signal);
|
void wsrep_thd_awake(THD *thd, my_bool signal);
|
||||||
void wsrep_thd_set_conflict_state(THD *thd, enum wsrep_conflict_state state);
|
void wsrep_thd_set_conflict_state(THD *thd, enum wsrep_conflict_state state);
|
||||||
bool wsrep_thd_skip_append_keys(THD *thd);
|
bool wsrep_thd_ignore_table(THD *thd);
|
||||||
void wsrep_unlock_rollback();
|
void wsrep_unlock_rollback();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -102,7 +102,9 @@ enum enum_server_command
|
|||||||
COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE,
|
COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE,
|
||||||
COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON,
|
COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON,
|
||||||
/* don't forget to update const char *command_name[] in sql_parse.cc */
|
/* don't forget to update const char *command_name[] in sql_parse.cc */
|
||||||
|
COM_MDB_GAP_BEG,
|
||||||
|
COM_MDB_GAP_END=253,
|
||||||
|
COM_MULTI,
|
||||||
/* Must be last */
|
/* Must be last */
|
||||||
COM_END
|
COM_END
|
||||||
};
|
};
|
||||||
@ -188,7 +190,8 @@ enum enum_server_command
|
|||||||
#define REFRESH_GENERIC (1ULL << 30)
|
#define REFRESH_GENERIC (1ULL << 30)
|
||||||
#define REFRESH_FAST (1ULL << 31) /* Intern flag */
|
#define REFRESH_FAST (1ULL << 31) /* Intern flag */
|
||||||
|
|
||||||
#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */
|
#define CLIENT_LONG_PASSWORD 0 /* obsolete flag */
|
||||||
|
#define CLIENT_MYSQL 1 /* mysql/old mariadb server/client */
|
||||||
#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */
|
#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */
|
||||||
#define CLIENT_LONG_FLAG 4 /* Get all column flags */
|
#define CLIENT_LONG_FLAG 4 /* Get all column flags */
|
||||||
#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */
|
#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */
|
||||||
@ -215,7 +218,7 @@ enum enum_server_command
|
|||||||
/* Don't close the connection for a connection with expired password. */
|
/* Don't close the connection for a connection with expired password. */
|
||||||
#define CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS (1UL << 22)
|
#define CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS (1UL << 22)
|
||||||
|
|
||||||
#define CLIENT_PROGRESS (1UL << 29) /* Client support progress indicator */
|
#define CLIENT_PROGRESS_OBSOLETE (1UL << 29)
|
||||||
#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30)
|
#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30)
|
||||||
/*
|
/*
|
||||||
It used to be that if mysql_real_connect() failed, it would delete any
|
It used to be that if mysql_real_connect() failed, it would delete any
|
||||||
@ -228,14 +231,25 @@ enum enum_server_command
|
|||||||
*/
|
*/
|
||||||
#define CLIENT_REMEMBER_OPTIONS (1UL << 31)
|
#define CLIENT_REMEMBER_OPTIONS (1UL << 31)
|
||||||
|
|
||||||
|
/* MariaDB extended capability flags */
|
||||||
|
#define MARIADB_CLIENT_FLAGS_MASK 0xffffffff00000000ULL
|
||||||
|
/* Client support progress indicator */
|
||||||
|
#define MARIADB_CLIENT_PROGRESS (1ULL << 32)
|
||||||
|
/* support COM_MULTI */
|
||||||
|
#define MARIADB_CLIENT_COM_MULTI (1ULL << 33)
|
||||||
|
|
||||||
#ifdef HAVE_COMPRESS
|
#ifdef HAVE_COMPRESS
|
||||||
#define CAN_CLIENT_COMPRESS CLIENT_COMPRESS
|
#define CAN_CLIENT_COMPRESS CLIENT_COMPRESS
|
||||||
#else
|
#else
|
||||||
#define CAN_CLIENT_COMPRESS 0
|
#define CAN_CLIENT_COMPRESS 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Gather all possible capabilites (flags) supported by the server */
|
/*
|
||||||
#define CLIENT_ALL_FLAGS (CLIENT_LONG_PASSWORD | \
|
Gather all possible capabilites (flags) supported by the server
|
||||||
|
|
||||||
|
MARIADB_* flags supported only by MariaDB connector(s).
|
||||||
|
*/
|
||||||
|
#define CLIENT_ALL_FLAGS (\
|
||||||
CLIENT_FOUND_ROWS | \
|
CLIENT_FOUND_ROWS | \
|
||||||
CLIENT_LONG_FLAG | \
|
CLIENT_LONG_FLAG | \
|
||||||
CLIENT_CONNECT_WITH_DB | \
|
CLIENT_CONNECT_WITH_DB | \
|
||||||
@ -256,10 +270,11 @@ enum enum_server_command
|
|||||||
CLIENT_PS_MULTI_RESULTS | \
|
CLIENT_PS_MULTI_RESULTS | \
|
||||||
CLIENT_SSL_VERIFY_SERVER_CERT | \
|
CLIENT_SSL_VERIFY_SERVER_CERT | \
|
||||||
CLIENT_REMEMBER_OPTIONS | \
|
CLIENT_REMEMBER_OPTIONS | \
|
||||||
CLIENT_PROGRESS | \
|
MARIADB_CLIENT_PROGRESS | \
|
||||||
CLIENT_PLUGIN_AUTH | \
|
CLIENT_PLUGIN_AUTH | \
|
||||||
CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA | \
|
CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA | \
|
||||||
CLIENT_CONNECT_ATTRS)
|
CLIENT_CONNECT_ATTRS |\
|
||||||
|
MARIADB_CLIENT_COM_MULTI)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
To be added later:
|
To be added later:
|
||||||
|
@ -100,8 +100,6 @@ bool thd_is_connection_alive(THD *thd);
|
|||||||
void close_connection(THD *thd, uint errcode);
|
void close_connection(THD *thd, uint errcode);
|
||||||
/* End the connection before closing it */
|
/* End the connection before closing it */
|
||||||
void end_connection(THD *thd);
|
void end_connection(THD *thd);
|
||||||
/* Cleanup the THD object */
|
|
||||||
void thd_cleanup(THD *thd);
|
|
||||||
/* Decrement connection counter */
|
/* Decrement connection counter */
|
||||||
void dec_connection_count();
|
void dec_connection_count();
|
||||||
/* Destroy THD object */
|
/* Destroy THD object */
|
||||||
|
@ -208,7 +208,7 @@ void vio_end(void);
|
|||||||
|
|
||||||
/* shutdown(2) flags */
|
/* shutdown(2) flags */
|
||||||
#ifndef SHUT_RD
|
#ifndef SHUT_RD
|
||||||
#define SHUT_RD SD_BOTH
|
#define SHUT_RD SD_RECEIVE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2011, 2015, Oracle and/or its affiliates.
|
/* Copyright (c) 2011, 2016, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2011, 2015, MariaDB
|
Copyright (c) 2011, 2016, MariaDB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -17,7 +17,7 @@
|
|||||||
#ifndef _welcome_copyright_notice_h_
|
#ifndef _welcome_copyright_notice_h_
|
||||||
#define _welcome_copyright_notice_h_
|
#define _welcome_copyright_notice_h_
|
||||||
|
|
||||||
#define COPYRIGHT_NOTICE_CURRENT_YEAR "2015"
|
#define COPYRIGHT_NOTICE_CURRENT_YEAR "2016"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This define specifies copyright notice which is displayed by every MySQL
|
This define specifies copyright notice which is displayed by every MySQL
|
||||||
|
@ -31,6 +31,14 @@
|
|||||||
if (WSREP_ON && (WSREP(thd) || (thd && thd->wsrep_exec_mode==TOTAL_ORDER))) \
|
if (WSREP_ON && (WSREP(thd) || (thd && thd->wsrep_exec_mode==TOTAL_ORDER))) \
|
||||||
wsrep_to_isolation_end(thd);
|
wsrep_to_isolation_end(thd);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Checks if lex->no_write_to_binlog is set for statements that use LOCAL or
|
||||||
|
NO_WRITE_TO_BINLOG.
|
||||||
|
*/
|
||||||
|
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_) \
|
||||||
|
if (WSREP(thd) && !thd->lex->no_write_to_binlog \
|
||||||
|
&& wsrep_to_isolation_begin(thd, db_, table_, table_list_)) goto error;
|
||||||
|
|
||||||
#define WSREP_DEBUG(...) \
|
#define WSREP_DEBUG(...) \
|
||||||
if (wsrep_debug) WSREP_LOG(sql_print_information, ##__VA_ARGS__)
|
if (wsrep_debug) WSREP_LOG(sql_print_information, ##__VA_ARGS__)
|
||||||
#define WSREP_INFO(...) WSREP_LOG(sql_print_information, ##__VA_ARGS__)
|
#define WSREP_INFO(...) WSREP_LOG(sql_print_information, ##__VA_ARGS__)
|
||||||
@ -46,6 +54,7 @@
|
|||||||
#define WSREP_ERROR(...)
|
#define WSREP_ERROR(...)
|
||||||
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_)
|
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_)
|
||||||
#define WSREP_TO_ISOLATION_END
|
#define WSREP_TO_ISOLATION_END
|
||||||
|
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* WSERP_INCLUDED */
|
#endif /* WSERP_INCLUDED */
|
||||||
|
@ -27,7 +27,7 @@ extern char * mysql_unix_port;
|
|||||||
When adding capabilities here, consider if they should be also added to
|
When adding capabilities here, consider if they should be also added to
|
||||||
the server's version.
|
the server's version.
|
||||||
*/
|
*/
|
||||||
#define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | \
|
#define CLIENT_CAPABILITIES (CLIENT_MYSQL | \
|
||||||
CLIENT_LONG_FLAG | \
|
CLIENT_LONG_FLAG | \
|
||||||
CLIENT_TRANSACTIONS | \
|
CLIENT_TRANSACTIONS | \
|
||||||
CLIENT_PROTOCOL_41 | \
|
CLIENT_PROTOCOL_41 | \
|
||||||
|
@ -47,9 +47,11 @@
|
|||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
#endif
|
#endif
|
||||||
#endif /* !defined(__WIN__) */
|
#endif /* !defined(__WIN__) */
|
||||||
#ifdef HAVE_POLL
|
#if defined(HAVE_POLL_H)
|
||||||
|
#include <poll.h>
|
||||||
|
#elif defined(HAVE_SYS_POLL_H)
|
||||||
#include <sys/poll.h>
|
#include <sys/poll.h>
|
||||||
#endif
|
#endif /* defined(HAVE_POLL_H) */
|
||||||
#ifdef HAVE_SYS_UN_H
|
#ifdef HAVE_SYS_UN_H
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
#endif
|
#endif
|
||||||
@ -2231,7 +2233,7 @@ static int stmt_read_row_buffered(MYSQL_STMT *stmt, unsigned char **row)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Read one row from network: unbuffered non-cursor fetch.
|
Read one row from network: unbuffered non-cursor fetch.
|
||||||
If last row was read, or error occured, erase this statement
|
If last row was read, or error occurred, erase this statement
|
||||||
from record pointing to object unbuffered fetch is performed from.
|
from record pointing to object unbuffered fetch is performed from.
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
|
@ -110,6 +110,7 @@ SET(SQL_EMBEDDED_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc
|
|||||||
../sql/item_inetfunc.cc
|
../sql/item_inetfunc.cc
|
||||||
../sql/wsrep_dummy.cc ../sql/encryption.cc
|
../sql/wsrep_dummy.cc ../sql/encryption.cc
|
||||||
../sql/item_windowfunc.cc ../sql/sql_window.cc
|
../sql/item_windowfunc.cc ../sql/sql_window.cc
|
||||||
|
../sql/sql_cte.cc
|
||||||
${GEN_SOURCES}
|
${GEN_SOURCES}
|
||||||
${MYSYS_LIBWRAP_SOURCE}
|
${MYSYS_LIBWRAP_SOURCE}
|
||||||
)
|
)
|
||||||
|
@ -165,7 +165,8 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
|||||||
arg_length= header_length;
|
arg_length= header_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
result= dispatch_command(command, thd, (char *) arg, arg_length);
|
result= dispatch_command(command, thd, (char *) arg, arg_length, FALSE,
|
||||||
|
FALSE);
|
||||||
thd->cur_data= 0;
|
thd->cur_data= 0;
|
||||||
thd->mysys_var= NULL;
|
thd->mysys_var= NULL;
|
||||||
|
|
||||||
@ -428,8 +429,8 @@ static void emb_free_embedded_thd(MYSQL *mysql)
|
|||||||
thread_count--;
|
thread_count--;
|
||||||
thd->store_globals();
|
thd->store_globals();
|
||||||
thd->unlink();
|
thd->unlink();
|
||||||
delete thd;
|
|
||||||
mysql_mutex_unlock(&LOCK_thread_count);
|
mysql_mutex_unlock(&LOCK_thread_count);
|
||||||
|
delete thd;
|
||||||
my_pthread_setspecific_ptr(THR_THD, 0);
|
my_pthread_setspecific_ptr(THR_THD, 0);
|
||||||
mysql->thd=0;
|
mysql->thd=0;
|
||||||
}
|
}
|
||||||
@ -664,7 +665,7 @@ void init_embedded_mysql(MYSQL *mysql, int client_flag)
|
|||||||
void *create_embedded_thd(int client_flag)
|
void *create_embedded_thd(int client_flag)
|
||||||
{
|
{
|
||||||
THD * thd= new THD;
|
THD * thd= new THD;
|
||||||
thd->thread_id= thd->variables.pseudo_thread_id= thread_id++;
|
thd->thread_id= thd->variables.pseudo_thread_id= next_thread_id();
|
||||||
|
|
||||||
thd->thread_stack= (char*) &thd;
|
thd->thread_stack= (char*) &thd;
|
||||||
if (thd->store_globals())
|
if (thd->store_globals())
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBCOMP_ERR\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBCOMP_ERR\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBINNOCHECKSUM\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBINNOCHECKSUM\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMAKE_WIN_BIN_DIST" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMAKE_WIN_BIN_DIST" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMSQL2MYSQL\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMSQL2MYSQL\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMY_PRINT_DEFAULTS" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMY_PRINT_DEFAULTS" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYISAM_FTDUMP\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYISAM_FTDUMP\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYISAMCHK\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYISAMCHK\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYISAMLOG\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYISAMLOG\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYISAMPACK\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYISAMPACK\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL\-STRESS\-TE" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL\-STRESS\-TE" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL\-TEST\-RUN\" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL\-TEST\-RUN\" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
@ -1583,7 +1583,7 @@ may fail in total, as each repetition is considered a new test case, which may i
|
|||||||
\fB\-\-retry\-failure=\fR\fB\fIN\fR\fR
|
\fB\-\-retry\-failure=\fR\fB\fIN\fR\fR
|
||||||
.sp
|
.sp
|
||||||
When using the \fB-\-retry\fR option to retry failed tests,
|
When using the \fB-\-retry\fR option to retry failed tests,
|
||||||
stop when N failures have occured (default 2)\&. Setting it to 0 or 1 effectively turns off retries\&.
|
stop when N failures have occurred (default 2)\&. Setting it to 0 or 1 effectively turns off retries\&.
|
||||||
.RE
|
.RE
|
||||||
.sp
|
.sp
|
||||||
.RS 4
|
.RS 4
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL\&.SERVER\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL\&.SERVER\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL_CLIENT_TEST" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL_CLIENT_TEST" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL_CONFIG\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL_CONFIG\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL_CONVERT_TAB" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL_CONVERT_TAB" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL_FIND_ROWS\F" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL_FIND_ROWS\F" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL_FIX_EXTENSI" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL_FIX_EXTENSI" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL_INSTALL_DB\" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL_INSTALL_DB\" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL_PLUGIN\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL_PLUGIN\FR" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * Define some portability stuff
|
.\" * Define some portability stuff
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL_SECURE_INST" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL_SECURE_INST" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL_SETPERMISSI" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL_SETPERMISSI" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQL_TZINFO_TO_S" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQL_TZINFO_TO_S" "1" "22/3/2016" "MariaDB 10\&.2" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user