Merge pilot.blaudden:/home/msvensson/mysql/my51-m-mysql_upgrade
into pilot.blaudden:/home/msvensson/mysql/mysql-5.1-maint scripts/mysql_system_tables_fix.sql: Auto merged sql/sql_plugin.cc: Auto merged sql/sql_udf.cc: Auto merged
This commit is contained in:
commit
67a9f239f0
21
.bzrignore
21
.bzrignore
@ -352,8 +352,11 @@ client/.libs/mysqltest
|
||||
client/completion_hash.cpp
|
||||
client/decimal.c
|
||||
client/insert_test
|
||||
client/link_sources
|
||||
client/log_event.cc
|
||||
client/log_event.h
|
||||
client/log_event_old.cc
|
||||
client/log_event_old.h
|
||||
client/mf_iocache.c
|
||||
client/mf_iocache.cc
|
||||
client/my_decimal.cc
|
||||
@ -379,6 +382,9 @@ client/mysqltestmanager-pwgen
|
||||
client/mysqltestmanagerc
|
||||
client/mysys_priv.h
|
||||
client/readline.cpp
|
||||
client/rpl_constants.h
|
||||
client/rpl_record_old.cc
|
||||
client/rpl_record_old.h
|
||||
client/select_test
|
||||
client/sql_string.cpp
|
||||
client/ssl_test
|
||||
@ -574,6 +580,7 @@ help
|
||||
help.c
|
||||
help.h
|
||||
include/check_abi
|
||||
include/link_sources
|
||||
include/my_config.h
|
||||
include/my_global.h
|
||||
include/mysql_h.ic
|
||||
@ -749,6 +756,7 @@ libmysql/.libs/libmysqlclient.so.15.0.0
|
||||
libmysql/conf_to_src
|
||||
libmysql/debug/libmysql.exp
|
||||
libmysql/libmysql.ver
|
||||
libmysql/link_sources
|
||||
libmysql/my_static.h
|
||||
libmysql/my_time.c
|
||||
libmysql/mysys_priv.h
|
||||
@ -1084,9 +1092,11 @@ libmysqld/item_uniq.cc
|
||||
libmysqld/key.cc
|
||||
libmysqld/lib_sql.cpp
|
||||
libmysqld/libmysql.c
|
||||
libmysqld/link_sources
|
||||
libmysqld/lock.cc
|
||||
libmysqld/log.cc
|
||||
libmysqld/log_event.cc
|
||||
libmysqld/log_event_old.cc
|
||||
libmysqld/md5.c
|
||||
libmysqld/mf_iocache.cc
|
||||
libmysqld/mini_client.cc
|
||||
@ -1109,6 +1119,8 @@ libmysqld/records.cc
|
||||
libmysqld/repl_failsafe.cc
|
||||
libmysqld/rpl_filter.cc
|
||||
libmysqld/rpl_injector.cc
|
||||
libmysqld/rpl_record.cc
|
||||
libmysqld/rpl_record_old.cc
|
||||
libmysqld/set_var.cc
|
||||
libmysqld/simple-test
|
||||
libmysqld/slave.cc
|
||||
@ -1347,10 +1359,15 @@ mysql-test/suite/funcs_1/r/myisam_trig_03e.warnings
|
||||
mysql-test/suite/funcs_1/r/myisam_views.warnings
|
||||
mysql-test/suite/funcs_1/r/ndb_trig_03e.warnings
|
||||
mysql-test/suite/funcs_1/r/ndb_views.warnings
|
||||
mysql-test/suite/partitions/r/dif
|
||||
mysql-test/suite/partitions/r/diff
|
||||
mysql-test/suite/partitions/r/partition.result
|
||||
mysql-test/suite/partitions/r/partition_bit_ndb.warnings
|
||||
mysql-test/suite/partitions/r/partition_special_innodb.warnings
|
||||
mysql-test/suite/partitions/r/partition_special_myisam.warnings
|
||||
mysql-test/suite/partitions/r/partition_t55.out
|
||||
mysql-test/suite/partitions/r/partition_t55.refout
|
||||
mysql-test/suite/partitions/t/partition.test
|
||||
mysql-test/t/index_merge.load
|
||||
mysql-test/t/tmp.test
|
||||
mysql-test/var
|
||||
@ -1763,7 +1780,9 @@ netware/.deps/my_manage.Po
|
||||
netware/.deps/mysql_install_db.Po
|
||||
netware/.deps/mysql_test_run.Po
|
||||
netware/.deps/mysqld_safe.Po
|
||||
netware/init_db.sql
|
||||
netware/libmysql.imp
|
||||
netware/test_db.sql
|
||||
pack_isam/*.ds?
|
||||
perror/*.ds?
|
||||
perror/*.vcproj
|
||||
@ -1798,6 +1817,7 @@ repl-tests/test-repl/sum-wlen-slave.master.re
|
||||
repl-tests/test-repl/sum-wlen-slave.master.reje
|
||||
replace/*.ds?
|
||||
replace/*.vcproj
|
||||
scripts/comp_sql
|
||||
scripts/fill_func_tables
|
||||
scripts/fill_func_tables.sql
|
||||
scripts/fill_help_tables
|
||||
@ -1815,6 +1835,7 @@ scripts/mysql_find_rows
|
||||
scripts/mysql_fix_extensions
|
||||
scripts/mysql_fix_privilege_tables
|
||||
scripts/mysql_fix_privilege_tables.sql
|
||||
scripts/mysql_fix_privilege_tables_sql.c
|
||||
scripts/mysql_install_db
|
||||
scripts/mysql_secure_installation
|
||||
scripts/mysql_setpermission
|
||||
|
@ -4,7 +4,7 @@ extra_configs="$extra_configs $local_infile_configs"
|
||||
configure="./configure $base_configs $extra_configs"
|
||||
|
||||
commands="\
|
||||
$make -k distclean || true
|
||||
$make -k maintainer-clean || true
|
||||
/bin/rm -rf */.deps/*.P configure config.cache storage/*/configure storage/*/config.cache autom4te.cache storage/*/autom4te.cache;
|
||||
|
||||
path=`dirname $0`
|
||||
|
@ -64,10 +64,11 @@ check_cpu () {
|
||||
;;
|
||||
|
||||
# Intel ia32
|
||||
*X[eE][oO][nN]*)
|
||||
*Intel*Core*|*X[eE][oO][nN]*)
|
||||
# a Xeon is just another pentium4 ...
|
||||
# ... unless it has the "lm" (long-mode) flag set,
|
||||
# in that case it's a Xeon with EM64T support
|
||||
# So is Intel Core.
|
||||
if [ -z "$cpu_flag_lm" ]; then
|
||||
cpu_arg="pentium4";
|
||||
else
|
||||
@ -114,6 +115,10 @@ check_cpu () {
|
||||
*i386*i486*)
|
||||
cpu_arg="pentium-m";
|
||||
;;
|
||||
#Core 2 Duo
|
||||
*Intel*Core\(TM\)2*)
|
||||
cpu_arg="nocona";
|
||||
;;
|
||||
|
||||
# Intel ia64
|
||||
*Itanium*)
|
||||
@ -160,26 +165,34 @@ check_cpu () {
|
||||
|
||||
cc_ver=`$cc --version | sed 1q`
|
||||
cc_verno=`echo $cc_ver | sed -e 's/^.*gcc/gcc/g; s/[^0-9. ]//g; s/^ *//g; s/ .*//g'`
|
||||
set -- `echo $cc_verno | tr '.' ' '`
|
||||
cc_major=$1
|
||||
cc_minor=$2
|
||||
cc_patch=$3
|
||||
cc_comp=`expr $cc_major '*' 100 '+' $cc_minor`
|
||||
|
||||
case "$cc_ver--$cc_verno" in
|
||||
*GCC*)
|
||||
# different gcc backends (and versions) have different CPU flags
|
||||
case `gcc -dumpmachine` in
|
||||
i?86-*)
|
||||
case "$cc_verno" in
|
||||
3.4*|3.5*|4.*)
|
||||
check_cpu_args='-mtune=$cpu_arg -march=$cpu_arg'
|
||||
;;
|
||||
*)
|
||||
check_cpu_args='-mcpu=$cpu_arg -march=$cpu_arg'
|
||||
;;
|
||||
esac
|
||||
if test "$cc_comp" -lt 304
|
||||
then
|
||||
check_cpu_args='-mcpu=$cpu_arg'
|
||||
else
|
||||
check_cpu_args='-mtune=$cpu_arg'
|
||||
fi
|
||||
;;
|
||||
ppc-*)
|
||||
check_cpu_args='-mcpu=$cpu_arg -mtune=$cpu_arg'
|
||||
;;
|
||||
x86_64-*)
|
||||
if test "$cc_comp" -lt 304
|
||||
then
|
||||
check_cpu_args='-mcpu=$cpu_arg'
|
||||
else
|
||||
check_cpu_args='-mtune=$cpu_arg'
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
check_cpu_cflags=""
|
||||
|
@ -1,5 +1,7 @@
|
||||
#! /bin/sh
|
||||
|
||||
/bin/rm -f */.deps/*.P */*.o
|
||||
make -k clean
|
||||
make -k maintainer-clean
|
||||
/bin/rm -f */.deps/*.P */*.o
|
||||
/bin/rm -f config.cache mysql-*.tar.gz
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
#! /bin/sh
|
||||
|
||||
/bin/rm -f */.deps/*.P */*.o
|
||||
make -k clean
|
||||
make -k maintainer-clean
|
||||
/bin/rm -f */.deps/*.P */*.o
|
||||
/bin/rm -f */.deps/*.P config.cache storage/innobase/config.cache mysql-*.tar.gz
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
#! /bin/sh
|
||||
|
||||
/bin/rm -f */.deps/*.P */*.o
|
||||
make -k clean
|
||||
make -k maintainer-clean
|
||||
/bin/rm -f */.deps/*.P */*.o
|
||||
/bin/rm -f */.deps/*.P config.cache storage/innobase/config.cache mysql-*.tar.gz
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
# tree can then be picked up by "make dist" to create the "pristine source
|
||||
# package" that is used as the basis for all other binary builds.
|
||||
#
|
||||
test -f Makefile && make distclean
|
||||
test -f Makefile && make maintainer-clean
|
||||
(cd storage/innobase && aclocal && autoheader && \
|
||||
libtoolize --automake --force --copy && \
|
||||
automake --force --add-missing --copy && autoconf)
|
||||
|
@ -61,7 +61,7 @@ done
|
||||
|
||||
|
||||
set -x
|
||||
make distclean
|
||||
make maintainer-clean
|
||||
|
||||
path=`dirname $0`
|
||||
. "$path/autorun.sh"
|
||||
|
@ -1,4 +1,4 @@
|
||||
gmake -k clean || true
|
||||
gmake -k maintainer-clean || true
|
||||
/bin/rm -f */.deps/*.P config.cache storage/innobase/config.cache
|
||||
|
||||
path=`dirname $0`
|
||||
|
@ -33,7 +33,7 @@ else
|
||||
fi
|
||||
|
||||
set -x
|
||||
make distclean
|
||||
make maintainer-clean
|
||||
|
||||
path=`dirname $0`
|
||||
. "$path/autorun.sh"
|
||||
|
@ -4,6 +4,6 @@ path=`dirname $0`
|
||||
. "$path/SETUP.sh" "$@" --with-debug=full
|
||||
|
||||
extra_flags="$pentium_cflags $debug_cflags"
|
||||
extra_configs="$pentium_configs $debug_configs $max_configs $error_inject"
|
||||
extra_configs="$pentium_configs $debug_configs $max_configs $error_inject --with-experimental-collations"
|
||||
|
||||
. "$path/FINISH.sh"
|
||||
|
@ -1,5 +1,7 @@
|
||||
#! /bin/sh
|
||||
|
||||
AM_MAKEFLAGS="-j 2"
|
||||
gmake -k clean || true
|
||||
gmake -k maintainer-clean || true
|
||||
/bin/rm -f */.deps/*.P config.cache
|
||||
|
||||
path=`dirname $0`
|
||||
|
55
BUILD/compile-solaris-amd64
Executable file
55
BUILD/compile-solaris-amd64
Executable file
@ -0,0 +1,55 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
function _find_mysql_root () (
|
||||
while [ "x$PWD" != "x/" ]; do
|
||||
# Check if some directories are present
|
||||
if [ -d BUILD -a -d sql -a -d mysys ]; then
|
||||
echo "$PWD"
|
||||
return 0
|
||||
fi
|
||||
cd ..
|
||||
done
|
||||
return 1
|
||||
)
|
||||
|
||||
make -k clean || true
|
||||
/bin/rm -f */.deps/*.P config.cache
|
||||
|
||||
path=`dirname $0`
|
||||
. "$path/autorun.sh"
|
||||
|
||||
warning_flags="-Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wparentheses -Wsign-compare -Wwrite-strings -Wunused"
|
||||
compiler_flags="-g -O3 -fno-omit-frame-pointer"
|
||||
|
||||
export CC CXX CFLAGS CXXFLAGS LDFLAGS LIBS
|
||||
CC="gcc"
|
||||
CXX="gcc"
|
||||
CFLAGS="$warning_flags $compiler_flags"
|
||||
CXXFLAGS=""
|
||||
LDFLAGS="-O3 -g -static-libgcc"
|
||||
LIBS=-lmtmalloc
|
||||
root=$(_find_mysql_root)
|
||||
|
||||
$root/configure \
|
||||
--prefix=/usr/local/mysql \
|
||||
--localstatedir=/usr/local/mysql/data \
|
||||
--libexecdir=/usr/local/mysql/bin \
|
||||
--with-extra-charsets=complex \
|
||||
--enable-thread-safe-client \
|
||||
--enable-local-infile \
|
||||
--with-zlib-dir=bundled \
|
||||
--with-big-tables \
|
||||
--with-readline \
|
||||
--with-archive-storage-engine \
|
||||
--with-named-curses=-lcurses \
|
||||
--with-big-tables \
|
||||
--with-innodb \
|
||||
--with-berkeley-db \
|
||||
--with-example-storage-engine \
|
||||
--with-blackhole-storage-engine \
|
||||
--with-ndbcluster \
|
||||
--with-federated-storage-engine \
|
||||
--with-csv-storage-engine \
|
||||
--with-ssl \
|
||||
--with-embedded-server \
|
||||
--disable-shared
|
@ -5,7 +5,7 @@
|
||||
|
||||
PATH=/opt/SUNWspro/bin/:/usr/ccs/bin:$PATH
|
||||
|
||||
make -k clean || true
|
||||
make -k maintainer-clean || true
|
||||
/bin/rm -f */.deps/*.P config.cache
|
||||
|
||||
path=`dirname $0`
|
||||
|
@ -31,7 +31,7 @@ do
|
||||
shift
|
||||
done
|
||||
|
||||
make -k clean || true
|
||||
make -k maintainer-clean || true
|
||||
/bin/rm -f */.deps/*.P config.cache
|
||||
|
||||
path=`dirname $0`
|
||||
|
@ -72,7 +72,7 @@ X-CSetKey: <$CSETKEY>
|
||||
$BH
|
||||
EOF
|
||||
bk changes -v -r+
|
||||
bk cset -r+ -d
|
||||
bk rset -r+ -ah | bk gnupatch -h -dup -T
|
||||
) > $BKROOT/BitKeeper/tmp/dev_public.txt
|
||||
|
||||
$SENDMAIL -t < $BKROOT/BitKeeper/tmp/dev_public.txt
|
||||
|
@ -114,6 +114,14 @@ IF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR
|
||||
STRING(REPLACE "/MDd" "/MTd" CMAKE_CXX_FLAGS_DEBUG
|
||||
${CMAKE_CXX_FLAGS_DEBUG})
|
||||
|
||||
STRING(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||
${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
|
||||
STRING(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELWITHDEBINFO
|
||||
${CMAKE_C_FLAGS_RELWITHDEBINFO})
|
||||
|
||||
# generate .map files
|
||||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MAP /MAPINFO:EXPORTS")
|
||||
|
||||
# remove support for Exception handling
|
||||
STRING(REPLACE "/GX" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
STRING(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
@ -131,10 +139,11 @@ ADD_SUBDIRECTORY(dbug)
|
||||
ADD_SUBDIRECTORY(strings)
|
||||
ADD_SUBDIRECTORY(regex)
|
||||
ADD_SUBDIRECTORY(mysys)
|
||||
ADD_SUBDIRECTORY(scripts)
|
||||
ADD_SUBDIRECTORY(zlib)
|
||||
ADD_SUBDIRECTORY(extra/yassl)
|
||||
ADD_SUBDIRECTORY(extra/yassl/taocrypt)
|
||||
ADD_SUBDIRECTORY(extra)
|
||||
ADD_SUBDIRECTORY(zlib)
|
||||
ADD_SUBDIRECTORY(storage/heap)
|
||||
ADD_SUBDIRECTORY(storage/myisam)
|
||||
ADD_SUBDIRECTORY(storage/myisammrg)
|
||||
|
@ -1,40 +1,5 @@
|
||||
COPYING
|
||||
COPYING.LIB
|
||||
INSTALL-SOURCE
|
||||
INSTALL-BINARY
|
||||
Makefile
|
||||
Makefile.in
|
||||
Manual-updates
|
||||
before-gpl-changes-manual.texi
|
||||
include.texi
|
||||
manual-before-gpl.texi
|
||||
manual-tmp.aux
|
||||
manual-tmp.cp
|
||||
manual-tmp.fn
|
||||
manual-tmp.ky
|
||||
manual-tmp.log
|
||||
manual-tmp.pdf
|
||||
manual-tmp.pg
|
||||
manual-tmp.texi
|
||||
manual-tmp.toc
|
||||
manual-tmp.tp
|
||||
manual-tmp.vr
|
||||
manual.aux
|
||||
manual.cp
|
||||
manual.cps
|
||||
manual.fn
|
||||
manual.fns
|
||||
manual.html
|
||||
manual.ky
|
||||
manual.log
|
||||
manual.pdf
|
||||
manual.pg
|
||||
manual.toc
|
||||
manual.tp
|
||||
manual.txt
|
||||
manual.vr
|
||||
manual_a4.ps
|
||||
manual_a4.ps.gz
|
||||
manual_letter.ps
|
||||
manual_letter.ps.gz
|
||||
manual_toc.html
|
||||
mysql.info
|
||||
|
@ -1,101 +0,0 @@
|
||||
\input texinfo @c -*-texinfo-*-
|
||||
@c
|
||||
@c *********************************************************
|
||||
@c
|
||||
@c This is a dummy placeholder file for internals.texi in the
|
||||
@c MySQL source trees.
|
||||
@c
|
||||
@c Note, that the internals documentation has been moved into a separate
|
||||
@c BitKeeper source tree named "mysqldoc" - do not attempt to edit this
|
||||
@c file! All changes to internals.texi should be done in the mysqldoc tree.
|
||||
@c
|
||||
@c See http://www.mysql.com/doc/en/Installing_source_tree.html
|
||||
@c for information about how to work with BitKeeper source trees.
|
||||
@c
|
||||
@c This dummy file is being replaced with the actual file from the
|
||||
@c mysqldoc tree when building the official source distribution.
|
||||
@c
|
||||
@c Please e-mail docs@mysql.com for more information or if
|
||||
@c you are interested in doing a translation.
|
||||
@c
|
||||
@c *********************************************************
|
||||
@c
|
||||
@c %**start of header
|
||||
|
||||
@setfilename internals.info
|
||||
|
||||
@c We want the types in the same index
|
||||
@syncodeindex tp fn
|
||||
|
||||
@ifclear tex-debug
|
||||
@c This removes the black squares in the right margin
|
||||
@finalout
|
||||
@end ifclear
|
||||
|
||||
@c Set background for HTML
|
||||
@set _body_tags BGCOLOR=silver TEXT=#000000 LINK=#101090 VLINK=#7030B0
|
||||
@c Set some style elements for the manual in HTML form. 'suggested'
|
||||
@c natural language colors: aqua, black, blue, fuchsia, gray, green,
|
||||
@c lime, maroon, navy, olive, purple, red, silver, teal, white, and
|
||||
@c yellow. From Steeve Buehler <ahr@YogElements.com>
|
||||
@set _extra_head <style> code {color:purple} tt {color:green} samp {color:navy} pre {color:maroon} </style>
|
||||
|
||||
@settitle Dummy MySQL internals documentation for version @value{mysql_version}.
|
||||
|
||||
@c We want single-sided heading format, with chapters on new pages. To
|
||||
@c get double-sided format change 'on' below to 'odd'
|
||||
@setchapternewpage on
|
||||
|
||||
@paragraphindent 0
|
||||
|
||||
@c %**end of header
|
||||
|
||||
@ifinfo
|
||||
@format
|
||||
START-INFO-DIR-ENTRY
|
||||
* mysql: (mysql). MySQL documentation.
|
||||
END-INFO-DIR-ENTRY
|
||||
@end format
|
||||
@end ifinfo
|
||||
|
||||
@titlepage
|
||||
@sp 10
|
||||
@center @titlefont{Empty placeholder for the MySQL Internals Documentation}
|
||||
@sp 10
|
||||
@center Copyright @copyright{} 1995-2003 MySQL AB
|
||||
@c blank page after title page makes page 1 be a page front.
|
||||
@c also makes the back of the title page blank.
|
||||
@page
|
||||
@end titlepage
|
||||
|
||||
@c This should be added. The HTML conversion also needs a MySQL version
|
||||
@c number somewhere.
|
||||
|
||||
@iftex
|
||||
@c change this to double if you want formatting for double-sided
|
||||
@c printing
|
||||
@headings single
|
||||
|
||||
@oddheading @thischapter @| @| @thispage
|
||||
@evenheading @thispage @| @| MySQL Internal Reference for Version @value{mysql_version}
|
||||
|
||||
@end iftex
|
||||
|
||||
@node Top, (dir), (dir), (dir)
|
||||
|
||||
@ifinfo
|
||||
This is an empty placeholder file for the MySQL internals documentation.
|
||||
|
||||
The real version of this file is now maintained in a separate BitKeeper
|
||||
source tree! Please see
|
||||
@url{http://www.mysql.com/doc/en/Installing_source_tree.html} for more info
|
||||
on how to work with BitKeeper.
|
||||
|
||||
Please do not attempt to edit this file directly - use the one in the
|
||||
@code{mysqldoc} BK tree instead.
|
||||
|
||||
This file will be replaced with the current @code{internals.texi} when
|
||||
building the official source distribution.
|
||||
@end ifinfo
|
||||
|
||||
@bye
|
@ -1,3 +1,5 @@
|
||||
[Note this information is obsolete]
|
||||
|
||||
Notes on compiling glibc for the standard MySQL binary:
|
||||
|
||||
- make sure you have gcc 2.95 and gmake 3.79 or newer
|
||||
|
140
Docs/my_sys.txt
140
Docs/my_sys.txt
@ -1,140 +0,0 @@
|
||||
Functions i mysys: (For flags se my_sys.h)
|
||||
|
||||
int my_copy _A((const char *from,const char *to,myf MyFlags));
|
||||
- Copy file
|
||||
|
||||
int my_delete _A((const char *name,myf MyFlags));
|
||||
- Delete file
|
||||
|
||||
int my_getwd _A((string buf,uint size,myf MyFlags));
|
||||
int my_setwd _A((const char *dir,myf MyFlags));
|
||||
- Get and set working directory
|
||||
|
||||
string my_tempnam _A((const char *pfx,myf MyFlags));
|
||||
- Make a uniq temp file name by using dir and adding something after
|
||||
pfx to make name uniq. Name is made by adding a uniq 6 length-string
|
||||
and TMP_EXT after pfx.
|
||||
Returns pointer to malloced area for filename. Should be freed by
|
||||
free().
|
||||
|
||||
File my_open _A((const char *FileName,int Flags,myf MyFlags));
|
||||
File my_create _A((const char *FileName,int CreateFlags,
|
||||
int AccsesFlags, myf MyFlags));
|
||||
int my_close _A((File Filedes,myf MyFlags));
|
||||
uint my_read _A((File Filedes,byte *Buffer,uint Count,myf MyFlags));
|
||||
uint my_write _A((File Filedes,const byte *Buffer,uint Count,
|
||||
myf MyFlags));
|
||||
ulong my_seek _A((File fd,ulong pos,int whence,myf MyFlags));
|
||||
ulong my_tell _A((File fd,myf MyFlags));
|
||||
- Use instead of open,open-with-create-flag, close read and write
|
||||
to get automatic error-messages (flag: MYF_WME) and only have
|
||||
to test for != 0 if error (flag: MY_NABP).
|
||||
|
||||
int my_rename _A((const char *from,const char *to,myf MyFlags));
|
||||
- Rename file
|
||||
|
||||
FILE *my_fopen _A((const char *FileName,int Flags,myf MyFlags));
|
||||
FILE *my_fdopen _A((File Filedes,int Flags,myf MyFlags));
|
||||
int my_fclose _A((FILE *fd,myf MyFlags));
|
||||
uint my_fread _A((FILE *stream,byte *Buffer,uint Count,myf MyFlags));
|
||||
uint my_fwrite _A((FILE *stream,const byte *Buffer,uint Count,
|
||||
myf MyFlags));
|
||||
ulong my_fseek _A((FILE *stream,ulong pos,int whence,myf MyFlags));
|
||||
ulong my_ftell _A((FILE *stream,myf MyFlags));
|
||||
- Same read-interface for streams as for files
|
||||
|
||||
gptr _mymalloc _A((uint uSize,const char *sFile,
|
||||
uint uLine, myf MyFlag));
|
||||
gptr _myrealloc _A((string pPtr,uint uSize,const char *sFile,
|
||||
uint uLine, myf MyFlag));
|
||||
void _myfree _A((gptr pPtr,const char *sFile,uint uLine));
|
||||
int _sanity _A((const char *sFile,unsigned int uLine));
|
||||
gptr _myget_copy_of_memory _A((const byte *from,uint length,
|
||||
const char *sFile, uint uLine,
|
||||
myf MyFlag));
|
||||
- malloc(size,myflag) is mapped to this functions if not compiled
|
||||
with -DSAFEMALLOC
|
||||
|
||||
void TERMINATE _A((void));
|
||||
- Writes malloc-info on stdout if compiled with -DSAFEMALLOC.
|
||||
|
||||
int my_chsize _A((File fd,ulong newlength,myf MyFlags));
|
||||
- Change size of file
|
||||
|
||||
void my_error _D((int nr,myf MyFlags, ...));
|
||||
- Writes message using error number (se mysys/errors.h) on
|
||||
stdout or curses if MYSYS_PROGRAM_USES_CURSES() is called.
|
||||
|
||||
void my_message _A((const char *str,myf MyFlags));
|
||||
- Writes message-string on
|
||||
stdout or curses if MYSYS_PROGRAM_USES_CURSES() is called.
|
||||
|
||||
void my_init _A((void ));
|
||||
- Start each program (in main) with this.
|
||||
void my_end _A((int infoflag));
|
||||
- Gives info about program.
|
||||
- If infoflag & MY_CHECK_ERROR prints if some files are left open
|
||||
- If infoflag & MY_GIVE_INFO prints timing info and malloc info
|
||||
about prog.
|
||||
|
||||
int my_redel _A((const char *from, const char *to, int MyFlags));
|
||||
- Delete from before rename of to to from. Copyes state from old
|
||||
file to new file. If MY_COPY_TIME is set sets old time.
|
||||
|
||||
int my_copystat _A((const char *from, const char *to, int MyFlags));
|
||||
- Copye state from old file to new file.
|
||||
If MY_COPY_TIME is set sets copy also time.
|
||||
|
||||
string my_filename _A((File fd));
|
||||
- Give filename of open file.
|
||||
|
||||
int dirname _A((string to,const char *name));
|
||||
- Copy name of directory from filename.
|
||||
|
||||
int test_if_hard_path _A((const char *dir_name));
|
||||
- Test if dirname is a hard path (Starts from root)
|
||||
|
||||
void convert_dirname _A((string name));
|
||||
- Convert dirname acording to system.
|
||||
- In MSDOS changes all caracters to capitals and changes '/' to
|
||||
'\'
|
||||
string fn_ext _A((const char *name));
|
||||
- Returns pointer to extension in filename
|
||||
string fn_format _A((string to,const char *name,const char *dsk,
|
||||
const char *form,int flag));
|
||||
format a filename with replace of library and extension and
|
||||
converts between different systems.
|
||||
params to and name may be identicall
|
||||
function dosn't change name if name != to
|
||||
Flag may be: 1 force replace filnames library with 'dsk'
|
||||
2 force replace extension with 'form' */
|
||||
4 force Unpack filename (replace ~ with home)
|
||||
8 Pack filename as short as possibly for output to
|
||||
user.
|
||||
All open requests should allways use at least:
|
||||
"open(fn_format(temp_buffe,name,"","",4),...)" to unpack home and
|
||||
convert filename to system-form.
|
||||
|
||||
string fn_same _A((string toname,const char *name,int flag));
|
||||
- Copys directory and extension from name to toname if neaded.
|
||||
copy can be forced by same flags that in fn_format.
|
||||
|
||||
int wild_compare _A((const char *str,const char *wildstr));
|
||||
- Compare if str matches wildstr. Wildstr can contain "*" and "?"
|
||||
as match-characters.
|
||||
Returns 0 if match.
|
||||
|
||||
void get_date _A((string to,int timeflag));
|
||||
- Get current date in a form ready for printing.
|
||||
|
||||
void soundex _A((string out_pntr, string in_pntr))
|
||||
- Makes in_pntr to a 5 chars long string. All words that sounds
|
||||
alike have the same string.
|
||||
|
||||
int init_key_cache _A((ulong use_mem,ulong leave_this_much_mem));
|
||||
- Use cacheing of keys in MISAM, PISAM, and ISAM.
|
||||
KEY_CACHE_SIZE is a good size.
|
||||
- Remember to lock databases for optimal cacheing
|
||||
|
||||
void end_key_cache _A((void));
|
||||
- End key-cacheing.
|
943
Docs/net_doc.txt
943
Docs/net_doc.txt
@ -1,943 +0,0 @@
|
||||
MySQL Client/Server Protocol Documentation
|
||||
|
||||
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
|
||||
This paper has the objective of presenting a through description
|
||||
of the client/server protocol that is embodied in MySQL. Particularly,
|
||||
this paper aims to document and describe:
|
||||
|
||||
- manner in which MySQL server detects client connection requests and
|
||||
creates connection
|
||||
- manner in which MySQL client C API call connects to server - the
|
||||
entire protocol of sending/receiving data by MySQL server and C API
|
||||
code
|
||||
- manner in which queries are sent by client C API calls to server
|
||||
- manner in which query results are sent by server
|
||||
- manner in which query results are resolved by server
|
||||
- sending and receiving of error messages
|
||||
|
||||
|
||||
This paper does not have the goal or describing nor documenting other
|
||||
related MySQL issues, like usage of thread libraries, MySQL standard
|
||||
library set, MySQL strings library and other MySQL specific libraries,
|
||||
type definitions and utilities.
|
||||
|
||||
Issues that are covered by this paper are contained in the following
|
||||
source code files:
|
||||
|
||||
- libmysql/net.c and sql/net_serv.cc, the two being identical
|
||||
- client/libmysql.c (not entire file is covered)
|
||||
- include/mysql_com.h
|
||||
- include/mysql.h
|
||||
- sql/mysqld.cc (not entire file is covered)
|
||||
- sql/net_pkg.cc
|
||||
- sql/sql_base.cc (not entire file is covered)
|
||||
- sql/sql_select.cc (not entire file is covered)
|
||||
- sql/sql_parse.cc (not entire file is covered)
|
||||
|
||||
Note: libmysql/net.c was client/net.c prior to MySQL 3.23.11.
|
||||
sql/net_serv.cc was sql/net_serv.c prior to MySQL 3.23.16.
|
||||
|
||||
Beside this introduction this paper presents basic definitions,
|
||||
constants, structures and global variables, all related functions in
|
||||
server and in C API. Textual description of the entire protocol
|
||||
functioning is described in the last chapter of this paper.
|
||||
|
||||
|
||||
Constants, structures and global variables
|
||||
------------------------------------------
|
||||
|
||||
This chapter will describe all constants, structures and
|
||||
global variables relevant to client/server protocol.
|
||||
|
||||
Constants
|
||||
|
||||
They are important as they contain default values, the ones
|
||||
that are valid if options are not set in any other way. Beside that
|
||||
MySQL source code does not contain a single non-defined constant in
|
||||
its code. This description of constants does not include
|
||||
configuration and conditional compilation #defines.
|
||||
|
||||
NAME_LEN - field and table name length, current value 64
|
||||
HOSTNAME_LENGTH - length of the hostname, current value 64
|
||||
USERNAME_LENGTH - username length, current value 16
|
||||
MYSQL_PORT - default TCP/IP port number, current value 3306
|
||||
MYSQL_UNIX_ADDR - full path of the default Unix socket file, current value
|
||||
"/tmp/mysql.sock"
|
||||
MYSQL_NAMEDPIPE - full path of the default NT pipe file, current value
|
||||
"MySQL"
|
||||
MYSQL_SERVICENAME - name of the MySQL Service on NT, current value "MySQL"
|
||||
NET_HEADER_SIZE - size of the network header, when no
|
||||
compression is used, current value 4
|
||||
COMP_HEADER_SIZE - additional size of network header when
|
||||
compression is used, current value 3
|
||||
|
||||
What follows are set of constants, defined in source only, which
|
||||
define capabilities of the client built with that version of C
|
||||
API. Simply, when some new feature is added in client, that client
|
||||
feature is defined, so that server can detect what capabilities a
|
||||
client program has.
|
||||
|
||||
CLIENT_LONG_PASSWORD - client supports new more secure passwords
|
||||
CLIENT_LONG_FLAG - client uses longer flags
|
||||
CLIENT_CONNECT_WITH_DB - client can specify db on connect
|
||||
CLIENT_COMPRESS - client can use compression protocol
|
||||
CLIENT_ODBC - ODBC client
|
||||
CLIENT_LOCAL_FILES - client can use LOAD DATA INFILE LOCAL
|
||||
CLIENT_IGNORE_SPACE - client can ignore spaces before '('
|
||||
CLIENT_CHANGE_USER - client supports the mysql_change_user()
|
||||
|
||||
What follows are other constants, pertaining to timeouts and sizes
|
||||
|
||||
MYSQL_ERRMSG_SIZE - maximum size of error message string, current value 200
|
||||
NET_READ_TIMEOUT - read timeout, current value 30 seconds
|
||||
NET_WRITE_TIMEOUT - write timeout, current value 60 seconds
|
||||
NET_WAIT_TIMEOUT - wait for new query timeout, current value 8*60*60
|
||||
seconds, that is, 8 hours
|
||||
packet_error - value returned in case of socket errors, current
|
||||
value -1
|
||||
TES_BLOCKING - used in debug mode for setting up blocking testing
|
||||
RETRY COUNT - number of times network read and write will be
|
||||
retried, current value 1
|
||||
|
||||
There are also error messages for last_errno, which depict system
|
||||
errors, and are used on the server only.
|
||||
|
||||
ER_NET_PACKAGE_TOO_LARGE - packet is larger than max_allowed_packet
|
||||
ER_OUT_OF_RESOURCES - practically no more memory
|
||||
ER_NET_ERROR_ON_WRITE - error in writing to NT Named Pipe
|
||||
ER_NET_WRITE_INTERRUPTED - some signal or interrupt happened
|
||||
during write
|
||||
ER_NET_READ_ERROR_FROM_PIPE - error in reading from NT Named Pipe
|
||||
ER_NET_FCNTL_ERROR - error in trying to set fcntl on socket
|
||||
descriptor
|
||||
ER_NET_PACKETS_OUT_OF_ORDER - packet numbers on client and
|
||||
server side differ
|
||||
ER_NET_UNCOMPRESS_ERROR - error in uncompress of compressed packet
|
||||
|
||||
|
||||
Structs and enums
|
||||
|
||||
|
||||
struct NET
|
||||
|
||||
This is MySQL's network handle structure, used in all client/server
|
||||
read/write functions. On the server, it is initialized and preserved
|
||||
in each thread. On the client, it is a part of the MYSQL struct,
|
||||
which is the MySQL handle used in all C API functions. This structure
|
||||
uniquely identifies a connection, either on the server or client
|
||||
side. It consists of the following fields:
|
||||
|
||||
Vio* vio - explained above
|
||||
HANDLE hPipe - Handle for NT Named Pipe file
|
||||
my_socket fd - file descriptor used for both TCP/IP socket and
|
||||
Unix socket file
|
||||
int fcntl - contains info on fcntl options used on fd. Mostly
|
||||
used for saving info if blocking is used or not
|
||||
unsigned char *buff - network buffer used for storing data for
|
||||
reading from/writing to socket
|
||||
unsigned char,*buff_end - points to the end of buff
|
||||
unsigned char *write_pos - present writing position in buff
|
||||
unsigned char *read_pos - present reading position in buff. This
|
||||
pointer is used for reading data after
|
||||
calling my_net_read function and function
|
||||
that are just its wrappers
|
||||
char last_error[MYSQL_ERRMSG_SIZE] - holds last error message
|
||||
unsigned int last_errno - holds last error code of the network
|
||||
protocol. Its possible values are listed
|
||||
in above constants. It is used only on
|
||||
the server side
|
||||
unsigned int max_packet - holds current value of buff size
|
||||
unsigned int timeout - stores read timeout value for that connection
|
||||
unsigned int pkt_nr - stores the value of the current packet number in
|
||||
a batch of packets. Used primarily for
|
||||
detection of protocol errors resulting in a
|
||||
mismatch
|
||||
my_bool error - holds either 1 or 0 depending on the error condition
|
||||
my_bool return_errno - if its value != 0 then there is an error in
|
||||
protocol mismatch between client and server
|
||||
my_bool compress - if true compression is used in the protocol
|
||||
unsigned long remain_in_buf - used only in reading compressed packets.
|
||||
Explained in my_net_read
|
||||
unsigned long length - used only for storing the length of the read
|
||||
packet. Explained in my_net_read
|
||||
unsigned long buf_length - used only in reading compressed packets.
|
||||
Explained in my_net_read
|
||||
unsigned long where_b - used only in reading compressed packets.
|
||||
Explained in my_net_read
|
||||
short int more - used for reporting in mysql_list_processes
|
||||
char save_char - used in reading compressed packets for saving chars
|
||||
in order to make zero-delimited strings. Explained
|
||||
in my_net_read
|
||||
|
||||
A few typedefs will be defined for easier understanding of the text that
|
||||
follows.
|
||||
|
||||
typedef char **MYSQL_ROW - data containing one row of values
|
||||
|
||||
typedef unsigned int MYSQL_FIELD_OFFSET - offset in bytes of the current field
|
||||
|
||||
typedef MYSQL_ROWS *MYSQL_ROW_OFFSET - offset in bytes of the current row
|
||||
|
||||
struct MYSQL_FIELD - contains all info on the attributes of a
|
||||
specific column in a result set, plus info on lengths of the column in
|
||||
a result set. This struct is tagged as st_mysql_field. This structure
|
||||
consists of the following fields:
|
||||
|
||||
char *name - name of column
|
||||
char *table - table of column if column was a field and not
|
||||
an expression or constant
|
||||
char *def - default value (set by mysql_list_fields)
|
||||
enum enum_field_types type - see above
|
||||
unsigned int length - width of column in the current row
|
||||
unsigned int max_length - maximum width of that column in entire
|
||||
result set
|
||||
unsigned int flags - corresponding to Extra in DESCRIBE
|
||||
unsigned int decimals - number of decimals in field
|
||||
|
||||
|
||||
struct MYSQL_ROWS - a node for each row in the single linked
|
||||
list forming entire result set. This struct is tagged as
|
||||
st_mysql_rows, and has two fields:
|
||||
|
||||
struct st_mysql_rows *next - pointer to the next one
|
||||
MYSQL_ROW data - see above
|
||||
|
||||
|
||||
struct MYSQL_DATA - contains all rows from result set. It is
|
||||
tagged as st_mysql_data and has following fields:
|
||||
|
||||
my_ulonglong rows - how many rows
|
||||
unsigned int fields - how many columns
|
||||
MYSQL_ROWS *data - see above. This is the first node of the linked list
|
||||
MEM_ROOT alloc - MEM_ROOT is MySQL memory allocation structure, and
|
||||
this field is used to store all fields and rows.
|
||||
|
||||
|
||||
struct st_mysql_options - holds various client options, and
|
||||
contains following fields:
|
||||
|
||||
unsigned int connect_timeout - time in seconds for connection
|
||||
unsigned int client_flag - used to hold client capabilities
|
||||
my_bool compress - boolean for compression
|
||||
my_bool named_pipe - is Named Pipe used? (on NT)
|
||||
unsigned int port - what TCP port is used
|
||||
char *host - host to connect to
|
||||
char *init_command - command to be executed upon connection
|
||||
char *user - account name on MySQL server
|
||||
char *password - password for the above
|
||||
char *unix_socket - full path for Unix socket file
|
||||
char *db - default database
|
||||
char *my_cnf_file - optional configuration file
|
||||
char *my_cnf_group - optional header for options
|
||||
|
||||
|
||||
struct MYSQL - MySQL client's handle. Required for any
|
||||
operation issued from client to server. Tagged as st_mysql and having
|
||||
following fields:
|
||||
|
||||
NET net - see above
|
||||
char *host - host on which MySQL server is running
|
||||
char *user - MySQL username
|
||||
char *passwd - password for above
|
||||
char *unix_socket- full path of Unix socket file
|
||||
char *server_version - version of the server
|
||||
char *host_info - contains info on how has connection been
|
||||
established, TCP port, socket or Named Pipe
|
||||
char *info - used to store information on the query results,
|
||||
like number of rows affected etc.
|
||||
char *db - current database
|
||||
unsigned int port - TCP port in use
|
||||
unsigned int client_flag - client capabilities
|
||||
unsigned int server_capabilities - server capabilities
|
||||
unsigned int protocol_version - version of the protocol
|
||||
unsigned int field_count - used for storing number of fields
|
||||
immediately upon execution of a query,
|
||||
but before fetching rows
|
||||
unsigned long thread_id - server thread to which this connection
|
||||
is attached
|
||||
my_ulonglong affected_rows - used for storing number of rows
|
||||
immediately upon execution of a query,
|
||||
but before fetching rows
|
||||
my_ulonglong insert_id - fetching LAST_INSERT_ID() through client C API
|
||||
my_ulonglong extra_info - used by mysqlshow
|
||||
unsigned long packet_length - saving size of the first packet upon
|
||||
execution of a query
|
||||
enum mysql_status status - see above
|
||||
MYSQL_FIELD *fields - see above
|
||||
MEM_ROOT field_alloc - memory used for storing previous field (fields)
|
||||
my_bool free_me - boolean that flags if MYSQL was allocated in mysql_init
|
||||
my_bool reconnect - used to automatically reconnect
|
||||
struct st_mysql_options options - see above
|
||||
char scramble_buff[9] - key for scrambling password before sending it
|
||||
to server
|
||||
|
||||
|
||||
struct MYSQL_RES - tagged as st_mysql_res and used to store
|
||||
entire result set from a single query. Contains following fields:
|
||||
|
||||
my_ulonglong row_count - number of rows
|
||||
unsigned int field_count - number of columns
|
||||
unsigned int current_field - cursor for fetching fields
|
||||
MYSQL_FIELD *fields - see above
|
||||
MYSQL_DATA *data - see above, and used in buffered reads, that is,
|
||||
mysql_store_result only
|
||||
MYSQL_ROWS *data_cursor - pointing to the field of above "data"
|
||||
MEM_ROOT field_alloc - memory allocation for above "fields"
|
||||
MYSQL_ROW row - used for storing row by row in unbuffered reads,
|
||||
that is, in mysql_use_result
|
||||
MYSQL_ROW current_row - cursor to the current row for buffered reads
|
||||
unsigned long *lengths - column lengths of current row
|
||||
MYSQL *handle - see above, used in unbuffered reads, that is, in
|
||||
mysql_use_result
|
||||
my_bool eof - used by mysql_fetch_row as a marker for end of data
|
||||
|
||||
|
||||
|
||||
Global variables
|
||||
|
||||
|
||||
unsigned long max_allowed_packet - maximum allowable value of network
|
||||
buffer. Default value - 1MB
|
||||
|
||||
unsigned long net_buffer_length - default, starting value of network
|
||||
buffer - 8KB
|
||||
|
||||
unsigned long bytes_sent - total number of bytes written since startup
|
||||
of the server
|
||||
|
||||
unsigned long bytes_received - total number of bytes read since startup
|
||||
of the server
|
||||
|
||||
|
||||
Synopsis of the basic client/server protocol
|
||||
--------------------------------------------
|
||||
|
||||
Purpose of this chapter is to provide a complete picture of
|
||||
the basic client/server protocol implemented in MySQL. It was felt
|
||||
it is necessary after writing descriptions for all of the functions
|
||||
involved in basic protocol. There are at present 11 functions
|
||||
involved, with several structures, many constants etc, which are all
|
||||
described in detail. But as a forest could not be seen from the trees,
|
||||
so the concept of the protocol could not be deciphered easily from a
|
||||
thorough documentation of minutiae.
|
||||
|
||||
Although the concept of the protocol was not changed with the
|
||||
introduction of vio system, embodied in violate.cc source file and VIO
|
||||
system, the introduction of these has changed the code substantially. Before
|
||||
VIO was introduced, functions for reading from/writing to network
|
||||
connection had to deal with various network standards. So, these functions
|
||||
depended on whether TCP port or Unix socket file or NT Named Pipe file is
|
||||
used. This is all changed now and single vio_ functions are called, while
|
||||
all this diversity is covered by vio_ functions.
|
||||
|
||||
In MySQL a specific buffered network input/output transport model
|
||||
has been implemented. Although each operating system may have its
|
||||
own buffering for network connections, MySQL has added its own
|
||||
buffering model. This same for each of the three transport protocol
|
||||
types that are used in MySQL client/server communications, which
|
||||
are TCP/IP sockets (on all systems), Unix socket files on Unix and
|
||||
Unix-like operating systems and Named Pipe files on NT. Although
|
||||
TCP/IP sockets are omnipresent, the latter two types have been added
|
||||
for local connections. Those two connection types can be used in
|
||||
local mode only, that is, when both client and server reside on the
|
||||
same host, and are introduced because they enable better speeds for
|
||||
local connections. This is especially useful for WWW type of
|
||||
applications. Startup options of MySQL server allow that either
|
||||
TCP/IP sockets or local connection (OS dependent) can be disallowed.
|
||||
|
||||
In order to implement buffered input/output, MySQL allocates a
|
||||
buffer. The starting size of this buffer is determined by the value
|
||||
of the global variable net_buffer_length, which can be changed at
|
||||
MySQL server startup. This is, as explained, only the startup length
|
||||
of MySQL network buffer. Because a single item that has to be read
|
||||
or written can be larger than that value, MySQL will increase buffer
|
||||
size as long as that size reaches value of the global variable
|
||||
max_allowed_packet, which is also settable at server startup. Maximum
|
||||
value of this variable is limited by the way MySQL stores/reads
|
||||
sizes of packets to be sent/read, which means by the way MySQL
|
||||
formats packages.
|
||||
|
||||
Basically each packet consists of two parts, a header and data. In
|
||||
the case when compression is not used, header consists of 4 bytes
|
||||
of which 3 contain the length of the packet to be sent and one holds
|
||||
the packet number. When compression is used there are onother 3
|
||||
bytes which store the size of uncompressed data. Because of the way
|
||||
MySQL packs length into 3 bytes, plus due to the usage of some
|
||||
special values in the most significant byte, maximum size of
|
||||
max_allowed_packet is limited to 24MB at present. So, if compression
|
||||
is not used, at first 4 bytes are written to the buffer and then
|
||||
data itself. As MySQL buffers I/O logical packets are packet together
|
||||
until packets fill up entire size of the buffer. That size no less
|
||||
than net_buffer_size, but no greater than max_allowed_packet. So,
|
||||
actual writing to the network is done when this buffer is filled
|
||||
up. As frequently sequence of buffers make a logical unit, like a
|
||||
result set, then at the end of sending data, even if buffer is not
|
||||
full, data is written (flushed to the connection) with a call of
|
||||
the net_flush function. So that no single packet can be larger than
|
||||
this value, checks are made throughout the code to make sure that
|
||||
no single field or command could exceed that value.
|
||||
|
||||
In order to maintain coherency in consecutive packets, each packet
|
||||
is numbered and their number stored as a part of a header, as
|
||||
explained above. Packets start with 0, so whenever a logical packet
|
||||
is written, that number is incremented. On the other side when
|
||||
packets are read, value that is fetched is compared with the value
|
||||
stored and if there is no mismatch that value is incremented, too.
|
||||
Packet number is reset on the client side when unwanted connections
|
||||
are removed from the connection and on the server side when a new
|
||||
command has been started.
|
||||
|
||||
|
||||
So, before writing, the buffer contains a sequence of logical
|
||||
packets, consisting of header plus data consecutively. If compression
|
||||
is used, packet numbers are not stored in each header of the logical
|
||||
packets, but a whole buffer, or a part of it if flushing is done,
|
||||
containing one or more logical packets are compressed. In that case
|
||||
a new larger header, is formed, and all logical packets contained
|
||||
in the buffer are compressed together. This way only one packet is
|
||||
formed which makes several logical packets, which improves both
|
||||
speed and compression ratio. On the other side, when this large
|
||||
compressed packet is read, it is first uncompressed, and then logical
|
||||
packets are sent, one by one, to the calling functions.
|
||||
|
||||
|
||||
All this functionality is described in detail in the following
|
||||
chapter. It does not contain functions that form logical packets, or
|
||||
that read and write to connections but also functions that are used
|
||||
for initialization, clearing of connections. There are functions at
|
||||
higher level dealing with sending fields, rows, establishing
|
||||
connections, sending commands, but those are not explained in the
|
||||
following chapter.
|
||||
|
||||
|
||||
Functions utilized in client/server protocol
|
||||
--------------------------------------------
|
||||
|
||||
First of all, functions are described that are involved in preparing,
|
||||
reading, or writing data over TCP port, Unix socket file, or named
|
||||
pipe, and functions directly related to those. All of these functions
|
||||
are used both in server and client. Server and client specific code
|
||||
segments are documented in each function description.
|
||||
|
||||
Each MySQL function checks for errors in memory allocation and
|
||||
freeing, as well as in every OS call, like the one dealing with
|
||||
files and sockets, and for errors in indigenous MySQL function
|
||||
calls. This is expected, but has to be said here so as not to repeat
|
||||
it in every function description.
|
||||
|
||||
Older versions of MySQL have utilized the following macros for
|
||||
reading from or writing to a socket.
|
||||
|
||||
raw_net_read - calls OS function recv function that reads N bytes
|
||||
from a socket into a buffer. Number of bytes read is returned.
|
||||
|
||||
raw_net_write - calls OS function send to write N bytes from a
|
||||
buffer to socket. Number of bytes written is returned.
|
||||
|
||||
These macros are replaced with VIO (Virtual I/O) functions.
|
||||
|
||||
|
||||
Function name: my_net_init
|
||||
|
||||
Parameters: struct NET *, enum_net_type, struct Vio
|
||||
|
||||
Return value: 1 for error, 0 for success
|
||||
|
||||
Function purpose: To initialize properly all NET fields,
|
||||
allocate memory and set socket options
|
||||
|
||||
Function description
|
||||
|
||||
First of all, buff field of NET struct is allocated to the size of
|
||||
net_buffer_length, and on failure function exits with 0. All fields
|
||||
in NET are set to their default or starting values. As net_buffer_length
|
||||
and max_allowed_packet are configurable, max_allowed_packet is set
|
||||
equal to net_buffer_length if the latter one is greater. max_packet
|
||||
is set for that NET to net_buffer_length, and buff_end points to
|
||||
buff end. vio field is set to the second parameter. If it is a
|
||||
real connection, which is the case when second parameter is not
|
||||
null, then fd field is set by calling vio_fd function. read_pos and
|
||||
write_pos to buff, while remaining integers are set to 0. If function
|
||||
is run on the MySQL server on Unix and server is started in a test
|
||||
mode that would require testing of blocking, then vio_blocking
|
||||
function is called. Last, fast throughput mode is set by a call to
|
||||
vio_fastsend function.
|
||||
|
||||
|
||||
Function name: net_end
|
||||
|
||||
Parameters: struct NET *
|
||||
|
||||
Return value: void
|
||||
|
||||
Function purpose: To release memory allocated to buff
|
||||
|
||||
|
||||
|
||||
Function name: net_realloc (private, static function)
|
||||
|
||||
Parameters: struct NET, ulong (unsigned long)
|
||||
|
||||
Return value: 1 for error, 0 for success
|
||||
|
||||
Function purpose: To change memory allocated to buff
|
||||
|
||||
Function description
|
||||
|
||||
New length of buff field of NET struct is passed as second parameter.
|
||||
It is first checked versus max_allowed_packet and if greater, an
|
||||
error is returned. New length is aligned to 4096-byte boundary. Then,
|
||||
buff is reallocated, buff_end, max_packet, and write_pas reset to
|
||||
the same values as in my_net_init.
|
||||
|
||||
|
||||
|
||||
Function name: net_clear (used on client side only)
|
||||
|
||||
Parameters: struct NET *
|
||||
|
||||
Return value: void
|
||||
|
||||
Function purpose: To read unread packets
|
||||
|
||||
Function description
|
||||
|
||||
This function is used on client side only, and is executed
|
||||
only if a program is not started in test mode. This function reads
|
||||
unread packets without processing them. First, non-blocking mode is
|
||||
set on systems that do not have non-blocking mode defined. This is
|
||||
performed by checking the mode with vio_is_blocking function. and
|
||||
setting non-blocking mode by vio_blocking function. If this operation
|
||||
was successful, then packets are read by vio_read function, to which
|
||||
vio field of NET is passed together with buff and max_packet field
|
||||
values. field of the same struct at a length of max_packet. If
|
||||
blocking was active before reading is performed, blocking is set with
|
||||
vio_blocking function. After reading has been performed, pkt_nr is
|
||||
reset to 0 and write_pos reset to buff. In order to clarify some
|
||||
matters non-blocking mode enables executing program to dissociate from
|
||||
a connection, so that error in connection would not hang entire
|
||||
program or its thread.
|
||||
|
||||
Function name: net_flush
|
||||
|
||||
Parameters: struct NET *
|
||||
|
||||
Return value: 1 for error, 0 for success
|
||||
|
||||
Function purpose: To write remaining bytes in buff to socket
|
||||
|
||||
Function description
|
||||
|
||||
net_real_write (described below) is performed is write_pos
|
||||
differs from buff, both being fields of the only parameter. write_pos
|
||||
is reset to buff. This function has to be used, as MySQL uses buffered
|
||||
writes (as will be explained more in the function net_write_buff).
|
||||
|
||||
|
||||
Function name: my_net_write
|
||||
|
||||
Parameters: struct NET *, const char *, ulong
|
||||
|
||||
Return value: 1 for error, 0 for success
|
||||
|
||||
Function purpose: Write a logical packet in the second parameter
|
||||
of third parameter length
|
||||
|
||||
Function description
|
||||
|
||||
The purpose of this function is to prepare a logical packet such
|
||||
that entire content of data, pointed to by second parameter and in
|
||||
length of third parameter is sent to the other side. In case of
|
||||
server, it is used for sending result sets, and in case of client
|
||||
it is used for sending local data. This function foremost prepares
|
||||
a header for the packet. Normally, the header consists of 4 bytes,
|
||||
of which the first 3 bytes contain the length of the packet, thereby
|
||||
limiting a maximum allowable length of a packet to 16MB, while the
|
||||
fourth byte contains the packet number, which is used when one large
|
||||
packet has to be divided into sequence of packets. This way each
|
||||
sub-packet gets its number which should be matched on the other
|
||||
side. When compression is used another three bytes are added to
|
||||
packet header, thus packet header is in that case increased to 7
|
||||
bytes. Additional three bytes are used to save the length of
|
||||
compressed data. As in connection that uses compression option,
|
||||
code packs packets together,, a header prepared by this function
|
||||
is later not used in writing to / reading from network, but only
|
||||
to distinguish logical packets within a buffered read operation.
|
||||
|
||||
|
||||
This function, first stores the value of the third parameter into the
|
||||
first 3 bytes of local char variable of NET_HEADER_SIZE size by usage
|
||||
of function int3store. Then, at this point, if compression is not
|
||||
used, pkt_nr is increased, and its value stored in the last byte of
|
||||
the said local char[] variable. If compression is used, 0 is stored in
|
||||
both values. Then those four bytes are sent to other side by the usage
|
||||
of the function net_write_buff(to be explained later on), and if
|
||||
successful, entire packet in second parameter of the length described
|
||||
in third parameter is sent by the usage of the same function.
|
||||
|
||||
|
||||
Function name: net_write_command
|
||||
|
||||
Parameters: struct NET *, char, const char *, ulong
|
||||
|
||||
Return value: 1 for error, 0 for success
|
||||
|
||||
Function purpose: Send a command with a packet as in previous function
|
||||
|
||||
Function description
|
||||
|
||||
This function is very similar to the previous one. The only
|
||||
difference is that first packet is enlarged by one byte, so that the
|
||||
command precedes the packet to be sent. This is implemented by
|
||||
increasing first packet by one byte, which contains a command code. As
|
||||
command codes do not use the range of values that are used by character
|
||||
sets, so when the other side receives a packet, first byte after
|
||||
header contains a command code. This function is used by client for
|
||||
sending all commands and queries, and by server in connection process
|
||||
and for sending errors.
|
||||
|
||||
|
||||
Function name: net_write_buff (private, static function)
|
||||
|
||||
Parameters: struct NET *, const char *, uint
|
||||
|
||||
Return value: 1 for error, 0 for success
|
||||
|
||||
Function purpose: To write a packet of any size by cutting it
|
||||
and using next function for writing it
|
||||
|
||||
Function description
|
||||
|
||||
This function was created after compression feature has been
|
||||
added to MySQL. This function supposes that packets have already been
|
||||
properly formatted, regarding packet header etc. The principal reason for
|
||||
this function to exist is because a packet that is sent by client or
|
||||
server does not have to be less than max_packet. So this function
|
||||
first calculates how much data has been left in a buff, by getting a
|
||||
difference between buff_end and write_pos and storing it to local
|
||||
variable left_length. Then a loop is run as long as the length to be
|
||||
sent is greater than length of left bytes (left_length). In a loop
|
||||
data from second parameter is copied to buff at write_pos, as much as
|
||||
it can be, that is, by left_length. Then net_real_write function is called
|
||||
(see below) with NET, buff, and max_packet parameters. This function
|
||||
is the lowest level function that writes data over established
|
||||
connection. In the loop, write_pos is reset to buff, the pointer to data
|
||||
(second parameter) is moved by the amount of data sent (left_length),
|
||||
length of data to be sent (third parameter) is decreased by the amount
|
||||
sent (left_length) and left_length is reset to max_packet value, which
|
||||
ends the loop. This logic was necessary, as there could have been some
|
||||
data yet unsent (write_pos != buf), while data to be sent could be as
|
||||
large as necessary, thus requiring many loops. At the end of function,
|
||||
remaining data in second parameter are copied to buff at write_pos, by
|
||||
the remaining length of data to be sent (third parameter). So, in the
|
||||
next call of this function remaining data will be sent, as buff is
|
||||
used in the call to net_real_write. It is very important to note that if
|
||||
a packet to be sent is less than the number of bytes that are still
|
||||
available in buff, then there will be no writing over network, but
|
||||
only logical packets will be added one after another. This will
|
||||
accelerate network traffic, plus if compression is used, the
|
||||
expected compression rate would be higher. That is why server or
|
||||
client functions that sends data uses at the end of data net_flush
|
||||
function described above.
|
||||
|
||||
|
||||
Function name: net_real_write
|
||||
|
||||
Parameters: struct NET *, const char *, ulong
|
||||
|
||||
Return value: 1 for error, 0 for success
|
||||
|
||||
Function purpose: To write data to a socket or pipe, with
|
||||
compression if used
|
||||
|
||||
Function description
|
||||
|
||||
First, more field is set to 2, to enable reporting in
|
||||
mysql_list_processes. Then if compression is enabled on that
|
||||
connection, a new local buffer (variable b) is initialized to the
|
||||
length of total header (normal header + compression header) and if no
|
||||
memory is available, an error is returned. This buffer (b) is used for
|
||||
holding the final, compressed packet to be written over the
|
||||
connection. Furthermore in compression initialization, second
|
||||
parameter at length of third parameter is copied to the local buffer
|
||||
b, and MySQL's wrapped zlib's compression function is run at total
|
||||
header offset of the local buffer. Please, do note that this function
|
||||
does not test effectiveness of compression. If compression is turned
|
||||
on in some connection, it is used all of the time. Also, it is very
|
||||
important to be cognizant of the fact that this algorithm makes
|
||||
possible that a single compressed packet contains several logical
|
||||
packets. In this way compression rate is increased and network
|
||||
throughput is increased as well. However, this algorithm has
|
||||
consequences on the other side, that reads compressed packet, which
|
||||
is covered in my_net_read function. After compression is done, the full
|
||||
compression header is properly formed with the packet number,
|
||||
compressed and uncompressed lengths. At the end of compression code,
|
||||
third parameter is increased by total header length, as the original
|
||||
header is not used (see above), and second parameter, pointer to data,
|
||||
is set to point to local buffer b, in order that the further flow of
|
||||
function is independent of compression. If a function is executed
|
||||
on server side, a thread alarm initialized and if non-blocking is
|
||||
active set at NET_WRITE_TIMEOUT. Two local (char *) pointers are
|
||||
initialized, pos at beginning of second parameter, and end at end of
|
||||
data. Then the loop is run as long as all data is written, which means
|
||||
as long as pos != end. First vio_write function is called, with
|
||||
parameters of vio field, pos and size of data (end - pos). Number of
|
||||
bytes written over connection is saved in local variable (length). If
|
||||
error is returned local bool variable (interrupted) is set according
|
||||
to the return value of the vio_should_retry called with vio field as
|
||||
parameter. This bool variable indicates whether writing was
|
||||
interrupted in some way or not.
|
||||
|
||||
Further, error from vio_write is treated differently on Unix versus
|
||||
other OS's (Win32 or OS/2). On Unix an alarm is set if one is not
|
||||
in use, no bytes have been written and there has been no interruption.
|
||||
Also, in that case, if connection is not in blocking mode, a sub-loop
|
||||
is run as long as blocking is not set with vio_blocking function.
|
||||
Within the loop another run of above vio_write is run based on
|
||||
return value of vio_is_retry function, provided number of repeated
|
||||
writes is less than RETRY_COUNT. If that is not the case, error
|
||||
field of struct NET is set to 1 and function exits. At the exit
|
||||
of sub-loop number of reruns already executed is reset to zero and
|
||||
another run of above vio_write function is attempted. If the function
|
||||
is run on Win32 and OS/2, and in the case that function flow was
|
||||
not interrupted and thread alarm is not in use, again the main loop
|
||||
is continued until pos != end. In the case that this function is
|
||||
executed on thread safe client program, a communication flow is
|
||||
tested on EINTR, caused by context switching, by use of vio_errno
|
||||
function, in which case the loop is continued. At the end of
|
||||
processing of the error from vio_write, error field of struct NET
|
||||
is set, and if on server last_errno field is set to
|
||||
ER_NET_WRITE_INTERRUPTED in the case that local bool variable
|
||||
(interrupted) is true or to ER_NET_ERROR_ON_WRITE. Before the end
|
||||
of loop, in order to make possible evaluation of the loop condition,
|
||||
pos is increased by the value written in last iteration (length).
|
||||
Also global variable bytes_sent is increased by the same value, for
|
||||
status purposes. At the end of the functions more fields is reset,
|
||||
in case of compression, compression buffer (b) memory is released
|
||||
and if thread is still in use, it is ended and blocking state is
|
||||
reset to its original state, and function returns error is all bytes
|
||||
are not written.
|
||||
|
||||
|
||||
|
||||
Function name: my_real_read (private, static function)
|
||||
|
||||
Parameters: struct NET *, ulong *
|
||||
|
||||
Return value: length of bytes read
|
||||
|
||||
Function purpose: low level network connection read function
|
||||
|
||||
Function description
|
||||
|
||||
This function has made as a separate one when compression was
|
||||
introduced in MySQL client/server protocol . It contains basic, low
|
||||
level network reading functionality, while all dealings with
|
||||
compressed packets are handled in next function. Compression in this
|
||||
function is only handled in as much to unfold the length of uncompressed
|
||||
data. First blocking state of connection is saved in local bool
|
||||
variable net_blocking, and field more is set 1 for detailed reporting
|
||||
in mysqld_list_processes. A new thread alarm is initialized, in order
|
||||
to enable read timeout handling, and if on server and a connection can
|
||||
block a program, the alarm is set at a value of timeout field. Local
|
||||
pointer is set to the position of the next logical packet, with its
|
||||
header skipped, which is at field where_b offset from buff. Next, a
|
||||
two time run code is entered. A loop is run exactly two times because
|
||||
first time number of bytes to be fetched (remain) are set to the
|
||||
header size, which is different when compression is used or not used
|
||||
on the connection. After first fetch has been done, number of packets
|
||||
that will be received in second iteration is well known, as fetched
|
||||
header contains the size of packet, packet number, and in the case of
|
||||
compression, the size of the uncompressed packet. Then, as long as there are
|
||||
bytes to read the loop is entered with first reading data from network
|
||||
connection with vio_read function, called with parameters of field
|
||||
vio, current position and remaining number of bytes, which value is
|
||||
hold by local variable (remain) initialized at the value of header size,
|
||||
which differs if compression is used. Number of bytes read are
|
||||
returned in local length variable. If error is returned local bool
|
||||
variable (interrupted) is set according to the return value of the
|
||||
vio_should_retry called with vio field as parameter. This bool
|
||||
variable indicates whether reading was interrupted in some way or not.
|
||||
|
||||
Further, error from vio_read is treated differently on Unix versus
|
||||
other OS's (Win32 or OS/2). On Unix an alarm is set if one is not
|
||||
in use, no bytes have been read and there has been no interruption.
|
||||
Also, in that case, if connection is not in blocking mode, a sub-loop
|
||||
is run as long as blocking is not set with vio_blocking function.
|
||||
Within the loop another run of above vio_read is run based on return
|
||||
value of vio_is_retry function, provided number of repeated writes
|
||||
is less than RETRY_COUNT. If that is not the case, error field of
|
||||
struct NET is set to 1 and function exits. At the exit of sub-loop
|
||||
number of reruns already executed is reset to zero and another run
|
||||
of above vio_read function is attempted. If the function is run on
|
||||
Win32 and OS/2, and in the case that function flow was not interrupted
|
||||
and thread alarm is not in use, again the main loop is continued
|
||||
as long as there are bytes remaining. In the case that this function
|
||||
is executed on thread safe client program, then if another run
|
||||
should be made, which is decided by the output of vio_should_retry
|
||||
function, in which case the loop is continued. At the end of
|
||||
processing of the error from vio_read, error field of struct NET
|
||||
is set, and if on server last_errno field is set to ER_NET_READ_INTERRUPTED
|
||||
in the case that local bool variable (interrupted) is true or to
|
||||
ER_NET_ERROR_ON_READ. In case of such an error this function exits
|
||||
and returns error. In the case when there is no error, number of
|
||||
remaining bytes (remain) is decreased by the number of bytes read,
|
||||
which should be zero, but in case it is not the entire code is still
|
||||
in while (remain > 0) loop, which will be exited immediately if it
|
||||
is. This has been done to accommodate errors in the traffic level
|
||||
and for the very slow connections. Current position in field buff
|
||||
is also moved by the amount of bytes read by vio_read function, and
|
||||
global variable bytes_received is increased by the same value in a
|
||||
thread safe manner. When the loop that is run until necessary bytes
|
||||
are read (remain) is finished, then if external loop is in its first
|
||||
run, of the two, packet sequencing is tested for consistency by
|
||||
comparing the number contained at 4th byte in header with pkt_nr
|
||||
field. Header location is found at where_b offset to field_b. Usage
|
||||
of where_b is obligatory due to the possible compression usage. If
|
||||
there is no compression on a connection, then where_b is always 0.
|
||||
If there is a discrepancy, then first byte of the header is checked
|
||||
whether it is equal to 255, because when error is sent by the server,
|
||||
or by a client if it is sending data (like in LOAD DATA INFILE
|
||||
LOCAL...), then first byte in header is set to 255. If it is not
|
||||
255, then an error on packets being out of order is printed. In any
|
||||
case, on server, last_errno field is set to ER_NET_PACKETS_OUT_OF_ORDER
|
||||
and the function returns with an error, that is, the value returned is
|
||||
packet_error. If a check on serial number of packet is successful,
|
||||
pkt_nr field is incremented in order to enable checking packet order
|
||||
with next packet and if compression is used, uncompressed length
|
||||
is extracted from a proper position in header and returned in the
|
||||
second parameter of this function. Length of the packet is saved,
|
||||
for the purpose of a proper return value from this function. Still
|
||||
in the first iteration of the main loop, a check must be made if
|
||||
field buff could accommodate entire package that comes, in its
|
||||
compressed or uncompressed form. This is done in such a way, because
|
||||
zlib's compress and uncompress functions use the same memory area
|
||||
for compression and uncompression. Necessary field buff length is
|
||||
equal to current offset where data are (where_b which is zero for
|
||||
non-compression), plus the larger value of compressed or uncompressed
|
||||
package to be read in a second run. If this value is larger than
|
||||
the current length of field buff, which is read from field max_packet,
|
||||
then field buff has to be reallocated. If reallocation with net_realloc
|
||||
function fails, the function returns an error. Before a second
|
||||
loop is started, length to be read is set to the length of expected
|
||||
data and current position (pos) is set at where_b offset from field
|
||||
buff. At the end of function, if alarm is set, which is the case
|
||||
if it is run on server or on a client if a function is interrupted
|
||||
and another run of vio_read is attempted, alarm is ended and blocking
|
||||
state is restored from the saved local bool variable net_blocking.
|
||||
Function returns number of bytes read or the error (packet_error).
|
||||
|
||||
|
||||
Function name: my_net_read
|
||||
|
||||
Parameters: struct NET *
|
||||
|
||||
Return value: length of bytes read
|
||||
|
||||
Function purpose: Highest level general purpose reading function
|
||||
|
||||
Function description
|
||||
|
||||
First, if compression is not used, my_real_read is called, with
|
||||
struct NET * a first parameter, and pointer to local ulong complen
|
||||
as a second parameter, but its value is not used here. Number of
|
||||
bytes read is returned in local ulong variable len. read_pos field
|
||||
is set to an offset of value of where_b field from field buff.
|
||||
where_b field actually denotes where in field buff is the current
|
||||
packet. If returned number of bytes read (local variable len) does
|
||||
not signal that an error in packet transmission occurred (that is,
|
||||
it is not set to packet_error), then the string contained in read_pos
|
||||
is zero terminated. Simply, the end of the string starting at
|
||||
read_pos, and ending at read_pos + len, is set to zero. This is
|
||||
done in that way, because mysql_use_result expects a zero terminated
|
||||
string, and function returns with a value local variable len. This
|
||||
ends this function in the case that compression is not used and the
|
||||
remaining code is executed only if compression is enabled on the
|
||||
connection.
|
||||
|
||||
In order to explain how a compressed packet logically is cut into
|
||||
meningful packets, the full meaning of several NET fields should
|
||||
be explained. First of all, fields in NET are used and not local
|
||||
variables, as all values should be saved between consecutive calls
|
||||
of this function. Simply, this function is called in order to return
|
||||
logical packets, but this function does not need to call my_real_read
|
||||
function everytime, because when a large packet is uncompressed,
|
||||
it may, but not necessarily so, contain several logical packets.
|
||||
Therefore, in order to preserve data on logical packets local
|
||||
variables are not used. Instead fields in NET struct are used. Field
|
||||
remain_in_buf denotes how many bytes of entire uncompressed packets
|
||||
is still contained within buff. field buf_length saves the value
|
||||
of the length of entire uncompressed packet. field save_char is
|
||||
used to save the character at the position where the packet ends,
|
||||
which character has to be replaced with a zero, '\0', in order to
|
||||
make a logical packet zero delimited, for mysql_use_result. Field
|
||||
length stores the value of the length of compressed packet. Field
|
||||
read_pos as usual, points to the current reading position. This
|
||||
char * pointer is used by all functions that call this function in
|
||||
order to fetch their data. Field buff is not used for that purpose,
|
||||
but read_pos is used instead. This change was introduced with
|
||||
compression, when algorithm accommodated grouping of several packets
|
||||
together.
|
||||
|
||||
Now that meanings of all relevant NET fields are explained,
|
||||
we can proceed with the flow of this function for the case when
|
||||
compression is active. First, if there are remaining portions of
|
||||
compressed packet in a field buff, saved character value is set at
|
||||
the position where zero char '\0' was inserted to enable the string
|
||||
to be zero delimited for mysql_use_result. Then a loop is started.
|
||||
In the first part of the loop, if there are remaining bytes, local
|
||||
uchar *pos variable is set at the current position in field buff
|
||||
where a new packet starts. This position is an (buf_length -
|
||||
remain_in_buf) offset in field buff. As it is possible that next
|
||||
logical packet is not read to the full length in the remaining of
|
||||
the field buf, several things had to be inspected. It should be
|
||||
noted that data that is read from net_real_read contains only logical
|
||||
packets containing 4 byte headers only, being 4 byte headers prepared
|
||||
by my_net_write or net_write_command. But, when written, logical
|
||||
packet could be so divided that only a part of header is read in.
|
||||
Therefore after pointer to the start of the next packet has been
|
||||
saved, a check is made whether number of remaining bytes in buffer
|
||||
is less than 4, being 3 bytes for length and one byte for packet
|
||||
number. If it is greater, then the length of the logical packet is
|
||||
extracted and saved a length field. Then a check is made whether
|
||||
entire packet is contained within a buf, that is, a check is made
|
||||
that the logical packet is fully contained in the buffer. In that
|
||||
case, number of bytes remaining in buffer is decreased by the full
|
||||
length of logical packet (4 + length field), read_pos is moved
|
||||
forward by 4 bytes to skip header and be set at a beginning of data
|
||||
in logical packet, length field is saved for the value to be returned
|
||||
in function and the loop is exited. In the case that the entire
|
||||
logical packet is not contained within the buffer, then if length of
|
||||
the entire buffer differs from remaining length of logical packet,
|
||||
it (logical packet) is moved to the beginning of the field buff.
|
||||
If length of the entire buffer equals the remaining length of logical
|
||||
packet, where_b and buf_length fields are set to 0. This is done
|
||||
so that in both cases buffer is ready to accept next part of packet.
|
||||
|
||||
In order to get a next part of a packet, still within a loop,
|
||||
my_real_read function is called and length of compressed packet is
|
||||
returned to a local len variable, and length of compressed data is
|
||||
returned in complen variable. In the case of non-compression value
|
||||
of complen is zero. If packet_error is from my_real_read function,
|
||||
this function returns also with packet_error. If it is not a
|
||||
packet_error, my_uncompress function is called to uncompress data.
|
||||
It is called with offset of where_b data from field buff, as it is
|
||||
the position where compressed packet starts, and with len and complen
|
||||
values, being lengths of compressed and uncompressed data. If there
|
||||
is no compression, 0 is returned for uncompressed size from
|
||||
my_real_read function, and my_uncompress wrapper function is made
|
||||
to skip zlib uncompress in that case. If error is returned from
|
||||
my_uncompress, error field is set to 1, if on server last_errno is
|
||||
set to ER_NET_UNCOMPRESS_ERROR and loop is exited and function
|
||||
returns with packet_error. If not, buf_length and remain_in_buf
|
||||
fields are set to the uncompressed size of buffer and the loop is
|
||||
continued. When the loop is exited save_char field is used to save
|
||||
the char at end of a logical packet, which is an offset of field
|
||||
len from position in field buff pointed by field read_pos, in order
|
||||
that zero char is set at the same position, for mysql_use_result.
|
||||
Function returns the length of the logical packet without its header.
|
@ -4,7 +4,7 @@ The MySQL AB Exception for Free/Libre and Open Source
|
||||
Software-only Applications Using MySQL Client Libraries (the
|
||||
"FLOSS Exception").
|
||||
|
||||
Version 0.5, 30 August 2006
|
||||
Version 0.6, 7 March 2007
|
||||
|
||||
Exception Intent
|
||||
|
||||
@ -59,10 +59,12 @@ Apache Software License 1.0/1.1/2.0
|
||||
Apple Public Source License 2.0
|
||||
Artistic license From Perl 5.8.0
|
||||
BSD license "July 22 1999"
|
||||
Common Development and Distribution License (CDDL) 1.0
|
||||
Common Public License 1.0
|
||||
Eclipse Public License 1.0
|
||||
GNU Library or "Lesser" General Public License (LGPL) 2.0/2.1
|
||||
Jabber Open Source License 1.0
|
||||
MIT license ---
|
||||
MIT license (As listed in file MIT-License.txt) ---
|
||||
Mozilla Public License (MPL) 1.0/1.1
|
||||
Open Software License 2.0
|
||||
OpenSSL license (with original SSLeay license) "2003" ("1998")
|
||||
|
117
Makefile.am
117
Makefile.am
@ -21,58 +21,18 @@ AUTOMAKE_OPTIONS = foreign
|
||||
EXTRA_DIST = INSTALL-SOURCE INSTALL-WIN-SOURCE \
|
||||
README COPYING EXCEPTIONS-CLIENT CMakeLists.txt
|
||||
SUBDIRS = . include @docs_dirs@ @zlib_dir@ \
|
||||
@readline_topdir@ sql-common \
|
||||
@readline_topdir@ sql-common scripts \
|
||||
@thread_dirs@ pstack \
|
||||
@sql_union_dirs@ unittest storage plugin \
|
||||
@sql_server@ scripts @man_dirs@ tests \
|
||||
@sql_server@ @man_dirs@ tests \
|
||||
netware @libmysqld_dirs@ \
|
||||
mysql-test support-files sql-bench @tools_dirs@ \
|
||||
win
|
||||
|
||||
DIST_SUBDIRS = $(SUBDIRS) BUILD
|
||||
DIST_SUBDIRS = $(SUBDIRS) BUILD debian
|
||||
|
||||
# Run these targets before any others, also make part of clean target,
|
||||
# to make sure we create new links after a clean.
|
||||
BUILT_SOURCES = linked_client_sources linked_server_sources \
|
||||
@linked_client_targets@ \
|
||||
@linked_libmysqld_targets@ \
|
||||
linked_include_sources @linked_netware_sources@
|
||||
|
||||
CLEANFILES = $(BUILT_SOURCES)
|
||||
DISTCLEANFILES = ac_available_languages_fragment
|
||||
|
||||
linked_include_sources:
|
||||
cd include; $(MAKE) link_sources
|
||||
echo timestamp > linked_include_sources
|
||||
|
||||
linked_client_sources: @linked_client_targets@
|
||||
cd client; $(MAKE) link_sources
|
||||
echo timestamp > linked_client_sources
|
||||
|
||||
linked_libmysql_sources:
|
||||
cd libmysql; $(MAKE) link_sources
|
||||
echo timestamp > linked_libmysql_sources
|
||||
|
||||
linked_libmysql_r_sources: linked_libmysql_sources
|
||||
cd libmysql_r; $(MAKE) link_sources
|
||||
echo timestamp > linked_libmysql_r_sources
|
||||
|
||||
linked_libmysqld_sources:
|
||||
cd libmysqld; $(MAKE) link_sources
|
||||
echo timestamp > linked_libmysqld_sources
|
||||
|
||||
linked_libmysqldex_sources:
|
||||
cd libmysqld/examples; $(MAKE) link_sources
|
||||
echo timestamp > linked_libmysqldex_sources
|
||||
|
||||
linked_netware_sources:
|
||||
cd @netware_dir@; $(MAKE) link_sources
|
||||
echo timestamp > linked_netware_sources
|
||||
|
||||
linked_server_sources:
|
||||
cd sql; $(MAKE) link_sources
|
||||
echo timestamp > linked_server_sources
|
||||
|
||||
# Create permission databases
|
||||
init-db: all
|
||||
$(top_builddir)/scripts/mysql_install_db
|
||||
@ -97,7 +57,10 @@ tags:
|
||||
.PHONY: init-db bin-dist \
|
||||
test test-force test-full test-force-full test-force-mem \
|
||||
test-pl test-force-pl test-full-pl test-force-full-pl test-force-pl-mem \
|
||||
test-unit test-ps test-nr test-pr test-ns test-binlog-statement
|
||||
test-unit test-ps test-nr test-pr test-ns test-binlog-statement \
|
||||
test-ext-funcs test-ext-rpl test-ext-partitions test-ext \
|
||||
test-fast test-fast-cursor test-fast-view test-fast-prepare \
|
||||
test-full-qa
|
||||
|
||||
# Target 'test' will run the regression test suite using the built server.
|
||||
#
|
||||
@ -120,11 +83,11 @@ test-nr:
|
||||
|
||||
test-pr:
|
||||
cd mysql-test ; \
|
||||
@PERL@ ./mysql-test-run.pl $(force) --ps-protocol --mysqld=--binlog-format=row
|
||||
@PERL@ ./mysql-test-run.pl $(force) $(mem) --ps-protocol --mysqld=--binlog-format=row
|
||||
|
||||
test-ns:
|
||||
cd mysql-test ; \
|
||||
@PERL@ ./mysql-test-run.pl $(force) --mysqld=--binlog-format=mixed
|
||||
@PERL@ ./mysql-test-run.pl $(force) $(mem) --mysqld=--binlog-format=mixed
|
||||
|
||||
test-binlog-statement:
|
||||
cd mysql-test ; \
|
||||
@ -142,7 +105,29 @@ test-force-full:
|
||||
|
||||
#used by autopush.pl to run memory based tests
|
||||
test-force-mem:
|
||||
$(MAKE) 'force=--force --mem' test
|
||||
$(MAKE) force=--force mem=--mem test
|
||||
|
||||
test-bt:
|
||||
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
||||
@PERL@ ./mysql-test-run.pl --comment=normal --force --timer \
|
||||
--skip-ndbcluster --report-features
|
||||
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
||||
@PERL@ ./mysql-test-run.pl --comment=ps --force --timer \
|
||||
--skip-ndbcluster --ps-protocol
|
||||
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
||||
@PERL@ ./mysql-test-run.pl --comment=normal+rowrepl --force --timer \
|
||||
--skip-ndbcluster --mysqld=--binlog-format=row
|
||||
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
||||
@PERL@ ./mysql-test-run.pl --comment=ps+rowrepl+NDB --force --timer \
|
||||
--ps-protocol --mysqld=--binlog-format=row
|
||||
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
||||
@PERL@ ./mysql-test-run.pl --comment=NDB --force --timer \
|
||||
--with-ndbcluster-only
|
||||
|
||||
test-bt-debug:
|
||||
-cd mysql-test ; MTR_BUILD_THREAD=auto \
|
||||
@PERL@ ./mysql-test-run.pl --comment=debug --force --timer \
|
||||
--skip-ndbcluster --skip-rpl --report-features
|
||||
|
||||
# Keep these for a while
|
||||
test-pl: test
|
||||
@ -151,5 +136,43 @@ test-force-pl: test-force
|
||||
test-force-pl-mem: test-force-mem
|
||||
test-force-full-pl: test-force-full
|
||||
|
||||
test-ext-funcs:
|
||||
cd mysql-test ; \
|
||||
@PERL@ ./mysql-test-run.pl --force --suite=funcs_1 ; \
|
||||
@PERL@ ./mysql-test-run.pl --force --suite=funcs_2
|
||||
|
||||
test-ext-rpl:
|
||||
cd mysql-test ; \
|
||||
@PERL@ ./mysql-test-run.pl --force --suite=rpl
|
||||
|
||||
test-ext-partitions:
|
||||
cd mysql-test ; \
|
||||
@PERL@ ./mysql-test-run.pl --force --suite=partitions
|
||||
|
||||
test-ext-jp:
|
||||
cd mysql-test ; \
|
||||
@PERL@ ./mysql-test-run.pl --force --suite=jp
|
||||
|
||||
test-ext: test-ext-funcs test-ext-rpl test-ext-partitions test-ext-jp
|
||||
|
||||
test-fast:
|
||||
cd mysql-test ; \
|
||||
@PERL@ ./mysql-test-run.pl $(subset) --force --skip-ndb --skip-innodb --skip-im --skip-rpl ; \
|
||||
@PERL@ ./mysql-test-run.pl $(subset) --force --suite=funcs_1 --do-test=myisam
|
||||
|
||||
test-fast-view:
|
||||
$(MAKE) subset=--view-protocol test-fast
|
||||
|
||||
test-fast-cursor:
|
||||
$(MAKE) subset=--cursor-protocol test-fast
|
||||
|
||||
test-fast-prepare:
|
||||
$(MAKE) subset=--ps-protocol test-fast
|
||||
|
||||
test-full-qa:
|
||||
$(MAKE) force=--force test-pr \
|
||||
test-binlog-statement test-ext test-fast-view \
|
||||
test-fast-cursor test-unit
|
||||
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
||||
|
@ -82,6 +82,7 @@ TARGET_LINK_LIBRARIES(mysqlimport mysqlclient mysys dbug yassl taocrypt zlib wso
|
||||
|
||||
ADD_EXECUTABLE(mysql_upgrade mysql_upgrade.c ../mysys/my_getpagesize.c)
|
||||
TARGET_LINK_LIBRARIES(mysql_upgrade mysqlclient dbug yassl taocrypt zlib wsock32)
|
||||
ADD_DEPENDENCIES(mysql_upgrade GenFixPrivs)
|
||||
|
||||
ADD_EXECUTABLE(mysqlshow mysqlshow.c)
|
||||
TARGET_LINK_LIBRARIES(mysqlshow mysqlclient mysys dbug yassl taocrypt zlib wsock32)
|
||||
@ -95,6 +96,7 @@ ADD_EXECUTABLE(mysqladmin mysqladmin.cc)
|
||||
TARGET_LINK_LIBRARIES(mysqladmin mysqlclient mysys dbug yassl taocrypt zlib wsock32)
|
||||
|
||||
ADD_EXECUTABLE(mysqlslap mysqlslap.c)
|
||||
SET_SOURCE_FILES_PROPERTIES(mysqlslap.c PROPERTIES COMPILE_FLAGS "-DTHREADS")
|
||||
TARGET_LINK_LIBRARIES(mysqlslap mysqlclient mysys yassl taocrypt zlib wsock32 dbug)
|
||||
|
||||
ADD_EXECUTABLE(echo echo.c)
|
||||
|
@ -34,7 +34,11 @@ LDADD= @CLIENT_EXTRA_LDFLAGS@ $(CLIENT_THREAD_LIBS) \
|
||||
noinst_HEADERS = sql_string.h completion_hash.h my_readline.h \
|
||||
client_priv.h
|
||||
|
||||
EXTRA_DIST = get_password.c CMakeLists.txt
|
||||
EXTRA_DIST = get_password.c CMakeLists.txt echo.c
|
||||
|
||||
BUILT_SOURCES = link_sources
|
||||
|
||||
CLEANFILES = $(BUILT_SOURCES)
|
||||
|
||||
bin_PROGRAMS = mysql \
|
||||
mysqladmin \
|
||||
@ -76,6 +80,7 @@ mysqlimport_LDADD = $(CXXLDFLAGS) $(CLIENT_THREAD_LIBS) \
|
||||
mysqlshow_SOURCES= mysqlshow.c
|
||||
|
||||
mysqlslap_SOURCES= mysqlslap.c
|
||||
mysqlslap_CFLAGS= -DTHREAD -UUNDEF_THREADS_HACK
|
||||
mysqlslap_LDADD = $(CXXLDFLAGS) $(CLIENT_THREAD_LIBS) \
|
||||
@CLIENT_EXTRA_LDFLAGS@ \
|
||||
$(LIBMYSQLCLIENT_LA) \
|
||||
@ -94,9 +99,11 @@ DEFS = -DUNDEF_THREADS_HACK \
|
||||
-DDEFAULT_MYSQL_HOME="\"$(prefix)\"" \
|
||||
-DDATADIR="\"$(localstatedir)\""
|
||||
|
||||
sql_src=log_event.h mysql_priv.h log_event.cc my_decimal.h my_decimal.cc
|
||||
sql_src=log_event.h mysql_priv.h rpl_constants.h \
|
||||
log_event.cc my_decimal.h my_decimal.cc \
|
||||
log_event_old.h log_event_old.cc \
|
||||
rpl_record_old.h rpl_record_old.cc
|
||||
strings_src=decimal.c
|
||||
EXTRA_DIST = get_password.c CMakeLists.txt echo.c
|
||||
|
||||
link_sources:
|
||||
for f in $(sql_src) ; do \
|
||||
@ -109,6 +116,7 @@ link_sources:
|
||||
done; \
|
||||
rm -f $(srcdir)/my_user.c; \
|
||||
@LN_CP_F@ $(top_srcdir)/sql-common/my_user.c my_user.c;
|
||||
echo timestamp > link_sources;
|
||||
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
||||
|
@ -23,6 +23,14 @@
|
||||
#include <errmsg.h>
|
||||
#include <my_getopt.h>
|
||||
|
||||
#ifndef WEXITSTATUS
|
||||
# ifdef __WIN__
|
||||
# define WEXITSTATUS(stat_val) (stat_val)
|
||||
# else
|
||||
# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
enum options_client
|
||||
{
|
||||
OPT_CHARSETS_DIR=256, OPT_DEFAULT_CHARSET,
|
||||
@ -49,7 +57,6 @@ enum options_client
|
||||
OPT_TRIGGERS,
|
||||
OPT_MYSQL_ONLY_PRINT,
|
||||
OPT_MYSQL_LOCK_DIRECTORY,
|
||||
OPT_MYSQL_SLAP_SLAVE,
|
||||
OPT_USE_THREADS,
|
||||
OPT_IMPORT_USE_THREADS,
|
||||
OPT_MYSQL_NUMBER_OF_QUERY,
|
||||
@ -58,7 +65,16 @@ enum options_client
|
||||
OPT_TZ_UTC, OPT_AUTO_CLOSE, OPT_CREATE_SLAP_SCHEMA,
|
||||
OPT_SLAP_CSV, OPT_SLAP_CREATE_STRING,
|
||||
OPT_SLAP_AUTO_GENERATE_SQL_LOAD_TYPE, OPT_SLAP_AUTO_GENERATE_WRITE_NUM,
|
||||
OPT_SLAP_AUTO_GENERATE_ADD_AUTO,
|
||||
OPT_SLAP_AUTO_GENERATE_GUID_PRIMARY,
|
||||
OPT_SLAP_AUTO_GENERATE_EXECUTE_QUERIES,
|
||||
OPT_SLAP_AUTO_GENERATE_SECONDARY_INDEXES,
|
||||
OPT_SLAP_AUTO_GENERATE_UNIQUE_WRITE_NUM,
|
||||
OPT_SLAP_AUTO_GENERATE_UNIQUE_QUERY_NUM,
|
||||
OPT_SLAP_PRE_QUERY,
|
||||
OPT_SLAP_POST_QUERY,
|
||||
OPT_MYSQL_REPLACE_INTO, OPT_BASE64_OUTPUT, OPT_SERVER_ID,
|
||||
OPT_FIX_TABLE_NAMES, OPT_FIX_DB_NAMES, OPT_SSL_VERIFY_SERVER_CERT,
|
||||
OPT_DEBUG_INFO, OPT_COLUMN_TYPES
|
||||
OPT_DEBUG_INFO, OPT_COLUMN_TYPES, OPT_ERROR_LOG_FILE, OPT_WRITE_BINLOG,
|
||||
OPT_MAX_CLIENT_OPTION
|
||||
};
|
||||
|
@ -2,8 +2,7 @@
|
||||
|
||||
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
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -818,7 +818,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
break;
|
||||
#endif
|
||||
case OPT_CHARSETS_DIR:
|
||||
strmov(mysql_charsets_dir, argument);
|
||||
strmake(mysql_charsets_dir, argument, sizeof(mysql_charsets_dir) - 1);
|
||||
charsets_dir = mysql_charsets_dir;
|
||||
break;
|
||||
case OPT_DEFAULT_CHARSET:
|
||||
@ -871,7 +871,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
if (argument && strlen(argument))
|
||||
{
|
||||
default_pager_set= 1;
|
||||
strmov(pager, argument);
|
||||
strmake(pager, argument, sizeof(pager) - 1);
|
||||
strmov(default_pager, pager);
|
||||
}
|
||||
else if (default_pager_set)
|
||||
@ -885,14 +885,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
opt_nopager= 1;
|
||||
break;
|
||||
case OPT_MYSQL_PROTOCOL:
|
||||
{
|
||||
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
|
||||
{
|
||||
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
|
||||
exit(1);
|
||||
}
|
||||
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
|
||||
opt->name);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
opt_rehash= 0;
|
||||
@ -2104,6 +2099,17 @@ com_go(String *buffer,char *line __attribute__((unused)))
|
||||
if (!mysql_num_rows(result) && ! quick && !column_types_flag)
|
||||
{
|
||||
strmov(buff, "Empty set");
|
||||
if (opt_xml)
|
||||
{
|
||||
/*
|
||||
We must print XML header and footer
|
||||
to produce a well-formed XML even if
|
||||
the result set is empty (Bug#27608).
|
||||
*/
|
||||
init_pager();
|
||||
print_table_data_xml(result);
|
||||
end_pager();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2517,7 +2523,8 @@ print_table_data_xml(MYSQL_RES *result)
|
||||
|
||||
tee_fputs("<?xml version=\"1.0\"?>\n\n<resultset statement=\"", PAGER);
|
||||
xmlencode_print(glob_buffer.ptr(), (int)strlen(glob_buffer.ptr()));
|
||||
tee_fputs("\">", PAGER);
|
||||
tee_fputs("\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">",
|
||||
PAGER);
|
||||
|
||||
fields = mysql_fetch_fields(result);
|
||||
while ((cur = mysql_fetch_row(result)))
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -40,7 +40,7 @@ ulonglong last_values[MAX_MYSQL_VAR];
|
||||
static int interval=0;
|
||||
static my_bool option_force=0,interrupted=0,new_line=0,
|
||||
opt_compress=0, opt_relative=0, opt_verbose=0, opt_vertical=0,
|
||||
tty_password= 0, info_flag= 0;
|
||||
tty_password= 0, info_flag= 0, opt_nobeep;
|
||||
static uint tcp_port = 0, option_wait = 0, option_silent=0, nr_iterations,
|
||||
opt_count_iterations= 0;
|
||||
static ulong opt_connect_timeout, opt_shutdown_timeout;
|
||||
@ -54,6 +54,7 @@ static char *opt_ndb_connectstring=0;
|
||||
static char *shared_memory_base_name=0;
|
||||
#endif
|
||||
static uint opt_protocol=0;
|
||||
static myf error_flags; /* flags to pass to my_printf_error, like ME_BELL */
|
||||
|
||||
/*
|
||||
When using extended-status relatively, ex_val_max_len is the estimated
|
||||
@ -154,6 +155,8 @@ static struct my_option my_long_options[] =
|
||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"host", 'h', "Connect to host.", (gptr*) &host, (gptr*) &host, 0, GET_STR,
|
||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"no-beep", 'b', "Turn off beep on error.", (gptr*) &opt_nobeep,
|
||||
(gptr*) &opt_nobeep, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"password", 'p',
|
||||
"Password to use when connecting to server. If password is not given it's asked from the tty.",
|
||||
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||
@ -284,15 +287,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
#endif
|
||||
break;
|
||||
case OPT_MYSQL_PROTOCOL:
|
||||
{
|
||||
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
|
||||
{
|
||||
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
|
||||
exit(1);
|
||||
}
|
||||
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
|
||||
opt->name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (error)
|
||||
{
|
||||
usage();
|
||||
@ -352,6 +350,8 @@ int main(int argc,char *argv[])
|
||||
#endif
|
||||
if (default_charset)
|
||||
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, default_charset);
|
||||
error_flags= (myf)(opt_nobeep ? 0 : ME_BELL);
|
||||
|
||||
if (sql_connect(&mysql, option_wait))
|
||||
{
|
||||
unsigned int err= mysql_errno(&mysql);
|
||||
@ -450,7 +450,7 @@ static my_bool sql_connect(MYSQL *mysql, uint wait)
|
||||
if (!host)
|
||||
host= (char*) LOCAL_HOST;
|
||||
my_printf_error(0,"connect to server at '%s' failed\nerror: '%s'",
|
||||
MYF(ME_BELL), host, mysql_error(mysql));
|
||||
error_flags, host, mysql_error(mysql));
|
||||
if (mysql_errno(mysql) == CR_CONNECTION_ERROR)
|
||||
{
|
||||
fprintf(stderr,
|
||||
@ -525,14 +525,14 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
char buff[FN_REFLEN+20];
|
||||
if (argc < 2)
|
||||
{
|
||||
my_printf_error(0,"Too few arguments to create",MYF(ME_BELL));
|
||||
my_printf_error(0, "Too few arguments to create", error_flags);
|
||||
return 1;
|
||||
}
|
||||
sprintf(buff,"create database `%.*s`",FN_REFLEN,argv[1]);
|
||||
if (mysql_query(mysql,buff))
|
||||
{
|
||||
my_printf_error(0,"CREATE DATABASE failed; error: '%-.200s'",
|
||||
MYF(ME_BELL), mysql_error(mysql));
|
||||
error_flags, mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
argc--; argv++;
|
||||
@ -542,7 +542,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
{
|
||||
if (argc < 2)
|
||||
{
|
||||
my_printf_error(0,"Too few arguments to drop",MYF(ME_BELL));
|
||||
my_printf_error(0, "Too few arguments to drop", error_flags);
|
||||
return 1;
|
||||
}
|
||||
if (drop_db(mysql,argv[1]))
|
||||
@ -567,7 +567,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
|
||||
if (mysql_shutdown(mysql, SHUTDOWN_DEFAULT))
|
||||
{
|
||||
my_printf_error(0,"shutdown failed; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "shutdown failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -588,7 +588,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
case ADMIN_RELOAD:
|
||||
if (mysql_query(mysql,"flush privileges"))
|
||||
{
|
||||
my_printf_error(0,"reload failed; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "reload failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -599,7 +599,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
REFRESH_READ_LOCK | REFRESH_SLAVE |
|
||||
REFRESH_MASTER)))
|
||||
{
|
||||
my_printf_error(0,"refresh failed; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "refresh failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -607,7 +607,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
case ADMIN_FLUSH_THREADS:
|
||||
if (mysql_refresh(mysql,(uint) REFRESH_THREADS))
|
||||
{
|
||||
my_printf_error(0,"refresh failed; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "refresh failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -651,7 +651,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
"show processlist")) ||
|
||||
!(result = mysql_store_result(mysql)))
|
||||
{
|
||||
my_printf_error(0,"process list failed; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "process list failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -674,7 +674,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
char *pos;
|
||||
if (argc < 2)
|
||||
{
|
||||
my_printf_error(0,"Too few arguments to 'kill'",MYF(ME_BELL));
|
||||
my_printf_error(0, "Too few arguments to 'kill'", error_flags);
|
||||
return 1;
|
||||
}
|
||||
pos=argv[1];
|
||||
@ -682,7 +682,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
{
|
||||
if (mysql_kill(mysql,(ulong) atol(pos)))
|
||||
{
|
||||
my_printf_error(0,"kill failed on %ld; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "kill failed on %ld; error: '%s'", error_flags,
|
||||
atol(pos), mysql_error(mysql));
|
||||
error=1;
|
||||
}
|
||||
@ -698,7 +698,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
case ADMIN_DEBUG:
|
||||
if (mysql_dump_debug_info(mysql))
|
||||
{
|
||||
my_printf_error(0,"debug failed; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "debug failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -712,7 +712,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
if (mysql_query(mysql,"show /*!40003 GLOBAL */ variables") ||
|
||||
!(res=mysql_store_result(mysql)))
|
||||
{
|
||||
my_printf_error(0,"unable to show variables; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "unable to show variables; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -734,7 +734,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
if (mysql_query(mysql, "show /*!50002 GLOBAL */ status") ||
|
||||
!(res = mysql_store_result(mysql)))
|
||||
{
|
||||
my_printf_error(0, "unable to show status; error: '%s'", MYF(ME_BELL),
|
||||
my_printf_error(0, "unable to show status; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -784,7 +784,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
{
|
||||
if (mysql_refresh(mysql,REFRESH_LOG))
|
||||
{
|
||||
my_printf_error(0,"refresh failed; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "refresh failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -794,7 +794,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
{
|
||||
if (mysql_query(mysql,"flush hosts"))
|
||||
{
|
||||
my_printf_error(0,"refresh failed; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "refresh failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -804,7 +804,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
{
|
||||
if (mysql_query(mysql,"flush tables"))
|
||||
{
|
||||
my_printf_error(0,"refresh failed; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "refresh failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -814,7 +814,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
{
|
||||
if (mysql_query(mysql,"flush status"))
|
||||
{
|
||||
my_printf_error(0,"refresh failed; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "refresh failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -831,7 +831,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
my_printf_error(0,"Too few arguments to change password",MYF(ME_BELL));
|
||||
my_printf_error(0, "Too few arguments to change password", error_flags);
|
||||
return 1;
|
||||
}
|
||||
if (argv[1][0])
|
||||
@ -854,7 +854,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
if (mysql_query(mysql, "SHOW VARIABLES LIKE 'old_passwords'"))
|
||||
{
|
||||
my_printf_error(0, "Could not determine old_passwords setting from server; error: '%s'",
|
||||
MYF(ME_BELL),mysql_error(mysql));
|
||||
error_flags, mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
@ -865,7 +865,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
my_printf_error(0,
|
||||
"Could not get old_passwords setting from "
|
||||
"server; error: '%s'",
|
||||
MYF(ME_BELL),mysql_error(mysql));
|
||||
error_flags, mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
if (!mysql_num_rows(res))
|
||||
@ -890,7 +890,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
if (mysql_query(mysql,"set sql_log_off=1"))
|
||||
{
|
||||
my_printf_error(0, "Can't turn off logging; error: '%s'",
|
||||
MYF(ME_BELL),mysql_error(mysql));
|
||||
error_flags, mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
if (mysql_query(mysql,buff))
|
||||
@ -898,7 +898,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
if (mysql_errno(mysql)!=1290)
|
||||
{
|
||||
my_printf_error(0,"unable to change password; error: '%s'",
|
||||
MYF(ME_BELL),mysql_error(mysql));
|
||||
error_flags, mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
@ -912,7 +912,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
" with grant tables disabled (was started with"
|
||||
" --skip-grant-tables).\n"
|
||||
"Use: \"mysqladmin flush-privileges password '*'\""
|
||||
" instead", MYF(ME_BELL));
|
||||
" instead", error_flags);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -923,7 +923,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
case ADMIN_START_SLAVE:
|
||||
if (mysql_query(mysql, "START SLAVE"))
|
||||
{
|
||||
my_printf_error(0, "Error starting slave: %s", MYF(ME_BELL),
|
||||
my_printf_error(0, "Error starting slave: %s", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -933,7 +933,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
case ADMIN_STOP_SLAVE:
|
||||
if (mysql_query(mysql, "STOP SLAVE"))
|
||||
{
|
||||
my_printf_error(0, "Error stopping slave: %s", MYF(ME_BELL),
|
||||
my_printf_error(0, "Error stopping slave: %s", error_flags,
|
||||
mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
@ -959,7 +959,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
else
|
||||
{
|
||||
my_printf_error(0,"mysqld doesn't answer to ping, error: '%s'",
|
||||
MYF(ME_BELL),mysql_error(mysql));
|
||||
error_flags, mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -970,7 +970,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
{
|
||||
if (argc < 2)
|
||||
{
|
||||
my_printf_error(0,"Too few arguments to ndb-mgm",MYF(ME_BELL));
|
||||
my_printf_error(0, "Too few arguments to ndb-mgm", error_flags);
|
||||
return 1;
|
||||
}
|
||||
{
|
||||
@ -984,7 +984,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
my_printf_error(0,"Unknown command: '%-.60s'",MYF(ME_BELL),argv[0]);
|
||||
my_printf_error(0, "Unknown command: '%-.60s'", error_flags, argv[0]);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@ -1062,7 +1062,7 @@ static int drop_db(MYSQL *mysql, const char *db)
|
||||
sprintf(name_buff,"drop database `%.*s`",FN_REFLEN,db);
|
||||
if (mysql_query(mysql,name_buff))
|
||||
{
|
||||
my_printf_error(0,"DROP DATABASE %s failed;\nerror: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "DROP DATABASE %s failed;\nerror: '%s'", error_flags,
|
||||
db,mysql_error(mysql));
|
||||
return 1;
|
||||
}
|
||||
@ -1287,7 +1287,7 @@ static my_bool get_pidfile(MYSQL *mysql, char *pidfile)
|
||||
|
||||
if (mysql_query(mysql, "SHOW VARIABLES LIKE 'pid_file'"))
|
||||
{
|
||||
my_printf_error(0,"query failed; error: '%s'",MYF(ME_BELL),
|
||||
my_printf_error(0, "query failed; error: '%s'", error_flags,
|
||||
mysql_error(mysql));
|
||||
}
|
||||
result = mysql_store_result(mysql);
|
||||
|
@ -158,11 +158,7 @@ class Load_log_processor
|
||||
|
||||
public:
|
||||
Load_log_processor() {}
|
||||
~Load_log_processor()
|
||||
{
|
||||
destroy();
|
||||
delete_dynamic(&file_names);
|
||||
}
|
||||
~Load_log_processor() {}
|
||||
|
||||
int init()
|
||||
{
|
||||
@ -194,6 +190,8 @@ public:
|
||||
bzero((char *)ptr, sizeof(File_name_record));
|
||||
}
|
||||
}
|
||||
|
||||
delete_dynamic(&file_names);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -483,19 +481,17 @@ static int
|
||||
write_event_header_and_base64(Log_event *ev, FILE *result_file,
|
||||
PRINT_EVENT_INFO *print_event_info)
|
||||
{
|
||||
IO_CACHE *head= &print_event_info->head_cache;
|
||||
IO_CACHE *body= &print_event_info->body_cache;
|
||||
DBUG_ENTER("write_event_header_and_base64");
|
||||
/* Write header and base64 output to cache */
|
||||
IO_CACHE result_cache;
|
||||
if (open_cached_file(&result_cache, NULL, NULL, 0, MYF(MY_WME | MY_NABP)))
|
||||
return 1;
|
||||
|
||||
ev->print_header(&result_cache, print_event_info, FALSE);
|
||||
ev->print_base64(&result_cache, print_event_info, FALSE);
|
||||
/* Write header and base64 output to cache */
|
||||
ev->print_header(head, print_event_info, FALSE);
|
||||
ev->print_base64(body, print_event_info, FALSE);
|
||||
|
||||
/* Read data from cache and write to result file */
|
||||
my_b_copy_to_file(&result_cache, result_file);
|
||||
close_cached_file(&result_cache);
|
||||
DBUG_RETURN(0);
|
||||
DBUG_RETURN(copy_event_cache_to_file_and_reinit(head, result_file) ||
|
||||
copy_event_cache_to_file_and_reinit(body, result_file));
|
||||
}
|
||||
|
||||
|
||||
@ -948,14 +944,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
remote_opt= 1;
|
||||
break;
|
||||
case OPT_MYSQL_PROTOCOL:
|
||||
{
|
||||
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
|
||||
{
|
||||
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
|
||||
exit(1);
|
||||
}
|
||||
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
|
||||
opt->name);
|
||||
break;
|
||||
}
|
||||
case OPT_START_DATETIME:
|
||||
start_datetime= convert_str_to_timestamp(start_datetime_str);
|
||||
break;
|
||||
@ -1171,7 +1162,7 @@ could be out of memory");
|
||||
}
|
||||
if (len < 8 && net->read_pos[0] == 254)
|
||||
break; // end of data
|
||||
DBUG_PRINT("info",( "len: %lu, net->read_pos[5]: %d\n",
|
||||
DBUG_PRINT("info",( "len: %lu net->read_pos[5]: %d\n",
|
||||
len, net->read_pos[5]));
|
||||
if (!(ev= Log_event::read_log_event((const char*) net->read_pos + 1 ,
|
||||
len - 1, &error_msg,
|
||||
@ -1226,6 +1217,18 @@ could be out of memory");
|
||||
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
|
||||
}
|
||||
if ((error= process_event(print_event_info, ev, old_off)))
|
||||
{
|
||||
error= ((error < 0) ? 0 : 1);
|
||||
@ -1261,7 +1264,7 @@ could be out of memory");
|
||||
}
|
||||
/*
|
||||
Let's adjust offset for remote log as for local log to produce
|
||||
similar text.
|
||||
similar text and to have --stop-position to work identically.
|
||||
*/
|
||||
old_off+= len-1;
|
||||
}
|
||||
@ -1577,6 +1580,7 @@ int main(int argc, char** argv)
|
||||
cleanup();
|
||||
free_defaults(defaults_argv);
|
||||
my_free_open_file_info();
|
||||
load_processor.destroy();
|
||||
/* We cannot free DBUG, it is used in global destructors after exit(). */
|
||||
my_end((info_flag ? MY_CHECK_ERROR : 0) | MY_DONT_FREE_DBUG);
|
||||
|
||||
@ -1603,10 +1607,12 @@ int main(int argc, char** argv)
|
||||
#include "decimal.c"
|
||||
#include "my_decimal.cpp"
|
||||
#include "log_event.cpp"
|
||||
#include "log_event_old.cpp"
|
||||
#else
|
||||
#include "my_decimal.h"
|
||||
#include "decimal.c"
|
||||
#include "my_decimal.cc"
|
||||
#include "log_event.cc"
|
||||
#include "log_event_old.cc"
|
||||
#endif
|
||||
|
||||
|
@ -34,7 +34,8 @@ static my_bool opt_alldbs = 0, opt_check_only_changed = 0, opt_extended = 0,
|
||||
opt_medium_check = 0, opt_quick = 0, opt_all_in_1 = 0,
|
||||
opt_silent = 0, opt_auto_repair = 0, ignore_errors = 0,
|
||||
tty_password= 0, opt_frm= 0, info_flag= 0,
|
||||
opt_fix_table_names= 0, opt_fix_db_names= 0, opt_upgrade= 0;
|
||||
opt_fix_table_names= 0, opt_fix_db_names= 0, opt_upgrade= 0,
|
||||
opt_write_binlog= 1;
|
||||
static uint verbose = 0, opt_mysql_port=0;
|
||||
static my_string opt_mysql_unix_port = 0;
|
||||
static char *opt_password = 0, *current_user = 0,
|
||||
@ -123,6 +124,10 @@ static struct my_option my_long_options[] =
|
||||
{"medium-check", 'm',
|
||||
"Faster than extended-check, but only finds 99.99 percent of all errors. Should be good enough for most cases.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"write-binlog", OPT_WRITE_BINLOG,
|
||||
"Log ANALYZE, OPTIMIZE and REPAIR TABLE commands. Enabled by default; use --skip-write-binlog when commands should not be sent to replication slaves.",
|
||||
(gptr*) &opt_write_binlog, (gptr*) &opt_write_binlog, 0, GET_BOOL, NO_ARG,
|
||||
1, 0, 0, 0, 0, 0},
|
||||
{"optimize", 'o', "Optimize table.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0,
|
||||
0, 0},
|
||||
{"password", 'p',
|
||||
@ -310,15 +315,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
break;
|
||||
case 'V': print_version(); exit(0);
|
||||
case OPT_MYSQL_PROTOCOL:
|
||||
{
|
||||
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
|
||||
{
|
||||
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
|
||||
exit(1);
|
||||
}
|
||||
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
|
||||
opt->name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -598,16 +598,16 @@ static int handle_request_for_tables(char *tables, uint length)
|
||||
if (opt_upgrade) end = strmov(end, " FOR UPGRADE");
|
||||
break;
|
||||
case DO_REPAIR:
|
||||
op = "REPAIR";
|
||||
op= (opt_write_binlog) ? "REPAIR" : "REPAIR NO_WRITE_TO_BINLOG";
|
||||
if (opt_quick) end = strmov(end, " QUICK");
|
||||
if (opt_extended) end = strmov(end, " EXTENDED");
|
||||
if (opt_frm) end = strmov(end, " USE_FRM");
|
||||
break;
|
||||
case DO_ANALYZE:
|
||||
op = "ANALYZE";
|
||||
op= (opt_write_binlog) ? "ANALYZE" : "ANALYZE NO_WRITE_TO_BINLOG";
|
||||
break;
|
||||
case DO_OPTIMIZE:
|
||||
op = "OPTIMIZE";
|
||||
op= (opt_write_binlog) ? "OPTIMIZE" : "OPTIMIZE NO_WRITE_TO_BINLOG";
|
||||
break;
|
||||
case DO_UPGRADE:
|
||||
return fix_object_name("TABLE", tables);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -231,14 +231,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
break;
|
||||
#endif
|
||||
case OPT_MYSQL_PROTOCOL:
|
||||
{
|
||||
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
|
||||
{
|
||||
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
|
||||
exit(1);
|
||||
}
|
||||
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
|
||||
opt->name);
|
||||
break;
|
||||
}
|
||||
case '#':
|
||||
DBUG_PUSH(argument ? argument : "d:t:o");
|
||||
break;
|
||||
|
@ -287,14 +287,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
#endif
|
||||
break;
|
||||
case OPT_MYSQL_PROTOCOL:
|
||||
{
|
||||
if ((opt_protocol= find_type(argument, &sql_protocol_typelib,0)) <= 0)
|
||||
{
|
||||
fprintf(stderr, "Unknown option to protocol: %s\n", argument);
|
||||
exit(1);
|
||||
}
|
||||
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
|
||||
opt->name);
|
||||
break;
|
||||
}
|
||||
case '#':
|
||||
DBUG_PUSH(argument ? argument : "d:t:o");
|
||||
break;
|
||||
|
1237
client/mysqlslap.c
1237
client/mysqlslap.c
File diff suppressed because it is too large
Load Diff
@ -33,18 +33,12 @@
|
||||
|
||||
#define MTEST_VERSION "3.2"
|
||||
|
||||
#include <my_global.h>
|
||||
#include <mysql_embed.h>
|
||||
#include <my_sys.h>
|
||||
#include <m_string.h>
|
||||
#include <mysql.h>
|
||||
#include "client_priv.h"
|
||||
#include <mysql_version.h>
|
||||
#include <mysqld_error.h>
|
||||
#include <errmsg.h>
|
||||
#include <m_ctype.h>
|
||||
#include <my_dir.h>
|
||||
#include <hash.h>
|
||||
#include <my_getopt.h>
|
||||
#include <stdarg.h>
|
||||
#include <violite.h>
|
||||
#include "my_regex.h" /* Our own version of regex */
|
||||
@ -52,14 +46,6 @@
|
||||
#include <sys/wait.h>
|
||||
#endif
|
||||
|
||||
#ifndef WEXITSTATUS
|
||||
# ifdef __WIN__
|
||||
# define WEXITSTATUS(stat_val) (stat_val)
|
||||
# else
|
||||
# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Use cygwin for --exec and --system before 5.0 */
|
||||
#if MYSQL_VERSION_ID < 50000
|
||||
#define USE_CYGWIN
|
||||
@ -81,11 +67,9 @@
|
||||
};
|
||||
|
||||
enum {
|
||||
OPT_SKIP_SAFEMALLOC=256, OPT_SSL_SSL, OPT_SSL_KEY, OPT_SSL_CERT,
|
||||
OPT_SSL_CA, OPT_SSL_CAPATH, OPT_SSL_CIPHER, OPT_PS_PROTOCOL,
|
||||
OPT_SP_PROTOCOL, OPT_CURSOR_PROTOCOL, OPT_VIEW_PROTOCOL,
|
||||
OPT_SSL_VERIFY_SERVER_CERT, OPT_MAX_CONNECT_RETRIES,
|
||||
OPT_MARK_PROGRESS, OPT_CHARSETS_DIR, OPT_LOG_DIR, OPT_DEBUG_INFO
|
||||
OPT_SKIP_SAFEMALLOC=OPT_MAX_CLIENT_OPTION,
|
||||
OPT_PS_PROTOCOL, OPT_SP_PROTOCOL, OPT_CURSOR_PROTOCOL, OPT_VIEW_PROTOCOL,
|
||||
OPT_MAX_CONNECT_RETRIES, OPT_MARK_PROGRESS, OPT_LOG_DIR
|
||||
};
|
||||
|
||||
static int record= 0, opt_sleep= -1;
|
||||
@ -103,10 +87,10 @@ static my_bool sp_protocol= 0, sp_protocol_enabled= 0;
|
||||
static my_bool view_protocol= 0, view_protocol_enabled= 0;
|
||||
static my_bool cursor_protocol= 0, cursor_protocol_enabled= 0;
|
||||
static my_bool parsing_disabled= 0;
|
||||
static my_bool info_flag;
|
||||
static my_bool display_result_vertically= FALSE, display_metadata= FALSE;
|
||||
static my_bool display_result_vertically= FALSE,
|
||||
display_metadata= FALSE, display_result_sorted= FALSE;
|
||||
static my_bool disable_query_log= 0, disable_result_log= 0;
|
||||
static my_bool disable_warnings= 0, disable_ps_warnings= 0;
|
||||
static my_bool disable_warnings= 0;
|
||||
static my_bool disable_info= 1;
|
||||
static my_bool abort_on_error= 1;
|
||||
static my_bool server_initialized= 0;
|
||||
@ -266,20 +250,19 @@ enum enum_commands {
|
||||
Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG,
|
||||
Q_WAIT_FOR_SLAVE_TO_STOP,
|
||||
Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS,
|
||||
Q_ENABLE_PS_WARNINGS, Q_DISABLE_PS_WARNINGS,
|
||||
Q_ENABLE_INFO, Q_DISABLE_INFO,
|
||||
Q_ENABLE_METADATA, Q_DISABLE_METADATA,
|
||||
Q_EXEC, Q_DELIMITER,
|
||||
Q_DISABLE_ABORT_ON_ERROR, Q_ENABLE_ABORT_ON_ERROR,
|
||||
Q_DISPLAY_VERTICAL_RESULTS, Q_DISPLAY_HORIZONTAL_RESULTS,
|
||||
Q_QUERY_VERTICAL, Q_QUERY_HORIZONTAL,
|
||||
Q_QUERY_VERTICAL, Q_QUERY_HORIZONTAL, Q_QUERY_SORTED,
|
||||
Q_START_TIMER, Q_END_TIMER,
|
||||
Q_CHARACTER_SET, Q_DISABLE_PS_PROTOCOL, Q_ENABLE_PS_PROTOCOL,
|
||||
Q_DISABLE_RECONNECT, Q_ENABLE_RECONNECT,
|
||||
Q_IF,
|
||||
Q_DISABLE_PARSING, Q_ENABLE_PARSING,
|
||||
Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST,
|
||||
Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT,
|
||||
Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT, Q_SKIP,
|
||||
Q_CHMOD_FILE, Q_APPEND_FILE, Q_CAT_FILE, Q_DIFF_FILES,
|
||||
|
||||
Q_UNKNOWN, /* Unknown command. */
|
||||
@ -330,8 +313,6 @@ const char *command_names[]=
|
||||
"wait_for_slave_to_stop",
|
||||
"enable_warnings",
|
||||
"disable_warnings",
|
||||
"enable_ps_warnings",
|
||||
"disable_ps_warnings",
|
||||
"enable_info",
|
||||
"disable_info",
|
||||
"enable_metadata",
|
||||
@ -344,6 +325,7 @@ const char *command_names[]=
|
||||
"horizontal_results",
|
||||
"query_vertical",
|
||||
"query_horizontal",
|
||||
"query_sorted",
|
||||
"start_timer",
|
||||
"end_timer",
|
||||
"character_set",
|
||||
@ -361,8 +343,10 @@ const char *command_names[]=
|
||||
"copy_file",
|
||||
"perl",
|
||||
"die",
|
||||
|
||||
/* Don't execute any more commands, compare result */
|
||||
"exit",
|
||||
"skip",
|
||||
"chmod",
|
||||
"append_file",
|
||||
"cat_file",
|
||||
@ -415,12 +399,10 @@ struct st_command
|
||||
TYPELIB command_typelib= {array_elements(command_names),"",
|
||||
command_names, 0};
|
||||
|
||||
static DYNAMIC_STRING ds_res, ds_progress, ds_warning_messages;
|
||||
static DYNAMIC_STRING global_ds_warnings, global_eval_query;
|
||||
DYNAMIC_STRING ds_res, ds_progress, ds_warning_messages;
|
||||
|
||||
char builtin_echo[FN_REFLEN];
|
||||
|
||||
|
||||
void die(const char *fmt, ...)
|
||||
ATTRIBUTE_FORMAT(printf, 1, 2);
|
||||
void abort_not_supported_test(const char *fmt, ...)
|
||||
@ -490,6 +472,7 @@ void replace_dynstr_append_mem(DYNAMIC_STRING *ds, const char *val,
|
||||
int len);
|
||||
void replace_dynstr_append(DYNAMIC_STRING *ds, const char *val);
|
||||
void replace_dynstr_append_uint(DYNAMIC_STRING *ds, uint val);
|
||||
void dynstr_append_sorted(DYNAMIC_STRING* ds, DYNAMIC_STRING* ds_input);
|
||||
|
||||
void handle_error(struct st_command*,
|
||||
unsigned int err_errno, const char *err_error,
|
||||
@ -797,9 +780,6 @@ void free_used_memory()
|
||||
dynstr_free(&ds_res);
|
||||
dynstr_free(&ds_progress);
|
||||
dynstr_free(&ds_warning_messages);
|
||||
dynstr_free(&global_ds_warnings);
|
||||
dynstr_free(&global_eval_query);
|
||||
|
||||
free_all_replace();
|
||||
my_free(opt_pass,MYF(MY_ALLOW_ZERO_PTR));
|
||||
free_defaults(default_argv);
|
||||
@ -818,27 +798,66 @@ void free_used_memory()
|
||||
}
|
||||
|
||||
|
||||
static void cleanup_and_exit(int exit_code)
|
||||
{
|
||||
free_used_memory();
|
||||
my_end(MY_CHECK_ERROR);
|
||||
|
||||
if (!silent)
|
||||
{
|
||||
switch (exit_code)
|
||||
{
|
||||
case 1:
|
||||
printf("not ok\n");
|
||||
break;
|
||||
case 0:
|
||||
printf("ok\n");
|
||||
break;
|
||||
case 62:
|
||||
printf("skipped\n");
|
||||
break;
|
||||
default:
|
||||
printf("unknown exit code: %d\n", exit_code);
|
||||
DBUG_ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
exit(exit_code);
|
||||
}
|
||||
|
||||
void die(const char *fmt, ...)
|
||||
{
|
||||
static int dying= 0;
|
||||
va_list args;
|
||||
DBUG_ENTER("die");
|
||||
DBUG_PRINT("enter", ("start_lineno: %d", start_lineno));
|
||||
|
||||
/*
|
||||
Protect against dying twice
|
||||
first time 'die' is called, try to write log files
|
||||
second time, just exit
|
||||
*/
|
||||
if (dying)
|
||||
cleanup_and_exit(1);
|
||||
dying= 1;
|
||||
|
||||
/* Print the error message */
|
||||
va_start(args, fmt);
|
||||
if (fmt)
|
||||
{
|
||||
fprintf(stderr, "mysqltest: ");
|
||||
if (cur_file && cur_file != file_stack)
|
||||
fprintf(stderr, "In included file \"%s\": ",
|
||||
cur_file->file_name);
|
||||
if (start_lineno > 0)
|
||||
fprintf(stderr, "At line %u: ", start_lineno);
|
||||
if (fmt)
|
||||
{
|
||||
va_start(args, fmt);
|
||||
vfprintf(stderr, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
else
|
||||
fprintf(stderr, "unknown error");
|
||||
fprintf(stderr, "\n");
|
||||
fflush(stderr);
|
||||
}
|
||||
va_end(args);
|
||||
|
||||
/* Dump the result that has been accumulated so far to .log file */
|
||||
if (result_file_name && ds_res.length)
|
||||
@ -848,14 +867,7 @@ void die(const char *fmt, ...)
|
||||
if (result_file_name && ds_warning_messages.length)
|
||||
dump_warning_messages();
|
||||
|
||||
/* Clean up and exit */
|
||||
free_used_memory();
|
||||
my_end(info_flag ? MY_CHECK_ERROR | MY_GIVE_INFO : MY_CHECK_ERROR);
|
||||
|
||||
if (!silent)
|
||||
printf("not ok\n");
|
||||
|
||||
exit(1);
|
||||
cleanup_and_exit(1);
|
||||
}
|
||||
|
||||
|
||||
@ -888,14 +900,7 @@ void abort_not_supported_test(const char *fmt, ...)
|
||||
}
|
||||
va_end(args);
|
||||
|
||||
/* Clean up and exit */
|
||||
free_used_memory();
|
||||
my_end(info_flag ? MY_CHECK_ERROR | MY_GIVE_INFO : MY_CHECK_ERROR);
|
||||
|
||||
if (!silent)
|
||||
printf("skipped\n");
|
||||
|
||||
exit(62);
|
||||
cleanup_and_exit(62);
|
||||
}
|
||||
|
||||
|
||||
@ -1308,23 +1313,31 @@ void var_set(const char *var_name, const char *var_name_end,
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
void var_set_string(const char* name, const char* value)
|
||||
{
|
||||
var_set(name, name + strlen(name), value, value + strlen(value));
|
||||
}
|
||||
|
||||
|
||||
void var_set_int(const char* name, int value)
|
||||
{
|
||||
char buf[21];
|
||||
my_snprintf(buf, sizeof(buf), "%d", value);
|
||||
var_set_string(name, buf);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Store an integer (typically the returncode of the last SQL)
|
||||
statement in the mysqltest builtin variable $mysql_errno, by
|
||||
simulating of a user statement "let $mysql_errno= <integer>"
|
||||
statement in the mysqltest builtin variable $mysql_errno
|
||||
*/
|
||||
|
||||
void var_set_errno(int sql_errno)
|
||||
{
|
||||
/* TODO MASV make easier */
|
||||
const char *var_name= "$mysql_errno";
|
||||
char var_val[21];
|
||||
uint length= my_sprintf(var_val, (var_val, "%d", sql_errno));
|
||||
var_set(var_name, var_name + 12, var_val, var_val + length);
|
||||
return;
|
||||
var_set_int("$mysql_errno", sql_errno);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Set variable from the result of a query
|
||||
|
||||
@ -1355,6 +1368,7 @@ void var_query_set(VAR *var, const char *query, const char** query_end)
|
||||
MYSQL_RES *res;
|
||||
MYSQL_ROW row;
|
||||
MYSQL* mysql = &cur_con->mysql;
|
||||
DYNAMIC_STRING ds_query;
|
||||
DBUG_ENTER("var_query_set");
|
||||
LINT_INIT(res);
|
||||
|
||||
@ -1364,13 +1378,17 @@ void var_query_set(VAR *var, const char *query, const char** query_end)
|
||||
die("Syntax error in query, missing '`'");
|
||||
++query;
|
||||
|
||||
if (mysql_real_query(mysql, query, (int)(end - query)) ||
|
||||
/* Eval the query, thus replacing all environment variables */
|
||||
init_dynamic_string(&ds_query, 0, (end - query) + 32, 256);
|
||||
do_eval(&ds_query, query, end, FALSE);
|
||||
|
||||
if (mysql_real_query(mysql, ds_query.str, ds_query.length) ||
|
||||
!(res = mysql_store_result(mysql)))
|
||||
{
|
||||
*end = 0;
|
||||
die("Error running query '%s': %d %s", query,
|
||||
die("Error running query '%s': %d %s", ds_query.str,
|
||||
mysql_errno(mysql), mysql_error(mysql));
|
||||
}
|
||||
dynstr_free(&ds_query);
|
||||
|
||||
if ((row = mysql_fetch_row(res)) && row[0])
|
||||
{
|
||||
@ -2501,17 +2519,20 @@ wait_for_position:
|
||||
if (!(res= mysql_store_result(mysql)))
|
||||
die("mysql_store_result() returned NULL for '%s'", query_buf);
|
||||
if (!(row= mysql_fetch_row(res)))
|
||||
{
|
||||
mysql_free_result(res);
|
||||
die("empty result in %s", query_buf);
|
||||
}
|
||||
if (!row[0])
|
||||
{
|
||||
/*
|
||||
It may be that the slave SQL thread has not started yet, though START
|
||||
SLAVE has been issued ?
|
||||
*/
|
||||
mysql_free_result(res);
|
||||
if (tries++ == 30)
|
||||
die("could not sync with master ('%s' returned NULL)", query_buf);
|
||||
sleep(1); /* So at most we will wait 30 seconds and make 31 tries */
|
||||
mysql_free_result(res);
|
||||
goto wait_for_position;
|
||||
}
|
||||
mysql_free_result(res);
|
||||
@ -2552,6 +2573,7 @@ int do_save_master_pos()
|
||||
MYSQL *mysql = &cur_con->mysql;
|
||||
const char *query;
|
||||
int rpl_parse;
|
||||
DBUG_ENTER("do_save_master_pos");
|
||||
|
||||
rpl_parse = mysql_rpl_parse_enabled(mysql);
|
||||
mysql_disable_rpl_parse(mysql);
|
||||
@ -2576,7 +2598,7 @@ int do_save_master_pos()
|
||||
|
||||
if (have_ndbcluster)
|
||||
{
|
||||
ulonglong start_epoch= 0, applied_epoch= 0,
|
||||
ulonglong start_epoch= 0, handled_epoch= 0,
|
||||
latest_epoch=0, latest_trans_epoch=0,
|
||||
latest_handled_binlog_epoch= 0, latest_received_binlog_epoch= 0,
|
||||
latest_applied_binlog_epoch= 0;
|
||||
@ -2679,9 +2701,9 @@ int do_save_master_pos()
|
||||
if (!row)
|
||||
die("result does not contain '%s' in '%s'",
|
||||
binlog, query);
|
||||
if (latest_applied_binlog_epoch > applied_epoch)
|
||||
if (latest_handled_binlog_epoch > handled_epoch)
|
||||
count= 0;
|
||||
applied_epoch= latest_applied_binlog_epoch;
|
||||
handled_epoch= latest_handled_binlog_epoch;
|
||||
count++;
|
||||
if (latest_handled_binlog_epoch >= start_epoch)
|
||||
do_continue= 0;
|
||||
@ -2709,7 +2731,7 @@ int do_save_master_pos()
|
||||
if (rpl_parse)
|
||||
mysql_enable_rpl_parse(mysql);
|
||||
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
@ -3164,7 +3186,7 @@ struct st_connection * find_connection_by_name(const char *name)
|
||||
|
||||
int select_connection_name(const char *name)
|
||||
{
|
||||
DBUG_ENTER("select_connection2");
|
||||
DBUG_ENTER("select_connection_name");
|
||||
DBUG_PRINT("enter",("name: '%s'", name));
|
||||
|
||||
if (!(cur_con= find_connection_by_name(name)))
|
||||
@ -3187,7 +3209,7 @@ int select_connection(struct st_command *command)
|
||||
if (*p)
|
||||
*p++= 0;
|
||||
command->last_argument= p;
|
||||
return select_connection_name(name);
|
||||
DBUG_RETURN(select_connection_name(name));
|
||||
}
|
||||
|
||||
|
||||
@ -3543,7 +3565,7 @@ void do_connect(struct st_command *command)
|
||||
opt_ssl_capath, opt_ssl_cipher);
|
||||
#if MYSQL_VERSION_ID >= 50000
|
||||
/* Turn on ssl_verify_server_cert only if host is "localhost" */
|
||||
opt_ssl_verify_server_cert= !strcmp(ds_connection_name.str, "localhost");
|
||||
opt_ssl_verify_server_cert= !strcmp(ds_host.str, "localhost");
|
||||
mysql_options(&next_con->mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
|
||||
&opt_ssl_verify_server_cert);
|
||||
#endif
|
||||
@ -4235,8 +4257,6 @@ static struct my_option my_long_options[] =
|
||||
{"debug", '#', "Output debug log. Often this is 'd:t:o,filename'.",
|
||||
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||
#endif
|
||||
{"debug-info", OPT_DEBUG_INFO, "Print some debug info at exit.", (gptr*) &info_flag,
|
||||
(gptr*) &info_flag, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"host", 'h', "Connect to host.", (gptr*) &opt_host, (gptr*) &opt_host, 0,
|
||||
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"include", 'i', "Include SQL before each test case.", (gptr*) &opt_include,
|
||||
@ -4553,8 +4573,9 @@ void dump_result_to_log_file(char *buf, int size)
|
||||
|
||||
void dump_progress(void)
|
||||
{
|
||||
char log_file[FN_REFLEN];
|
||||
str_to_file(fn_format(log_file, result_file_name, opt_logdir, ".progress",
|
||||
char progress_file[FN_REFLEN];
|
||||
str_to_file(fn_format(progress_file, result_file_name,
|
||||
opt_logdir, ".progress",
|
||||
*opt_logdir ? MY_REPLACE_DIR | MY_REPLACE_EXT :
|
||||
MY_REPLACE_EXT),
|
||||
ds_progress.str, ds_progress.length);
|
||||
@ -4564,7 +4585,8 @@ void dump_warning_messages(void)
|
||||
{
|
||||
char warn_file[FN_REFLEN];
|
||||
|
||||
str_to_file(fn_format(warn_file, result_file_name, "", ".warnings",
|
||||
str_to_file(fn_format(warn_file, result_file_name, opt_logdir, ".warnings",
|
||||
*opt_logdir ? MY_REPLACE_DIR | MY_REPLACE_EXT :
|
||||
MY_REPLACE_EXT),
|
||||
ds_warning_messages.str, ds_warning_messages.length);
|
||||
}
|
||||
@ -5517,7 +5539,11 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
||||
{
|
||||
MYSQL *mysql= &cn->mysql;
|
||||
DYNAMIC_STRING *ds;
|
||||
DYNAMIC_STRING *save_ds= NULL;
|
||||
DYNAMIC_STRING ds_result;
|
||||
DYNAMIC_STRING ds_sorted;
|
||||
DYNAMIC_STRING ds_warnings;
|
||||
DYNAMIC_STRING eval_query;
|
||||
char *query;
|
||||
int query_len;
|
||||
my_bool view_created= 0, sp_created= 0;
|
||||
@ -5525,7 +5551,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
||||
(flags & QUERY_REAP_FLAG));
|
||||
DBUG_ENTER("run_query");
|
||||
|
||||
init_dynamic_string(&global_ds_warnings, NULL, 0, 256);
|
||||
init_dynamic_string(&ds_warnings, NULL, 0, 256);
|
||||
|
||||
/* Scan for warning before sendign to server */
|
||||
scan_command_for_warnings(command);
|
||||
@ -5535,10 +5561,10 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
||||
*/
|
||||
if (command->type == Q_EVAL)
|
||||
{
|
||||
init_dynamic_string(&global_eval_query, "", command->query_len+256, 1024);
|
||||
do_eval(&global_eval_query, command->query, command->end, FALSE);
|
||||
query = global_eval_query.str;
|
||||
query_len = global_eval_query.length;
|
||||
init_dynamic_string(&eval_query, "", command->query_len+256, 1024);
|
||||
do_eval(&eval_query, command->query, command->end, FALSE);
|
||||
query = eval_query.str;
|
||||
query_len = eval_query.length;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -5610,7 +5636,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
||||
Collect warnings from create of the view that should otherwise
|
||||
have been produced when the SELECT was executed
|
||||
*/
|
||||
append_warnings(&global_ds_warnings, cur_con->util_mysql);
|
||||
append_warnings(&ds_warnings, cur_con->util_mysql);
|
||||
}
|
||||
|
||||
dynstr_free(&query_str);
|
||||
@ -5657,6 +5683,18 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
||||
dynstr_free(&query_str);
|
||||
}
|
||||
|
||||
if (display_result_sorted)
|
||||
{
|
||||
/*
|
||||
Collect the query output in a separate string
|
||||
that can be sorted before it's added to the
|
||||
global result string
|
||||
*/
|
||||
init_dynamic_string(&ds_sorted, "", 1024, 1024);
|
||||
save_ds= ds; /* Remember original ds */
|
||||
ds= &ds_sorted;
|
||||
}
|
||||
|
||||
/*
|
||||
Find out how to run this query
|
||||
|
||||
@ -5669,10 +5707,18 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
||||
if (ps_protocol_enabled &&
|
||||
complete_query &&
|
||||
match_re(&ps_re, query))
|
||||
run_query_stmt(mysql, command, query, query_len, ds, &global_ds_warnings);
|
||||
run_query_stmt(mysql, command, query, query_len, ds, &ds_warnings);
|
||||
else
|
||||
run_query_normal(cn, command, flags, query, query_len,
|
||||
ds, &global_ds_warnings);
|
||||
ds, &ds_warnings);
|
||||
|
||||
if (display_result_sorted)
|
||||
{
|
||||
/* Sort the result set and append it to result */
|
||||
dynstr_append_sorted(save_ds, &ds_sorted);
|
||||
ds= save_ds;
|
||||
dynstr_free(&ds_sorted);
|
||||
}
|
||||
|
||||
if (sp_created)
|
||||
{
|
||||
@ -5696,11 +5742,11 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
||||
check_require(ds, command->require_file);
|
||||
}
|
||||
|
||||
dynstr_free(&global_ds_warnings);
|
||||
dynstr_free(&ds_warnings);
|
||||
if (ds == &ds_result)
|
||||
dynstr_free(&ds_result);
|
||||
if (command->type == Q_EVAL)
|
||||
dynstr_free(&global_eval_query);
|
||||
dynstr_free(&eval_query);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
@ -5961,6 +6007,8 @@ int main(int argc, char **argv)
|
||||
1024, 0, 0, get_var_key, var_free, MYF(0)))
|
||||
die("Variable hash initialization failed");
|
||||
|
||||
var_set_string("$MYSQL_SERVER_VERSION", MYSQL_SERVER_VERSION);
|
||||
|
||||
memset(&master_pos, 0, sizeof(master_pos));
|
||||
|
||||
parser.current_line= parser.read_lines= 0;
|
||||
@ -6015,15 +6063,13 @@ int main(int argc, char **argv)
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
|
||||
#if MYSQL_VERSION_ID >= 50000
|
||||
opt_ssl_verify_server_cert= TRUE; /* Always on in mysqltest */
|
||||
#endif
|
||||
|
||||
if (opt_use_ssl)
|
||||
{
|
||||
mysql_ssl_set(&cur_con->mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
|
||||
opt_ssl_capath, opt_ssl_cipher);
|
||||
#if MYSQL_VERSION_ID >= 50000
|
||||
/* Turn on ssl_verify_server_cert only if host is "localhost" */
|
||||
opt_ssl_verify_server_cert= opt_host && !strcmp(opt_host, "localhost");
|
||||
mysql_options(&cur_con->mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
|
||||
&opt_ssl_verify_server_cert);
|
||||
#endif
|
||||
@ -6088,8 +6134,6 @@ int main(int argc, char **argv)
|
||||
case Q_DISABLE_RESULT_LOG: disable_result_log=1; break;
|
||||
case Q_ENABLE_WARNINGS: disable_warnings=0; break;
|
||||
case Q_DISABLE_WARNINGS: disable_warnings=1; break;
|
||||
case Q_ENABLE_PS_WARNINGS: disable_ps_warnings=0; break;
|
||||
case Q_DISABLE_PS_WARNINGS: disable_ps_warnings=1; break;
|
||||
case Q_ENABLE_INFO: disable_info=0; break;
|
||||
case Q_DISABLE_INFO: disable_info=1; break;
|
||||
case Q_ENABLE_METADATA: display_metadata=1; break;
|
||||
@ -6124,37 +6168,24 @@ int main(int argc, char **argv)
|
||||
case Q_EVAL_RESULT:
|
||||
eval_result = 1; break;
|
||||
case Q_EVAL:
|
||||
case Q_QUERY_VERTICAL:
|
||||
case Q_QUERY_HORIZONTAL:
|
||||
case Q_QUERY_SORTED:
|
||||
if (command->query == command->query_buf)
|
||||
{
|
||||
/* Skip the first part of command, i.e query_xxx */
|
||||
command->query= command->first_argument;
|
||||
command->first_word_len= 0;
|
||||
}
|
||||
/* fall through */
|
||||
case Q_QUERY_VERTICAL:
|
||||
case Q_QUERY_HORIZONTAL:
|
||||
{
|
||||
my_bool old_display_result_vertically= display_result_vertically;
|
||||
|
||||
/* Remove "query_*" if this is first iteration */
|
||||
if (command->query == command->query_buf)
|
||||
command->query= command->first_argument;
|
||||
|
||||
display_result_vertically= (command->type == Q_QUERY_VERTICAL);
|
||||
if (save_file[0])
|
||||
{
|
||||
strmake(command->require_file, save_file, sizeof(save_file));
|
||||
save_file[0]= 0;
|
||||
}
|
||||
run_query(cur_con, command, QUERY_REAP_FLAG|QUERY_SEND_FLAG);
|
||||
display_result_vertically= old_display_result_vertically;
|
||||
command->last_argument= command->end;
|
||||
command_executed++;
|
||||
break;
|
||||
}
|
||||
case Q_QUERY:
|
||||
case Q_REAP:
|
||||
{
|
||||
int flags;
|
||||
my_bool old_display_result_vertically= display_result_vertically;
|
||||
my_bool old_display_result_sorted= display_result_sorted;
|
||||
/* Default is full query, both reap and send */
|
||||
int flags= QUERY_REAP_FLAG | QUERY_SEND_FLAG;
|
||||
|
||||
if (q_send_flag)
|
||||
{
|
||||
/* Last command was an empty 'send' */
|
||||
@ -6165,11 +6196,10 @@ int main(int argc, char **argv)
|
||||
{
|
||||
flags= QUERY_REAP_FLAG;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* full query, both reap and send */
|
||||
flags= QUERY_REAP_FLAG | QUERY_SEND_FLAG;
|
||||
}
|
||||
|
||||
/* Check for special property for this query */
|
||||
display_result_vertically|= (command->type == Q_QUERY_VERTICAL);
|
||||
display_result_sorted= (command->type == Q_QUERY_SORTED);
|
||||
|
||||
if (save_file[0])
|
||||
{
|
||||
@ -6179,6 +6209,11 @@ int main(int argc, char **argv)
|
||||
run_query(cur_con, command, flags);
|
||||
command_executed++;
|
||||
command->last_argument= command->end;
|
||||
|
||||
/* Restore settings */
|
||||
display_result_vertically= old_display_result_vertically;
|
||||
display_result_sorted= old_display_result_sorted;
|
||||
|
||||
break;
|
||||
}
|
||||
case Q_SEND:
|
||||
@ -6294,6 +6329,9 @@ int main(int argc, char **argv)
|
||||
/* Stop processing any more commands */
|
||||
abort_flag= 1;
|
||||
break;
|
||||
case Q_SKIP:
|
||||
abort_not_supported_test("%s", command->first_argument);
|
||||
break;
|
||||
|
||||
case Q_RESULT:
|
||||
die("result, deprecated command");
|
||||
@ -6405,14 +6443,9 @@ int main(int argc, char **argv)
|
||||
dump_warning_messages();
|
||||
|
||||
timer_output();
|
||||
free_used_memory();
|
||||
my_end(info_flag ? MY_CHECK_ERROR | MY_GIVE_INFO : MY_CHECK_ERROR);
|
||||
|
||||
/* Yes, if we got this far the test has suceeded! Sakila smiles */
|
||||
if (!silent)
|
||||
printf("ok\n");
|
||||
exit(0);
|
||||
return 0; /* Keep compiler happy */
|
||||
cleanup_and_exit(0);
|
||||
return 0; /* Keep compiler happy too */
|
||||
}
|
||||
|
||||
|
||||
@ -7791,3 +7824,73 @@ void replace_dynstr_append_uint(DYNAMIC_STRING *ds, uint val)
|
||||
char *end= longlong10_to_str(val, buff, 10);
|
||||
replace_dynstr_append_mem(ds, buff, end - buff);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Build a list of pointer to each line in ds_input, sort
|
||||
the list and use the sorted list to append the strings
|
||||
sorted to the output ds
|
||||
|
||||
SYNOPSIS
|
||||
dynstr_append_sorted
|
||||
ds - string where the sorted output will be appended
|
||||
ds_input - string to be sorted
|
||||
|
||||
*/
|
||||
|
||||
static int comp_lines(const char **a, const char **b)
|
||||
{
|
||||
return (strcmp(*a,*b));
|
||||
}
|
||||
|
||||
void dynstr_append_sorted(DYNAMIC_STRING* ds, DYNAMIC_STRING *ds_input)
|
||||
{
|
||||
unsigned i;
|
||||
char *start= ds_input->str;
|
||||
DYNAMIC_ARRAY lines;
|
||||
DBUG_ENTER("dynstr_append_sorted");
|
||||
|
||||
if (!*start)
|
||||
DBUG_VOID_RETURN; /* No input */
|
||||
|
||||
my_init_dynamic_array(&lines, sizeof(const char*), 32, 32);
|
||||
|
||||
/* First line is result header, skip past it */
|
||||
while (*start && *start != '\n')
|
||||
start++;
|
||||
start++; /* Skip past \n */
|
||||
dynstr_append_mem(ds, ds_input->str, start - ds_input->str);
|
||||
|
||||
/* Insert line(s) in array */
|
||||
while (*start)
|
||||
{
|
||||
char* line_end= (char*)start;
|
||||
|
||||
/* Find end of line */
|
||||
while (*line_end && *line_end != '\n')
|
||||
line_end++;
|
||||
*line_end= 0;
|
||||
|
||||
/* Insert pointer to the line in array */
|
||||
if (insert_dynamic(&lines, (gptr) &start))
|
||||
die("Out of memory inserting lines to sort");
|
||||
|
||||
start= line_end+1;
|
||||
}
|
||||
|
||||
/* Sort array */
|
||||
qsort(lines.buffer, lines.elements,
|
||||
sizeof(char**), (qsort_cmp)comp_lines);
|
||||
|
||||
/* Create new result */
|
||||
for (i= 0; i < lines.elements ; i++)
|
||||
{
|
||||
const char **line= dynamic_element(&lines, i, const char**);
|
||||
dynstr_append(ds, *line);
|
||||
dynstr_append(ds, "\n");
|
||||
}
|
||||
|
||||
delete_dynamic(&lines);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
@ -429,3 +429,16 @@ then
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
|
||||
# Shall we build experimental collations
|
||||
AC_ARG_WITH(experimental-collations,
|
||||
[],
|
||||
[with_exp_coll=$withval],
|
||||
[with_exp_coll=no]
|
||||
)
|
||||
|
||||
if test "$with_exp_coll" = "yes"
|
||||
then
|
||||
AC_DEFINE([HAVE_UTF8_GENERAL_CS], [1], [certain Japanese customer])
|
||||
fi
|
||||
|
@ -663,3 +663,27 @@ esac
|
||||
AC_SUBST(AR)
|
||||
AC_SUBST(ARFLAGS)
|
||||
])
|
||||
|
||||
dnl
|
||||
dnl Macro to check time_t range: according to C standard
|
||||
dnl array index must be greater than 0 => if time_t is signed,
|
||||
dnl the code in the macros below won't compile.
|
||||
dnl
|
||||
|
||||
AC_DEFUN([MYSQL_CHECK_TIME_T],[
|
||||
AC_MSG_CHECKING(if time_t is unsigned)
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||
[[
|
||||
#include <time.h>
|
||||
]],
|
||||
[[
|
||||
int array[(((time_t)-1) > 0) ? 1 : -1];
|
||||
]] )
|
||||
], [
|
||||
AC_DEFINE([TIME_T_UNSIGNED], 1, [Define to 1 if time_t is unsigned])
|
||||
AC_MSG_RESULT(yes)
|
||||
],
|
||||
[AC_MSG_RESULT(no)]
|
||||
)
|
||||
])
|
||||
|
||||
|
@ -2,7 +2,7 @@ dnl Define zlib paths to point at bundled zlib
|
||||
|
||||
AC_DEFUN([MYSQL_USE_BUNDLED_ZLIB], [
|
||||
ZLIB_INCLUDES="-I\$(top_srcdir)/zlib"
|
||||
ZLIB_LIBS="\$(top_builddir)/zlib/libz.la"
|
||||
ZLIB_LIBS="\$(top_builddir)/zlib/libzlt.la"
|
||||
dnl Omit -L$pkglibdir as it's always in the list of mysql_config deps.
|
||||
ZLIB_DEPS="-lz"
|
||||
zlib_dir="zlib"
|
||||
@ -10,16 +10,25 @@ AC_SUBST([zlib_dir])
|
||||
mysql_cv_compress="yes"
|
||||
])
|
||||
|
||||
dnl Auxiliary macro to check for zlib at given path
|
||||
dnl Auxiliary macro to check for zlib at given path.
|
||||
dnl We are strict with the server, as "archive" engine
|
||||
dnl needs zlibCompileFlags(), but for client only we
|
||||
dnl are less strict, and take the zlib we find.
|
||||
|
||||
AC_DEFUN([MYSQL_CHECK_ZLIB_DIR], [
|
||||
save_CPPFLAGS="$CPPFLAGS"
|
||||
save_LIBS="$LIBS"
|
||||
CPPFLAGS="$ZLIB_INCLUDES $CPPFLAGS"
|
||||
LIBS="$LIBS $ZLIB_LIBS"
|
||||
if test X"$with_server" = Xno
|
||||
then
|
||||
zlibsym=zlibVersion
|
||||
else
|
||||
zlibsym=zlibCompileFlags
|
||||
fi
|
||||
AC_CACHE_VAL([mysql_cv_compress],
|
||||
[AC_TRY_LINK([#include <zlib.h>],
|
||||
[return zlibCompileFlags();],
|
||||
[return $zlibsym();],
|
||||
[mysql_cv_compress="yes"
|
||||
AC_MSG_RESULT([ok])],
|
||||
[mysql_cv_compress="no"])
|
||||
|
41
configure.in
41
configure.in
@ -7,7 +7,10 @@ AC_INIT(sql/mysqld.cc)
|
||||
AC_CANONICAL_SYSTEM
|
||||
# The Docs Makefile.am parses this line!
|
||||
# remember to also update version.c in ndb
|
||||
AM_INIT_AUTOMAKE(mysql, 5.1.17-beta)
|
||||
#
|
||||
# When changing major version number please also check switch statement
|
||||
# in mysqlbinlog::check_master_version().
|
||||
AM_INIT_AUTOMAKE(mysql, 5.1.18-beta)
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
PROTOCOL_VERSION=10
|
||||
@ -21,7 +24,10 @@ NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_MAJOR_VERSION:0:0
|
||||
# Remember that regexps needs to quote [ and ] since this is run through m4
|
||||
MYSQL_NO_DASH_VERSION=`echo $VERSION | sed -e "s|[[a-z]]*-.*$||"`
|
||||
MYSQL_BASE_VERSION=`echo $MYSQL_NO_DASH_VERSION | sed -e "s|\.[[^.]]*$||"`
|
||||
MYSQL_VERSION_ID=`echo $MYSQL_NO_DASH_VERSION. | sed -e 's/[[^0-9.]]//g; s/\./ /g; s/ \([[0-9]]\) / 0\\1 /g; s/ //g'`
|
||||
MYSQL_VERSION_ID=`echo $MYSQL_NO_DASH_VERSION | sed -e 's|[[^0-9.]].*$||;s|$|.|' | sed -e 's/[[^0-9.]]//g; s/\./ /g; s/ \([[0-9]]\) / 0\\1 /g; s/ //g'`
|
||||
|
||||
# Add previous major version for debian package upgrade path
|
||||
MYSQL_PREVIOUS_BASE_VERSION=5.0
|
||||
|
||||
# The port should be constant for a LONG time
|
||||
MYSQL_TCP_PORT_DEFAULT=3306
|
||||
@ -52,6 +58,7 @@ romanian russian serbian slovak spanish swedish ukrainian"
|
||||
AC_SUBST(MYSQL_NO_DASH_VERSION)
|
||||
AC_SUBST(MYSQL_BASE_VERSION)
|
||||
AC_SUBST(MYSQL_VERSION_ID)
|
||||
AC_SUBST(MYSQL_PREVIOUS_BASE_VERSION)
|
||||
AC_SUBST(PROTOCOL_VERSION)
|
||||
AC_DEFINE_UNQUOTED([PROTOCOL_VERSION], [$PROTOCOL_VERSION],
|
||||
[mysql client protocol version])
|
||||
@ -739,8 +746,9 @@ AC_CHECK_FUNC(bind, , AC_CHECK_LIB(bind, bind))
|
||||
# Check if crypt() exists in libc or libcrypt, sets LIBS if needed
|
||||
AC_SEARCH_LIBS(crypt, crypt, AC_DEFINE(HAVE_CRYPT, 1, [crypt]))
|
||||
|
||||
# For sem_xxx functions on Solaris 2.6
|
||||
AC_CHECK_FUNC(sem_init, , AC_CHECK_LIB(posix4, sem_init))
|
||||
# For the sched_yield() function on Solaris
|
||||
AC_CHECK_FUNC(sched_yield, , AC_CHECK_LIB(posix4, sched_yield))
|
||||
|
||||
MYSQL_CHECK_ZLIB_WITH_COMPRESS
|
||||
|
||||
# For large pages support
|
||||
@ -2257,11 +2265,10 @@ AC_SUBST(tools_dirs)
|
||||
#MYSQL_CHECK_CPU
|
||||
|
||||
libmysqld_dirs=
|
||||
linked_libmysqld_targets=
|
||||
if test "$with_embedded_server" = "yes"
|
||||
then
|
||||
libmysqld_dirs=libmysqld
|
||||
linked_libmysqld_targets="linked_libmysqld_sources linked_libmysqldex_sources"
|
||||
|
||||
AC_CONFIG_FILES(libmysqld/Makefile libmysqld/examples/Makefile)
|
||||
# We can't build embedded library without building the server, because
|
||||
# we depend on libmysys, libmystrings, libmyisam, etc.
|
||||
@ -2271,7 +2278,6 @@ fi
|
||||
# mysql_config --libmysqld-libs will print out something like
|
||||
# -L/path/to/lib/mysql -lmysqld -lmyisam -lmysys -lmystrings -ldbug ...
|
||||
AC_SUBST([libmysqld_dirs])
|
||||
AC_SUBST([linked_libmysqld_targets])
|
||||
|
||||
# Shall we build the docs?
|
||||
AC_ARG_WITH(docs,
|
||||
@ -2295,12 +2301,18 @@ AC_ARG_WITH(man,
|
||||
[with_man=yes]
|
||||
)
|
||||
|
||||
if test "$with_man" = "yes"
|
||||
if test X"$with_man" = Xyes
|
||||
then
|
||||
man_dirs="man"
|
||||
man1_files=`ls -1 $srcdir/man/*.1 | sed -e 's;^.*man/;;'`
|
||||
if test X"$have_ndbcluster" = Xyes
|
||||
then
|
||||
man1_files=`ls $srcdir/man/*.1 | sed -e 's;^.*man/;;'`
|
||||
man8_files=`ls $srcdir/man/*.8 | sed -e 's;^.*man/;;'`
|
||||
else
|
||||
man1_files=`ls $srcdir/man/*.1 | grep -v '/ndb' | sed -e 's;^.*man/;;'`
|
||||
man8_files=`ls $srcdir/man/*.8 | grep -v '/ndb' | sed -e 's;^.*man/;;'`
|
||||
fi
|
||||
man1_files=`echo $man1_files`
|
||||
man8_files=`ls -1 $srcdir/man/*.8 | sed -e 's;^.*man/;;'`
|
||||
man8_files=`echo $man8_files`
|
||||
else
|
||||
man_dirs=""
|
||||
@ -2446,7 +2458,6 @@ thread_dirs=
|
||||
dnl This probably should be cleaned up more - for now the threaded
|
||||
dnl client is just using plain-old libs.
|
||||
sql_client_dirs=
|
||||
linked_client_targets="linked_libmysql_sources"
|
||||
|
||||
AM_CONDITIONAL(THREAD_SAFE_CLIENT, test "$THREAD_SAFE_CLIENT" != "no")
|
||||
|
||||
@ -2455,7 +2466,6 @@ then
|
||||
sql_client_dirs="strings regex mysys dbug extra libmysql client"
|
||||
else
|
||||
sql_client_dirs="strings regex mysys dbug extra libmysql libmysql_r client"
|
||||
linked_client_targets="$linked_client_targets linked_libmysql_r_sources"
|
||||
AC_CONFIG_FILES(libmysql_r/Makefile)
|
||||
AC_DEFINE([THREAD_SAFE_CLIENT], [1], [Should the client be thread safe])
|
||||
fi
|
||||
@ -2467,18 +2477,14 @@ AC_SUBST(CLIENT_THREAD_LIBS)
|
||||
AC_SUBST(NON_THREADED_LIBS)
|
||||
AC_SUBST(STATIC_NSS_FLAGS)
|
||||
AC_SUBST(sql_client_dirs)
|
||||
AC_SUBST(linked_client_targets)
|
||||
|
||||
# If configuring for NetWare, set up to link sources from and build the netware directory
|
||||
# If configuring for NetWare, build the netware directory
|
||||
netware_dir=
|
||||
linked_netware_sources=
|
||||
if expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null
|
||||
then
|
||||
netware_dir="netware"
|
||||
linked_netware_sources="linked_netware_sources"
|
||||
fi
|
||||
AC_SUBST(netware_dir)
|
||||
AC_SUBST(linked_netware_sources)
|
||||
AM_CONDITIONAL(HAVE_NETWARE, test "$netware_dir" = "netware")
|
||||
|
||||
if test "$with_server" != "no" -o "$THREAD_SAFE_CLIENT" != "no"
|
||||
@ -2549,6 +2555,7 @@ AC_CONFIG_FILES(Makefile extra/Makefile mysys/Makefile dnl
|
||||
tests/Makefile Docs/Makefile support-files/Makefile dnl
|
||||
support-files/MacOSX/Makefile support-files/RHEL4-SElinux/Makefile dnl
|
||||
mysql-test/Makefile dnl
|
||||
debian/Makefile debian/defs.mk debian/control dnl
|
||||
mysql-test/ndb/Makefile netware/Makefile sql-bench/Makefile dnl
|
||||
include/mysql_version.h plugin/Makefile win/Makefile)
|
||||
|
||||
|
@ -1995,12 +1995,13 @@ static char *DbugMalloc(size_t size)
|
||||
|
||||
|
||||
/*
|
||||
* strtok lookalike - splits on ':', magically handles :\ and :/
|
||||
* strtok lookalike - splits on ':', magically handles ::, :\ and :/
|
||||
*/
|
||||
|
||||
static const char *DbugStrTok(const char *s)
|
||||
{
|
||||
while (s[0] && (s[0] != ':' || (s[1] == '\\' || s[1] == '/')))
|
||||
while (s[0] && (s[0] != ':' ||
|
||||
(s[1] == '\\' || s[1] == '/' || (s[1] == ':' && s++))))
|
||||
s++;
|
||||
return s;
|
||||
}
|
||||
|
11
dbug/user.r
11
dbug/user.r
@ -908,9 +908,10 @@ via the
|
||||
.B DBUG_PUSH
|
||||
or
|
||||
.B DBUG_SET
|
||||
macros. Control string consists of colon separate flags. A flag
|
||||
may take an argument or a list of arguments. If a control string
|
||||
starts from a '+' sign it works
|
||||
macros. Control string consists of colon separate flags. Colons
|
||||
that are part of ':\\', ':/', or '::' are not considered flag
|
||||
separators. A flag may take an argument or a list of arguments.
|
||||
If a control string starts from a '+' sign it works
|
||||
.I incrementally,
|
||||
that is, it can modify existing state without overriding it. In such a
|
||||
string every flag may be preceded by a '+' or '-' to enable or disable
|
||||
@ -923,9 +924,7 @@ optional.
|
||||
.LI a[,file]
|
||||
Redirect the debugger output stream and append it to the specified
|
||||
file. The default output stream is stderr. A null argument list
|
||||
causes output to be redirected to stdout. A colon that is followed by
|
||||
the '\\' or '/' is cosidered a part of the path and not a flag
|
||||
separator.
|
||||
causes output to be redirected to stdout.
|
||||
.SP 1
|
||||
EX: \fCa,C:\\tmp\\log\fR
|
||||
.LI A[,file]
|
||||
|
118
debian/Makefile.am
vendored
Normal file
118
debian/Makefile.am
vendored
Normal file
@ -0,0 +1,118 @@
|
||||
# Copyright (C) 2006 MySQL AB
|
||||
#
|
||||
# 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
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
## Process this file with automake to create Makefile.in
|
||||
EXTRA_DIST = \
|
||||
mysql-test-BASE.files.in \
|
||||
libndbclientNLIB-dev.files.in \
|
||||
mysql-server-BASE.config.in \
|
||||
libndbclientNLIB.README.Debian.in \
|
||||
mysql-server-BASE.postrm.in \
|
||||
mysql-server-BASE.NEWS.in \
|
||||
libndbclientNLIB.postinst.in \
|
||||
mysql-server-BASE.links.in \
|
||||
libndbclientNLIB.files.in \
|
||||
source.lintian-overrides.in \
|
||||
mysql-server-BASE.docs.in \
|
||||
libmysqlclientSLIBoff.files.in \
|
||||
mysql-server-BASE.files.in \
|
||||
libndbclientNLIB-dev.links.in \
|
||||
libmysqlclientSLIBoff.postinst.in \
|
||||
mysql-extra-BASE.dirs.in \
|
||||
libmysqlclientSLIB-dev.links.in \
|
||||
mysql-server-BASE.dirs.in \
|
||||
libmysqlclientSLIB-dev.examples.in \
|
||||
mysql-client-BASE.lintian-overrides.in \
|
||||
copyright.more \
|
||||
libndbclientNLIB-dev.dirs.in \
|
||||
mysql-server-BASE.README.Debian.in \
|
||||
libmysqlclientSLIBoff.docs.in \
|
||||
compat \
|
||||
mysql-test-BASE.dirs.in \
|
||||
libmysqlclientSLIB-dev.files.in \
|
||||
libmysqlclientSLIBoff.dirs.in \
|
||||
mysql-server-BASE.logcheck.ignore.server.in \
|
||||
mysql-storage-BASE.mysql-storage.init.in \
|
||||
libmysqlclientSLIBoff.README.Debian.in \
|
||||
mysql-client-BASE.README.Debian.in \
|
||||
Makefile.am \
|
||||
mysql-server-BASE.prerm.in \
|
||||
mysql-common.dirs.in \
|
||||
defs.mk \
|
||||
defs.mk.in \
|
||||
mysql-server-BASE.mysql-server.logrotate.in \
|
||||
mysql-common.README.Debian.in \
|
||||
copyright \
|
||||
mysql-storage-BASE.dirs.in \
|
||||
mysql-common.preinst.in \
|
||||
mysql-client-BASE.files.in \
|
||||
mysql-server-BASE.templates.in \
|
||||
mysql-tools-BASE.dirs.in \
|
||||
mysql-management-BASE.mysql-management.init.in \
|
||||
watch \
|
||||
mysql-common.postrm.in \
|
||||
mysql-server-BASE.preinst.in \
|
||||
README.Maintainer \
|
||||
mysql-tools-BASE.files.in \
|
||||
mysql-client-BASE.NEWS.in \
|
||||
mysql-server-BASE.lintian-overrides.in \
|
||||
changelog \
|
||||
mysql-server-BASE.logcheck.ignore.paranoid.in \
|
||||
mysql-common.files.in \
|
||||
mysql-server-BASE.logcheck.ignore.workstation.in \
|
||||
mysql-extra-BASE.files.in \
|
||||
mysql-management-BASE.files.in \
|
||||
mysql-client-BASE.docs.in \
|
||||
libmysqlclientSLIB-dev.README.Maintainer.in \
|
||||
mysql-storage-BASE.files.in \
|
||||
additions \
|
||||
additions/ndb_mgmd.cnf \
|
||||
additions/mysql-server.lintian-overrides \
|
||||
additions/my.cnf \
|
||||
mysql-server-BASE.postinst.in \
|
||||
libndbclientNLIB.dirs.in \
|
||||
po \
|
||||
po/fr.po \
|
||||
po/sv.po \
|
||||
po/da.po \
|
||||
po/es.po \
|
||||
po/ja.po \
|
||||
po/tr.po \
|
||||
po/nb.po \
|
||||
po/POTFILES.in.in \
|
||||
po/cs.po \
|
||||
po/pt.po \
|
||||
po/gl.po \
|
||||
po/pt_BR.po \
|
||||
po/nl.po \
|
||||
po/templates.pot \
|
||||
po/de.po \
|
||||
po/eu.po \
|
||||
po/ro.po \
|
||||
po/ru.po \
|
||||
po/it.po \
|
||||
po/ca.po \
|
||||
mysql-client-BASE.dirs.in \
|
||||
control.in \
|
||||
libmysqlclientSLIB-dev.dirs.in \
|
||||
mysql-server-PREV.preinst.in \
|
||||
mysql-server.preinst.in \
|
||||
mysql-management-BASE.dirs.in \
|
||||
rules \
|
||||
libmysqlclientSLIB-dev.docs.in
|
||||
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
||||
|
99
debian/README.Maintainer
vendored
Normal file
99
debian/README.Maintainer
vendored
Normal file
@ -0,0 +1,99 @@
|
||||
###########################################################################
|
||||
# Here are some information that are only of interest to the Debiani #
|
||||
# maintainers of MySQL. #
|
||||
###########################################################################
|
||||
|
||||
#
|
||||
# Remarks to dependencies
|
||||
#
|
||||
libwrap0-dev (>= 7.6-8.3)
|
||||
According to bug report 114582 where where build problems on
|
||||
IA-64/sid with at least two prior versions.
|
||||
psmisc
|
||||
/usr/bin/killall in the initscript
|
||||
|
||||
zlib1g in libmysqlclient-dev:
|
||||
"mysql_config --libs" adds "-lz"
|
||||
|
||||
Build-Dep:
|
||||
|
||||
debhelper (>=4.1.16):
|
||||
See po-debconf(7).
|
||||
|
||||
autoconf (>= 2.13-20), automake1.7
|
||||
Try to get rid of them.
|
||||
|
||||
doxygen, tetex-bin, tetex-extra, gs
|
||||
for ndb/docs/*tex
|
||||
|
||||
mysql-server-5.0: Pre-Depends: mysql-common
|
||||
This was necessary as mysql-server-5.0.preinst checks for unmodified
|
||||
conffiles from mysql-server-4.1 and copies 5.0 ones over them to avoid
|
||||
unnecessary dpkg questions. As mysql-server-5.0 is not unpacked at its
|
||||
pre-inst stage, it had to copy those files from a package that is
|
||||
definetly already unpacked which does not have to be the case with Depends.
|
||||
|
||||
#
|
||||
# Remarks to the start scripts
|
||||
#
|
||||
|
||||
## initscripts rely on mysqladmin from a different package
|
||||
We have the problem that "/etc/init.d/mysql stop" relies on mysqladmin which
|
||||
is in another package (mysql-client) and a passwordless access that's maybe
|
||||
only available if the user configured his /root/.my.cnf. Can this be a problem?
|
||||
* normal mode: not because the user is required to have it. Else:
|
||||
* purge/remove: not, same as normal mode
|
||||
* upgrade: not, same as normal mode
|
||||
* first install: not, it depends on mysql-client which at least is unpacked
|
||||
so mysqladmin is there (to ping). It is not yet configured
|
||||
passwordles but if there's a server running then there's a
|
||||
/root/.my.cnf. Anyways, we simply kill anything that's mysqld.
|
||||
|
||||
## Passwordless access for the maintainer scripts
|
||||
Another issue is that the scripts needs passwordless access. To ensure this
|
||||
a debian-sys-maint user is configured which has process and shutdown privs.
|
||||
The file with the randomly (that's important!) generated password must be
|
||||
present as long as the databases remain installed because else a new install
|
||||
would have no access. This file should be used like:
|
||||
mysqladmin --defaults-file=/etc/mysql/debian.cnf restart
|
||||
to avoid providing the password in plaintext on a commandline where it would
|
||||
be visible to any user via the "ps" command.
|
||||
|
||||
## When to start the daemon?
|
||||
We aim to give the admin full control on when MySQL is running.
|
||||
Issues to be faced here:
|
||||
OLD:
|
||||
1. Debconf asks whether MySQL should be started on boot so update-rc.d is
|
||||
only run if the answer has been yes. The admin is likely to forget
|
||||
this decision but update-rc.d checks for an existing line in
|
||||
/etc/runlevel.conf and leaves it intact.
|
||||
2. On initial install, if the answer is yes, the daemon has to be started.
|
||||
3. On upgrades it should only be started if it was already running, everything
|
||||
else is confusing. Especiall relying on an debconf decision made month ago
|
||||
is considered suboptimal. See bug #274264
|
||||
Implementation so far:
|
||||
prerm (called on upgrade before stopping the server):
|
||||
check for a running server and set flag if necessary
|
||||
preinst (called on initial install and before unpacking when upgrading):
|
||||
check for the debconf variable and set flag if necessary
|
||||
postinst (called on initial install and after each upgrade after unpacking):
|
||||
call update-rc.d if debconf says yes
|
||||
call invoce-rc.d if the flag has been set
|
||||
Problems remaining:
|
||||
dpkg-reconfigure and setting mysql start on boot to yes did not start mysql
|
||||
(ok "start on boot" literally does not mean "start now" so that might have been ok)
|
||||
NEW:
|
||||
1. --- no debconf anymore for the sake of simplicity. We have runlevel.conf,
|
||||
the admin should use it
|
||||
2. On initial install the server is started.
|
||||
3. On upgrades the server is started exactly if it was running before so the
|
||||
runlevel configuration is irrelevant. It will be preserved by the mean of
|
||||
update-rc.d's builtin check.
|
||||
Implementation:
|
||||
prerm (called on upgrade before stopping the server):
|
||||
check for a running server and set flag if necessary
|
||||
preinst (called on initial install and before unpacking when upgrading):
|
||||
check for $1 beeing (initial) "install" and set flag
|
||||
postinst (called on initial install and after each upgrade after unpacking):
|
||||
call update-rc.d
|
||||
call invoce-rc.d if the flag has been set
|
134
debian/additions/my.cnf
vendored
Normal file
134
debian/additions/my.cnf
vendored
Normal file
@ -0,0 +1,134 @@
|
||||
#
|
||||
# The MySQL database server configuration file.
|
||||
#
|
||||
# You can copy this to one of:
|
||||
# - "/etc/mysql/my.cnf" to set global options,
|
||||
# - "~/.my.cnf" to set user-specific options.
|
||||
#
|
||||
# One can use all long options that the program supports.
|
||||
# Run program with --help to get a list of available options and with
|
||||
# --print-defaults to see which it would actually understand and use.
|
||||
#
|
||||
# For explanations see
|
||||
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
|
||||
|
||||
# This will be passed to all mysql clients
|
||||
# It has been reported that passwords should be enclosed with ticks/quotes
|
||||
# escpecially if they contain "#" chars...
|
||||
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
|
||||
[client]
|
||||
port = 3306
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
|
||||
# Here is entries for some specific programs
|
||||
# The following values assume you have at least 32M ram
|
||||
|
||||
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
|
||||
[mysqld_safe]
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
nice = 0
|
||||
|
||||
[mysqld]
|
||||
#
|
||||
# * Basic Settings
|
||||
#
|
||||
user = mysql
|
||||
pid-file = /var/run/mysqld/mysqld.pid
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
port = 3306
|
||||
basedir = /usr
|
||||
datadir = /var/lib/mysql
|
||||
tmpdir = /tmp
|
||||
language = /usr/share/mysql/english
|
||||
skip-external-locking
|
||||
#
|
||||
# Instead of skip-networking the default is now to listen only on
|
||||
# localhost which is more compatible and is not less secure.
|
||||
bind-address = 127.0.0.1
|
||||
#
|
||||
# * Fine Tuning
|
||||
#
|
||||
key_buffer = 16M
|
||||
max_allowed_packet = 16M
|
||||
thread_stack = 128K
|
||||
thread_cache_size = 8
|
||||
#
|
||||
# * Query Cache Configuration
|
||||
#
|
||||
query_cache_limit = 1048576
|
||||
query_cache_size = 16777216
|
||||
query_cache_type = 1
|
||||
#
|
||||
# * Logging and Replication
|
||||
#
|
||||
# Both location gets rotated by the cronjob.
|
||||
# Be aware that this log type is a performance killer.
|
||||
#log = /var/log/mysql/mysql.log
|
||||
#
|
||||
# Error logging goes to syslog. This is a Debian improvement :)
|
||||
#
|
||||
# Here you can see queries with especially long duration
|
||||
#log_slow_queries = /var/log/mysql/mysql-slow.log
|
||||
#
|
||||
# The following can be used as easy to replay backup logs or for replication.
|
||||
#server-id = 1
|
||||
log_bin = /var/log/mysql/mysql-bin.log
|
||||
# WARNING: Using expire_logs_days without bin_log crashes the server! See README.Debian!
|
||||
expire_logs_days = 10
|
||||
max_binlog_size = 100M
|
||||
#binlog_do_db = include_database_name
|
||||
#binlog_ignore_db = include_database_name
|
||||
#
|
||||
# * BerkeleyDB
|
||||
#
|
||||
# Using BerkeleyDB is now discouraged as its support will cease in 5.1.12.
|
||||
skip-bdb
|
||||
#
|
||||
# * InnoDB
|
||||
#
|
||||
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
|
||||
# Read the manual for more InnoDB related options. There are many!
|
||||
# You might want to disable InnoDB to shrink the mysqld process by circa 100MB.
|
||||
#skip-innodb
|
||||
#
|
||||
# * Security Features
|
||||
#
|
||||
# Read the manual, too, if you want chroot!
|
||||
# chroot = /var/lib/mysql/
|
||||
#
|
||||
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
|
||||
#
|
||||
# ssl-ca=/etc/mysql/cacert.pem
|
||||
# ssl-cert=/etc/mysql/server-cert.pem
|
||||
# ssl-key=/etc/mysql/server-key.pem
|
||||
|
||||
|
||||
|
||||
[mysqldump]
|
||||
quick
|
||||
quote-names
|
||||
max_allowed_packet = 16M
|
||||
|
||||
[mysql]
|
||||
#no-auto-rehash # faster start of mysql but no tab completition
|
||||
|
||||
[isamchk]
|
||||
key_buffer = 16M
|
||||
|
||||
#
|
||||
# * NDB Cluster
|
||||
#
|
||||
# See /usr/share/doc/mysql-server-*/README.Debian for more information.
|
||||
#
|
||||
# The following configuration is read by the NDB Data Nodes (ndbd processes)
|
||||
# not from the NDB Management Nodes (ndb_mgmd processes).
|
||||
#
|
||||
# [MYSQL_CLUSTER]
|
||||
# ndb-connectstring=127.0.0.1
|
||||
|
||||
|
||||
#
|
||||
# * IMPORTANT: Additional settings that can override those from this file!
|
||||
#
|
||||
!includedir /etc/mysql/conf.d/
|
||||
|
2
debian/additions/mysql-server.lintian-overrides
vendored
Normal file
2
debian/additions/mysql-server.lintian-overrides
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
W: mysql-dfsg source: maintainer-script-lacks-debhelper-token debian/mysql-server.postinst
|
||||
W: mysql-server: possible-bashism-in-maintainer-script postinst:68 'p{("a".."z","A".."Z",0..9)[int(rand(62))]}'
|
35
debian/additions/ndb_mgmd.cnf
vendored
Normal file
35
debian/additions/ndb_mgmd.cnf
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
[NDBD DEFAULT]
|
||||
NoOfReplicas=2
|
||||
DataMemory=10MB
|
||||
IndexMemory=25MB
|
||||
MaxNoOfTables=256
|
||||
MaxNoOfOrderedIndexes=256
|
||||
MaxNoOfUniqueHashIndexes=128
|
||||
|
||||
[MYSQLD DEFAULT]
|
||||
|
||||
[NDB_MGMD DEFAULT]
|
||||
|
||||
[TCP DEFAULT]
|
||||
|
||||
[NDB_MGMD]
|
||||
Id=1 # the NDB Management Node (this one)
|
||||
HostName=127.0.0.1
|
||||
|
||||
[NDBD]
|
||||
Id=2 # the first NDB Data Node
|
||||
HostName=127.0.0.1
|
||||
DataDir= /var/lib/mysql-cluster
|
||||
|
||||
[NDBD]
|
||||
Id=3 # the second NDB Data Node
|
||||
HostName=127.0.0.1
|
||||
DataDir=/var/lib/mysql-cluster
|
||||
|
||||
[MYSQLD]
|
||||
Id=4 # the first SQL node
|
||||
HostName=127.0.0.1
|
||||
|
||||
# [MYSQLD]
|
||||
# Id=5 # the second SQL node
|
||||
# HostName=127.0.0.10
|
3281
debian/changelog
vendored
Normal file
3281
debian/changelog
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
debian/compat
vendored
Normal file
1
debian/compat
vendored
Normal file
@ -0,0 +1 @@
|
||||
4
|
353
debian/control.in
vendored
Normal file
353
debian/control.in
vendored
Normal file
@ -0,0 +1,353 @@
|
||||
Source: mysql-@MYSQL_BRANDED_BASE_VERSION@
|
||||
Section: misc
|
||||
Priority: optional
|
||||
Maintainer: Monty Taylor <mtaylor@mysql.com>
|
||||
Uploaders: Mads Martin Joergensen <mads@mysql.com>, MySQL Build Team <build-private@mysql.com>
|
||||
Build-Depends: libtool (>= 1.4.2-7), g++ (>= 4:3.3.5-3), procps | hurd, debhelper (>= 4.1.16), file (>= 3.28-1), libncurses5-dev (>= 5.0-6), perl (>= 5.6.0), libwrap0-dev (>= 7.6-8.3), zlib1g-dev (>= 1:1.1.3-5), libreadline5-dev | libreadline-dev, psmisc, po-debconf, chrpath, automake1.8, doxygen, gs, dpatch, gawk, bison
|
||||
Standards-Version: 3.7.2
|
||||
|
||||
Package: libmysqlclient@SHARED_LIB_MAJOR_VERSION@off
|
||||
Section: libs
|
||||
Architecture: any
|
||||
Depends: mysql-common (>= ${Source-Version}), ${shlibs:Depends}
|
||||
Description: mysql database client library
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
and robust SQL (Structured Query Language) database server. MySQL Server
|
||||
is intended for mission-critical, heavy-load production systems as well
|
||||
as for embedding into mass-deployed software. MySQL is a trademark of
|
||||
MySQL AB.
|
||||
.
|
||||
The MySQL software has Dual Licensing, which means you can use the MySQL
|
||||
software free of charge under the GNU General Public License
|
||||
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
|
||||
licenses from MySQL AB if you do not wish to be bound by the terms of
|
||||
the GPL. See the chapter "Licensing and Support" in the manual for
|
||||
further info.
|
||||
.
|
||||
The MySQL web site (http://www.mysql.com/) provides the latest
|
||||
news and information about the MySQL software. Also please see the
|
||||
documentation and the manual for more information.
|
||||
.
|
||||
This package contains the shared libraries (*.so*) which certain
|
||||
languages and applications need to dynamically load and use MySQL.
|
||||
|
||||
Package: libmysqlclient@SHARED_LIB_MAJOR_VERSION@-dev
|
||||
Architecture: any
|
||||
Section: libdevel
|
||||
Depends: libmysqlclient@SHARED_LIB_MAJOR_VERSION@ (>= ${Source-Version}), zlib1g-dev, ${shlibs:Depends}
|
||||
Conflicts: libmysqlclient14-dev, libmysqlclient12-dev, libmysqlclient10-dev
|
||||
Provides: libmysqlclient-dev
|
||||
Description: mysql database development files
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
and robust SQL (Structured Query Language) database server. MySQL Server
|
||||
is intended for mission-critical, heavy-load production systems as well
|
||||
as for embedding into mass-deployed software. MySQL is a trademark of
|
||||
MySQL AB.
|
||||
.
|
||||
The MySQL software has Dual Licensing, which means you can use the MySQL
|
||||
software free of charge under the GNU General Public License
|
||||
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
|
||||
licenses from MySQL AB if you do not wish to be bound by the terms of
|
||||
the GPL. See the chapter "Licensing and Support" in the manual for
|
||||
further info.
|
||||
.
|
||||
The MySQL web site (http://www.mysql.com/) provides the latest
|
||||
news and information about the MySQL software. Also please see the
|
||||
documentation and the manual for more information.
|
||||
.
|
||||
This package contains the development header files and libraries
|
||||
necessary to develop MySQL client applications.
|
||||
|
||||
Package: libndbclient@NDB_SHARED_LIB_MAJOR_VERSION@
|
||||
Section: libs
|
||||
Architecture: any
|
||||
Depends: mysql-common (>= ${Source-Version}), libmysqlclient@SHARED_LIB_MAJOR_VERSION@, ${shlibs:Depends}
|
||||
Description: mysql cluster NdbApi library
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
and robust SQL (Structured Query Language) database server. MySQL Server
|
||||
is intended for mission-critical, heavy-load production systems as well
|
||||
as for embedding into mass-deployed software. MySQL is a trademark of
|
||||
MySQL AB.
|
||||
.
|
||||
The MySQL software has Dual Licensing, which means you can use the MySQL
|
||||
software free of charge under the GNU General Public License
|
||||
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
|
||||
licenses from MySQL AB if you do not wish to be bound by the terms of
|
||||
the GPL. See the chapter "Licensing and Support" in the manual for
|
||||
further info.
|
||||
.
|
||||
The MySQL web site (http://www.mysql.com/) provides the latest
|
||||
news and information about the MySQL software. Also please see the
|
||||
documentation and the manual for more information.
|
||||
.
|
||||
This package contains the shared libraries (*.so*) which certain
|
||||
languages and applications need to dynamically load and use MySQL NdbApi.
|
||||
|
||||
Package: libndbclient@NDB_SHARED_LIB_MAJOR_VERSION@-dev
|
||||
Architecture: any
|
||||
Section: libdevel
|
||||
Depends: libndbclient@NDB_SHARED_LIB_MAJOR_VERSION@ (>= ${Source-Version}), zlib1g-dev, ${shlibs:Depends}
|
||||
Provides: libndbclient-dev
|
||||
Description: mysql cluster NdbApi development files
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
and robust SQL (Structured Query Language) database server. MySQL Server
|
||||
is intended for mission-critical, heavy-load production systems as well
|
||||
as for embedding into mass-deployed software. MySQL is a trademark of
|
||||
MySQL AB.
|
||||
.
|
||||
The MySQL software has Dual Licensing, which means you can use the MySQL
|
||||
software free of charge under the GNU General Public License
|
||||
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
|
||||
licenses from MySQL AB if you do not wish to be bound by the terms of
|
||||
the GPL. See the chapter "Licensing and Support" in the manual for
|
||||
further info.
|
||||
.
|
||||
The MySQL web site (http://www.mysql.com/) provides the latest
|
||||
news and information about the MySQL software. Also please see the
|
||||
documentation and the manual for more information.
|
||||
.
|
||||
This package contains the development header files and libraries
|
||||
necessary to develop NdbApi client applications.
|
||||
|
||||
Package: mysql-common
|
||||
Section: misc
|
||||
Architecture: all
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Conflicts: mysql-common-@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@
|
||||
Provides: mysql-common-@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@
|
||||
Replaces: mysql-common-@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@
|
||||
Description: mysql database common files (e.g. /etc/mysql/my.cnf)
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
and robust SQL (Structured Query Language) database server. MySQL Server
|
||||
is intended for mission-critical, heavy-load production systems as well
|
||||
as for embedding into mass-deployed software. MySQL is a trademark of
|
||||
MySQL AB.
|
||||
.
|
||||
The MySQL software has Dual Licensing, which means you can use the MySQL
|
||||
software free of charge under the GNU General Public License
|
||||
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
|
||||
licenses from MySQL AB if you do not wish to be bound by the terms of
|
||||
the GPL. See the chapter "Licensing and Support" in the manual for
|
||||
further info.
|
||||
.
|
||||
The MySQL web site (http://www.mysql.com/) provides the latest
|
||||
news and information about the MySQL software. Also please see the
|
||||
documentation and the manual for more information.
|
||||
.
|
||||
This package includes files needed by all versions of the client library.
|
||||
|
||||
Package: mysql-client-@MYSQL_BRANDED_BASE_VERSION@
|
||||
Architecture: any
|
||||
Depends: debianutils (>=1.6), libdbi-perl, libdbd-mysql-perl (>= 1.2202), mysql-common (>= ${Source-Version}), libmysqlclient@SHARED_LIB_MAJOR_VERSION@ (>= ${Source-Version}), ${perl:Depends}, ${shlibs:Depends}, ${misc:Depends}
|
||||
Provides: virtual-mysql-client, mysql-client, mysql-client-@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@
|
||||
Conflicts: mysql-client (<< ${Source-Version}), mysql-client-@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@
|
||||
Replaces: mysql-client (<< ${Source-Version}), mysql-server, mysql-client-@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@
|
||||
Description: mysql database client binaries
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
and robust SQL (Structured Query Language) database server. MySQL Server
|
||||
is intended for mission-critical, heavy-load production systems as well
|
||||
as for embedding into mass-deployed software. MySQL is a trademark of
|
||||
MySQL AB.
|
||||
.
|
||||
The MySQL software has Dual Licensing, which means you can use the MySQL
|
||||
software free of charge under the GNU General Public License
|
||||
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
|
||||
licenses from MySQL AB if you do not wish to be bound by the terms of
|
||||
the GPL. See the chapter "Licensing and Support" in the manual for
|
||||
further info.
|
||||
.
|
||||
The MySQL web site (http://www.mysql.com/) provides the latest
|
||||
news and information about the MySQL software. Also please see the
|
||||
documentation and the manual for more information.
|
||||
.
|
||||
This package contains the standard MySQL clients and administration tools.
|
||||
|
||||
Package: mysql-server-@MYSQL_BRANDED_BASE_VERSION@
|
||||
Architecture: any
|
||||
Suggests: tinyca
|
||||
Recommends: mailx
|
||||
Pre-Depends: mysql-common (>= ${Source-Version}), adduser (>= 3.40)
|
||||
Depends: mysql-client-@MYSQL_BRANDED_BASE_VERSION@ (>= ${Source-Version}), libdbi-perl, perl (>= 5.6), ${shlibs:Depends}, ${misc:Depends}, psmisc, passwd, lsb-base (>= 3.0-10)
|
||||
Conflicts: mysql-server (<< ${Source-Version}), mysql-server-@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@ (<< 5.0.26-3)
|
||||
Provides: mysql-server, virtual-mysql-server, mysql-server-@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@
|
||||
Replaces: mysql-server (<< ${Source-Version}), mysql-server-@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@
|
||||
Description: mysql database server binaries
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
and robust SQL (Structured Query Language) database server. MySQL Server
|
||||
is intended for mission-critical, heavy-load production systems as well
|
||||
as for embedding into mass-deployed software. MySQL is a trademark of
|
||||
MySQL AB.
|
||||
.
|
||||
The MySQL software has Dual Licensing, which means you can use the MySQL
|
||||
software free of charge under the GNU General Public License
|
||||
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
|
||||
licenses from MySQL AB if you do not wish to be bound by the terms of
|
||||
the GPL. See the chapter "Licensing and Support" in the manual for
|
||||
further info.
|
||||
.
|
||||
The MySQL web site (http://www.mysql.com/) provides the latest
|
||||
news and information about the MySQL software. Also please see the
|
||||
documentation and the manual for more information.
|
||||
.
|
||||
This package includes the MySQL server binary (incl. InnoDB) as well
|
||||
as related utilities to run and administrate a MySQL server.
|
||||
.
|
||||
If you want to access and work with the database, you have to install
|
||||
package mysql-client-@MYSQL_BRANDED_BASE_VERSION@ as well!
|
||||
|
||||
Package: mysql-test-@MYSQL_BRANDED_BASE_VERSION@
|
||||
Architecture: any
|
||||
Pre-Depends: mysql-common (>= ${Source-Version})
|
||||
Depends: mysql-client-@MYSQL_BRANDED_BASE_VERSION@ (>= ${Source-Version}), libdbd-mysql-perl, perl (>= 5.6), ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: MySQL - test suite
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
and robust SQL (Structured Query Language) database server. MySQL Server
|
||||
is intended for mission-critical, heavy-load production systems as well
|
||||
as for embedding into mass-deployed software. MySQL is a trademark of
|
||||
MySQL AB.
|
||||
.
|
||||
The MySQL software has Dual Licensing, which means you can use the MySQL
|
||||
software free of charge under the GNU General Public License
|
||||
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
|
||||
licenses from MySQL AB if you do not wish to be bound by the terms of
|
||||
the GPL. See the chapter "Licensing and Support" in the manual for
|
||||
further info.
|
||||
.
|
||||
The MySQL web site (http://www.mysql.com/) provides the latest
|
||||
news and information about the MySQL software. Also please see the
|
||||
documentation and the manual for more information.
|
||||
.
|
||||
This package contains the MySQL regression test suite.
|
||||
|
||||
Package: mysql-storage-@MYSQL_BRANDED_BASE_VERSION@
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: MySQL - ndbcluster storage engine
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
and robust SQL (Structured Query Language) database server. MySQL Server
|
||||
is intended for mission-critical, heavy-load production systems as well
|
||||
as for embedding into mass-deployed software. MySQL is a trademark of
|
||||
MySQL AB.
|
||||
.
|
||||
The MySQL software has Dual Licensing, which means you can use the MySQL
|
||||
software free of charge under the GNU General Public License
|
||||
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
|
||||
licenses from MySQL AB if you do not wish to be bound by the terms of
|
||||
the GPL. See the chapter "Licensing and Support" in the manual for
|
||||
further info.
|
||||
.
|
||||
The MySQL web site (http://www.mysql.com/) provides the latest
|
||||
news and information about the MySQL software. Also please see the
|
||||
documentation and the manual for more information.
|
||||
.
|
||||
This package contains the ndbcluster storage engine.
|
||||
It is necessary to have this package installed on all
|
||||
computers that should store ndbcluster table data.
|
||||
Note that this storage engine can only be used in conjunction
|
||||
with the MySQL Max server.
|
||||
|
||||
Package: mysql-management-@MYSQL_BRANDED_BASE_VERSION@
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: MySQL - ndbcluster storage engine management
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
and robust SQL (Structured Query Language) database server. MySQL Server
|
||||
is intended for mission-critical, heavy-load production systems as well
|
||||
as for embedding into mass-deployed software. MySQL is a trademark of
|
||||
MySQL AB.
|
||||
.
|
||||
The MySQL software has Dual Licensing, which means you can use the MySQL
|
||||
software free of charge under the GNU General Public License
|
||||
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
|
||||
licenses from MySQL AB if you do not wish to be bound by the terms of
|
||||
the GPL. See the chapter "Licensing and Support" in the manual for
|
||||
further info.
|
||||
.
|
||||
The MySQL web site (http://www.mysql.com/) provides the latest
|
||||
news and information about the MySQL software. Also please see the
|
||||
documentation and the manual for more information.
|
||||
.
|
||||
This package contains ndbcluster storage engine management.
|
||||
It is necessary to have this package installed on at least
|
||||
one computer in the cluster.
|
||||
|
||||
Package: mysql-tools-@MYSQL_BRANDED_BASE_VERSION@
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: MySQL - ndbcluster storage engine basic tools
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
and robust SQL (Structured Query Language) database server. MySQL Server
|
||||
is intended for mission-critical, heavy-load production systems as well
|
||||
as for embedding into mass-deployed software. MySQL is a trademark of
|
||||
MySQL AB.
|
||||
.
|
||||
The MySQL software has Dual Licensing, which means you can use the MySQL
|
||||
software free of charge under the GNU General Public License
|
||||
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
|
||||
licenses from MySQL AB if you do not wish to be bound by the terms of
|
||||
the GPL. See the chapter "Licensing and Support" in the manual for
|
||||
further info.
|
||||
.
|
||||
The MySQL web site (http://www.mysql.com/) provides the latest
|
||||
news and information about the MySQL software. Also please see the
|
||||
documentation and the manual for more information.
|
||||
.
|
||||
This package contains ndbcluster storage engine basic tools.
|
||||
|
||||
Package: mysql-extra-@MYSQL_BRANDED_BASE_VERSION@
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: MySQL - ndbcluster storage engine extra tools
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
and robust SQL (Structured Query Language) database server. MySQL Server
|
||||
is intended for mission-critical, heavy-load production systems as well
|
||||
as for embedding into mass-deployed software. MySQL is a trademark of
|
||||
MySQL AB.
|
||||
.
|
||||
The MySQL software has Dual Licensing, which means you can use the MySQL
|
||||
software free of charge under the GNU General Public License
|
||||
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
|
||||
licenses from MySQL AB if you do not wish to be bound by the terms of
|
||||
the GPL. See the chapter "Licensing and Support" in the manual for
|
||||
further info.
|
||||
.
|
||||
The MySQL web site (http://www.mysql.com/) provides the latest
|
||||
news and information about the MySQL software. Also please see the
|
||||
documentation and the manual for more information.
|
||||
.
|
||||
This package contains some extra ndbcluster storage engine tools for
|
||||
the advanced user.
|
||||
.
|
||||
They should be used with caution
|
||||
|
||||
|
||||
Package: mysql-server-@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@
|
||||
Architecture: any
|
||||
Section: oldlibs
|
||||
Priority: extra
|
||||
Depends: mysql-server-@MYSQL_BRANDED_BASE_VERSION@
|
||||
Description: mysql database server (transitional package)
|
||||
MySQL is a fast, stable and true multi-user, multi-threaded SQL database
|
||||
server. SQL (Structured Query Language) is the most popular database query
|
||||
language in the world. The main goals of MySQL are speed, robustness and
|
||||
ease of use.
|
||||
.
|
||||
This is an empty transitional package and can safely be removed.
|
||||
|
||||
Package: mysql-server
|
||||
Architecture: all
|
||||
Depends: mysql-server-@MYSQL_BRANDED_BASE_VERSION@
|
||||
Description: mysql database server (meta package depending on the latest version)
|
||||
This is an empty package that depends on the current "best" version of
|
||||
mysql-server (currently mysql-server-@MYSQL_BRANDED_BASE_VERSION@), as determined by the MySQL
|
||||
maintainers. Install this package if in doubt about which MySQL version
|
||||
you want, as this is the one we consider to be in the best shape.
|
||||
|
||||
Package: mysql-client
|
||||
Architecture: all
|
||||
Depends: mysql-client-@MYSQL_BRANDED_BASE_VERSION@
|
||||
Description: mysql database client (meta package depending on the latest version)
|
||||
This is an empty package that depends on the current "best" version of
|
||||
mysql-client (currently mysql-client-@MYSQL_BRANDED_BASE_VERSION@), as determined by the MySQL
|
||||
maintainers. Install this package if in doubt about which MySQL version
|
||||
you want, as this is the one we consider to be in the best shape.
|
139
debian/copyright
vendored
Normal file
139
debian/copyright
vendored
Normal file
@ -0,0 +1,139 @@
|
||||
The Debian package of MySQL was first debianzed on 1997-04-12 by Christian
|
||||
Schwarz <schwarz@debian.org> and ist maintained since 1999-04-20 by
|
||||
Christian Hammers <ch@debian.org>.
|
||||
|
||||
It can be downloaded from http://www.mysql.com/
|
||||
|
||||
Copyright:
|
||||
|
||||
According to the file "COPYING" all parts of this package are licenced
|
||||
under the terms of the GNU GPL Version 2 of which a copy is available
|
||||
in /usr/share/common-licenses.
|
||||
|
||||
To allow free software with other licences than the GPL to link against the
|
||||
shared library, special terms for "derived works" are defined in the file
|
||||
"EXCEPTIONS-CLIENT" which is quoted below.
|
||||
|
||||
More information can be found on http://www.mysql.com/company/legal/licensing/
|
||||
|
||||
The manual had to be removed as it is not free in the sense of the
|
||||
Debian Free Software Guidelines (DFSG).
|
||||
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
|
||||
Appendix I MySQL FLOSS License Exception
|
||||
****************************************
|
||||
|
||||
Version 0.3, 10 February 2005
|
||||
|
||||
The MySQL AB Exception for Free/Libre and Open Source Software-only
|
||||
Applications Using MySQL Client Libraries (the "FLOSS Exception").
|
||||
|
||||
Exception Intent
|
||||
================
|
||||
|
||||
We want specified Free/Libre and Open Source Software ("FLOSS")
|
||||
applications to be able to use specified GPL-licensed MySQL client
|
||||
libraries (the "Program") despite the fact that not all FLOSS licenses
|
||||
are compatible with version 2 of the GNU General Public License (the
|
||||
"GPL").
|
||||
|
||||
Legal Terms and Conditions
|
||||
==========================
|
||||
|
||||
As a special exception to the terms and conditions of version 2.0 of the
|
||||
GPL:
|
||||
|
||||
1. You are free to distribute a Derivative Work that is formed
|
||||
entirely from the Program and one or more works (each, a "FLOSS
|
||||
Work") licensed under one or more of the licenses listed below in
|
||||
section 1, as long as:
|
||||
|
||||
a. You obey the GPL in all respects for the Program and the
|
||||
Derivative Work, except for identifiable sections of the
|
||||
Derivative Work which are not derived from the Program, and
|
||||
which can reasonably be considered independent and separate
|
||||
works in themselves,
|
||||
|
||||
b. all identifiable sections of the Derivative Work which are not
|
||||
derived from the Program, and which can reasonably be
|
||||
considered independent and separate works in themselves,
|
||||
|
||||
i
|
||||
are distributed subject to one of the FLOSS licenses
|
||||
listed below, and
|
||||
|
||||
ii
|
||||
the object code or executable form of those sections are
|
||||
accompanied by the complete corresponding
|
||||
machine-readable source code for those sections on the
|
||||
same medium and under the same FLOSS license as the
|
||||
corresponding object code or executable forms of those
|
||||
sections, and
|
||||
|
||||
c. any works which are aggregated with the Program or with a
|
||||
Derivative Work on a volume of a storage or distribution
|
||||
medium in accordance with the GPL, can reasonably be
|
||||
considered independent and separate works in themselves which
|
||||
are not derivatives of either the Program, a Derivative Work
|
||||
or a FLOSS Work.
|
||||
|
||||
If the above conditions are not met, then the Program may only be
|
||||
copied, modified, distributed or used under the terms and
|
||||
conditions of the GPL or another valid licensing option from MySQL
|
||||
AB.
|
||||
|
||||
2. FLOSS License List
|
||||
|
||||
*License name* *Version(s)/Copyright Date*
|
||||
Academic Free License 2.0
|
||||
Apache Software License 1.0/1.1/2.0
|
||||
Apple Public Source License 2.0
|
||||
Artistic license From Perl 5.8.0
|
||||
BSD license "July 22 1999"
|
||||
Common Public License 1.0
|
||||
GNU Library or "Lesser" General Public 2.0/2.1
|
||||
License (LGPL)
|
||||
Jabber Open Source License 1.0
|
||||
MIT license -
|
||||
Mozilla Public License (MPL) 1.0/1.1
|
||||
Open Software License 2.0
|
||||
OpenSSL license (with original SSLeay "2003" ("1998")
|
||||
license)
|
||||
PHP License 3.0
|
||||
Python license (CNRI Python License) -
|
||||
Python Software Foundation License 2.1.1
|
||||
Sleepycat License "1999"
|
||||
W3C License "2001"
|
||||
X11 License "2001"
|
||||
Zlib/libpng License -
|
||||
Zope Public License 2.0
|
||||
|
||||
Due to the many variants of some of the above licenses, we require
|
||||
that any version follow the 2003 version of the Free Software
|
||||
Foundation's Free Software Definition
|
||||
(`http://www.gnu.org/philosophy/free-sw.html') or version 1.9 of
|
||||
the Open Source Definition by the Open Source Initiative
|
||||
(`http://www.opensource.org/docs/definition.php').
|
||||
|
||||
3. Definitions
|
||||
|
||||
a. Terms used, but not defined, herein shall have the meaning
|
||||
provided in the GPL.
|
||||
|
||||
b. Derivative Work means a derivative work under copyright law.
|
||||
|
||||
4. Applicability This FLOSS Exception applies to all Programs that
|
||||
contain a notice placed by MySQL AB saying that the Program may be
|
||||
distributed under the terms of this FLOSS Exception. If you
|
||||
create or distribute a work which is a Derivative Work of both the
|
||||
Program and any other work licensed under the GPL, then this FLOSS
|
||||
Exception is not available for that work; thus, you must remove
|
||||
the FLOSS Exception notice from that work and comply with the GPL
|
||||
in all respects, including by retaining all GPL notices. You may
|
||||
choose to redistribute a copy of the Program exclusively under the
|
||||
terms of the GPL by removing the FLOSS Exception notice from that
|
||||
copy of the Program, provided that the copy has never been
|
||||
modified by you or any third party.
|
||||
|
60
debian/copyright.more
vendored
Normal file
60
debian/copyright.more
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
#
|
||||
# Some random bits of interest.
|
||||
#
|
||||
|
||||
#
|
||||
# Arjen about OpenSSL
|
||||
#
|
||||
http://bugs.mysql.com/?id=6924
|
||||
Updated by: Arjen Lentz
|
||||
Date: 2005-11-05
|
||||
|
||||
Linking with the client library is covered by the FLOSS exception which
|
||||
includes OpenSSL now. So that's clean. Indeed, the OpenSSL is not
|
||||
compliant with the FSF free software guidelines, however it *is*
|
||||
compliant with the OSI guidelines. And that's good enough for us.
|
||||
Christian is correct in saying that the author of a GPL app that links
|
||||
with MySQL may find themselves in a licensing headache (or may not
|
||||
realize that OpenSSL is involved) but that is their responsibility.
|
||||
The MySQL client can be linked with a number of other licenses, it
|
||||
would not be feasible for MySQL to take over the responsibility for
|
||||
"the next level" of how combinations of licenses work out. There are
|
||||
too many possibilities, and combinations of more just 2 licenses.
|
||||
|
||||
|
||||
#
|
||||
# Steve Langasek about OpenSSL vs libmysqlclient
|
||||
#
|
||||
Subject: Bug#291945: eleventh-hour transition for mysql-using packages related to apache
|
||||
Date: Sat, 12 Feb 2005 00:39:58 -0800
|
||||
From: Steve Langasek <vorlon@debian.org>
|
||||
|
||||
> > > > that's great to hear! i'm cc'ing the relevant wishlist bug i have open
|
||||
> > > > against mysql-server. christian: any chance of getting an openssl enabled
|
||||
> > > > version of the mysql-client and mysql-server packages?
|
||||
|
||||
> > > Yes, I will re-enable openssl in the next upload.
|
||||
|
||||
> > Please make sure this does not introduce an openssl dependency to
|
||||
> > libmysqlclient itself; just because MySQL AB have granted a license
|
||||
> > exception for OpenSSL does not mean everyone who links to libmysqlclient
|
||||
> > has done so.
|
||||
|
||||
> > I know of at least one GPL-without-exception package that is now using
|
||||
> > libmysqlclient12 in Debian.
|
||||
|
||||
> Nice, so we should check that any linked GPL library directly (obviuolsy) or
|
||||
> indirectly (with N=1,2,3... levels of indirection) linked against
|
||||
> openssl adds the exception.
|
||||
|
||||
No, we should simply not be linking libmysqlclient against OpenSSL. The
|
||||
exemption was needed because there exists software that uses both
|
||||
libmysqlclient and libssl, but making libmysqlclient itself use libssl just
|
||||
because we now have the exemption will cause licensing problems for
|
||||
applications which currently do *not* depend on libssl.
|
||||
|
||||
> This is a great reason to move asap all possible programs to gnutls,
|
||||
> indeed.
|
||||
|
||||
There are plenty of reasons to move software to gnutls, but doing so is
|
||||
non-trivial.
|
14
debian/defs.mk.in
vendored
Normal file
14
debian/defs.mk.in
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
MYSQL_BUILD_OPTS=--with-comment='MySQL Server (custom)' --with-server-suffix='-custom'
|
||||
MYSQL_BUILD_CXXFLAGS=-DBIG_JOINS=1 -felide-constructors -fno-rtti -O2
|
||||
MYSQL_BUILD_CFLAGS=-DBIG_JOINS=1 -O2
|
||||
MYSQL_BUILD_CC=gcc
|
||||
MYSQL_BUILD_CXX=gcc
|
||||
# we re-write state into this file. MYSQL_BASE_VERSION might get a suffix added
|
||||
# by debian/rules which could result in a nasty loop. VER is there to hold the
|
||||
# original unadorned version from autoconf
|
||||
MYSQL_BASE_VERSION=@MYSQL_BASE_VERSION@
|
||||
MYSQL_PREVIOUS_BASE_VERSION=@MYSQL_PREVIOUS_BASE_VERSION@
|
||||
MYSQL_BRANDED_BASE_VERSION=@MYSQL_BRANDED_BASE_VERSION@
|
||||
MYSQL_BRANDED_PREVIOUS_BASE_VERSION=@MYSQL_BRANDED_PREVIOUS_BASE_VERSION@
|
||||
SHARED_LIB_MAJOR_VERSION=@SHARED_LIB_MAJOR_VERSION@
|
||||
NDB_SHARED_LIB_MAJOR_VERSION=@NDB_SHARED_LIB_MAJOR_VERSION@
|
4
debian/libmysqlclientSLIB-dev.README.Maintainer.in
vendored
Normal file
4
debian/libmysqlclientSLIB-dev.README.Maintainer.in
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
The examples directory includes files that might be needed by some
|
||||
developers:
|
||||
- header files not installed by default
|
||||
- the example file udf_example.cc
|
2
debian/libmysqlclientSLIB-dev.dirs.in
vendored
Normal file
2
debian/libmysqlclientSLIB-dev.dirs.in
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
usr/include/
|
||||
usr/lib/
|
1
debian/libmysqlclientSLIB-dev.docs.in
vendored
Normal file
1
debian/libmysqlclientSLIB-dev.docs.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
EXCEPTIONS-CLIENT
|
1
debian/libmysqlclientSLIB-dev.examples.in
vendored
Normal file
1
debian/libmysqlclientSLIB-dev.examples.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
sql/udf_example.c
|
6
debian/libmysqlclientSLIB-dev.files.in
vendored
Normal file
6
debian/libmysqlclientSLIB-dev.files.in
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
usr/bin/mysql_config
|
||||
usr/include/*
|
||||
usr/lib/libmysqlclient.a
|
||||
usr/lib/libmysqlclient.la
|
||||
usr/lib/mysql
|
||||
usr/share/man/man1/mysql_config.1
|
2
debian/libmysqlclientSLIB-dev.links.in
vendored
Normal file
2
debian/libmysqlclientSLIB-dev.links.in
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
usr/lib/libmysqlclient.so.15 usr/lib/libmysqlclient.so
|
||||
usr/lib/libmysqlclient_r.so.15 usr/lib/libmysqlclient_r.so
|
30
debian/libmysqlclientSLIBoff.README.Debian.in
vendored
Normal file
30
debian/libmysqlclientSLIBoff.README.Debian.in
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
* Crashs on systems with Cyrix or other old i486 CPUs
|
||||
=====================================================
|
||||
|
||||
As reported http://bugs.mysql.com/bug.php?id=21765 MySQL will segfault on very
|
||||
old CPUs that do not have support for the "cpuid" instruction.
|
||||
|
||||
|
||||
|
||||
* Self-build binaries that are linked against libmysqlclient15 MUST be rebuild!
|
||||
===============================================================================
|
||||
|
||||
This only affects binaries that are build on a Debian unstable/testing system
|
||||
before 2006-03-31 or version 5.0.19. "objdump -T myprogram | grep MYSQL_5.0"
|
||||
will give a couple of lines output in such a case.
|
||||
|
||||
Until now libmysqlclient.so.15 had versioned symbols provided by a Debian
|
||||
patch. Now MySQL finally decided to adopt this patch but sadly chosed a
|
||||
different symbol name.
|
||||
|
||||
Binaries linked against the old version of the library with my symbol name will
|
||||
not run with the new version with MySQL's symbol name ("version `MYSQL_5.0' not
|
||||
found"). The actual name /usr/lib/libmysqlclient.so.15 must stay because else
|
||||
binaries coming from systems other than Debian would never run on a Debian
|
||||
server.
|
||||
|
||||
So the Debian package had to be renamed from "libmysqlclient15" to
|
||||
"libmysqlclient15off" and do now conflict with their former version.
|
||||
|
||||
-- 2006-03-14, Christian Hammers <ch@debian.org>
|
||||
|
1
debian/libmysqlclientSLIBoff.dirs.in
vendored
Normal file
1
debian/libmysqlclientSLIBoff.dirs.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
usr/lib/
|
1
debian/libmysqlclientSLIBoff.docs.in
vendored
Normal file
1
debian/libmysqlclientSLIBoff.docs.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
EXCEPTIONS-CLIENT
|
1
debian/libmysqlclientSLIBoff.files.in
vendored
Normal file
1
debian/libmysqlclientSLIBoff.files.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
usr/lib/libmysqlclient*.so.*
|
12
debian/libmysqlclientSLIBoff.postinst.in
vendored
Normal file
12
debian/libmysqlclientSLIBoff.postinst.in
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
# dh_installdeb will replace this with shell code automatically
|
||||
# generated by other debhelper scripts.
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
||||
|
||||
# vim: ts=4
|
||||
|
||||
|
3
debian/libndbclientNLIB-dev.dirs.in
vendored
Normal file
3
debian/libndbclientNLIB-dev.dirs.in
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
usr/include/mysql/storage/ndb/
|
||||
usr/include/
|
||||
usr/lib/
|
3
debian/libndbclientNLIB-dev.files.in
vendored
Normal file
3
debian/libndbclientNLIB-dev.files.in
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
usr/include/mysql/storage/ndb/*
|
||||
usr/lib/libndbclient.a
|
||||
usr/lib/libndbclient.la
|
1
debian/libndbclientNLIB-dev.links.in
vendored
Normal file
1
debian/libndbclientNLIB-dev.links.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
usr/lib/libndbclient.so.4 usr/lib/libndbclient.so
|
30
debian/libndbclientNLIB.README.Debian.in
vendored
Normal file
30
debian/libndbclientNLIB.README.Debian.in
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
* Crashs on systems with Cyrix or other old i486 CPUs
|
||||
=====================================================
|
||||
|
||||
As reported http://bugs.mysql.com/bug.php?id=21765 MySQL will segfault on very
|
||||
old CPUs that do not have support for the "cpuid" instruction.
|
||||
|
||||
|
||||
|
||||
* Self-build binaries that are linked against libmysqlclient15 MUST be rebuild!
|
||||
===============================================================================
|
||||
|
||||
This only affects binaries that are build on a Debian unstable/testing system
|
||||
before 2006-03-31 or version 5.0.19. "objdump -T myprogram | grep MYSQL_5.0"
|
||||
will give a couple of lines output in such a case.
|
||||
|
||||
Until now libmysqlclient.so.15 had versioned symbols provided by a Debian
|
||||
patch. Now MySQL finally decided to adopt this patch but sadly chosed a
|
||||
different symbol name.
|
||||
|
||||
Binaries linked against the old version of the library with my symbol name will
|
||||
not run with the new version with MySQL's symbol name ("version `MYSQL_5.0' not
|
||||
found"). The actual name /usr/lib/libmysqlclient.so.15 must stay because else
|
||||
binaries coming from systems other than Debian would never run on a Debian
|
||||
server.
|
||||
|
||||
So the Debian package had to be renamed from "libmysqlclient15" to
|
||||
"libmysqlclient15off" and do now conflict with their former version.
|
||||
|
||||
-- 2006-03-14, Christian Hammers <ch@debian.org>
|
||||
|
1
debian/libndbclientNLIB.dirs.in
vendored
Normal file
1
debian/libndbclientNLIB.dirs.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
usr/lib/
|
1
debian/libndbclientNLIB.files.in
vendored
Normal file
1
debian/libndbclientNLIB.files.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
usr/lib/libndbclient*.so.*
|
12
debian/libndbclientNLIB.postinst.in
vendored
Normal file
12
debian/libndbclientNLIB.postinst.in
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
# dh_installdeb will replace this with shell code automatically
|
||||
# generated by other debhelper scripts.
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
||||
|
||||
# vim: ts=4
|
||||
|
||||
|
6
debian/mysql-client-BASE.NEWS.in
vendored
Normal file
6
debian/mysql-client-BASE.NEWS.in
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
mysql-dfsg-5.0 (5.0.24a-2) unstable; urgency=low
|
||||
|
||||
This package now includes "mysqlreport" from hackmysql.com which generates
|
||||
a friendly report on the performance relevant variables from SHOW STATUS.
|
||||
|
||||
-- Christian Hammers <ch@debian.org> Sun, 3 Sep 2006 16:26:41 +0200
|
4
debian/mysql-client-BASE.README.Debian.in
vendored
Normal file
4
debian/mysql-client-BASE.README.Debian.in
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
FAQ:
|
||||
|
||||
Q: My <tab> completition is gone, why?
|
||||
A: You have "no-auto-rehash" in the "[mysql]" section of /etc/mysql/my.cnf!
|
2
debian/mysql-client-BASE.dirs.in
vendored
Normal file
2
debian/mysql-client-BASE.dirs.in
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
usr/bin/
|
||||
usr/share/man/man1/
|
2
debian/mysql-client-BASE.docs.in
vendored
Normal file
2
debian/mysql-client-BASE.docs.in
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
README
|
||||
EXCEPTIONS-CLIENT
|
17
debian/mysql-client-BASE.files.in
vendored
Normal file
17
debian/mysql-client-BASE.files.in
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
usr/bin/msql2mysql
|
||||
usr/bin/mysql
|
||||
usr/bin/mysql_find_rows
|
||||
usr/bin/mysql_waitpid
|
||||
usr/bin/mysqlaccess
|
||||
usr/bin/mysqladmin
|
||||
usr/bin/mysqlbinlog
|
||||
usr/bin/mysqlcheck
|
||||
usr/bin/mysqldump
|
||||
usr/bin/mysqlimport
|
||||
usr/bin/mysqlshow
|
||||
usr/share/lintian/overrides/mysql-client-@MYSQL_BRANDED_BASE_VERSION@
|
||||
usr/share/man/man1/mysql.1
|
||||
usr/share/man/man1/mysqlaccess.1
|
||||
usr/share/man/man1/mysqladmin.1
|
||||
usr/share/man/man1/mysqldump.1
|
||||
usr/share/man/man1/mysqlshow.1
|
1
debian/mysql-client-BASE.lintian-overrides.in
vendored
Normal file
1
debian/mysql-client-BASE.lintian-overrides.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
mysql-client-@MYSQL_BRANDED_BASE_VERSION@: package-has-a-duplicate-relation
|
20
debian/mysql-common.README.Debian.in
vendored
Normal file
20
debian/mysql-common.README.Debian.in
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
[passwords]
|
||||
If you change the password of the root user (which is strongly recommended)
|
||||
you have to create a personal mysql config file in order to let cron run
|
||||
the /etc/cron.daily script without asking you for the password.
|
||||
The /root/.my.cnf file should be chmod 0600 (-rw------- root root .my.cnf)
|
||||
and have the following content:
|
||||
[mysqladmin]
|
||||
user = root
|
||||
password = <secret>
|
||||
|
||||
[more than one process]
|
||||
Note that the shutdown script cannot use the pid number stored in
|
||||
/var/run, since it is for the first mysqld thread, but we need to kill
|
||||
the most recent thread to shutdown the server. The upstream developers
|
||||
are aware of this bug. When maintaining your database, you should use
|
||||
mysqladmin with your password to shutdown and reload the server rather
|
||||
than /etc/init.d/mysql.
|
||||
|
||||
Scott Hanson and Christian Hammers
|
||||
<shanson@debian.org> <ch@debian.org>
|
1
debian/mysql-common.dirs.in
vendored
Normal file
1
debian/mysql-common.dirs.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
etc/mysql/conf.d/
|
2
debian/mysql-common.files.in
vendored
Normal file
2
debian/mysql-common.files.in
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
etc/mysql/my.cnf
|
||||
usr/share/mysql-common/internal-use-only
|
7
debian/mysql-common.postrm.in
vendored
Normal file
7
debian/mysql-common.postrm.in
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$1" = "purge" ]; then
|
||||
rmdir /etc/mysql 2>/dev/null || true
|
||||
fi
|
||||
|
||||
#DEBHELPER#
|
215
debian/mysql-common.preinst.in
vendored
Normal file
215
debian/mysql-common.preinst.in
vendored
Normal file
@ -0,0 +1,215 @@
|
||||
#!/bin/bash -e
|
||||
#
|
||||
# summary of how this script can be called:
|
||||
# * <new-preinst> install
|
||||
# * <new-preinst> install <old-version>
|
||||
# * <new-preinst> upgrade <old-version>
|
||||
# * <old-preinst> abort-upgrade <new-version>
|
||||
#
|
||||
|
||||
if [ -n "$DEBIAN_SCRIPT_DEBUG" ]; then set -v -x; DEBIAN_SCRIPT_TRACE=1; fi
|
||||
${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*" 1>&2 }
|
||||
|
||||
export PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin
|
||||
|
||||
# Try to stop the server in a sane way. If it does not success let the admin
|
||||
# do it himself. No database directories should be removed while the server
|
||||
# is running! Another mysqld in e.g. a different chroot is fine for us.
|
||||
stop_server() {
|
||||
if [ ! -x /etc/init.d/mysql ]; then return; fi
|
||||
|
||||
set +e
|
||||
if [ -x /usr/sbin/invoke-rc.d ]; then
|
||||
cmd="invoke-rc.d mysql stop"
|
||||
else
|
||||
cmd="/etc/init.d/mysql stop"
|
||||
fi
|
||||
$cmd
|
||||
errno=$?
|
||||
set -e
|
||||
|
||||
# 0=ok, 100=no init script (fresh install)
|
||||
if [ "$errno" != 0 -a "$errno" != 100 ]; then
|
||||
echo "${cmd/ */} returned $errno" 1>&2
|
||||
echo "There is a MySQL server running, but we failed in our attempts to stop it." 1>&2
|
||||
echo "Stop it yourself and try again!" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
start_server() {
|
||||
if [ ! -x /etc/init.d/mysql ]; then return; fi
|
||||
|
||||
set +e
|
||||
if [ -x /usr/sbin/invoke-rc.d ]; then
|
||||
cmd="invoke-rc.d mysql start"
|
||||
else
|
||||
cmd="/etc/init.d/mysql start"
|
||||
fi
|
||||
$cmd
|
||||
set -e
|
||||
}
|
||||
|
||||
##### here's a bunch of helper functions for converting database formats ######
|
||||
|
||||
cvt_get_param(){
|
||||
/usr/sbin/mysqld --print-defaults \
|
||||
| tr " " "\n" \
|
||||
| grep -- "--$1" \
|
||||
| tail -n 1 \
|
||||
| cut -d= -f2
|
||||
}
|
||||
|
||||
cvt_setup_stuff(){
|
||||
mytmp=`mktemp -d -t mysql-ISAM-convert.XXXXXX`
|
||||
cvt_log="$mytmp/conversion.log"
|
||||
if [ ! -d "$mytmp" ]; then
|
||||
echo "can't create temporary directory, oh well." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
chgrp mysql $mytmp
|
||||
chmod g+rwx $mytmp
|
||||
cvt_socket=${mytmp}/mysql.sock
|
||||
|
||||
cvt_mysqld="mysqld --skip-grant-tables --skip-networking --socket $cvt_socket"
|
||||
cvt_mysql="mysql --socket $cvt_socket"
|
||||
cvt_mysqladmin="mysqladmin --socket $cvt_socket"
|
||||
}
|
||||
|
||||
cvt_get_databases(){
|
||||
echo fetching database list ... >&2
|
||||
$cvt_mysql -e 'show databases' | sed -n -e '2,$p'
|
||||
}
|
||||
|
||||
cvt_get_tables(){
|
||||
echo querying tables in $1 ... >&2
|
||||
$cvt_mysql $1 -e 'show table status' | sed -n -e '2,$p' | \
|
||||
cut -f 1,2 | grep -w 'ISAM$' | cut -f 1
|
||||
}
|
||||
|
||||
cvt_convert_table(){
|
||||
echo converting $1.$2 ... >&2
|
||||
$cvt_mysql $1 -e "alter table $2 type=MyISAM"
|
||||
}
|
||||
|
||||
cvt_wait_for_server(){
|
||||
local count
|
||||
echo -n waiting for server startup.. >&2
|
||||
while ! $cvt_mysql </dev/null >/dev/null 2>&1; do
|
||||
echo -n . >&2
|
||||
sleep 1
|
||||
count=".$count"
|
||||
if [ -f $mytmp/mysql.done ]; then
|
||||
echo "sorry... looks like the server crashed :(" >&2
|
||||
return 1
|
||||
elif [ "$count" = "...................." ]; then
|
||||
echo "sorry... looks like the server didn't start :(" >&2
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
echo ok. >&2
|
||||
}
|
||||
|
||||
cvt_wait_for_exit(){
|
||||
local count
|
||||
echo -n waiting for server shutdown.. >&2
|
||||
while [ ! -f $mytmp/mysql.done ]; do
|
||||
echo -n . >&2
|
||||
sleep 1
|
||||
count=".$count"
|
||||
if [ "$count" = "...................." ]; then
|
||||
echo "hrm... guess it never started?" >&2
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
echo ok. >&2
|
||||
}
|
||||
|
||||
cvt_cleanup(){
|
||||
local mysql_kids
|
||||
rm -rf $mytmp
|
||||
# kill any mysqld child processes left over. there *shouldn't* be any,
|
||||
# but let's not take chances with that
|
||||
mysql_kids=`ps o 'pid command' --ppid $$ | grep -E '^[[:digit:]]+ mysqld ' | cut -d' ' -f1`
|
||||
if [ "$mysql_kids" ]; then
|
||||
echo "strange, some mysql processes left around. killing them now." >&2
|
||||
kill $mysql_kids
|
||||
sleep 10
|
||||
mysql_kids=`ps o 'pid command' --ppid $$ | grep -E '^[[:digit:]]+ mysqld ' | cut -d' ' -f1`
|
||||
if [ "$mysql_kids" ]; then
|
||||
echo "okay, they're really not getting the hint..." >&2
|
||||
kill -9 $mysql_kids
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
################################ main() ##########################
|
||||
|
||||
# test if upgrading from non conffile state
|
||||
if [ "$1" = "upgrade" ] && [ -x /usr/sbin/mysqld ]; then
|
||||
cvt_datadir=`cvt_get_param datadir`
|
||||
# test for ISAM tables, which we must convert NOW
|
||||
if [ -n "`find $cvt_datadir -name '*.ISM' 2>/dev/null`" ]; then
|
||||
pidfile=`cvt_get_param pid-file`
|
||||
if [ "$pidfile" ] && [ -f "$pidfile" ]; then
|
||||
server_pid=`cat $pidfile`
|
||||
if [ "$server_pid" ] && ps $server_pid >/dev/null 2>&1; then
|
||||
server_running="yes"
|
||||
fi
|
||||
fi
|
||||
# to be sure
|
||||
stop_server
|
||||
|
||||
set +e
|
||||
cat << EOF >&2
|
||||
----------------------------------------
|
||||
WARNING WARNING WARNING
|
||||
----------------------------------------
|
||||
|
||||
It has been detected that are are using ISAM format on some of your
|
||||
mysql database tables. This format has been deprecated and no longer
|
||||
supported. to prevent these databases from essentially disappearing,
|
||||
an attempt at format conversion will now be made. please check after
|
||||
your upgrade that all tables are present and accounted for.
|
||||
|
||||
apologies for the noise, but we thought you'd appreciate it :)
|
||||
|
||||
----------------------------------------
|
||||
WARNING WARNING WARNING
|
||||
----------------------------------------
|
||||
EOF
|
||||
cvt_setup_stuff
|
||||
($cvt_mysqld >$cvt_log 2>&1; touch $mytmp/mysql.done ) &
|
||||
|
||||
if cvt_wait_for_server; then
|
||||
dbs=`cvt_get_databases`
|
||||
for db in $dbs; do
|
||||
tables=`cvt_get_tables $db`
|
||||
for tbl in $tables; do
|
||||
cvt_convert_table $db $tbl
|
||||
done
|
||||
done
|
||||
else
|
||||
cvt_error="yes"
|
||||
fi
|
||||
|
||||
echo shutting down server... >&2
|
||||
$cvt_mysqladmin shutdown
|
||||
cvt_wait_for_exit
|
||||
echo "all done!" >&2
|
||||
if [ ! "$cvt_error" = "yes" ]; then
|
||||
cvt_cleanup
|
||||
else
|
||||
echo "you might want to look in $mytmp..." >&2
|
||||
fi
|
||||
|
||||
if [ "$server_running" ]; then
|
||||
start_server
|
||||
fi
|
||||
|
||||
set -e
|
||||
fi
|
||||
fi
|
||||
|
||||
exit 0
|
1
debian/mysql-extra-BASE.dirs.in
vendored
Normal file
1
debian/mysql-extra-BASE.dirs.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
usr/bin
|
3
debian/mysql-extra-BASE.files.in
vendored
Normal file
3
debian/mysql-extra-BASE.files.in
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
usr/bin/ndb_drop_index
|
||||
usr/bin/ndb_drop_table
|
||||
usr/bin/ndb_delete_all
|
1
debian/mysql-management-BASE.dirs.in
vendored
Normal file
1
debian/mysql-management-BASE.dirs.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
usr/sbin
|
1
debian/mysql-management-BASE.files.in
vendored
Normal file
1
debian/mysql-management-BASE.files.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
usr/sbin/ndb_mgmd
|
86
debian/mysql-management-BASE.mysql-management.init.in
vendored
Normal file
86
debian/mysql-management-BASE.mysql-management.init.in
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: mysql-ndb-mgm
|
||||
# Required-Start: $syslog
|
||||
# Required-Stop: $syslog mysql
|
||||
# Should-Start: $local_fs $remote_fs $network $named $time
|
||||
# Should-Stop: $local_fs $remote_fs $network $named $time
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: Start and stop the mysql database cluster management daemon
|
||||
# Description: Controls the MySQL NDB Management Node daemon "ndb_mgmd".
|
||||
### END INIT INFO
|
||||
#
|
||||
set -e
|
||||
set -u
|
||||
${DEBIAN_SCRIPT_DEBUG:+ set -v -x}
|
||||
|
||||
# Variables
|
||||
SELF=$(cd $(dirname $0); pwd -P)/$(basename $0)
|
||||
DAEMON=/usr/sbin/ndb_mgmd
|
||||
CONF=/etc/mysql/ndb_mgmd.cnf
|
||||
export HOME=/etc/mysql/
|
||||
|
||||
# Safeguard (relative paths, core dumps..)
|
||||
cd /
|
||||
umask 077
|
||||
|
||||
# Exit *silently* if we're not supposed to be started.
|
||||
#
|
||||
# The Debian scripts should execute these scripts to stop and start
|
||||
# the daemon when upgrading if it is started. On the other hand it should
|
||||
# remain silently if the server has not even been configured.
|
||||
# See /usr/share/doc/mysql-server-*/README.Debian for more information.
|
||||
test -x $DAEMON || exit 0
|
||||
test -r $CONF || exit 0
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
#
|
||||
# main()
|
||||
#
|
||||
case "${1:-''}" in
|
||||
'start')
|
||||
# Start daemon
|
||||
log_daemon_msg "Starting MySQL NDB Management Node" "ndb_mgmd"
|
||||
# --pid-file does not work as the daemon forks itself with $PID=$PID+1
|
||||
if start-stop-daemon \
|
||||
--start \
|
||||
--exec $DAEMON \
|
||||
--user mysql \
|
||||
-- \
|
||||
-f $CONF
|
||||
then
|
||||
log_end_msg 0
|
||||
else
|
||||
log_end_msg 1
|
||||
log_warning_msg "Please take a look at the syslog."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
'stop')
|
||||
log_daemon_msg "Stopping MySQL NDB Management Node" "ndb_mgmd"
|
||||
if start-stop-daemon \
|
||||
--stop \
|
||||
--oknodo \
|
||||
--exec $DAEMON
|
||||
then
|
||||
log_end_msg 0
|
||||
else
|
||||
log_end_msg 1
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
'restart'|'force-reload')
|
||||
set +e; $SELF stop; set -e
|
||||
$SELF start
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: $SELF start|stop|restart|force-reload"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
10
debian/mysql-server-BASE.NEWS.in
vendored
Normal file
10
debian/mysql-server-BASE.NEWS.in
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
mysql-dfsg-5.0 (5.0.18-9) unstable; urgency=low
|
||||
|
||||
Rotation of the binary logs is now configured in /etc/mysql/my.cnf with
|
||||
"expire-logs-days" which defaults to 20 days. The old file
|
||||
/etc/mysql/debian-log-rotate.conf should be removed together with
|
||||
/etc/cron.daily/mysql-server after this value has been adjusted. Note that
|
||||
the old variable defined the number of files whereas the new one defines
|
||||
a time span in days.
|
||||
|
||||
-- Christian Hammers <ch@debian.org> Tue, 24 Jan 2006 22:18:21 +0100
|
125
debian/mysql-server-BASE.README.Debian.in
vendored
Normal file
125
debian/mysql-server-BASE.README.Debian.in
vendored
Normal file
@ -0,0 +1,125 @@
|
||||
|
||||
* REMEMBER TO SET THE ROOT PASSWORD !!!
|
||||
============================================================================
|
||||
|
||||
* MYSQL WON'T INSTALL?
|
||||
======================
|
||||
MySQL will only install if you have a non-numeric hostname that is resolvable
|
||||
via the /etc/hosts file. E.g. if the "hostname" command returns "myhostname"
|
||||
then there must be a line like "10.0.0.1 myhostname".
|
||||
|
||||
On upgrades from MySQL 3.23, as shipped with Debian Woody, symlinks in place of
|
||||
/var/lib/mysql or /var/log/mysql gets accidently removed and have manually be
|
||||
restored.
|
||||
|
||||
* MYSQL WON'T START OR STOP?
|
||||
============================
|
||||
You may never ever delete the special mysql user "debian-sys-maint". This
|
||||
user together with the credentials in /etc/mysql/debian.cnf are used by the
|
||||
init scripts to stop the server as they would require knowledge of the mysql
|
||||
root users password else.
|
||||
So in most of the times you can fix the situation by making sure that the
|
||||
debian.cnf file contains the right password, e.g. by setting a new one
|
||||
(remember to do a "flush privileges" then).
|
||||
|
||||
* WHAT TO DO AFTER UPGRADES:
|
||||
============================
|
||||
- running mysql_upgrade to be able to make use of possibly added new
|
||||
privilege columns. This script does not give any use more rights.
|
||||
|
||||
* WHAT TO DO AFTER INSTALLATION:
|
||||
================================
|
||||
The MySQL manual describes certain steps to do at this stage in a separate
|
||||
chapter. They are not necessary as the Debian packages does them
|
||||
automatically.
|
||||
|
||||
The only thing that is left over for the admin is
|
||||
- setting the *passwords* !!!
|
||||
- creating new users and databases
|
||||
- read the rest of this text
|
||||
|
||||
* DOWNGRADING TO 4.0 or 4.1:
|
||||
============================
|
||||
Unsupported. Period.
|
||||
But if you do and get problems or make interesting experiences, mail me, it
|
||||
might help others.
|
||||
Ok, if you really want, I would recommend to "mysqldump --opt" all tables,
|
||||
then purge 4.1, delete /var/lib/mysql, install 4.0 and insert the dumps. Be
|
||||
carefully, though, with the "mysql" table, you might not simply overwrite that
|
||||
one as the password for the mysql "debian-sys-maint" user is stored in
|
||||
/etc/mysql/debian.cnf and needed by /etc/init.d/ to start mysql and check if
|
||||
it's alive.
|
||||
|
||||
* SOME APPLICATION CAN NO LONGER CONNECT:
|
||||
=========================================
|
||||
This application is probably linked against libmysqlclient12 or below and
|
||||
somebody has created a mysql user with new-style passwords.
|
||||
The old_passwords option which forces backwards compatibility, can be set
|
||||
in /etc/mysql/conf.d/old_passwords.conf.
|
||||
If that does not help, the password can be set manually, the application that
|
||||
inserted the user should be changed or the application that tries to connect
|
||||
should be updated to libmysqlclient14 or -15.
|
||||
Read http://dev.mysql.com/doc/refman/5.0/en/old-client.html
|
||||
|
||||
* NETWORKING:
|
||||
=============
|
||||
For security reasons, the Debian package has enabled networking only on the
|
||||
loop-back device using "bind-address" in /etc/mysql/my.cnf. Check with
|
||||
"netstat -tlnp" where it is listening. If your connection is aborted
|
||||
immediately see if "mysqld: all" or similar is in /etc/hosts.allow and read
|
||||
hosts_access(5).
|
||||
|
||||
* WHERE IS THE DOCUMENTATION?:
|
||||
==============================
|
||||
Unfortunately due to licensing restrictions, debian currently not able
|
||||
to provide the mysql-doc package in any format. For the most up to date
|
||||
documentation, please go to http://dev.mysql.com/doc.
|
||||
|
||||
* PASSWORDS:
|
||||
============
|
||||
It is strongly recommended to set a password for the mysql root user (which
|
||||
is NOT the same as the "normal" root user) with the command:
|
||||
/usr/bin/mysqladmin -u root password 'enter-your-good-new-password-here'
|
||||
If you already had a password set add " -p " before "-u" to the line above.
|
||||
|
||||
If you are tired to type the password in every time or want to automate your
|
||||
scripts you can store it in the file $HOME/.my.cnf. It should be chmod 0600
|
||||
(-rw------- username username .my.cnf) to ensure that nobody else can read
|
||||
it. Every other configuration parameter can be stored there, too. You will
|
||||
find an example below and more information in the MySQL manual in
|
||||
/usr/share/doc/mysql-doc or www.mysql.com.
|
||||
|
||||
ATTENTION: It is necessary, that a .my.cnf from root always contains a "user"
|
||||
line wherever there is a "password" line, else, the Debian maintenance
|
||||
scripts, that use /etc/mysql/debian.cnf, will use the username
|
||||
"debian-sys-maint" but the password that is in root's .my.cnf. Also note,
|
||||
that every change you make in the /root/.my.cnf will affect the mysql cron
|
||||
script, too.
|
||||
|
||||
# an example of $HOME/.my.cnf
|
||||
[client]
|
||||
user = your-mysql-username
|
||||
password = enter-your-good-new-password-here
|
||||
|
||||
* BIG_ROWS FOR EVEN MORE ROWS IN A TABLE:
|
||||
=========================================
|
||||
If you ever run out of rows in a table there is the possibility of building
|
||||
the package with "-DBIG_ROWS" which, according to a MySQL employee on
|
||||
packagers@lists.mysql.com should lead to a 64bit row index (I guess > 2^32
|
||||
rows) but also to an approx. 5% performance loss.
|
||||
|
||||
* NDB CLUSTER ENGINE:
|
||||
=====================
|
||||
NDB is the shared-nothing cluster engine since MySQL-4.1.
|
||||
This package contains the all three components, the mysql backend, the NDB
|
||||
Data Node and the NDB Management Node. The init scripts of the cluster
|
||||
daemons will silently exit unless their configuration is provided:
|
||||
mysql-ndb: needs "ndb-connectstring" in /etc/mysql/my.cnf
|
||||
mysql-ndb-mgm: needs /etc/mysql/ndb_mgmd.cnf
|
||||
|
||||
* EXPIRE_LOGS_DAYS AND LOG_BIN:
|
||||
===============================
|
||||
Having expire_logs_days enabled but log-bin not crashes the server. Using both
|
||||
or none of those options is safe. To prevent this happening during the nightly
|
||||
log rotation via /etc/logrotate.d/mysql the initscript checks for malicious
|
||||
combination of options. This is Debian bug #368547 and MySQL bug #17733.
|
39
debian/mysql-server-BASE.config.in
vendored
Normal file
39
debian/mysql-server-BASE.config.in
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
. /usr/share/debconf/confmodule
|
||||
|
||||
if [ -n "$DEBIAN_SCRIPT_DEBUG" ]; then set -v -x; DEBIAN_SCRIPT_TRACE=1; fi
|
||||
${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*" 1>&2 }
|
||||
|
||||
CNF=/etc/mysql/my.cnf
|
||||
|
||||
# Beware that there are two ypwhich one of them needs the 2>/dev/null!
|
||||
if test -n "`which ypwhich 2>/dev/null`" && ypwhich >/dev/null 2>&1; then
|
||||
db_input high mysql-server-@MYSQL_BRANDED_BASE_VERSION@/nis_warning || true
|
||||
db_go
|
||||
fi
|
||||
|
||||
# only ask this question on fresh installs and during "reconfiguration".
|
||||
# there is also an additional check for empty root passwords in the
|
||||
# postinst script when the tools are available for us to use.
|
||||
if [ "$1" = "configure" ] && [ -z "$2" ] || [ "$1" = "reconfigure" ]; then
|
||||
db_input medium mysql-server/root_password || true
|
||||
db_go
|
||||
fi
|
||||
|
||||
# If this is an upgrade of an already existing installation ask the user if
|
||||
# we may use the backwards incompatible but more secure password format.
|
||||
# This should not be shown at dpkg-reconfigure and except for the dist-upgrade,
|
||||
# config files are for the admin only!
|
||||
# Read: If mysql was already installed but not from Etch and it was either 4.0
|
||||
# or had old_passwords enabled before then the system is affected.
|
||||
if [ "$1" = "configure" ] &&
|
||||
[ -f $CNF ] &&
|
||||
(
|
||||
[ ! -f /var/lib/mysql/debian-4.1.flag ] ||
|
||||
egrep -q -i '^[[:space:]]*old.passwords[[:space:]]*=[[:space:]]*(1|true)' $CNF
|
||||
)
|
||||
then
|
||||
db_input medium mysql-server-@MYSQL_BRANDED_BASE_VERSION@/need_sarge_compat || true
|
||||
db_go
|
||||
fi
|
13
debian/mysql-server-BASE.dirs.in
vendored
Normal file
13
debian/mysql-server-BASE.dirs.in
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
etc/init.d
|
||||
etc/logrotate.d
|
||||
usr/bin
|
||||
usr/lib
|
||||
usr/lib/mysql
|
||||
usr/sbin
|
||||
usr/share/man/man8
|
||||
usr/share/info
|
||||
usr/share/mysql
|
||||
usr/lib/pkgconfig
|
||||
var/run/mysqld
|
||||
var/lib/mysql-upgrade
|
||||
var/lib/mysql-cluster
|
2
debian/mysql-server-BASE.docs.in
vendored
Normal file
2
debian/mysql-server-BASE.docs.in
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
EXCEPTIONS-CLIENT
|
||||
debian/copyright.more
|
47
debian/mysql-server-BASE.files.in
vendored
Normal file
47
debian/mysql-server-BASE.files.in
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
usr/bin/my_print_defaults
|
||||
usr/bin/myisam_ftdump
|
||||
usr/bin/myisamchk
|
||||
usr/bin/myisamlog
|
||||
usr/bin/myisampack
|
||||
usr/bin/mysql_convert_table_format
|
||||
usr/bin/mysql_fix_extensions
|
||||
usr/bin/mysql_fix_privilege_tables
|
||||
usr/bin/mysql_install_db
|
||||
usr/bin/mysql_secure_installation
|
||||
usr/bin/mysql_setpermission
|
||||
usr/bin/mysql_tzinfo_to_sql
|
||||
usr/bin/mysql_upgrade
|
||||
usr/bin/mysql_zap
|
||||
usr/bin/mysqlbug
|
||||
usr/bin/mysqld_multi
|
||||
usr/bin/mysqld_safe
|
||||
usr/bin/mysqldumpslow
|
||||
usr/bin/mysqlhotcopy
|
||||
usr/bin/mysqltest
|
||||
usr/bin/perror
|
||||
usr/bin/replace
|
||||
usr/bin/resolve_stack_dump
|
||||
usr/bin/resolveip
|
||||
usr/sbin/mysqld
|
||||
usr/sbin/mysqlmanager
|
||||
usr/lib/mysql/mysqld.sym
|
||||
usr/share/lintian/overrides/mysql-server-@MYSQL_BRANDED_BASE_VERSION@
|
||||
usr/share/info/mysql.info
|
||||
usr/share/man/man1/mysqlman.1
|
||||
usr/share/man/man1/my_print_defaults.1
|
||||
usr/share/man/man1/myisam_ftdump.1
|
||||
usr/share/man/man1/myisamchk.1
|
||||
usr/share/man/man1/myisamlog.1
|
||||
usr/share/man/man1/myisampack.1
|
||||
usr/share/man/man8/mysqld.8
|
||||
usr/share/man/man1/mysqld_multi.1
|
||||
usr/share/man/man1/mysqld_safe.1
|
||||
usr/share/man/man1/mysql_fix_privilege_tables.1
|
||||
usr/share/man/man1/mysql_install_db.1
|
||||
usr/share/man/man1/mysqlhotcopy.1
|
||||
usr/share/man/man8/mysqlmanager.8
|
||||
usr/share/man/man1/mysql_upgrade.1
|
||||
usr/share/man/man1/mysql_tzinfo_to_sql.1
|
||||
usr/share/man/man1/mysql_zap.1
|
||||
usr/share/man/man1/perror.1
|
||||
usr/share/man/man1/replace.1
|
1
debian/mysql-server-BASE.links.in
vendored
Normal file
1
debian/mysql-server-BASE.links.in
vendored
Normal file
@ -0,0 +1 @@
|
||||
usr/bin/mysqld_safe usr/bin/safe_mysqld
|
4
debian/mysql-server-BASE.lintian-overrides.in
vendored
Normal file
4
debian/mysql-server-BASE.lintian-overrides.in
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
mysql-server-@MYSQL_BRANDED_BASE_VERSION@: possible-bashism-in-maintainer-script postinst:81 'p{("a".."z","A".."Z",0..9)[int(rand(62))]}'
|
||||
mysql-server-@MYSQL_BRANDED_BASE_VERSION@: possible-bashism-in-maintainer-script preinst:33 '${cmd/ */}'
|
||||
mysql-server-@MYSQL_BRANDED_BASE_VERSION@: statically-linked-binary ./usr/bin/mysql_tzinfo_to_sql
|
||||
mysql-server-@MYSQL_BRANDED_BASE_VERSION@: statically-linked-binary ./usr/sbin/mysqld
|
10
debian/mysql-server-BASE.logcheck.ignore.paranoid.in
vendored
Normal file
10
debian/mysql-server-BASE.logcheck.ignore.paranoid.in
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
/etc/init.d/mysql\[[0-9]+\]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists\!$
|
||||
/etc/init.d/mysql\[[0-9]+\]: '/usr/bin/mysqladmin --defaults-(extra-)?file=/etc/mysql/debian.cnf ping' resulted in$
|
||||
mysqld\[[0-9]+\]: $
|
||||
mysqld\[[0-9]+\]: Support MySQL by buying support/licenses at http://shop.mysql.com$
|
||||
mysqld\[[0-9]+\]: Version: .* socket: '/var/run/mysqld/mysqld.sock' port: 3306$
|
||||
mysqld\[[0-9]+\]: Warning: Ignoring user change to 'mysql' because the user was set to 'mysql' earlier on the command line$
|
||||
mysqld_safe\[[0-9]+\]: started$
|
||||
mysqld_safe\[[0-9]+\]: Support MySQL by buying support/licenses at http://shop.mysql.com *$
|
||||
usermod\[[0-9]+\]: change user `mysql' GID from `([0-9]+)' to `\1'$
|
||||
usermod\[[0-9]+\]: change user `mysql' shell from `/bin/false' to `/bin/false'$
|
31
debian/mysql-server-BASE.logcheck.ignore.server.in
vendored
Normal file
31
debian/mysql-server-BASE.logcheck.ignore.server.in
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
/etc/init.d/mysql\[[0-9]+\]: [0-9]+ processes alive and '/usr/bin/mysqladmin --defaults-(extra-)?file=/etc/mysql/debian.cnf ping' resulted in$
|
||||
/etc/init.d/mysql\[[0-9]+\]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists\!$
|
||||
/etc/init.d/mysql\[[0-9]+\]: '/usr/bin/mysqladmin --defaults-(extra-)?file=/etc/mysql/debian.cnf ping' resulted in$
|
||||
mysqld\[[0-9]+\]: ?$
|
||||
mysqld\[[0-9]+\]: .*InnoDB: Shutdown completed
|
||||
mysqld\[[0-9]+\]: .*InnoDB: Started;
|
||||
mysqld\[[0-9]+\]: .*InnoDB: Starting shutdown\.\.\.$
|
||||
mysqld\[[0-9]+\]: .*\[Note\] /usr/sbin/mysqld: Normal shutdown$
|
||||
mysqld\[[0-9]+\]: .*\[Note\] /usr/sbin/mysqld: ready for connections\.$
|
||||
mysqld\[[0-9]+\]: .*\[Note\] /usr/sbin/mysqld: Shutdown complete$
|
||||
mysqld\[[0-9]+\]: Support MySQL by buying support/licenses at http://shop.mysql.com$
|
||||
mysqld\[[0-9]+\]: /usr/sbin/mysqld: ready for connections\.$
|
||||
mysqld\[[0-9]+\]: .*/usr/sbin/mysqld: Shutdown Complete$
|
||||
mysqld\[[0-9]+\]: Version: .* socket
|
||||
mysqld\[[0-9]+\]: Warning: Ignoring user change to 'mysql' because the user was set to 'mysql' earlier on the command line$
|
||||
mysqld_safe\[[0-9]+\]: ?$
|
||||
mysqld_safe\[[0-9]+\]: able to use the new GRANT command!$
|
||||
mysqld_safe\[[0-9]+\]: ended$
|
||||
mysqld_safe\[[0-9]+\]: http://www.mysql.com$
|
||||
mysqld_safe\[[0-9]+\]: NOTE: If you are upgrading from a MySQL <= 3.22.10 you should run$
|
||||
mysqld_safe\[[0-9]+\]: PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !$
|
||||
mysqld_safe\[[0-9]+\]: Please report any problems with the /usr/bin/mysqlbug script!$
|
||||
mysqld_safe\[[0-9]+\]: See the manual for more instructions.$
|
||||
mysqld_safe\[[0-9]+\]: started$
|
||||
mysqld_safe\[[0-9]+\]: Support MySQL by buying support/licenses at
|
||||
mysqld_safe\[[0-9]+\]: The latest information about MySQL is available on the web at$
|
||||
mysqld_safe\[[0-9]+\]: the /usr/bin/mysql_fix_privilege_tables. Otherwise you will not be$
|
||||
mysqld_safe\[[0-9]+\]: To do so, start the server, then issue the following commands:$
|
||||
mysqld_safe\[[0-9]+\]: /usr/bin/mysqladmin -u root password 'new-password'$
|
||||
usermod\[[0-9]+\]: change user `mysql' GID from `([0-9]+)' to `\1'$
|
||||
usermod\[[0-9]+\]: change user `mysql' shell from `/bin/false' to `/bin/false'$
|
31
debian/mysql-server-BASE.logcheck.ignore.workstation.in
vendored
Normal file
31
debian/mysql-server-BASE.logcheck.ignore.workstation.in
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
/etc/init.d/mysql\[[0-9]+\]: [0-9]+ processes alive and '/usr/bin/mysqladmin --defaults-(extra-)?file=/etc/mysql/debian.cnf ping' resulted in$
|
||||
/etc/init.d/mysql\[[0-9]+\]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists\!$
|
||||
/etc/init.d/mysql\[[0-9]+\]: '/usr/bin/mysqladmin --defaults-(extra-)?file=/etc/mysql/debian.cnf ping' resulted in$
|
||||
mysqld\[[0-9]+\]: ?$
|
||||
mysqld\[[0-9]+\]: .*InnoDB: Shutdown completed
|
||||
mysqld\[[0-9]+\]: .*InnoDB: Started;
|
||||
mysqld\[[0-9]+\]: .*InnoDB: Starting shutdown\.\.\.$
|
||||
mysqld\[[0-9]+\]: .*\[Note\] /usr/sbin/mysqld: Normal shutdown$
|
||||
mysqld\[[0-9]+\]: .*\[Note\] /usr/sbin/mysqld: ready for connections\.$
|
||||
mysqld\[[0-9]+\]: .*\[Note\] /usr/sbin/mysqld: Shutdown complete$
|
||||
mysqld\[[0-9]+\]: Support MySQL by buying support/licenses at http://shop.mysql.com$
|
||||
mysqld\[[0-9]+\]: /usr/sbin/mysqld: ready for connections\.$
|
||||
mysqld\[[0-9]+\]: .*/usr/sbin/mysqld: Shutdown Complete$
|
||||
mysqld\[[0-9]+\]: Version: .* socket
|
||||
mysqld\[[0-9]+\]: Warning: Ignoring user change to 'mysql' because the user was set to 'mysql' earlier on the command line$
|
||||
mysqld_safe\[[0-9]+\]: ?$
|
||||
mysqld_safe\[[0-9]+\]: able to use the new GRANT command!$
|
||||
mysqld_safe\[[0-9]+\]: ended$
|
||||
mysqld_safe\[[0-9]+\]: http://www.mysql.com$
|
||||
mysqld_safe\[[0-9]+\]: NOTE: If you are upgrading from a MySQL <= 3.22.10 you should run$
|
||||
mysqld_safe\[[0-9]+\]: PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !$
|
||||
mysqld_safe\[[0-9]+\]: Please report any problems with the /usr/bin/mysqlbug script!$
|
||||
mysqld_safe\[[0-9]+\]: See the manual for more instructions.$
|
||||
mysqld_safe\[[0-9]+\]: started$
|
||||
mysqld_safe\[[0-9]+\]: Support MySQL by buying support/licenses at
|
||||
mysqld_safe\[[0-9]+\]: The latest information about MySQL is available on the web at$
|
||||
mysqld_safe\[[0-9]+\]: the /usr/bin/mysql_fix_privilege_tables. Otherwise you will not be$
|
||||
mysqld_safe\[[0-9]+\]: To do so, start the server, then issue the following commands:$
|
||||
mysqld_safe\[[0-9]+\]: /usr/bin/mysqladmin -u root password 'new-password'$
|
||||
usermod\[[0-9]+\]: change user `mysql' GID from `([0-9]+)' to `\1'$
|
||||
usermod\[[0-9]+\]: change user `mysql' shell from `/bin/false' to `/bin/false'$
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user