mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Merge branch '10.2' into bb-10.2-mdev9543
This commit is contained in:
commit
2bd4dc38e0
871 changed files with 28556 additions and 9730 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -59,6 +59,9 @@ include/mysql_version.h
|
|||
include/mysqld_ername.h
|
||||
include/mysqld_error.h
|
||||
include/sql_state.h
|
||||
include/probes_mysql.d
|
||||
include/probes_mysql_dtrace.h
|
||||
include/probes_mysql_nodtrace.h
|
||||
info_macros.cmake
|
||||
libmysql*/libmysql*_exports_file.cc
|
||||
libmysql*/merge_archives_mysql*.cmake
|
||||
|
@ -112,6 +115,8 @@ scripts/wsrep_sst_mysqldump
|
|||
scripts/wsrep_sst_rsync
|
||||
scripts/wsrep_sst_xtrabackup
|
||||
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-init.pl
|
||||
sql-bench/compare-results
|
||||
|
|
|
@ -31,6 +31,7 @@ Usage: $0 [-h|-n] [configure-options]
|
|||
-h, --help Show this help message.
|
||||
-n, --just-print Don't actually run any commands; just print them.
|
||||
-c, --just-configure Stop after running configure.
|
||||
Combined with --just-print shows configure options.
|
||||
--extra-configs=xxx Add this to configure options
|
||||
--extra-flags=xxx Add this C and CXX flags
|
||||
--extra-cflags=xxx Add this to C flags
|
||||
|
|
|
@ -348,11 +348,9 @@ IF(WITH_UNIT_TESTS)
|
|||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(NOT WITHOUT_SERVER)
|
||||
SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
|
||||
# Add storage engines and plugins.
|
||||
CONFIGURE_PLUGINS()
|
||||
ENDIF()
|
||||
SET (MYSQLD_STATIC_PLUGIN_LIBS "" CACHE INTERNAL "")
|
||||
# Add storage engines and plugins.
|
||||
CONFIGURE_PLUGINS()
|
||||
|
||||
ADD_SUBDIRECTORY(include)
|
||||
ADD_SUBDIRECTORY(dbug)
|
||||
|
@ -382,6 +380,10 @@ IF(NOT WITHOUT_SERVER)
|
|||
ADD_SUBDIRECTORY(mysql-test)
|
||||
ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess)
|
||||
ADD_SUBDIRECTORY(sql-bench)
|
||||
IF(WIN32)
|
||||
ADD_SUBDIRECTORY(win/upgrade_wizard)
|
||||
ADD_SUBDIRECTORY(win/packaging)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(UNIX)
|
||||
|
@ -391,10 +393,7 @@ ENDIF()
|
|||
INCLUDE(cmake/abi_check.cmake)
|
||||
INCLUDE(cmake/tags.cmake)
|
||||
|
||||
IF(WIN32)
|
||||
ADD_SUBDIRECTORY(win/upgrade_wizard)
|
||||
ADD_SUBDIRECTORY(win/packaging)
|
||||
ENDIF()
|
||||
|
||||
|
||||
|
||||
INCLUDE(for_clients)
|
||||
|
|
45
CREDITS
45
CREDITS
|
@ -1,25 +1,30 @@
|
|||
MariaDB is brought to you by the MariaDB foundation, a USA non profit
|
||||
organization.
|
||||
MariaDB is brought to you by the MariaDB Foundation, a non profit
|
||||
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)
|
||||
SkySQL Ab http://www.skysql.com (2013, 2014)
|
||||
Booking.com http://www.booking.com (2013)
|
||||
Parallels http://www.parallels.com/products/plesk (2013)
|
||||
MariaDB Corporation http://www.mariadb.com (2013 - 2016)
|
||||
Booking.com http://www.booking.com (2013 - 2016)
|
||||
Parallels http://www.parallels.com/products/plesk (2013 - 2016)
|
||||
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
|
||||
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
|
||||
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.
|
||||
|
||||
The MariaDB foundation provides also, among other things, the
|
||||
The MariaDB Foundation also provides, among other things, the
|
||||
following services to the MariaDB community:
|
||||
|
||||
- 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)
|
||||
- Building the official MariaDB binaries
|
||||
- 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
|
||||
member or sponsor of the MariaDB foundation!
|
||||
You can help support MariaDB by becoming a MariaDB developer or a
|
||||
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;
|
||||
|
||||
You can get a list sponsors and contributors by doing
|
||||
You can get a list sponsors and contributors by running
|
||||
SHOW CONTRIBUTORS;
|
||||
|
||||
You can read more about the MariaDB foundation at:
|
||||
https://mariadb.org/en/foundation/
|
||||
You can read more about the MariaDB Foundation at:
|
||||
https://mariadb.org/about/
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
MariaDB is in most aspects identical to MySQL.
|
||||
|
||||
Differences between MySQL and MariaDB can be found at:
|
||||
http://kb.askmonty.org/en/mariadb-versus-mysql-features/
|
||||
http://kb.askmonty.org/en/mariadb-versus-mysql-compatibility/
|
||||
https://mariadb.com/kb/en/mariadb-vs-mysql-features/
|
||||
https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/
|
||||
|
||||
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
|
||||
http://dev.mysql.com/doc.
|
||||
|
|
|
@ -243,7 +243,7 @@
|
|||
in the caller's frame is set in the new context as well.
|
||||
4) For each instruction, call its execute() method.
|
||||
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
|
||||
the caller's frame.
|
||||
|
||||
|
@ -853,7 +853,7 @@
|
|||
// '*nextp' will be set to the index of the next instruction
|
||||
// to execute. (For most instruction this will be the
|
||||
// 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)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
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
|
||||
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
|
||||
features, new storage engines, fewer bugs, and better performance.
|
||||
|
||||
MariaDB is brought to you by the MariaDB foundation.
|
||||
Please read the file CREDITS for details about the MariaDB foundation,
|
||||
MariaDB is brought to you by the MariaDB Foundation.
|
||||
Please read the CREDITS file for details about the MariaDB Foundation,
|
||||
and who is developing MariaDB.
|
||||
|
||||
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.
|
||||
|
||||
MySQL, which is the base of MariaDB, is a product and trademark of Oracle
|
||||
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.
|
||||
|
||||
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_MINOR=2
|
||||
MYSQL_VERSION_PATCH=0
|
||||
MYSQL_VERSION_EXTRA=
|
||||
|
|
|
@ -1344,6 +1344,44 @@ sig_handler mysql_end(int sig)
|
|||
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
|
||||
|
@ -1365,11 +1403,7 @@ sig_handler handle_sigint(int sig)
|
|||
}
|
||||
|
||||
kill_mysql= mysql_init(kill_mysql);
|
||||
mysql_options(kill_mysql, MYSQL_OPT_CONNECT_ATTR_RESET, 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))
|
||||
if (!do_connect(kill_mysql,current_host, current_user, opt_password, "", 0))
|
||||
{
|
||||
tee_fprintf(stdout, "Ctrl-C -- sorry, cannot connect to server to kill query, giving up ...\n");
|
||||
goto err;
|
||||
|
@ -1921,7 +1955,7 @@ static int get_options(int argc, char **argv)
|
|||
connect_flag|= CLIENT_IGNORE_SPACE;
|
||||
|
||||
if (opt_progress_reports)
|
||||
connect_flag|= CLIENT_PROGRESS;
|
||||
connect_flag|= CLIENT_PROGRESS_OBSOLETE;
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
@ -3320,7 +3354,7 @@ com_go(String *buffer,char *line __attribute__((unused)))
|
|||
|
||||
end:
|
||||
|
||||
/* Show warnings if any or error occured */
|
||||
/* Show warnings if any or error occurred */
|
||||
if (show_warnings == 1 && (warnings >= 1 || error))
|
||||
print_warnings();
|
||||
|
||||
|
@ -4575,27 +4609,8 @@ sql_real_connect(char *host,char *database,char *user,char *password,
|
|||
}
|
||||
if (opt_compress)
|
||||
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)
|
||||
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)
|
||||
{
|
||||
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);
|
||||
|
||||
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");
|
||||
if (!mysql_real_connect(&mysql, host, user, password,
|
||||
database, opt_mysql_port, opt_mysql_unix_port,
|
||||
connect_flag | CLIENT_MULTI_STATEMENTS))
|
||||
if (!do_connect(&mysql, host, user, password, database,
|
||||
connect_flag | CLIENT_MULTI_STATEMENTS))
|
||||
{
|
||||
if (!silent ||
|
||||
(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
|
||||
|
||||
/*
|
||||
CLIENT_PROGRESS is set only if we requsted it in mysql_real_connect()
|
||||
and the server also supports it
|
||||
CLIENT_PROGRESS_OBSOLETE is set only if we requested it in
|
||||
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);
|
||||
#else
|
||||
mysql.reconnect= 1;
|
||||
|
|
|
@ -184,7 +184,8 @@ static const char *load_default_groups[]=
|
|||
static void free_used_memory(void)
|
||||
{
|
||||
/* Free memory allocated by 'load_defaults' */
|
||||
free_defaults(defaults_argv);
|
||||
if (defaults_argv)
|
||||
free_defaults(defaults_argv);
|
||||
|
||||
dynstr_free(&ds_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
|
||||
compare the version number form file against
|
||||
version number wich mysql_upgrade was compiled for
|
||||
version number which mysql_upgrade was compiled for
|
||||
|
||||
NOTE
|
||||
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)
|
||||
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
|
||||
already has been run for this installation of MySQL
|
||||
|
|
|
@ -73,6 +73,8 @@ ulong opt_binlog_rows_event_max_size;
|
|||
uint test_flags = 0;
|
||||
static uint opt_protocol= 0;
|
||||
static FILE *result_file;
|
||||
static char *result_file_name= 0;
|
||||
static const char *output_prefix= "";
|
||||
|
||||
#ifndef DBUG_OFF
|
||||
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 debug_info_flag, debug_check_flag;
|
||||
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 ulonglong offset = 0;
|
||||
static char* host = 0;
|
||||
|
@ -120,7 +124,6 @@ static ulonglong start_position, stop_position;
|
|||
static char *start_datetime_str, *stop_datetime_str;
|
||||
static my_time_t start_datetime= 0, stop_datetime= MY_TIME_T_MAX;
|
||||
static ulonglong rec_count= 0;
|
||||
static short binlog_flags = 0;
|
||||
static MYSQL* mysql = NULL;
|
||||
static const char* dirname_for_local_load= 0;
|
||||
static bool opt_skip_annotate_row_events= 0;
|
||||
|
@ -142,7 +145,9 @@ enum Exit_status {
|
|||
/** An error occurred and execution should stop. */
|
||||
ERROR_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.",
|
||||
&remote_opt, &remote_opt, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
||||
0, 0},
|
||||
{"result-file", 'r', "Direct output to a given file.", 0, 0, 0, GET_STR,
|
||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"raw", 0, "Requires -R. Output raw binlog data instead of SQL "
|
||||
"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,
|
||||
"Extract only binlog entries created by the server having the given id.",
|
||||
&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).",
|
||||
&stop_datetime_str, &stop_datetime_str,
|
||||
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 reading the binlog at position N. Applies to the last binlog "
|
||||
"passed on the command line.",
|
||||
|
@ -1620,10 +1639,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||
else
|
||||
tty_password=1;
|
||||
break;
|
||||
case 'r':
|
||||
if (!(result_file = my_fopen(argument, O_WRONLY | O_BINARY, MYF(MY_WME))))
|
||||
exit(1);
|
||||
break;
|
||||
case 'R':
|
||||
remote_opt= 1;
|
||||
break;
|
||||
|
@ -1719,7 +1734,6 @@ static int parse_args(int *argc, char*** argv)
|
|||
{
|
||||
int ho_error;
|
||||
|
||||
result_file = stdout;
|
||||
if ((ho_error=handle_options(argc, argv, my_options, get_one_option)))
|
||||
exit(ho_error);
|
||||
if (debug_info_flag)
|
||||
|
@ -1809,7 +1823,8 @@ static Exit_status dump_log_entries(const char* logname)
|
|||
Set safe delimiter, to dump things
|
||||
like CREATE PROCEDURE safely
|
||||
*/
|
||||
fprintf(result_file, "DELIMITER /*!*/;\n");
|
||||
if (!opt_raw_mode)
|
||||
fprintf(result_file, "DELIMITER /*!*/;\n");
|
||||
strmov(print_event_info.delimiter, "/*!*/;");
|
||||
|
||||
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));
|
||||
|
||||
/* Set delimiter back to semicolon */
|
||||
fprintf(result_file, "DELIMITER ;\n");
|
||||
if (!opt_raw_mode)
|
||||
fprintf(result_file, "DELIMITER ;\n");
|
||||
strmov(print_event_info.delimiter, ";");
|
||||
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
|
||||
receives.
|
||||
|
@ -1946,8 +2203,9 @@ static Exit_status dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
|
|||
uint logname_len;
|
||||
NET* net;
|
||||
my_off_t old_off= start_position_mot;
|
||||
char fname[FN_REFLEN+1];
|
||||
Exit_status retval= OK_CONTINUE;
|
||||
short binlog_flags = 0;
|
||||
ulong slave_id;
|
||||
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);
|
||||
if (!opt_skip_annotate_row_events)
|
||||
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);
|
||||
|
||||
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);
|
||||
}
|
||||
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);
|
||||
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 (;;)
|
||||
{
|
||||
const char *error_msg;
|
||||
Log_event *ev;
|
||||
|
||||
len= cli_safe_read(mysql);
|
||||
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
|
||||
DBUG_PRINT("info",( "len: %lu net->read_pos[5]: %d\n",
|
||||
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,
|
||||
&error_msg)))
|
||||
{
|
||||
error("Could not construct annotate event object: %s", error_msg);
|
||||
DBUG_RETURN(ERROR_STOP);
|
||||
}
|
||||
retval= handle_event_raw_mode(print_event_info, &len,
|
||||
logname, logname_len);
|
||||
}
|
||||
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);
|
||||
retval= handle_event_text_mode(print_event_info, &len,
|
||||
logname, logname_len, old_off);
|
||||
}
|
||||
|
||||
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_CONTINUE)
|
||||
{
|
||||
/*
|
||||
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)
|
||||
{
|
||||
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);
|
||||
if (retval == OK_EOF)
|
||||
break;
|
||||
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
|
||||
similar text and to have --stop-position to work identically.
|
||||
|
@ -2449,6 +2621,7 @@ end:
|
|||
return retval;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
char **defaults_argv;
|
||||
|
@ -2495,6 +2668,43 @@ int main(int argc, char** argv)
|
|||
|
||||
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;
|
||||
tmpdir.list= 0;
|
||||
if (!dirname_for_local_load)
|
||||
|
@ -2517,29 +2727,32 @@ int main(int argc, char** argv)
|
|||
else
|
||||
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,
|
||||
"/*!32316 SET @OLD_SQL_LOG_BIN=@@SQL_LOG_BIN, SQL_LOG_BIN=0*/;\n");
|
||||
"/*!40019 SET @@session.max_insert_delayed_threads=0*/;\n");
|
||||
|
||||
/*
|
||||
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,
|
||||
"/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,"
|
||||
"COMPLETION_TYPE=0*/;\n");
|
||||
if (disable_log_bin)
|
||||
fprintf(result_file,
|
||||
"/*!32316 SET @OLD_SQL_LOG_BIN=@@SQL_LOG_BIN, SQL_LOG_BIN=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,
|
||||
"\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);
|
||||
"/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,"
|
||||
"COMPLETION_TYPE=0*/;\n");
|
||||
|
||||
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 ;
|
||||
(--argc >= 0) ; )
|
||||
|
@ -2553,27 +2766,30 @@ int main(int argc, char** argv)
|
|||
start_position= BIN_LOG_HEADER_SIZE;
|
||||
}
|
||||
|
||||
/*
|
||||
Issue a ROLLBACK in case the last printed binlog was crashed and had half
|
||||
of transaction.
|
||||
*/
|
||||
fprintf(result_file,
|
||||
"# 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)
|
||||
if (!opt_raw_mode)
|
||||
{
|
||||
/*
|
||||
Issue a ROLLBACK in case the last printed binlog was crashed and had half
|
||||
of transaction.
|
||||
*/
|
||||
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");
|
||||
"# 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");
|
||||
|
||||
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)
|
||||
free_tmpdir(&tmpdir);
|
||||
if (result_file != stdout)
|
||||
if (result_file && result_file != stdout)
|
||||
my_fclose(result_file, MYF(0));
|
||||
cleanup();
|
||||
free_annotate_event();
|
||||
|
|
|
@ -277,8 +277,8 @@ static void usage(void)
|
|||
printf("Usage: %s [OPTIONS] database [tables]\n", my_progname);
|
||||
printf("OR %s [OPTIONS] --databases DB1 [DB2 DB3...]\n",
|
||||
my_progname);
|
||||
puts("Please consult the MariaDB/MySQL knowledgebase at");
|
||||
puts("http://kb.askmonty.org/v/mysqlcheck for latest information about");
|
||||
puts("Please consult the MariaDB Knowledge Base at");
|
||||
puts("https://mariadb.com/kb/en/mysqlcheck for latest information about");
|
||||
puts("this program.");
|
||||
print_defaults("my", load_default_groups);
|
||||
puts("");
|
||||
|
@ -523,7 +523,6 @@ static int is_view(const char *table)
|
|||
{
|
||||
fprintf(stderr, "Failed to %s\n", query);
|
||||
fprintf(stderr, "Error: %s\n", mysql_error(sock));
|
||||
my_free(query);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
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
|
||||
|
||||
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
|
||||
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.
|
||||
|
||||
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
|
||||
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
|
||||
slave SQL thread is not started, the slave's master
|
||||
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 " \
|
||||
"indicating slave SQL thread failure",
|
||||
|
@ -4977,12 +4977,13 @@ static int my_kill(int pid, int sig)
|
|||
{
|
||||
#ifdef __WIN__
|
||||
HANDLE proc;
|
||||
if ((proc= OpenProcess(PROCESS_TERMINATE, FALSE, pid)) == NULL)
|
||||
if ((proc= OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE, pid)) == NULL)
|
||||
return -1;
|
||||
if (sig == 0)
|
||||
{
|
||||
DWORD wait_result= WaitForSingleObject(proc, 0);
|
||||
CloseHandle(proc);
|
||||
return 0;
|
||||
return wait_result == WAIT_OBJECT_0?-1:0;
|
||||
}
|
||||
(void)TerminateProcess(proc, 201);
|
||||
CloseHandle(proc);
|
||||
|
|
|
@ -94,6 +94,7 @@ ELSEIF(DEB)
|
|||
ELSE()
|
||||
SET(WITH_SSL bundled CACHE STRING "")
|
||||
SET(WITH_ZLIB bundled CACHE STRING "")
|
||||
SET(WITH_JEMALLOC static CACHE STRING "")
|
||||
ENDIF()
|
||||
|
||||
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
|
||||
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 bug reports should be submitted through https://mariadb.atlassian.net/
|
||||
MariaDB documentation can be found at https://mariadb.com/kb
|
||||
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}/include"
|
||||
"%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}/sbin"
|
||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share"
|
||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/aclocal"
|
||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/doc"
|
||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man"
|
||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man1*"
|
||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man8*"
|
||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man1"
|
||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/man/man8"
|
||||
"%ignore ${CMAKE_INSTALL_PREFIX}/share/pkgconfig"
|
||||
)
|
||||
|
||||
SET(CPACK_RPM_server_USER_FILELIST ${ignored} "%config(noreplace) ${INSTALL_SYSCONF2DIR}/*")
|
||||
|
@ -122,6 +125,7 @@ SETA(CPACK_RPM_server_PACKAGE_OBSOLETES
|
|||
"MySQL"
|
||||
"mysql-server"
|
||||
"MySQL-server"
|
||||
"MariaDB-Galera-server"
|
||||
"MySQL-OurDelta-server")
|
||||
SETA(CPACK_RPM_server_PACKAGE_PROVIDES
|
||||
"MariaDB"
|
||||
|
@ -175,7 +179,7 @@ MACRO(ALTERNATIVE_NAME real alt)
|
|||
SET(p "CPACK_RPM_${real}_PACKAGE_PROVIDES")
|
||||
SET(${p} "${${p}} ${alt} = ${ver} ${alt}%{?_isa} = ${ver} config(${alt}) = ${ver}")
|
||||
SET(o "CPACK_RPM_${real}_PACKAGE_OBSOLETES")
|
||||
SET(${o} "${${o}} ${alt} ${alt}%{_isa}")
|
||||
SET(${o} "${${o}} ${alt} ${alt}%{?_isa}")
|
||||
ENDMACRO(ALTERNATIVE_NAME)
|
||||
|
||||
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_nodtrace.h
|
||||
)
|
||||
ELSE()
|
||||
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/probes_mysql_nodtrace.h.in
|
||||
${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.h COPYONLY)
|
||||
ENDIF()
|
||||
|
||||
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
|
||||
# Also, remove duplicates
|
||||
IF(NOT lib STREQUAL "general" AND NOT ${var} MATCHES "-l${lib} ")
|
||||
IF (lib MATCHES "^\\-l")
|
||||
IF (lib MATCHES "^\\-")
|
||||
SET(${var} "${${var}} ${lib} ")
|
||||
ELSEIF(lib MATCHES "^/")
|
||||
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_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_PLUGINDIR_RPM "lib64/mysql/plugin")
|
||||
ELSE()
|
||||
|
|
|
@ -44,11 +44,10 @@ FUNCTION (INSTALL_DEBUG_SYMBOLS)
|
|||
ENDIF()
|
||||
|
||||
set(comp "")
|
||||
IF(ARG_COMPONENT STREQUAL "Server")
|
||||
IF(target MATCHES "mysqld" OR type MATCHES "MODULE")
|
||||
#MESSAGE("PDB: ${targets}")
|
||||
SET(comp Server)
|
||||
ENDIF()
|
||||
|
||||
IF(target MATCHES "mysqld" OR type MATCHES "MODULE")
|
||||
#MESSAGE("PDB: ${targets}")
|
||||
SET(comp Server)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT comp MATCHES Server)
|
||||
|
|
|
@ -3,20 +3,6 @@ INCLUDE (CheckLibraryExists)
|
|||
SET(WITH_JEMALLOC auto CACHE STRING
|
||||
"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)
|
||||
# compatibility with old WITH_JEMALLOC values
|
||||
IF(WITH_JEMALLOC STREQUAL "bundled")
|
||||
|
@ -26,21 +12,30 @@ MACRO (CHECK_JEMALLOC)
|
|||
SET(WITH_JEMALLOC "yes")
|
||||
ENDIF()
|
||||
|
||||
IF (WITH_JEMALLOC STREQUAL "yes" OR WITH_JEMALLOC STREQUAL "auto")
|
||||
JEMALLOC_TRY_DYNAMIC()
|
||||
ENDIF()
|
||||
IF(WITH_JEMALLOC STREQUAL "yes" OR WITH_JEMALLOC STREQUAL "auto" OR
|
||||
WITH_JEMALLOC STREQUAL "static")
|
||||
|
||||
IF (WITH_JEMALLOC STREQUAL "static" OR WITH_JEMALLOC STREQUAL "auto"
|
||||
AND NOT HAVE_DYNAMIC_JEMALLOC)
|
||||
JEMALLOC_TRY_STATIC()
|
||||
ENDIF()
|
||||
IF(WITH_JEMALLOC STREQUAL "static")
|
||||
SET(libname jemalloc_pic)
|
||||
SET(CMAKE_REQUIRED_LIBRARIES pthread dl m)
|
||||
SET(what bundled)
|
||||
ELSE()
|
||||
SET(libname jemalloc c)
|
||||
SET(what system)
|
||||
ENDIF()
|
||||
|
||||
IF (libname)
|
||||
IF (HAVE_DYNAMIC_JEMALLOC OR HAVE_STATIC_JEMALLOC)
|
||||
SET(LIBJEMALLOC ${libname})
|
||||
SET(MALLOC_LIBRARY "${what} jemalloc")
|
||||
ELSEIF (NOT WITH_JEMALLOC STREQUAL "auto")
|
||||
MESSAGE(FATAL_ERROR "${libname} is not found")
|
||||
FOREACH(lib ${libname})
|
||||
CHECK_LIBRARY_EXISTS(${lib} malloc_stats_print "" HAVE_JEMALLOC_IN_${lib})
|
||||
IF (HAVE_JEMALLOC_IN_${lib})
|
||||
SET(LIBJEMALLOC ${lib})
|
||||
SET(MALLOC_LIBRARY "${what} jemalloc")
|
||||
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()
|
||||
ENDMACRO()
|
||||
|
|
|
@ -87,6 +87,11 @@ MACRO(CREATE_EXPORT_FILE VAR TARGET API_FUNCTIONS)
|
|||
ENDFOREACH()
|
||||
SET(CONTENT "${CONTENT} (void *)0\n}\;")
|
||||
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})
|
||||
ENDIF()
|
||||
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_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${MY_MAINTAINER_CXX_WARNINGS}")
|
||||
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
|
||||
# [STORAGE_ENGINE]
|
||||
# [CLIENT]
|
||||
# [MANDATORY|DEFAULT]
|
||||
# [STATIC_ONLY|DYNAMIC_ONLY]
|
||||
# [MODULE_OUTPUT_NAME module_name]
|
||||
|
@ -28,11 +29,12 @@ INCLUDE(CMakeParseArguments)
|
|||
|
||||
MACRO(MYSQL_ADD_PLUGIN)
|
||||
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"
|
||||
"LINK_LIBRARIES;DEPENDENCIES"
|
||||
${ARGN}
|
||||
)
|
||||
IF(NOT WITHOUT_SERVER OR ARG_CLIENT)
|
||||
|
||||
# Add common include directories
|
||||
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
|
||||
|
@ -72,7 +74,9 @@ MACRO(MYSQL_ADD_PLUGIN)
|
|||
SET(compat "with${compat}")
|
||||
ENDIF()
|
||||
|
||||
IF (compat STREQUAL ".")
|
||||
IF (ARG_DISABLED)
|
||||
SET(howtobuild NO)
|
||||
ELSEIF (compat STREQUAL ".")
|
||||
SET(howtobuild DYNAMIC)
|
||||
ELSEIF (compat STREQUAL "with.")
|
||||
IF (NOT ARG_MODULE_ONLY)
|
||||
|
@ -120,7 +124,7 @@ MACRO(MYSQL_ADD_PLUGIN)
|
|||
|
||||
# Build either static library or module
|
||||
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 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)
|
||||
ENDIF()
|
||||
ELSEIF(PLUGIN_${plugin} MATCHES "(DYNAMIC|AUTO|YES)"
|
||||
AND NOT ARG_STATIC_ONLY AND NOT WITHOUT_DYNAMIC_PLUGINS
|
||||
AND NOT ARG_DISABLED)
|
||||
AND NOT ARG_STATIC_ONLY AND NOT WITHOUT_DYNAMIC_PLUGINS)
|
||||
|
||||
ADD_VERSION_INFO(${target} MODULE SOURCES)
|
||||
ADD_LIBRARY(${target} MODULE ${SOURCES})
|
||||
|
@ -188,14 +191,14 @@ MACRO(MYSQL_ADD_PLUGIN)
|
|||
|
||||
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
|
||||
# unresolved symbols. Others are less strict and allow unresolved symbols
|
||||
# in shared libraries. On Linux for example, CMake does not even add
|
||||
# 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
|
||||
# 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)
|
||||
ENDIF()
|
||||
ADD_DEPENDENCIES(${target} GenError ${ARG_DEPENDENCIES})
|
||||
|
@ -206,19 +209,22 @@ MACRO(MYSQL_ADD_PLUGIN)
|
|||
IF(ARG_COMPONENT)
|
||||
IF(CPACK_COMPONENTS_ALL AND
|
||||
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(ARG_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/${target}.cnf")
|
||||
FILE(WRITE ${ARG_CONFIG} "[mariadb]\nplugin-load-add=${ARG_MODULE_OUTPUT_NAME}.so\n")
|
||||
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${ARG_COMPONENT})
|
||||
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} PARENT_SCOPE)
|
||||
IF (NOT ARG_CLIENT)
|
||||
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_REQUIRES "MariaDB" PARENT_SCOPE)
|
||||
ENDIF()
|
||||
INSTALL(FILES ${ARG_CONFIG} COMPONENT ${ARG_COMPONENT} DESTINATION ${INSTALL_SYSCONF2DIR})
|
||||
|
||||
# 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_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()
|
||||
ELSE()
|
||||
SET(ARG_COMPONENT Server)
|
||||
|
@ -232,13 +238,17 @@ MACRO(MYSQL_ADD_PLUGIN)
|
|||
INSTALL_MYSQL_TEST("${CMAKE_CURRENT_SOURCE_DIR}/mysql-test/" "plugin/${subpath}")
|
||||
ENDIF()
|
||||
|
||||
ENDIF(NOT WITHOUT_SERVER OR ARG_CLIENT)
|
||||
ENDMACRO()
|
||||
|
||||
|
||||
# Add all CMake projects under storage and plugin
|
||||
# subdirectories, configure sql_builtins.cc
|
||||
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/*)
|
||||
FOREACH(dir ${dirs_storage} ${dirs_plugin})
|
||||
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})
|
||||
|
||||
# Set the patch version
|
||||
SET(WSREP_PATCH_VERSION "11")
|
||||
SET(WSREP_PATCH_VERSION "13")
|
||||
|
||||
# Obtain 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_VADVISE_H 1
|
||||
#cmakedefine HAVE_SYS_STATVFS_H 1
|
||||
#cmakedefine HAVE_UCONTEXT_H 1
|
||||
#cmakedefine HAVE_TERM_H 1
|
||||
#cmakedefine HAVE_TERMBITS_H 1
|
||||
#cmakedefine HAVE_TERMIOS_H 1
|
||||
|
@ -236,7 +237,6 @@
|
|||
#cmakedefine HAVE_THR_YIELD 1
|
||||
#cmakedefine HAVE_TIME 1
|
||||
#cmakedefine HAVE_TIMES 1
|
||||
#cmakedefine HAVE_UCONTEXT 1
|
||||
#cmakedefine HAVE_VIDATTR 1
|
||||
#define HAVE_VIO_READ_BUFF 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 (paths.h HAVE_PATHS_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 (sched.h HAVE_SCHED_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
|
||||
#
|
||||
# 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("
|
||||
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;}"
|
||||
C_HAS_inline)
|
||||
IF(NOT C_HAS_inline)
|
||||
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;}"
|
||||
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()
|
||||
|
||||
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)
|
||||
|
||||
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_nsec "time.h" STRUCT_TIMESPEC_HAS_TV_NSEC)
|
||||
|
||||
|
@ -997,4 +1023,3 @@ IF(NOT MSVC)
|
|||
HAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
|
|
4
debian/additions/innotop/innotop
vendored
4
debian/additions/innotop/innotop
vendored
|
@ -1503,7 +1503,7 @@ my %exprs = (
|
|||
|
||||
my %columns = (
|
||||
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' },
|
||||
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' },
|
||||
|
@ -10365,7 +10365,7 @@ show you something like this:
|
|||
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
|
||||
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
|
||||
'?' 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
|
||||
\& 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
|
||||
\& 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
|
||||
.PP
|
||||
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
|
||||
|
||||
[mysql]
|
||||
#no-auto-rehash # faster start of mysql but no tab completition
|
||||
#no-auto-rehash # faster start of mysql but no tab completion
|
||||
|
||||
[isamchk]
|
||||
key_buffer = 16M
|
||||
|
|
540
debian/additions/mysqlreport
vendored
540
debian/additions/mysqlreport
vendored
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/perl -w
|
||||
|
||||
# mysqlreport v3.5 Apr 16 2008
|
||||
# mysqlreport v4.0 Oct 23 2015
|
||||
# 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 2012-2015 Jean Weisbuch
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -36,16 +37,19 @@ my ($stat_name, $stat_val, $stat_label);
|
|||
my $MySQL_version;
|
||||
my (%stats, %vars); # SHOW STATUS, SHOW VARIABLES
|
||||
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 ($key_cache_block_size, $key_buffer_used, $key_buffer_usage);
|
||||
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 ($relative_live, $relative_infiles);
|
||||
my $real_uptime;
|
||||
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 (
|
||||
\%op,
|
||||
"user=s",
|
||||
|
@ -127,13 +131,19 @@ $| = 1 if ($op{'detach'} || $relative_live);
|
|||
|
||||
print "tmp file: $tmpfile\n" if $op{debug};
|
||||
|
||||
# Connect to MySQL
|
||||
# Connect to MySQL/MariaDB
|
||||
if(!$op{'infile'} && !$relative_infiles)
|
||||
{
|
||||
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'})
|
||||
{
|
||||
|
@ -163,6 +173,9 @@ else
|
|||
|
||||
set_myisam_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();
|
||||
}
|
||||
|
@ -177,8 +190,8 @@ exit;
|
|||
sub show_help_and_exit
|
||||
{
|
||||
print <<"HELP";
|
||||
mysqlreport v3.5 Apr 16 2008
|
||||
mysqlreport makes an easy-to-read report of important MySQL status values.
|
||||
mysqlreport v4.0 Oct 23 2015
|
||||
mysqlreport makes an easy-to-read report of important MySQL/MariaDB status values.
|
||||
|
||||
Command line options (abbreviations work):
|
||||
--user USER Connect to MySQL as USER
|
||||
|
@ -264,6 +277,9 @@ sub collect_reports
|
|||
|
||||
set_myisam_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";
|
||||
|
||||
|
@ -350,7 +366,7 @@ sub read_relative_infiles
|
|||
|
||||
# The infile must begin with the system variable values.
|
||||
# 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,
|
||||
# along with the system variable values read thus far, until Aborted_clients
|
||||
# occurs again. Then begins the second and subsequent sets of status values.
|
||||
|
@ -403,6 +419,9 @@ sub relative_infile_report
|
|||
|
||||
set_myisam_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";
|
||||
|
||||
|
@ -422,7 +441,7 @@ sub get_vals
|
|||
{
|
||||
print "get_vals\n" if $op{debug};
|
||||
|
||||
my @row;
|
||||
my (@row, $query);
|
||||
|
||||
# Get status values
|
||||
if($MySQL_version >= 50002)
|
||||
|
@ -434,7 +453,9 @@ sub get_vals
|
|||
$query = $dbh->prepare("SHOW STATUS;");
|
||||
}
|
||||
$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'};
|
||||
}
|
||||
|
@ -443,18 +464,23 @@ sub get_vars
|
|||
{
|
||||
print "get_vars\n" if $op{debug};
|
||||
|
||||
my @row;
|
||||
my (@row, $query);
|
||||
|
||||
# Get server system variables
|
||||
$query = $dbh->prepare("SHOW VARIABLES;");
|
||||
$query->execute();
|
||||
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
|
||||
if($MySQL_version >= 50103)
|
||||
{
|
||||
$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
|
||||
|
@ -507,10 +533,10 @@ sub read_infile
|
|||
else { print "read_infile: ignore '$_'\n" if $op{debug}; }
|
||||
|
||||
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};
|
||||
|
||||
|
@ -525,7 +551,7 @@ sub read_infile
|
|||
else { print "read_infile: ignore '$_'\n" if $op{debug}; }
|
||||
|
||||
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
|
||||
|
@ -542,7 +568,7 @@ sub read_infile
|
|||
}
|
||||
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;
|
||||
|
@ -572,25 +598,116 @@ sub get_MySQL_version
|
|||
|
||||
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
|
||||
{
|
||||
my @row;
|
||||
my (@row, $query);
|
||||
|
||||
$query = $dbh->prepare("SHOW VARIABLES LIKE 'version';");
|
||||
$query->execute();
|
||||
@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);
|
||||
print "Version $MySQL_version\n" if $op{debug};
|
||||
|
||||
# Innodb_ status values were added in 5.0.2
|
||||
if($MySQL_version < 50002)
|
||||
{
|
||||
$have_innodb_vals = 0;
|
||||
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};
|
||||
|
||||
# should be moved elsewere
|
||||
$questions = $stats{'Questions'};
|
||||
|
||||
$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};
|
||||
|
||||
$slow_query_t = format_u_time($vars{long_query_time});
|
||||
|
||||
}
|
||||
|
||||
sub set_ib_vals
|
||||
|
@ -658,6 +775,46 @@ sub set_ib_vals
|
|||
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
|
||||
{
|
||||
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'};
|
||||
}
|
||||
}
|
||||
if($have_aria_vals)
|
||||
{
|
||||
$stats{'Aria_pagecache_blocks_used'} = $stats_present{'Aria_pagecache_blocks_used'};
|
||||
}
|
||||
|
||||
get_Com_values();
|
||||
|
||||
|
@ -715,6 +876,9 @@ sub write_relative_report
|
|||
|
||||
set_myisam_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();
|
||||
}
|
||||
|
@ -731,15 +895,27 @@ sub write_report
|
|||
$~ = 'SLOW_DMS', write;
|
||||
write_DMS();
|
||||
write_Com();
|
||||
write_Rows();
|
||||
$~ = 'SAS', write;
|
||||
write_qcache();
|
||||
$~ = 'REPORT_END', write;
|
||||
$~ = 'THREADS', write;
|
||||
if($use_thread_pool)
|
||||
{
|
||||
$~ = 'THREADPOOL', write;
|
||||
} else {
|
||||
$~ = 'THREADPERCONNECTION', write;
|
||||
}
|
||||
$~ = 'TAB', write;
|
||||
|
||||
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 ($d, $h, $m) = (0, 0, 0);
|
||||
|
@ -761,7 +937,7 @@ sub sec_to_dhms # Seconds to days hours:minutes:seconds
|
|||
$m = int $s / 60;
|
||||
$s -= $m * 60;
|
||||
|
||||
return "$d $h:$m:$s";
|
||||
return "$d+$h:$m:$s";
|
||||
}
|
||||
|
||||
sub make_short
|
||||
|
@ -782,12 +958,11 @@ sub make_short
|
|||
}
|
||||
|
||||
# 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
|
||||
# is now standard. For 4.1 and 5.0 patches, the architects of this
|
||||
# idea provide: http://www.mysqlperformanceblog.com/mysql-patches/
|
||||
# long_query_time in microseconds. For MySQL 5.1.21+ this is now
|
||||
# standard. For 4.1 and 5.0 patches, the architects of this idea
|
||||
# provide: http://www.mysqlperformanceblog.com/mysql-patches/
|
||||
# Relevant notes in MySQL manual:
|
||||
# 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.
|
||||
|
||||
|
@ -848,7 +1023,7 @@ sub email_report # Email given report to $op{'email'}
|
|||
open SENDMAIL, "|/usr/sbin/sendmail -t";
|
||||
print SENDMAIL "From: mysqlreport\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`;
|
||||
close SENDMAIL;
|
||||
}
|
||||
|
@ -979,6 +1154,7 @@ sub write_qcache
|
|||
# ergo this method is slightly more reliable
|
||||
return if not exists $vars{'query_cache_size'};
|
||||
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_hi_r = sprintf "%.2f", $stats{'Qcache_hits'} / ($stats{'Qcache_inserts'} ||= 1);
|
||||
|
@ -988,6 +1164,36 @@ sub write_qcache
|
|||
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
|
||||
{
|
||||
print "write_InnoDB\n" if $op{debug};
|
||||
|
@ -998,6 +1204,11 @@ sub write_InnoDB
|
|||
|
||||
$~ = 'IB';
|
||||
write;
|
||||
if($use_xtradb)
|
||||
{
|
||||
$~ = 'IB_XTRADB';
|
||||
write;
|
||||
}
|
||||
|
||||
# Innodb_row_lock_ values were added in MySQL 5.0.3
|
||||
if($MySQL_version >= 50003)
|
||||
|
@ -1005,12 +1216,44 @@ sub write_InnoDB
|
|||
$~ = 'IB_LOCK';
|
||||
write;
|
||||
}
|
||||
if($use_xtradb)
|
||||
{
|
||||
$~ = 'IB_LOCK_XTRADB';
|
||||
write;
|
||||
}
|
||||
|
||||
# Data, Pages, Rows
|
||||
$~ = 'IB_DPR';
|
||||
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
|
||||
{
|
||||
my $key = shift;
|
||||
|
@ -1043,19 +1286,17 @@ sub exit_tasks_and_cleanup
|
|||
}
|
||||
else
|
||||
{
|
||||
if($WIN) { `del $tmpfile`; }
|
||||
else { `rm -f $tmpfile`; }
|
||||
unlink $tmpfile;
|
||||
}
|
||||
|
||||
if(!$op{'infile'} && !$relative_infiles)
|
||||
{
|
||||
if($op{'flush-status'})
|
||||
{
|
||||
$query = $dbh->prepare("FLUSH STATUS;");
|
||||
my $query = $dbh->prepare("FLUSH STATUS;");
|
||||
$query->execute();
|
||||
$query->finish();
|
||||
}
|
||||
|
||||
$query->finish();
|
||||
$dbh->disconnect();
|
||||
}
|
||||
}
|
||||
|
@ -1065,19 +1306,19 @@ sub exit_tasks_and_cleanup
|
|||
#
|
||||
|
||||
format MYSQL_TIME =
|
||||
MySQL @<<<<<<<<<<<<<<<< uptime @<<<<<<<<<<< @>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
$vars{'version'}, sec_to_dhms($real_uptime), (($op{infile} || $relative_infiles) ? '' : scalar localtime)
|
||||
@<<<<<< @<<<<<<<<<<<<<<<<<< uptime @<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<
|
||||
$dbms, $vars{'version'}, sec_to_dhms($real_uptime), (($op{infile} || $relative_infiles) ? '' : scalar localtime)
|
||||
.
|
||||
|
||||
format KEY_BUFF_MAX =
|
||||
|
||||
__ 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'})
|
||||
.
|
||||
|
||||
format KEY_BUFF_USAGE =
|
||||
Current @>>>>>> %Usage: @>>>>>
|
||||
Current @>>>>>> %Usage: @>>>>>
|
||||
make_short($key_buffer_usage, 1), perc($key_buffer_usage, $vars{'key_buffer_size'})
|
||||
.
|
||||
|
||||
|
@ -1088,166 +1329,197 @@ Read hit @>>>>>%
|
|||
$key_read_ratio
|
||||
|
||||
__ Questions ___________________________________________________________
|
||||
Total @>>>>>>>> @>>>>>/s
|
||||
Total @>>>>>>>> @>>>>>/s
|
||||
make_short($questions), t($questions)
|
||||
.
|
||||
|
||||
format DTQ =
|
||||
@<<<<<<< @>>>>>>>> @>>>>>/s @>>>>>> @>>>>>
|
||||
@<<<<<<< @>>>>>>>> @>>>>>/s @>>>>>> @>>>>>
|
||||
$stat_name, make_short($stat_val), t($stat_val), $stat_label, perc($stat_val, $questions)
|
||||
.
|
||||
|
||||
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'}
|
||||
DMS @>>>>>>>> @>>>>>/s @>>>>>
|
||||
DMS @>>>>>>>> @>>>>>/s @>>>>>
|
||||
make_short($dms), t($dms), perc($dms, $questions)
|
||||
.
|
||||
|
||||
format DMS =
|
||||
@<<<<<<< @>>>>>>>> @>>>>>/s @>>>>> @>>>>>
|
||||
@<<<<<<< @>>>>>>>> @>>>>>/s @>>>>> @>>>>>
|
||||
$stat_name, make_short($stat_val), t($stat_val), perc($stat_val, $questions), perc($stat_val, $dms)
|
||||
.
|
||||
|
||||
format COM_1 =
|
||||
Com_ @>>>>>>>> @>>>>>/s @>>>>>
|
||||
Com_ @>>>>>>>> @>>>>>/s @>>>>>
|
||||
make_short($stat_val), t($stat_val), perc($stat_val, $questions)
|
||||
.
|
||||
|
||||
format COM_2 =
|
||||
@<<<<<<<<<< @>>>>>> @>>>>>/s @>>>>>
|
||||
@<<<<<<<<<< @>>>>>> @>>>>>/s @>>>>>
|
||||
$stat_name, make_short($stat_val), t($stat_val), perc($stat_val, $questions)
|
||||
.
|
||||
|
||||
format SAS =
|
||||
|
||||
__ 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'})
|
||||
Range @>>>>>> @>>>>/s @>>>>>
|
||||
Range @>>>>>> @>>>>>/s @>>>>>
|
||||
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'})
|
||||
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'})
|
||||
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'})
|
||||
Sort scan @>>>>>> @>>>>/s
|
||||
Sort scan @>>>>>> @>>>>>/s
|
||||
make_short($stats{'Sort_scan'}), t($stats{'Sort_scan'})
|
||||
Sort range @>>>>>> @>>>>/s
|
||||
Sort range @>>>>>> @>>>>>/s
|
||||
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'})
|
||||
.
|
||||
|
||||
format QCACHE =
|
||||
|
||||
__ 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'})
|
||||
Block Fragmnt @>>>>>%
|
||||
perc($stats{'Qcache_free_blocks'}, $stats{'Qcache_total_blocks'})
|
||||
Hits @>>>>>> @>>>>/s
|
||||
Hits @>>>>>> @>>>>>/s
|
||||
make_short($stats{'Qcache_hits'}), t($stats{'Qcache_hits'})
|
||||
Inserts @>>>>>> @>>>>/s
|
||||
Inserts @>>>>>> @>>>>>/s
|
||||
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'})
|
||||
Hit:Insert @>>>>>>:1
|
||||
$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...
|
||||
format REPORT_END =
|
||||
|
||||
__ 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'});
|
||||
Immediate @>>>>>>>> @>>>>>/s
|
||||
Immediate @>>>>>>>> @>>>>>/s
|
||||
make_short($stats{'Table_locks_immediate'}), t($stats{'Table_locks_immediate'})
|
||||
|
||||
__ Tables ______________________________________________________________
|
||||
Open @>>>>>>>> of @>>> %Cache: @>>>>>
|
||||
Open @>>>>>>>> of @>>>>> %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'})
|
||||
|
||||
__ Connections _________________________________________________________
|
||||
Max used @>>>>>>>> of @>>> %Max: @>>>>>
|
||||
Max used @>>>>>>>> of @>>>>> %Max: @>>>>>
|
||||
$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'})
|
||||
|
||||
__ Created Temp ________________________________________________________
|
||||
Disk table @>>>>>>>> @>>>>>/s
|
||||
make_short($stats{'Created_tmp_disk_tables'}), t($stats{'Created_tmp_disk_tables'})
|
||||
Table @>>>>>>>> @>>>>>/s Size: @>>>>>
|
||||
Disk table @>>>>>>>> @>>>>>/s %Disk: @>>>>>
|
||||
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: @>>>>>
|
||||
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'})
|
||||
.
|
||||
|
||||
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 =
|
||||
|
||||
__ 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 _____________________________________________________________
|
||||
Clients @>>>>>>>> @>>>>>/s
|
||||
Clients @>>>>>>>> @>>>>>/s
|
||||
make_short($stats{'Aborted_clients'}), t($stats{'Aborted_clients'})
|
||||
Connects @>>>>>>>> @>>>>>/s
|
||||
Connects @>>>>>>>> @>>>>>/s
|
||||
make_short($stats{'Aborted_connects'}), t($stats{'Aborted_connects'})
|
||||
|
||||
__ Bytes _______________________________________________________________
|
||||
Sent @>>>>>>>> @>>>>>/s
|
||||
Sent @>>>>>>>> @>>>>>/s
|
||||
make_short($stats{'Bytes_sent'}), t($stats{'Bytes_sent'})
|
||||
Received @>>>>>>>> @>>>>>/s
|
||||
Received @>>>>>>>> @>>>>>/s
|
||||
make_short($stats{'Bytes_received'}), t($stats{'Bytes_received'})
|
||||
.
|
||||
|
||||
format IB =
|
||||
|
||||
__ 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)
|
||||
Read hit @>>>>>%
|
||||
$ib_bp_read_ratio;
|
||||
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'})
|
||||
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'})
|
||||
Misc @>>>>>>>> @>>>>>
|
||||
Misc @>>>>>>>> @>>>>>
|
||||
$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'})
|
||||
Reads @>>>>>>>> @>>>>>/s
|
||||
Reads @>>>>>>>> @>>>>>/s
|
||||
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'})
|
||||
Ahead Rnd @>>>>>>>> @>>>>>/s
|
||||
Ahead Rnd @>>>>>>>> @>>>>>/s
|
||||
$stats{'Innodb_buffer_pool_read_ahead_rnd'}, t($stats{'Innodb_buffer_pool_read_ahead_rnd'})
|
||||
Ahead Sql @>>>>>>>> @>>>>>/s
|
||||
$stats{'Innodb_buffer_pool_read_ahead_seq'}, t($stats{'Innodb_buffer_pool_read_ahead_seq'})
|
||||
Writes @>>>>>>>> @>>>>>/s
|
||||
# Ahead Sql @>>>>>>>> @>>>>>/s
|
||||
#$stats{'Innodb_buffer_pool_read_ahead_seq'}, t($stats{'Innodb_buffer_pool_read_ahead_seq'})
|
||||
Writes @>>>>>>>> @>>>>>/s
|
||||
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'})
|
||||
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 =
|
||||
|
||||
__ InnoDB Lock _________________________________________________________
|
||||
Waits @>>>>>>>> @>>>>>/s
|
||||
Waits @>>>>>>>> @>>>>>/s
|
||||
$stats{'Innodb_row_lock_waits'}, t($stats{'Innodb_row_lock_waits'})
|
||||
Current @>>>>>>>>
|
||||
$stats{'Innodb_row_lock_current_waits'}
|
||||
|
@ -1260,15 +1532,20 @@ $stats{'Innodb_row_lock_time_avg'}
|
|||
$stats{'Innodb_row_lock_time_max'}
|
||||
.
|
||||
|
||||
format IB_LOCK_XTRADB =
|
||||
Trx history @>>>>>>>>
|
||||
make_short($stats{'Innodb_history_list_length'})
|
||||
.
|
||||
|
||||
format IB_DPR =
|
||||
|
||||
__ InnoDB Data, Pages, Rows ____________________________________________
|
||||
Data
|
||||
Reads @>>>>>>>> @>>>>>/s
|
||||
Reads @>>>>>>>> @>>>>>/s
|
||||
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'})
|
||||
fsync @>>>>>>>> @>>>>>/s
|
||||
fsync @>>>>>>>> @>>>>>/s
|
||||
make_short($stats{'Innodb_data_fsyncs'}), t($stats{'Innodb_data_fsyncs'})
|
||||
Pending
|
||||
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'})
|
||||
|
||||
Pages
|
||||
Created @>>>>>>>> @>>>>>/s
|
||||
Created @>>>>>>>> @>>>>>/s
|
||||
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'})
|
||||
Written @>>>>>>>> @>>>>>/s
|
||||
Written @>>>>>>>> @>>>>>/s
|
||||
make_short($stats{'Innodb_pages_written'}), t($stats{'Innodb_pages_written'})
|
||||
|
||||
Rows
|
||||
Deleted @>>>>>>>> @>>>>>/s
|
||||
Deleted @>>>>>>>> @>>>>>/s
|
||||
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'})
|
||||
Read @>>>>>>>> @>>>>>/s
|
||||
Read @>>>>>>>> @>>>>>/s
|
||||
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'})
|
||||
.
|
||||
|
||||
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,
|
||||
libboost-dev,
|
||||
libjudy-dev,
|
||||
libkrb5-dev,
|
||||
libncurses5-dev (>= 5.0-6~),
|
||||
libpam0g-dev,
|
||||
libreadline-gplv2-dev,
|
||||
|
@ -441,3 +442,15 @@ Depends: libcrack2 (>= 2.9.0), mariadb-server-10.2
|
|||
Description: CrackLib Password Validation Plugin for MariaDB
|
||||
This password validation plugin uses cracklib to allow only
|
||||
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,
|
||||
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:
|
||||
|
||||
|
|
2
debian/mariadb-client-10.2.README.Debian
vendored
2
debian/mariadb-client-10.2.README.Debian
vendored
|
@ -1,4 +1,4 @@
|
|||
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!
|
||||
|
|
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_federatedx.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/handlersocket.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/sql_errlog.so
|
||||
usr/lib/mysql/plugin/wsrep_info.so
|
||||
usr/lib/mysql/plugin/user_variables.so
|
||||
usr/lib/libhsclient.so.*
|
||||
etc/apparmor.d/usr.sbin.mysqld
|
||||
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/fill_help_tables.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.sql
|
||||
usr/share/mysql/mysql_performance_tables.sql
|
||||
|
|
|
@ -10,18 +10,11 @@
|
|||
compress
|
||||
sharedscripts
|
||||
postrotate
|
||||
test -x /usr/bin/mysqladmin || exit 0
|
||||
test -x /usr/bin/mysqladmin || exit 0
|
||||
|
||||
# If this fails, check debian.conf!
|
||||
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
|
||||
if [ -z "`$MYADMIN ping 2>/dev/null`" ]; then
|
||||
# Really no mysqld or rather a missing debian-sys-maint user?
|
||||
# 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
|
||||
if [ -f `my_print_defaults --mysqld | grep -oP "pid-file=\K[^$]+"` ]; then
|
||||
# If this fails, check debian.conf!
|
||||
mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
|
||||
fi
|
||||
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.
|
||||
export HOME=/etc/mysql/
|
||||
|
||||
# Source default config file.
|
||||
[ -r /etc/default/mariadb ] && . /etc/default/mariadb
|
||||
|
||||
## Fetch a particular option from mysql's invocation.
|
||||
#
|
||||
# Usage: void mysqld_get_param option
|
||||
|
@ -109,7 +112,7 @@ case "${1:-''}" in
|
|||
/usr/bin/mysqld_safe "${@:2}" > /dev/null 2>&1 &
|
||||
|
||||
# 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
|
||||
if mysqld_status check_alive nowarn ; then break; fi
|
||||
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
|
||||
# systemctl. If we upgrade from MySQL mysql.service may be masked, which also
|
||||
# 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#
|
||||
|
||||
|
|
|
@ -694,14 +694,14 @@ int main(int argc, char **argv)
|
|||
if (*filename == '\0')
|
||||
{
|
||||
fprintf(stderr, "Error; File name missing\n");
|
||||
goto error;
|
||||
goto error_out;
|
||||
}
|
||||
|
||||
/* stat the file to get size and page count */
|
||||
if (stat(filename, &st))
|
||||
{
|
||||
fprintf(stderr, "Error; %s cannot be found\n", filename);
|
||||
goto error;
|
||||
goto error_out;
|
||||
}
|
||||
size= st.st_size;
|
||||
|
||||
|
@ -711,7 +711,7 @@ int main(int argc, char **argv)
|
|||
{
|
||||
fprintf(stderr, "Error; %s cannot be opened", filename);
|
||||
perror(" ");
|
||||
goto error;
|
||||
goto error_out;
|
||||
}
|
||||
|
||||
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");
|
||||
perror("");
|
||||
goto error;
|
||||
goto error_f;
|
||||
}
|
||||
|
||||
/* Make sure the page is aligned */
|
||||
|
@ -731,7 +731,7 @@ int main(int argc, char **argv)
|
|||
{
|
||||
fprintf(stderr, "Error; failed to allocate memory\n");
|
||||
perror("");
|
||||
return 1;
|
||||
goto error_big_buf;
|
||||
}
|
||||
|
||||
/* Make sure the page is aligned */
|
||||
|
@ -983,12 +983,17 @@ ok:
|
|||
print_stats();
|
||||
free(big_xdes);
|
||||
free(big_buf);
|
||||
fclose(f);
|
||||
my_end(0);
|
||||
exit(0);
|
||||
|
||||
error:
|
||||
free(big_xdes);
|
||||
error_big_buf:
|
||||
free(big_buf);
|
||||
error_f:
|
||||
fclose(f);
|
||||
error_out:
|
||||
my_end(0);
|
||||
exit(1);
|
||||
}
|
||||
|
|
|
@ -12,6 +12,17 @@ before calling SSL_new();
|
|||
|
||||
*** 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)
|
||||
This release of yaSSL fixes a high security vulnerability. All users
|
||||
SHOULD update. If using yaSSL for TLS on the server side with private
|
||||
|
|
|
@ -378,6 +378,7 @@ public:
|
|||
|
||||
uint get_agreedKeyLength() const;
|
||||
const byte* get_agreedKey() const;
|
||||
uint get_publicKeyLength() const;
|
||||
const byte* get_publicKey() const;
|
||||
void makeAgreement(const byte*, unsigned int);
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#include "rsa.h"
|
||||
|
||||
|
||||
#define YASSL_VERSION "2.3.8"
|
||||
#define YASSL_VERSION "2.3.9"
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
|
|
@ -342,6 +342,7 @@ private:
|
|||
Sessions& GetSessions(); // forward singletons
|
||||
sslFactory& GetSSL_Factory();
|
||||
Errors& GetErrors();
|
||||
bool HasErrors();
|
||||
|
||||
|
||||
// openSSL method and context types
|
||||
|
|
|
@ -751,9 +751,10 @@ struct DiffieHellman::DHImpl {
|
|||
byte* publicKey_;
|
||||
byte* privateKey_;
|
||||
byte* agreedKey_;
|
||||
uint pubKeyLength_;
|
||||
|
||||
DHImpl(TaoCrypt::RandomNumberGenerator& r) : ranPool_(r), publicKey_(0),
|
||||
privateKey_(0), agreedKey_(0) {}
|
||||
privateKey_(0), agreedKey_(0), pubKeyLength_(0) {}
|
||||
~DHImpl()
|
||||
{
|
||||
ysArrayDelete(agreedKey_);
|
||||
|
@ -762,7 +763,7 @@ struct DiffieHellman::DHImpl {
|
|||
}
|
||||
|
||||
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();
|
||||
AllocKeys(length, length, length);
|
||||
|
@ -810,7 +811,7 @@ DiffieHellman::DiffieHellman(const byte* p, unsigned int pSz, const byte* g,
|
|||
using TaoCrypt::Integer;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -869,6 +870,10 @@ const byte* DiffieHellman::get_agreedKey() const
|
|||
return pimpl_->agreedKey_;
|
||||
}
|
||||
|
||||
uint DiffieHellman::get_publicKeyLength() const
|
||||
{
|
||||
return pimpl_->pubKeyLength_;
|
||||
}
|
||||
|
||||
const byte* DiffieHellman::get_publicKey() const
|
||||
{
|
||||
|
|
|
@ -1493,7 +1493,8 @@ int SSLeay_add_ssl_algorithms() // compatibility only
|
|||
|
||||
void ERR_remove_state(unsigned long)
|
||||
{
|
||||
GetErrors().Remove();
|
||||
if (HasErrors())
|
||||
GetErrors().Remove();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -121,11 +121,11 @@ void SetErrorString(YasslError error, char* buffer)
|
|||
break;
|
||||
|
||||
case certificate_error :
|
||||
strncpy(buffer, "unable to proccess cerificate", max);
|
||||
strncpy(buffer, "unable to process cerificate", max);
|
||||
break;
|
||||
|
||||
case privateKey_error :
|
||||
strncpy(buffer, "unable to proccess private key, bad format", max);
|
||||
strncpy(buffer, "unable to process private key, bad format", max);
|
||||
break;
|
||||
|
||||
case badVersion_error :
|
||||
|
|
|
@ -109,15 +109,12 @@ void ClientDiffieHellmanPublic::build(SSL& ssl)
|
|||
uint keyLength = dhClient.get_agreedKeyLength(); // pub and agree same
|
||||
|
||||
alloc(keyLength, true);
|
||||
dhClient.makeAgreement(dhServer.get_publicKey(), keyLength);
|
||||
dhClient.makeAgreement(dhServer.get_publicKey(),
|
||||
dhServer.get_publicKeyLength());
|
||||
c16toa(keyLength, Yc_);
|
||||
memcpy(Yc_ + KEY_OFFSET, dhClient.get_publicKey(), keyLength);
|
||||
|
||||
// because of encoding first byte might be zero, don't use it for preMaster
|
||||
if (*dhClient.get_agreedKey() == 0)
|
||||
ssl.set_preMaster(dhClient.get_agreedKey() + 1, keyLength - 1);
|
||||
else
|
||||
ssl.set_preMaster(dhClient.get_agreedKey(), keyLength);
|
||||
ssl.set_preMaster(dhClient.get_agreedKey(), keyLength);
|
||||
}
|
||||
|
||||
|
||||
|
@ -321,11 +318,7 @@ void ClientDiffieHellmanPublic::read(SSL& ssl, input_buffer& input)
|
|||
}
|
||||
dh.makeAgreement(Yc_, keyLength);
|
||||
|
||||
// because of encoding, first byte might be 0, don't use for preMaster
|
||||
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.set_preMaster(dh.get_agreedKey(), dh.get_agreedKeyLength());
|
||||
ssl.makeMasterSecret();
|
||||
}
|
||||
|
||||
|
|
|
@ -807,6 +807,19 @@ void SSL::set_random(const opaque* random, ConnectionEnd sender)
|
|||
// store client pre master secret
|
||||
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);
|
||||
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
|
||||
void SSL::makeMasterSecret()
|
||||
{
|
||||
if (GetError()) return;
|
||||
|
||||
if (isTLS())
|
||||
makeTLSMasterSecret();
|
||||
else {
|
||||
|
@ -1673,6 +1688,11 @@ Errors& GetErrors()
|
|||
return *errorsInstance;
|
||||
}
|
||||
|
||||
bool HasErrors()
|
||||
{
|
||||
return (errorsInstance != 0);
|
||||
}
|
||||
|
||||
|
||||
typedef Mutex::Lock Lock;
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
/*
|
||||
Optimized function-like macros for the x86 architecture (_WIN32 included).
|
||||
*/
|
||||
|
||||
#define sint2korr(A) (int16) (*((int16 *) (A)))
|
||||
#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \
|
||||
(((uint32) 255L << 24) | \
|
||||
|
@ -31,7 +32,7 @@
|
|||
Attention: Please, note, uint3korr reads 4 bytes (not 3)!
|
||||
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])) +\
|
||||
(((uint32) ((uchar) (A)[1])) << 8) +\
|
||||
(((uint32) ((uchar) (A)[2])) << 16))
|
||||
|
@ -39,17 +40,21 @@
|
|||
#define uint3korr(A) (uint32) (*((unsigned int *) (A)) & 0xFFFFFF)
|
||||
#endif
|
||||
#define uint4korr(A) (uint32) (*((uint32 *) (A)))
|
||||
#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\
|
||||
(((uint32) ((uchar) (A)[1])) << 8) +\
|
||||
(((uint32) ((uchar) (A)[2])) << 16) +\
|
||||
(((uint32) ((uchar) (A)[3])) << 24)) +\
|
||||
(((ulonglong) ((uchar) (A)[4])) << 32))
|
||||
#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \
|
||||
(((uint32) ((uchar) (A)[1])) << 8) + \
|
||||
(((uint32) ((uchar) (A)[2])) << 16) + \
|
||||
(((uint32) ((uchar) (A)[3])) << 24)) + \
|
||||
(((ulonglong) ((uchar) (A)[4])) << 32) + \
|
||||
(((ulonglong) ((uchar) (A)[5])) << 40))
|
||||
|
||||
|
||||
static inline ulonglong uint5korr(const void *p)
|
||||
{
|
||||
ulonglong a= *(uint32 *) p;
|
||||
ulonglong b= *(4 + (uchar *) p);
|
||||
return a | (b << 32);
|
||||
}
|
||||
static inline ulonglong uint6korr(const void *p)
|
||||
{
|
||||
ulonglong a= *(uint32 *) p;
|
||||
ulonglong b= *(uint16 *) (4 + (char *) p);
|
||||
return a | (b << 32);
|
||||
}
|
||||
|
||||
#define uint8korr(A) (ulonglong) (*((ulonglong *) (A)))
|
||||
#define sint8korr(A) (longlong) (*((longlong *) (A)))
|
||||
|
||||
|
@ -61,23 +66,67 @@
|
|||
*(T+1)=(uchar) (((uint) (A) >> 8));\
|
||||
*(T+2)=(uchar) (((A) >> 16));\
|
||||
} while (0)
|
||||
|
||||
#define int4store(T,A) do { uchar *pT= (uchar*)(T);\
|
||||
*((uint32 *) (pT))= (uint32) (A); \
|
||||
} while (0)
|
||||
|
||||
#define int5store(T,A) do { *(T)= (uchar)((A));\
|
||||
*((T)+1)=(uchar) (((A) >> 8));\
|
||||
*((T)+2)=(uchar) (((A) >> 16));\
|
||||
*((T)+3)=(uchar) (((A) >> 24));\
|
||||
*((T)+4)=(uchar) (((A) >> 32));\
|
||||
} while(0)
|
||||
#define int6store(T,A) do { *(T)= (uchar)((A)); \
|
||||
*((T)+1)=(uchar) (((A) >> 8)); \
|
||||
*((T)+2)=(uchar) (((A) >> 16)); \
|
||||
*((T)+3)=(uchar) (((A) >> 24)); \
|
||||
*((T)+4)=(uchar) (((A) >> 32)); \
|
||||
*((T)+5)=(uchar) (((A) >> 40)); \
|
||||
} while(0)
|
||||
#define int5store(T,A) do { uchar *pT= (uchar*)(T);\
|
||||
*((uint32 *) (pT))= (uint32) (A); \
|
||||
*((pT)+4)=(uchar) (((A) >> 32));\
|
||||
} while (0)
|
||||
|
||||
#define int6store(T,A) do { uchar *pT= (uchar*)(T);\
|
||||
*((uint32 *) (pT))= (uint32) (A); \
|
||||
*((uint16*)(pT+4))= (uint16) (A >> 32);\
|
||||
} while (0)
|
||||
|
||||
#define int8store(T,A) do { uchar *pT= (uchar*)(T);\
|
||||
*((ulonglong *) (pT))= (ulonglong) (A);\
|
||||
} 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);
|
||||
/* Multibyte routines */
|
||||
uint (*ismbchar)(CHARSET_INFO *, const char *, const char *);
|
||||
uint (*mbcharlen)(CHARSET_INFO *, uint c);
|
||||
size_t (*numchars)(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_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,
|
||||
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,
|
||||
const char *str,const char *str_end,
|
||||
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,
|
||||
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.
|
||||
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_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 my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b)))
|
||||
#define use_mb(s) ((s)->mbmaxlen > 1)
|
||||
/**
|
||||
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
|
||||
#define my_mbcharlen(s, a) ((s)->cset->mbcharlen((s),(a)))
|
||||
#else
|
||||
|
|
|
@ -280,6 +280,12 @@ make_atomic_store(32)
|
|||
make_atomic_store(64)
|
||||
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_
|
||||
#include _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) ];
|
||||
}
|
||||
|
||||
/*
|
||||
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
|
||||
|
||||
#endif /* MY_BIT_INCLUDED */
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#define MY_CONTEXT_USE_X86_64_GCC_ASM
|
||||
#elif defined(__GNUC__) && __GNUC__ >= 3 && defined(__i386__)
|
||||
#define MY_CONTEXT_USE_I386_GCC_ASM
|
||||
#elif defined(HAVE_UCONTEXT)
|
||||
#elif defined(HAVE_UCONTEXT_H)
|
||||
#define MY_CONTEXT_USE_UCONTEXT
|
||||
#else
|
||||
#define MY_CONTEXT_DISABLE
|
||||
|
@ -178,7 +178,7 @@ struct mysql_async_context {
|
|||
resumed, eg. whether we woke up due to connection completed or timeout
|
||||
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
|
||||
completes. It uses a union, as different calls have different return
|
||||
|
|
|
@ -198,20 +198,6 @@
|
|||
#define likely(x) __builtin_expect(((x) != 0),1)
|
||||
#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 */
|
||||
#if defined(TARGET_OS_LINUX) || defined(__GLIBC__)
|
||||
#undef _GNU_SOURCE
|
||||
|
@ -452,7 +438,7 @@ extern "C" int madvise(void *addr, size_t len, int behav);
|
|||
#endif
|
||||
|
||||
#ifndef STDERR_FILENO
|
||||
#define STDERR_FILENO 2
|
||||
#define STDERR_FILENO fileno(stderr)
|
||||
#endif
|
||||
|
||||
#ifndef SO_EXT
|
||||
|
@ -823,6 +809,9 @@ inline unsigned long long my_double2ulonglong(double d)
|
|||
#else
|
||||
#define finite(x) (1.0 / fabs(x) > 0.0)
|
||||
#endif /* HAVE_FINITE */
|
||||
#elif (__cplusplus >= 201103L)
|
||||
#include <cmath>
|
||||
static inline bool isfinite(double x) { return std::isfinite(x); }
|
||||
#endif /* isfinite */
|
||||
|
||||
#ifndef HAVE_ISNAN
|
||||
|
|
|
@ -36,9 +36,11 @@ C_MODE_START
|
|||
#ifdef HAVE_ARPA_INET_H
|
||||
#include <arpa/inet.h>
|
||||
#endif
|
||||
#ifdef HAVE_POLL
|
||||
#if defined(HAVE_POLL_H)
|
||||
#include <poll.h>
|
||||
#elif defined(HAVE_SYS_POLL_H)
|
||||
#include <sys/poll.h>
|
||||
#endif
|
||||
#endif /* defined(HAVE_POLL_H) */
|
||||
#ifdef HAVE_SYS_IOCTL_H
|
||||
#include <sys/ioctl.h>
|
||||
#endif
|
||||
|
|
|
@ -672,7 +672,7 @@ extern pthread_mutexattr_t my_errorcheck_mutexattr;
|
|||
#define ESRCH 1
|
||||
#endif
|
||||
|
||||
typedef ulong my_thread_id;
|
||||
typedef int64 my_thread_id;
|
||||
|
||||
extern void my_threadattr_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()
|
||||
with the current number of keys and key parts.
|
||||
*/
|
||||
#define DEFAULT_THREAD_STACK (288*1024L)
|
||||
#define DEFAULT_THREAD_STACK (290*1024L)
|
||||
#endif
|
||||
|
||||
#define MY_PTHREAD_LOCK_READ 0
|
||||
|
|
|
@ -52,11 +52,16 @@
|
|||
(((uint32) (((const uchar*) (A))[2])) << 8) +\
|
||||
(((uint32) (((const uchar*) (A))[1])) << 16) +\
|
||||
(((uint32) (((const uchar*) (A))[0])) << 24)))
|
||||
|
||||
#ifndef HAVE_mi_uint5korr
|
||||
#define mi_uint5korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[4])) +\
|
||||
(((uint32) (((const uchar*) (A))[3])) << 8) +\
|
||||
(((uint32) (((const uchar*) (A))[2])) << 16) +\
|
||||
(((uint32) (((const uchar*) (A))[1])) << 24)) +\
|
||||
(((ulonglong) (((const uchar*) (A))[0])) << 32))
|
||||
#endif /* HAVE_mi_uint5korr */
|
||||
|
||||
#ifndef HAVE_mi_uint6korr
|
||||
#define mi_uint6korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[5])) +\
|
||||
(((uint32) (((const uchar*) (A))[4])) << 8) +\
|
||||
(((uint32) (((const uchar*) (A))[3])) << 16) +\
|
||||
|
@ -64,6 +69,9 @@
|
|||
(((ulonglong) (((uint32) (((const uchar*) (A))[1])) +\
|
||||
(((uint32) (((const uchar*) (A))[0]) << 8)))) <<\
|
||||
32))
|
||||
#endif /* HAVE_mi_uint6korr */
|
||||
|
||||
#ifndef HAVE_mi_uint7korr
|
||||
#define mi_uint7korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[6])) +\
|
||||
(((uint32) (((const uchar*) (A))[5])) << 8) +\
|
||||
(((uint32) (((const uchar*) (A))[4])) << 16) +\
|
||||
|
@ -72,6 +80,9 @@
|
|||
(((uint32) (((const uchar*) (A))[1])) << 8) +\
|
||||
(((uint32) (((const uchar*) (A))[0])) << 16))) <<\
|
||||
32))
|
||||
#endif /* HAVE_mi_uint7korr */
|
||||
|
||||
#ifndef HAVE_mi_uint8korr
|
||||
#define mi_uint8korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[7])) +\
|
||||
(((uint32) (((const uchar*) (A))[6])) << 8) +\
|
||||
(((uint32) (((const uchar*) (A))[5])) << 16) +\
|
||||
|
@ -81,6 +92,7 @@
|
|||
(((uint32) (((const uchar*) (A))[1])) << 16) +\
|
||||
(((uint32) (((const uchar*) (A))[0])) << 24))) <<\
|
||||
32))
|
||||
#endif /* HAVE_mi_uint8korr */
|
||||
|
||||
/* This one is for uniformity */
|
||||
#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_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_MDB_GAP_BEG,
|
||||
COM_MDB_GAP_END=253,
|
||||
COM_MULTI,
|
||||
COM_END
|
||||
};
|
||||
struct st_vio;
|
||||
|
|
|
@ -56,7 +56,7 @@ struct mysql_event_general
|
|||
unsigned int general_command_length;
|
||||
const char *general_query;
|
||||
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_rows;
|
||||
/* Added in version 0x302 */
|
||||
|
|
|
@ -422,7 +422,7 @@ struct mysql_event_general
|
|||
unsigned int general_command_length;
|
||||
const char *general_query;
|
||||
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_rows;
|
||||
unsigned long long query_id;
|
||||
|
|
|
@ -19,8 +19,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|||
#ifndef MYSQL_SOCKET_H
|
||||
#define MYSQL_SOCKET_H
|
||||
|
||||
/* For strlen() */
|
||||
#include <string.h>
|
||||
/* For MY_STAT */
|
||||
#include <my_dir.h>
|
||||
/* For my_chsize */
|
||||
|
|
|
@ -1240,7 +1240,7 @@ static inline int inline_mysql_thread_create(
|
|||
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)();
|
||||
PSI_THREAD_CALL(set_thread_id)(psi, id);
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
if requested.
|
||||
|
||||
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
|
||||
|
|
|
@ -104,7 +104,7 @@ extern struct wsrep_service_st {
|
|||
const char * (*wsrep_thd_query_state_str_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);
|
||||
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);
|
||||
struct wsrep_ws_handle * (*wsrep_thd_ws_handle_func)(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_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_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_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)
|
||||
|
@ -206,7 +206,7 @@ void wsrep_thd_LOCK(THD *thd);
|
|||
void wsrep_thd_UNLOCK(THD *thd);
|
||||
void wsrep_thd_awake(THD *thd, my_bool signal);
|
||||
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();
|
||||
|
||||
#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_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON,
|
||||
/* 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 */
|
||||
COM_END
|
||||
};
|
||||
|
@ -188,7 +190,8 @@ enum enum_server_command
|
|||
#define REFRESH_GENERIC (1ULL << 30)
|
||||
#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_LONG_FLAG 4 /* Get all column flags */
|
||||
#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. */
|
||||
#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)
|
||||
/*
|
||||
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)
|
||||
|
||||
/* 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
|
||||
#define CAN_CLIENT_COMPRESS CLIENT_COMPRESS
|
||||
#else
|
||||
#define CAN_CLIENT_COMPRESS 0
|
||||
#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_LONG_FLAG | \
|
||||
CLIENT_CONNECT_WITH_DB | \
|
||||
|
@ -256,10 +270,11 @@ enum enum_server_command
|
|||
CLIENT_PS_MULTI_RESULTS | \
|
||||
CLIENT_SSL_VERIFY_SERVER_CERT | \
|
||||
CLIENT_REMEMBER_OPTIONS | \
|
||||
CLIENT_PROGRESS | \
|
||||
MARIADB_CLIENT_PROGRESS | \
|
||||
CLIENT_PLUGIN_AUTH | \
|
||||
CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA | \
|
||||
CLIENT_CONNECT_ATTRS)
|
||||
CLIENT_CONNECT_ATTRS |\
|
||||
MARIADB_CLIENT_COM_MULTI)
|
||||
|
||||
/*
|
||||
To be added later:
|
||||
|
|
|
@ -100,8 +100,6 @@ bool thd_is_connection_alive(THD *thd);
|
|||
void close_connection(THD *thd, uint errcode);
|
||||
/* End the connection before closing it */
|
||||
void end_connection(THD *thd);
|
||||
/* Cleanup the THD object */
|
||||
void thd_cleanup(THD *thd);
|
||||
/* Decrement connection counter */
|
||||
void dec_connection_count();
|
||||
/* Destroy THD object */
|
||||
|
|
|
@ -208,7 +208,7 @@ void vio_end(void);
|
|||
|
||||
/* shutdown(2) flags */
|
||||
#ifndef SHUT_RD
|
||||
#define SHUT_RD SD_BOTH
|
||||
#define SHUT_RD SD_RECEIVE
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Copyright (c) 2011, 2015, Oracle and/or its affiliates.
|
||||
Copyright (c) 2011, 2015, MariaDB
|
||||
/* Copyright (c) 2011, 2016, Oracle and/or its affiliates.
|
||||
Copyright (c) 2011, 2016, MariaDB
|
||||
|
||||
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
|
||||
|
@ -17,7 +17,7 @@
|
|||
#ifndef _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
|
||||
|
|
|
@ -31,6 +31,14 @@
|
|||
if (WSREP_ON && (WSREP(thd) || (thd && thd->wsrep_exec_mode==TOTAL_ORDER))) \
|
||||
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(...) \
|
||||
if (wsrep_debug) 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_TO_ISOLATION_BEGIN(db_, table_, table_list_)
|
||||
#define WSREP_TO_ISOLATION_END
|
||||
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_)
|
||||
#endif
|
||||
|
||||
#endif /* WSERP_INCLUDED */
|
||||
|
|
|
@ -27,7 +27,7 @@ extern char * mysql_unix_port;
|
|||
When adding capabilities here, consider if they should be also added to
|
||||
the server's version.
|
||||
*/
|
||||
#define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | \
|
||||
#define CLIENT_CAPABILITIES (CLIENT_MYSQL | \
|
||||
CLIENT_LONG_FLAG | \
|
||||
CLIENT_TRANSACTIONS | \
|
||||
CLIENT_PROTOCOL_41 | \
|
||||
|
|
|
@ -47,9 +47,11 @@
|
|||
#include <sys/select.h>
|
||||
#endif
|
||||
#endif /* !defined(__WIN__) */
|
||||
#ifdef HAVE_POLL
|
||||
#if defined(HAVE_POLL_H)
|
||||
#include <poll.h>
|
||||
#elif defined(HAVE_SYS_POLL_H)
|
||||
#include <sys/poll.h>
|
||||
#endif
|
||||
#endif /* defined(HAVE_POLL_H) */
|
||||
#ifdef HAVE_SYS_UN_H
|
||||
#include <sys/un.h>
|
||||
#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.
|
||||
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.
|
||||
|
||||
SYNOPSIS
|
||||
|
|
|
@ -110,6 +110,7 @@ SET(SQL_EMBEDDED_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc
|
|||
../sql/item_inetfunc.cc
|
||||
../sql/wsrep_dummy.cc ../sql/encryption.cc
|
||||
../sql/item_windowfunc.cc ../sql/sql_window.cc
|
||||
../sql/sql_cte.cc
|
||||
${GEN_SOURCES}
|
||||
${MYSYS_LIBWRAP_SOURCE}
|
||||
)
|
||||
|
|
|
@ -165,7 +165,8 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
|||
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->mysys_var= NULL;
|
||||
|
||||
|
@ -428,8 +429,8 @@ static void emb_free_embedded_thd(MYSQL *mysql)
|
|||
thread_count--;
|
||||
thd->store_globals();
|
||||
thd->unlink();
|
||||
delete thd;
|
||||
mysql_mutex_unlock(&LOCK_thread_count);
|
||||
delete thd;
|
||||
my_pthread_setspecific_ptr(THR_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)
|
||||
{
|
||||
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;
|
||||
if (thd->store_globals())
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
@ -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
|
||||
.sp
|
||||
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
|
||||
.sp
|
||||
.RS 4
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue