Technical edit of first half of manual.

parent f2d930c3
...@@ -623,7 +623,7 @@ Problems and common errors ...@@ -623,7 +623,7 @@ Problems and common errors
* Temporary files:: Where @strong{MySQL} stores temporary files * Temporary files:: Where @strong{MySQL} stores temporary files
* Problems with mysql.sock:: How to protect @file{/tmp/mysql.sock} * Problems with mysql.sock:: How to protect @file{/tmp/mysql.sock}
* Error Access denied:: @code{Access denied} error * Error Access denied:: @code{Access denied} error
* Changing MySQL user :: How to run @strong{MySQL} as a normal user * Changing MySQL user:: How to run @strong{MySQL} as a normal user
* Resetting permissions:: How to reset a forgotten password. * Resetting permissions:: How to reset a forgotten password.
* File permissions :: Problems with file permissions * File permissions :: Problems with file permissions
* Not enough file handles:: File not found * Not enough file handles:: File not found
...@@ -1086,13 +1086,13 @@ We want @strong{MySQL} to be ...@@ -1086,13 +1086,13 @@ We want @strong{MySQL} to be
@item @item
The best and the most used database in the world The best and the most used database in the world
@item @item
Available to all and affordable for all Available and affordable for all
@item @item
Easy to use Easy to use
@item @item
Continuously improving while remaining fast and safe Continuously improving while remaining fast and safe
@item @item
Fun to use and fun to improve Fun to use and improve
@item @item
Free from bugs Free from bugs
@end itemize @end itemize
...@@ -1580,13 +1580,13 @@ mid-1996. When @strong{MySQL} was released to a wider public, we noticed that ...@@ -1580,13 +1580,13 @@ mid-1996. When @strong{MySQL} was released to a wider public, we noticed that
there were some pieces of ``untested code'' that were quickly found by the there were some pieces of ``untested code'' that were quickly found by the
new users who made queries in a manner different than our own. Each new new users who made queries in a manner different than our own. Each new
release has had fewer portability problems than the previous one (even though release has had fewer portability problems than the previous one (even though
each has had many new features), and we hope that it will be possible to label each has had many new features).
one of the next releases ``stable''.
@c FIX We've been stable for quite a while now. :) (jcole) @c FIX We've been stable for quite a while now. :) (jcole)
Each release of @strong{MySQL} has been usable, and there have been problems Each release of @strong{MySQL} has been usable, and there have been problems
only when users start to use code from ``the gray zones''. Naturally, outside only when users start to use code from the ``gray zones''. Naturally, outside
users can't know what the gray zones are; this section attempts to indicate users can't know what the gray zones are; this section attempts to indicate
those that are currently known. The descriptions deal with the 3.23.x those that are currently known. The descriptions deal with the 3.23.x
version of @strong{MySQL}. All known and reported bugs are fixed in the version of @strong{MySQL}. All known and reported bugs are fixed in the
...@@ -1620,7 +1620,7 @@ the send/receive buffer size. As of 3.21.x, the buffer size is now dynamic up ...@@ -1620,7 +1620,7 @@ the send/receive buffer size. As of 3.21.x, the buffer size is now dynamic up
to a default of 24M. to a default of 24M.
@item Standard client programs --- Stable @item Standard client programs --- Stable
These include @code{mysql}, @code{mysqladmin} and @code{mysqlshow}, These include @code{mysql}, @code{mysqladmin}, @code{mysqlshow},
@code{mysqldump}, and @code{mysqlimport}. @code{mysqldump}, and @code{mysqlimport}.
@item Basic SQL --- Stable @item Basic SQL --- Stable
...@@ -2261,7 +2261,7 @@ generates all pages from data stored in a @strong{MySQL} database. Pages are ...@@ -2261,7 +2261,7 @@ generates all pages from data stored in a @strong{MySQL} database. Pages are
dynamically generated through a php3 interface to the database content. dynamically generated through a php3 interface to the database content.
Users contribute images and descriptions. Contributed images are stored Users contribute images and descriptions. Contributed images are stored
on the web server to avoid storing them in the database as BLOBs. All on the web server to avoid storing them in the database as BLOBs. All
other information is stored in on the shared @strong{MySQL} server. other information is stored on the shared @strong{MySQL} server.
@end itemize @end itemize
@subheading General database links @subheading General database links
...@@ -2294,7 +2294,7 @@ or something similar) to be added. ...@@ -2294,7 +2294,7 @@ or something similar) to be added.
@cindex Reporting errors @cindex Reporting errors
@cindex @strong{MySQL} mailing lists @cindex @strong{MySQL} mailing lists
@node Questions, Licensing and Support, Introduction, Top @node Questions, Licensing and Support, Introduction, Top
@chapter MySQL mailing lists and how to ask questions or report errors (bugs) @chapter MySQL mailing lists
@menu @menu
* Mailing-list:: The @strong{MySQL} mailing lists * Mailing-list:: The @strong{MySQL} mailing lists
...@@ -2363,10 +2363,11 @@ the @code{mysqlbug} script (if you are running on Windows, you should ...@@ -2363,10 +2363,11 @@ the @code{mysqlbug} script (if you are running on Windows, you should
include a description of the operating system and the @strong{MySQL} version). include a description of the operating system and the @strong{MySQL} version).
Preferably, you should test the problem using the latest stable or Preferably, you should test the problem using the latest stable or
development version of @strong{MySQL} before posting! development version of @strong{MySQL} before posting!
Anyone should be able to repeat the bug by just using 'mysql test < Anyone should be able to repeat the bug by just using
script' on the included test case. All bugs posted on this list will be @code{mysql test < script} on the included test case. All bugs posted on
corrected or documented in the next @strong{MySQL} release! If there are only this list will be corrected or documented in the next @strong{MySQL} release!
small code changes involved, we will also post a patch that fixes the problem. If there are only small code changes involved, we will also post a patch that
fixes the problem.
@item bugs-digest @item bugs-digest
The @code{bugs} list in digest form The @code{bugs} list in digest form
...@@ -2484,8 +2485,8 @@ script (if you are running on Windows, you should include a ...@@ -2484,8 +2485,8 @@ script (if you are running on Windows, you should include a
description of the operating system and the @strong{MySQL} version). description of the operating system and the @strong{MySQL} version).
Preferably, you should test the problem using the latest stable or development Preferably, you should test the problem using the latest stable or development
version of @strong{MySQL} before posting! Anyone should be able to repeat the version of @strong{MySQL} before posting! Anyone should be able to repeat the
bug by just using 'mysql test < script' on the included test case or run bug by just using @code{mysql test < script} on the included test case or run
the shell / perl script that is included in the bug report. All bugs the shell or perl script that is included in the bug report. All bugs
posted on this list will be corrected or documented in the next @strong{MySQL} posted on this list will be corrected or documented in the next @strong{MySQL}
release! If there are only small code changes involved to correct this release! If there are only small code changes involved to correct this
problem, we will also post a patch that fixes the problem. problem, we will also post a patch that fixes the problem.
...@@ -2528,7 +2529,7 @@ problem. ...@@ -2528,7 +2529,7 @@ problem.
If a program produces an error message, it is very important to include the If a program produces an error message, it is very important to include the
message in your report! If we try to search for something from the archives message in your report! If we try to search for something from the archives
using programs, it is better that the error message reported exactly matches using programs, it is better that the error message reported exactly matches
the one that the program produces. (Even the case sensitivity should be the one that the program produces. (Even the case should be
observed!) You should never try to remember what the error message was; observed!) You should never try to remember what the error message was;
instead, copy and paste the entire message into your report! instead, copy and paste the entire message into your report!
...@@ -2624,8 +2625,8 @@ should be and an account describing the basis for your opinion. ...@@ -2624,8 +2625,8 @@ should be and an account describing the basis for your opinion.
@item @item
When giving an example of the problem, it's better to use the variable names, When giving an example of the problem, it's better to use the variable names,
table names, etc., that exist in your actual situation than to come up with table names, etc., that exist in your actual situation than to come up with
new names. The problem could be related to the name of a variable, table, new names. The problem could be related to the name of a variable or table!
etc.! These cases are rare, perhaps, but it is better to be safe than These cases are rare, perhaps, but it is better to be safe than
sorry. After all, it should be easier for you to provide an example that sorry. After all, it should be easier for you to provide an example that
uses your actual situation and it is by all means better for us. In case you uses your actual situation and it is by all means better for us. In case you
have data you don't want to show to others, you can use @code{ftp} to have data you don't want to show to others, you can use @code{ftp} to
...@@ -2673,7 +2674,7 @@ so, we can't use it. ...@@ -2673,7 +2674,7 @@ so, we can't use it.
If we can't verify exactly what the patch is meant for, we won't use it. If we can't verify exactly what the patch is meant for, we won't use it.
Test cases will help us here. Show that the patch will handle all the Test cases will help us here. Show that the patch will handle all the
situations that may occur. If we find a borderline case (even a rare one) situations that may occur. If we find a borderline case (even a rare one)
where the patch won't work, the patch may be useless. where the patch won't work, it may be useless.
@item @item
Guesses about what the bug is, why it occurs, or what it depends on, Guesses about what the bug is, why it occurs, or what it depends on,
...@@ -2714,7 +2715,7 @@ why this happens! In this case, the ...@@ -2714,7 +2715,7 @@ why this happens! In this case, the
information about what happened. Please include any relevant information about what happened. Please include any relevant
information from this file in your bug report! Normally @code{mysqld} information from this file in your bug report! Normally @code{mysqld}
should @strong{NEVER} crash a table if nothing killed it in the middle should @strong{NEVER} crash a table if nothing killed it in the middle
of an update! If you can find the source of why @code{mysqld} dies, of an update! If you can find the cause @code{mysqld} dying,
it's much easier for us to provide you with a fix for the problem! it's much easier for us to provide you with a fix for the problem!
@xref{What is crashing}. @xref{What is crashing}.
...@@ -3974,8 +3975,8 @@ Please report bad or out of date mirrors to @email{webmaster@@mysql.com}. ...@@ -3974,8 +3975,8 @@ Please report bad or out of date mirrors to @email{webmaster@@mysql.com}.
We use GNU Autoconf so it is possible to port @strong{MySQL} to all modern We use GNU Autoconf so it is possible to port @strong{MySQL} to all modern
systems with working Posix threads and a C++ compiler. (To compile only the systems with working Posix threads and a C++ compiler. (To compile only the
client code, a C++ compiler is required but not threads.) We use and develop client code, a C++ compiler is required but not threads.) We use and develop
the software ourselves primarily on Sun Solaris (versions 2.5 & 2.6) and to a the software ourselves primarily on Sun Solaris (versions 2.5 - 2.7) and
lesser extent on RedHat Linux 5.0. RedHat Linux 6.x.
@strong{MySQL} has been reported to compile sucessfully on the following @strong{MySQL} has been reported to compile sucessfully on the following
operating system/thread package combinations. Note that for many operating operating system/thread package combinations. Note that for many operating
...@@ -4593,7 +4594,7 @@ If you are using a @code{libc}-based system (instead of a @code{glibc2} ...@@ -4593,7 +4594,7 @@ If you are using a @code{libc}-based system (instead of a @code{glibc2}
system), you will probably get some problems with hostname resolving and system), you will probably get some problems with hostname resolving and
getpwnam() with the binary release. (This is because @code{glibc} getpwnam() with the binary release. (This is because @code{glibc}
unfortunately depends on some external libraries to resolve hostnames unfortunately depends on some external libraries to resolve hostnames
and getwpent() , even when compiled with @code{-static}). In this case and getpwent() , even when compiled with @code{-static}). In this case
you probably get the following error message when you run you probably get the following error message when you run
@code{mysql_install_db}: @code{mysql_install_db}:
...@@ -5600,9 +5601,15 @@ t/00base............install_driver(mysql) failed: Can't load '../blib/arch/auto/ ...@@ -5600,9 +5601,15 @@ t/00base............install_driver(mysql) failed: Can't load '../blib/arch/auto/
it means that you need to include the compression library, -lz, to the it means that you need to include the compression library, -lz, to the
link line. This can be done by changing the line: link line. This can be done by changing the line:
@example
$sysliblist .= " -lm"; $sysliblist .= " -lm";
to to
$sysliblist .= " -lm -lz"; $sysliblist .= " -lm -lz";
@end example
in file lib/DBD/mysql/Install.pm in the Msql-Mysql-modules directory. in file lib/DBD/mysql/Install.pm in the Msql-Mysql-modules directory.
After this, you MUST run 'make realclean' and then proceed with the After this, you MUST run 'make realclean' and then proceed with the
installation from the beginning. installation from the beginning.
...@@ -5993,10 +6000,11 @@ temporary workaround for this bug. ...@@ -5993,10 +6000,11 @@ temporary workaround for this bug.
If you plan to have 1000+ concurrent connections, you will need to make If you plan to have 1000+ concurrent connections, you will need to make
some changes to LinuxThreads, recompile it, and re-link MySQL against some changes to LinuxThreads, recompile it, and re-link MySQL against
the new libpthread.a . Increase PTHREAD_THREADS_MAX in the new @file{libpthread.a}. Increase @code{PTHREAD_THREADS_MAX} in
sysdeps/unix/sysv/linux/bits/local_lim.h to 4096 and decrease STACK_SIZE @file{sysdeps/unix/sysv/linux/bits/local_lim.h} to 4096 and decrease
in internals.h to 256 KB . Note that MySQL will not be stable with @code{STACK_SIZE} in @file{internals.h} to 256 KB. Note that MySQL
around 1000 connections if STACK_SIZE is the default of 2 MB. will not be stable with around 1000 connections if @code{STACK_SIZE}
is the default of 2 MB.
If you have glibc 2.1.3-65 or newer, you don't have to increase STACK_SIZE; If you have glibc 2.1.3-65 or newer, you don't have to increase STACK_SIZE;
You can instead just change the @code{thread_stack} value for @code{mysqld}. You can instead just change the @code{thread_stack} value for @code{mysqld}.
...@@ -7845,7 +7853,7 @@ for installation from a source distribution: ...@@ -7845,7 +7853,7 @@ for installation from a source distribution:
@example @example
shell> ./scripts/mysql_install_db shell> ./scripts/mysql_install_db
shell> cd mysql_installation_directory shell> cd mysql_installation_directory
shell> ./bin/safe_mysqld & shell> ./bin/safe_mysqld --user=mysql &
@end example @end example
For a binary distribution, do this: For a binary distribution, do this:
...@@ -7853,7 +7861,7 @@ For a binary distribution, do this: ...@@ -7853,7 +7861,7 @@ For a binary distribution, do this:
@example @example
shell> cd mysql_installation_directory shell> cd mysql_installation_directory
shell> ./bin/mysql_install_db shell> ./bin/mysql_install_db
shell> ./bin/safe_mysqld & shell> ./bin/safe_mysqld --user=mysql &
@end example @end example
Testing is most easily done from the top-level directory of the @strong{MySQL} Testing is most easily done from the top-level directory of the @strong{MySQL}
...@@ -8405,7 +8413,7 @@ reinstall. ...@@ -8405,7 +8413,7 @@ reinstall.
If your system uses @file{/etc/rc.local} to start external scripts, you If your system uses @file{/etc/rc.local} to start external scripts, you
should append the following to it: should append the following to it:
@example @example
/bin/sh -c 'cd /usr/local/mysql ; ./bin/safe_mysqld &' /bin/sh -c 'cd /usr/local/mysql ; ./bin/safe_mysqld --user=mysql &'
@end example @end example
You can also add options for @code{mysql.server} in a global You can also add options for @code{mysql.server} in a global
...@@ -8647,7 +8655,7 @@ before it processes any command-line arguments.) ...@@ -8647,7 +8655,7 @@ before it processes any command-line arguments.)
@multitable @columnfractions .3 .7 @multitable @columnfractions .3 .7
@item @strong{Filename} @tab @strong{Purpose} @item @strong{Filename} @tab @strong{Purpose}
@item @code{windows-system-directory\my.ini} @item @code{windows-system-directory\my.ini} @tab Global options
@item @code{C:\my.cnf} @tab Global options @item @code{C:\my.cnf} @tab Global options
@item @code{C:\mysql\data\my.cnf} @tab Server-specific options @item @code{C:\mysql\data\my.cnf} @tab Server-specific options
@end multitable @end multitable
...@@ -8841,7 +8849,7 @@ the sort order! ...@@ -8841,7 +8849,7 @@ the sort order!
and not only the first argument. and not only the first argument.
@item @code{AUTO_INCREMENT} will not work with negative numbers. @item @code{AUTO_INCREMENT} will not work with negative numbers.
@item @code{INNER} and @code{DELAYED} are now reserved words. @item @code{INNER} and @code{DELAYED} are now reserved words.
@item @code{FLOAT(X)} is now a true floating point types and not a value with @item @code{FLOAT(X)} is now a true floating point type and not a value with
a fixed number of decimals. a fixed number of decimals.
@item When declaring @code{DECIMAL(length,dec)} the length argument no @item When declaring @code{DECIMAL(length,dec)} the length argument no
longer includes a place for the sign or the decimal point. longer includes a place for the sign or the decimal point.
...@@ -8856,12 +8864,12 @@ flag. ...@@ -8856,12 +8864,12 @@ flag.
@item When you check/repair tables you should use @code{CHECK TABLE} @item When you check/repair tables you should use @code{CHECK TABLE}
or @code{myisamchk} for @code{MyISAM} tables (@code{.MYI}) and or @code{myisamchk} for @code{MyISAM} tables (@code{.MYI}) and
@code{isamchk} for ISAM (@code{.ISM}) tables. @code{isamchk} for ISAM (@code{.ISM}) tables.
@item If you want your @code{mysqldump}s to be compatible between @item If you want your @code{mysqldump} files to be compatible between
@strong{MySQL} 3.22 and 3.23, you should not use the @code{--opt} or @strong{MySQL} 3.22 and 3.23, you should not use the @code{--opt} or
@code{--full} option to @code{mysqldump}. @code{--full} option to @code{mysqldump}.
@item Check all your calls to @code{DATE_FORMAT()} to make sure there is a @item Check all your calls to @code{DATE_FORMAT()} to make sure there is a
@samp{%} before each format character. (Later @strong{MySQL} 3.22 @samp{%} before each format character. (Later @strong{MySQL} 3.22
version did allow this syntax. version did allow this syntax.)
@item @item
@code{mysql_fetch_fields_direct} is now a function (it was a macro) and @code{mysql_fetch_fields_direct} is now a function (it was a macro) and
it returns a pointer to a @code{MYSQL_FIELD} instead of a it returns a pointer to a @code{MYSQL_FIELD} instead of a
...@@ -8923,8 +8931,8 @@ You can start the @code{mysqld} 3.21 server with @code{safe_mysqld ...@@ -8923,8 +8931,8 @@ You can start the @code{mysqld} 3.21 server with @code{safe_mysqld
--old-protocol} to use it with clients from the 3.20 distribution. --old-protocol} to use it with clients from the 3.20 distribution.
In this case, the new client function @code{mysql_errno()} will not In this case, the new client function @code{mysql_errno()} will not
return any server error, only @code{CR_UNKNOWN_ERROR}, (but it return any server error, only @code{CR_UNKNOWN_ERROR}, (but it
works for client errors) and the server uses the old password() checking works for client errors) and the server uses the old @code{password()}
rather than the new one. checking rather than the new one.
If you are @strong{NOT} using the @code{--old-protocol} option to If you are @strong{NOT} using the @code{--old-protocol} option to
@code{mysqld}, you will need to make the following changes: @code{mysqld}, you will need to make the following changes:
...@@ -9137,7 +9145,7 @@ comparisons to be done according to the ASCII order used on the ...@@ -9137,7 +9145,7 @@ comparisons to be done according to the ASCII order used on the
data directory, and tables within a database to filenames in the database data directory, and tables within a database to filenames in the database
directory. directory.
This has two implications: This has a few implications:
@itemize @minus @itemize @minus
@item @item
...@@ -9339,11 +9347,11 @@ of @strong{MySQL} changes. ...@@ -9339,11 +9347,11 @@ of @strong{MySQL} changes.
@item @item
@code{||} is string concatenation instead of @code{OR}. @code{||} is string concatenation instead of @code{OR}.
@item @item
One can have any number of spaces between a function name and the '('. This One can have any number of spaces between a function name and the @samp{(}.
makes also all function names reserved words. This makes also all function names reserved words.
@item @item
@code{"} will be an identifier quote character (like the @strong{MySQL} @samp{"} will be an identifier quote character (like the @strong{MySQL}
@code{`} quote character) and not a string quote character. @samp{`} quote character) and not a string quote character.
@item @item
@code{REAL} will be a synonym for @code{FLOAT} instead of a synonym of @code{REAL} will be a synonym for @code{FLOAT} instead of a synonym of
@code{DOUBLE}. @code{DOUBLE}.
...@@ -10363,8 +10371,7 @@ shell> mysql -u user_name -p ...@@ -10363,8 +10371,7 @@ shell> mysql -u user_name -p
Enter password: ******** Enter password: ********
@end example @end example
The client echoes @samp{*} characters to the terminal as you enter your The @samp{*} characters represent your password.
password so that onlookers cannot see it.
It is more secure to enter your password this way than to specify it on the It is more secure to enter your password this way than to specify it on the
command line because it is not visible to other users. However, this method command line because it is not visible to other users. However, this method
...@@ -10534,7 +10541,7 @@ and other access privilege information. (Passwords are stored ...@@ -10534,7 +10541,7 @@ and other access privilege information. (Passwords are stored
encrypted, so a malicious user cannot simply read them to know the plain encrypted, so a malicious user cannot simply read them to know the plain
text password). If they can access the @code{mysql.user} password text password). If they can access the @code{mysql.user} password
column, they can use it to login into the @strong{MySQL} server column, they can use it to login into the @strong{MySQL} server
for the given user. With sufficient privileges, the same user can for the given user. (With sufficient privileges, the same user can
replace a password with a different one.) replace a password with a different one.)
@end itemize @end itemize
...@@ -10800,7 +10807,7 @@ can specify a netmask indicating how many address bits to use for the ...@@ -10800,7 +10807,7 @@ can specify a netmask indicating how many address bits to use for the
network number. For example: network number. For example:
@example @example
GRANT ALL PRIVILEGES on db.* to david@'192.58.197.0/255.255.255.0'; GRANT ALL PRIVILEGES on db.* to david@@'192.58.197.0/255.255.255.0';
@end example @end example
This will allow everyone to connect from an IP where the following is true: This will allow everyone to connect from an IP where the following is true:
...@@ -11654,7 +11661,7 @@ Another reason for this error on Linux is that you are using a binary ...@@ -11654,7 +11661,7 @@ Another reason for this error on Linux is that you are using a binary
than the one you are using. In this case you should either upgrade your than the one you are using. In this case you should either upgrade your
OS/glibc or download the source @strong{MySQL} version and compile this OS/glibc or download the source @strong{MySQL} version and compile this
yourself; A source RPM is normally trivial to compile and install, so yourself; A source RPM is normally trivial to compile and install, so
normally this isn't a big problem. this isn't a big problem.
@item @item
If you get an error message where the hostname is not shown or where the If you get an error message where the hostname is not shown or where the
...@@ -12084,10 +12091,10 @@ Database, table, index, column and alias names all follow the same rules in ...@@ -12084,10 +12091,10 @@ Database, table, index, column and alias names all follow the same rules in
@tindex " @tindex "
Note that the rules changed starting with @strong{MySQL} 3.23.6 when we Note that the rules changed starting with @strong{MySQL} 3.23.6 when we
introduced quoting of identifiers (database, table and column names) introduced quoting of identifiers (database, table and column names)
with @code{`} (@code{"} will also work to quote identifiers if you run with @samp{`} (@samp{"} will also work to quote identifiers if you run
in ANSI mode). in ANSI mode).
@multitable @columnfractions .15 .7 .78 @multitable @columnfractions .15 .15 .70
@item @strong{Identifier} @tab @strong{Max length} @tab @strong{Allowed characters} @item @strong{Identifier} @tab @strong{Max length} @tab @strong{Allowed characters}
@item Database @tab 64 @tab Any character that is allowed in a directory name except @code{/}. @item Database @tab 64 @tab Any character that is allowed in a directory name except @code{/}.
@item Table @tab 64 @tab Any character that is allowed in file name, except @code{/} or @code{.} @item Table @tab 64 @tab Any character that is allowed in file name, except @code{/} or @code{.}
...@@ -12747,7 +12754,7 @@ standard, @strong{MySQL} recognizes @code{DOUBLE} as a synonym for the ...@@ -12747,7 +12754,7 @@ standard, @strong{MySQL} recognizes @code{DOUBLE} as a synonym for the
@code{DOUBLE PRECISION} type. In contrast with the standard's @code{DOUBLE PRECISION} type. In contrast with the standard's
requirement that the precision for @code{REAL} be smaller than that used requirement that the precision for @code{REAL} be smaller than that used
for @code{DOUBLE PRECISION}, @strong{MySQL} implements both as 8-byte for @code{DOUBLE PRECISION}, @strong{MySQL} implements both as 8-byte
double-precision floating point values (when running in non-"Ansi mode"). double-precision floating point values (when not running in ``Ansi mode'').
For maximum portability, code requiring storage of approximate numeric For maximum portability, code requiring storage of approximate numeric
data values should use @code{FLOAT} or @code{DOUBLE PRECISION} with no data values should use @code{FLOAT} or @code{DOUBLE PRECISION} with no
specification of precision or number of decimal points. specification of precision or number of decimal points.
...@@ -14303,7 +14310,7 @@ Performs a pattern match of a string expression @code{expr} against a pattern ...@@ -14303,7 +14310,7 @@ Performs a pattern match of a string expression @code{expr} against a pattern
returns @code{0}. @code{RLIKE} is a synonym for @code{REGEXP}, provided for returns @code{0}. @code{RLIKE} is a synonym for @code{REGEXP}, provided for
@code{mSQL} compatibility. Note: Because @strong{MySQL} uses the C escape @code{mSQL} compatibility. Note: Because @strong{MySQL} uses the C escape
syntax in strings (e.g., @samp{\n}), you must double any @samp{\} that you syntax in strings (e.g., @samp{\n}), you must double any @samp{\} that you
use in your @code{REGEXP} strings. In @strong{MySQL} 3.23.4, use in your @code{REGEXP} strings. As of @strong{MySQL} 3.23.4,
@code{REGEXP} is case insensitive for normal (not binary) strings. @code{REGEXP} is case insensitive for normal (not binary) strings.
@example @example
...@@ -14447,6 +14454,7 @@ The default return type of @code{IF()} (which may matter when it stored into ...@@ -14447,6 +14454,7 @@ The default return type of @code{IF()} (which may matter when it stored into
a temporary table) is calculated in @strong{MySQL} 3.23 as follows: a temporary table) is calculated in @strong{MySQL} 3.23 as follows:
@multitable @columnfractions .7 .3 @multitable @columnfractions .7 .3
@item @strong{Expression} @tab @strong{Return value}
@item expr2 or expr3 returns string @tab string @item expr2 or expr3 returns string @tab string
@item expr2 or expr3 returns a floating point value @tab floating point @item expr2 or expr3 returns a floating point value @tab floating point
@item expr2 or expr3 returns an integer @tab integer @item expr2 or expr3 returns an integer @tab integer
...@@ -14969,7 +14977,7 @@ mysql> select CONCAT(14.3); ...@@ -14969,7 +14977,7 @@ mysql> select CONCAT(14.3);
@item CONCAT_WS(separator, str1, str2,...) @item CONCAT_WS(separator, str1, str2,...)
@code{CONCAT_WS()} stands for CONCAT With Separator and is a special form of @code{CONCAT_WS()} stands for CONCAT With Separator and is a special form of
@code{CONCAT()}. The irst argument is the separator for the rest of the @code{CONCAT()}. The first argument is the separator for the rest of the
arguments. The separator can be a string as well as the rest of the arguments. The separator can be a string as well as the rest of the
arguments. If the separator is @code{NULL}, the result will be @code{NULL}. arguments. If the separator is @code{NULL}, the result will be @code{NULL}.
The function will skip any @code{NULL}s and empty strings, after the The function will skip any @code{NULL}s and empty strings, after the
...@@ -15709,7 +15717,7 @@ the days that were lost when the calender was changed. ...@@ -15709,7 +15717,7 @@ the days that were lost when the calender was changed.
@item DATE_FORMAT(date,format) @item DATE_FORMAT(date,format)
Formats the @code{date} value according to the @code{format} string. The Formats the @code{date} value according to the @code{format} string. The
following specifiers may be used in the @code{format} string: following specifiers may be used in the @code{format} string:
@multitable @columnfractions .1 .9 @multitable @columnfractions .1 .6
@item @code{%M} @tab Month name (@code{January}..@code{December}) @item @code{%M} @tab Month name (@code{January}..@code{December})
@item @code{%W} @tab Weekday name (@code{Sunday}..@code{Saturday}) @item @code{%W} @tab Weekday name (@code{Sunday}..@code{Saturday})
@item @code{%D} @tab Day of the month with english suffix (@code{1st}, @code{2nd}, @code{3rd}, etc.) @item @code{%D} @tab Day of the month with english suffix (@code{1st}, @code{2nd}, @code{3rd}, etc.)
...@@ -16680,7 +16688,7 @@ in high-byte-first-order directly after the key, to improve ...@@ -16680,7 +16688,7 @@ in high-byte-first-order directly after the key, to improve
compression. This means that if you have many equal keys on two rows compression. This means that if you have many equal keys on two rows
in a row, all following 'same' keys will usually only take 2 bytes in a row, all following 'same' keys will usually only take 2 bytes
(including the pointer to the row). Compare this to the ordinary case (including the pointer to the row). Compare this to the ordinary case
where the following keys will take 'storage_size_for_key' + where the following keys will take storage_size_for_key +
pointer_size (usually 4). On the other hand, if all keys are pointer_size (usually 4). On the other hand, if all keys are
totally different, you will lose 1 byte per key, if the key isn't a totally different, you will lose 1 byte per key, if the key isn't a
key that can have @code{NULL} values (In this case the packed key length will key that can have @code{NULL} values (In this case the packed key length will
...@@ -16712,7 +16720,7 @@ for this). ...@@ -16712,7 +16720,7 @@ for this).
If you specify @code{RAID_TYPE=STRIPED} for a @code{MyISAM} table, If you specify @code{RAID_TYPE=STRIPED} for a @code{MyISAM} table,
@code{MyISAM} will create @code{RAID_CHUNKS} sub-directories named 00, @code{MyISAM} will create @code{RAID_CHUNKS} sub-directories named 00,
01, 02 in the database directory. In each of these directories 01, 02 in the database directory. In each of these directories
@code{MyISAM} will create an @code{table_name.MYD}. When writing data @code{MyISAM} will create a @code{table_name.MYD}. When writing data
to the data file, the @code{RAID} handler will map the first to the data file, the @code{RAID} handler will map the first
@code{RAID_CHUNKSIZE} *1024 bytes to the first file, the next @code{RAID_CHUNKSIZE} *1024 bytes to the first file, the next
@code{RAID_CHUNKSIZE} *1024 bytes to the next file and so on. @code{RAID_CHUNKSIZE} *1024 bytes to the next file and so on.
...@@ -17106,8 +17114,9 @@ Check the table(s) for errors and updates the key statistics for the table. ...@@ -17106,8 +17114,9 @@ Check the table(s) for errors and updates the key statistics for the table.
The command returns a table with the following columns: The command returns a table with the following columns:
@multitable @columnfractions .35 .65 @multitable @columnfractions .35 .65
@item @strong{Column} @tab @strong{Value}
@item Table @tab Table name @item Table @tab Table name
@item Op @tab Always 'check' @item Op @tab Always ``check''
@item Msg_type @tab One of @code{status}, @code{error}, @code{info} or @code{warning}. @item Msg_type @tab One of @code{status}, @code{error}, @code{info} or @code{warning}.
@item Msg_text @tab The message. @item Msg_text @tab The message.
@end multitable @end multitable
...@@ -17122,10 +17131,11 @@ told @strong{MySQL} that there wasn't any need to check the table. ...@@ -17122,10 +17131,11 @@ told @strong{MySQL} that there wasn't any need to check the table.
The different check types stand for the following: The different check types stand for the following:
@multitable @columnfractions .20 .80 @multitable @columnfractions .20 .80
@item @strong{Type} @tab @strong{Meaning}
@item @code{QUICK} @tab Don't scan the rows for fixed size record tables. @item @code{QUICK} @tab Don't scan the rows for fixed size record tables.
@item @code{FAST} @tab Only check tables which haven't been closed properly. @item @code{FAST} @tab Only check tables which haven't been closed properly.
@item @code{CHANGED} @tab Only check tables which have been changed since last check or haven't been closed properly. @item @code{CHANGED} @tab Only check tables which have been changed since last check or haven't been closed properly.
@item @code{EXTENDED} @tab Do a full key lookup for all keys for each row. This enasures that the table is 100 % consistent, but will take a long time! @item @code{EXTENDED} @tab Do a full key lookup for all keys for each row. This ensures that the table is 100 % consistent, but will take a long time!
@end multitable @end multitable
@findex ANALYZE TABLE @findex ANALYZE TABLE
...@@ -17147,8 +17157,9 @@ constant. ...@@ -17147,8 +17157,9 @@ constant.
The command returns a table with the following columns: The command returns a table with the following columns:
@multitable @columnfractions .35 .65 @multitable @columnfractions .35 .65
@item @strong{Column} @tab @strong{Value}
@item Table @tab Table name @item Table @tab Table name
@item Op @tab Always 'analyze @item Op @tab Always ``analyze''
@item Msg_type @tab One of @code{status}, @code{error}, @code{info} or @code{warning}. @item Msg_type @tab One of @code{status}, @code{error}, @code{info} or @code{warning}.
@item Msg_text @tab The message. @item Msg_text @tab The message.
@end multitable @end multitable
...@@ -17174,8 +17185,9 @@ Repair the corrupted table. The command returns a table with the following ...@@ -17174,8 +17185,9 @@ Repair the corrupted table. The command returns a table with the following
columns: columns:
@multitable @columnfractions .35 .65 @multitable @columnfractions .35 .65
@item @strong{Column} @tab @strong{Value}
@item Table @tab Table name @item Table @tab Table name
@item Op @tab Always 'repair' @item Op @tab Always ``repair''
@item Msg_type @tab One of @code{status}, @code{error}, @code{info} or @code{warning}. @item Msg_type @tab One of @code{status}, @code{error}, @code{info} or @code{warning}.
@item Msg_text @tab The message. @item Msg_text @tab The message.
@end multitable @end multitable
...@@ -17683,7 +17695,7 @@ The query cannot contain an @code{ORDER BY} clause. ...@@ -17683,7 +17695,7 @@ The query cannot contain an @code{ORDER BY} clause.
The target table of the @code{INSERT} statement cannot appear in the The target table of the @code{INSERT} statement cannot appear in the
@code{FROM} clause of the @code{SELECT} part of the query, because it's @code{FROM} clause of the @code{SELECT} part of the query, because it's
forbidden in ANSI SQL to @code{SELECT} from the same table into which you are forbidden in ANSI SQL to @code{SELECT} from the same table into which you are
@code{INSERT}ing. (The problem is that the @code{SELECT} possibly would inserting. (The problem is that the @code{SELECT} possibly would
find records that were inserted earlier during the same run. When using find records that were inserted earlier during the same run. When using
sub-select clauses, the situation could easily be very confusing!) sub-select clauses, the situation could easily be very confusing!)
...@@ -17831,6 +17843,7 @@ The following status variables provide information about @code{INSERT ...@@ -17831,6 +17843,7 @@ The following status variables provide information about @code{INSERT
DELAYED} commands: DELAYED} commands:
@multitable @columnfractions .35 .65 @multitable @columnfractions .35 .65
@item @strong{Variable} @tab @strong{Meaning}
@item @code{Delayed_insert_threads} @tab Number of handler threads @item @code{Delayed_insert_threads} @tab Number of handler threads
@item @code{Delayed_writes} @tab Number of rows written with @code{INSERT DELAYED} @item @code{Delayed_writes} @tab Number of rows written with @code{INSERT DELAYED}
@item @code{Not_flushed_delayed_rows} @tab Number of rows waiting to be written @item @code{Not_flushed_delayed_rows} @tab Number of rows waiting to be written
...@@ -18672,6 +18685,7 @@ below, though the format and numbers probably differ: ...@@ -18672,6 +18685,7 @@ below, though the format and numbers probably differ:
The status variables listed above have the following meaning: The status variables listed above have the following meaning:
@multitable @columnfractions .35 .65 @multitable @columnfractions .35 .65
@item @strong{Variable} @tab @strong{Meaning}
@item @code{Aborted_clients} @tab Number of connections that has been aborted because the client has died without closing the connection properly. @item @code{Aborted_clients} @tab Number of connections that has been aborted because the client has died without closing the connection properly.
@item @code{Aborted_connects} @tab Number of tries to connect to the @strong{MySQL} server that has failed. @item @code{Aborted_connects} @tab Number of tries to connect to the @strong{MySQL} server that has failed.
@item @code{Bytes_received} @tab Number of bytes received from the client @item @code{Bytes_received} @tab Number of bytes received from the client
...@@ -18758,9 +18772,9 @@ The output resembles that shown below, though the format and numbers may ...@@ -18758,9 +18772,9 @@ The output resembles that shown below, though the format and numbers may
differ somewhat: differ somewhat:
@example @example
+----------------------------+------------------------------+ +-------------------------+---------------------------------+
| Variable_name | Value | | Variable_name | Value |
+----------------------------+------------------------------+ +-------------------------+---------------------------------+
| ansi_mode | OFF | | ansi_mode | OFF |
| back_log | 50 | | back_log | 50 |
| basedir | /usr/local/mysql/ | | basedir | /usr/local/mysql/ |
...@@ -18821,7 +18835,7 @@ differ somewhat: ...@@ -18821,7 +18835,7 @@ differ somewhat:
| tmpdir | /tmp/ | | tmpdir | /tmp/ |
| version | 3.23.21-beta-debug | | version | 3.23.21-beta-debug |
| wait_timeout | 28800 | | wait_timeout | 28800 |
+-----------------------------------+-----------------------+ +-------------------------+---------------------------------+
@end example @end example
Each option is described below. Values for buffer sizes, lengths and stack Each option is described below. Values for buffer sizes, lengths and stack
...@@ -19128,12 +19142,14 @@ mysql> SHOW GRANTS FOR root@@localhost; ...@@ -19128,12 +19142,14 @@ mysql> SHOW GRANTS FOR root@@localhost;
@subsection SHOW CREATE TABLE @subsection SHOW CREATE TABLE
Shows a @code{CREATE TABLE} statement that will create the given table Shows a @code{CREATE TABLE} statement that will create the given table
@example @example
mysql> show create table foo; mysql> show create table t\G
+-------+-------------------------------------------------------------------------------------+ *************************** 1. row ***************************
| Table | Create Table | Table: t
+-------+-------------------------------------------------------------------------------------+ Create Table: CREATE TABLE t (
| foo | create table foo(n int(11) default NULL auto_increment,primary key (n)) type=MyISAM | id int(11) default NULL auto_increment,
+-------+-------------------------------------------------------------------------------------+ s char(60) default NULL,
PRIMARY KEY (id)
) TYPE=MyISAM
@end example @end example
...@@ -20264,7 +20280,7 @@ TABLE} statement. @xref{ALTER TABLE, , @code{ALTER TABLE}}. ...@@ -20264,7 +20280,7 @@ TABLE} statement. @xref{ALTER TABLE, , @code{ALTER TABLE}}.
Note that @strong{MySQL} supports two different kind of Note that @strong{MySQL} supports two different kind of
tables. Transactions safe tables (@code{BDB}) and not transaction safe tables. Transactions safe tables (@code{BDB}) and not transaction safe
tables (@code{ISAM},@code{MyISAM} and @code{HEAP}. tables (@code{ISAM}, @code{MyISAM} and @code{HEAP}).
Advantages of transaction safe tables (TST) Advantages of transaction safe tables (TST)
...@@ -20554,7 +20570,7 @@ This is a read only type that is generated with the optional ...@@ -20554,7 +20570,7 @@ This is a read only type that is generated with the optional
All MySQL distributions, even those that existed before @strong{MySQL} All MySQL distributions, even those that existed before @strong{MySQL}
went GPL, can read tables that were compressed with @code{myisampack}. went GPL, can read tables that were compressed with @code{myisampack}.
@item @item
Compressed tables takes very little disk space. This minimizes disk usage which Compressed tables take very little disk space. This minimizes disk usage which
is very nice when using slow disks (like CD-ROMs). is very nice when using slow disks (like CD-ROMs).
@item @item
Each record is compressed separately (very little access overhead). The Each record is compressed separately (very little access overhead). The
...@@ -20691,8 +20707,10 @@ To ensure that you accidentally don't do anything stupid, you can't create ...@@ -20691,8 +20707,10 @@ To ensure that you accidentally don't do anything stupid, you can't create
Memory needed for one row in a @code{HEAP} table is: Memory needed for one row in a @code{HEAP} table is:
SUM_OVER_ALL_KEYS(max_length_of_key + sizeof(char*)*2) + @example
ALIGN(length_of_row+1,sizeof(char*)) SUM_OVER_ALL_KEYS(max_length_of_key + sizeof(char*) * 2)
+ ALIGN(length_of_row+1, sizeof(char*))
@end example
@code{sizeof(char*)} is 4 on 32 bit machines and 8 on 64 bit machines. @code{sizeof(char*)} is 4 on 32 bit machines and 8 on 64 bit machines.
...@@ -20711,28 +20729,25 @@ Sleepycat's download page at ...@@ -20711,28 +20729,25 @@ Sleepycat's download page at
To install Berkeley DB first uncompress the @code{BDB} distribution To install Berkeley DB first uncompress the @code{BDB} distribution
and follow the instructions in the README provided in the distiribution and follow the instructions in the README provided in the distiribution
directory. Basicly what you need to do is: directory. Basically what you need to do is:
@itemize @bullet
@item @example
cd build_[your_os] cd build_[your_os]
@item
../dist/configure ../dist/configure
@item
make make
@item
make install make install
@end itemize @end example
Please refer to the manual provided by @code{BDB} distribution for Please refer to the manual provided by @code{BDB} distribution for
more/updated information. more/updated information.
After this you need to configure your @strong{MySQL} with After this you need to configure your @strong{MySQL} with
--with-berkeley-db=DIR The directory is the one where you installed @code{--with-berkeley-db=DIR}. The directory is the one where you installed
@code{BDB} binaries with make install. (Usually it is @code{BDB} binaries with @code{make install}. (Usually it is
/usr/local/BerkeleyDB.3.1/) You can give additional options to /usr/local/BerkeleyDB.3.1/) You can give additional options to
@strong{MySQL} configure, --with-berkeley-db-includes=DIR and @strong{MySQL} configure, @code{--with-berkeley-db-includes=DIR} and
--with-berkeley-db-libs=DIR, if the @code{BDB} includes and/or libs @code{--with-berkeley-db-libs=DIR}, if the @code{BDB} includes and/or libs
directory is not under the first directory. By default they are. directory is not under the first directory, by default they are.
Then complete the @strong{MySQL} installation as normal. Then complete the @strong{MySQL} installation as normal.
Even if Berkeley DB is in itself very tested and reliably, the Even if Berkeley DB is in itself very tested and reliably, the
...@@ -20743,17 +20758,18 @@ If you are running with @code{AUTOCOMMIT=0} then your changes in @code{BDB} ...@@ -20743,17 +20758,18 @@ If you are running with @code{AUTOCOMMIT=0} then your changes in @code{BDB}
tables will not be updated until you execute @code{COMMIT}. Instead of commit tables will not be updated until you execute @code{COMMIT}. Instead of commit
you can execute @code{ROLLBACK} to forget your changes. @xref{COMMIT}. you can execute @code{ROLLBACK} to forget your changes. @xref{COMMIT}.
The following options to @code{mysqld} can be used to change the behavour of The following options to @code{mysqld} can be used to change the behavior of
BDB tables: BDB tables:
@multitable @columnfractions .30 .70 @multitable @columnfractions .30 .70
@item --bdb-home= directory @tab Base directory for BDB tables. This should be the same directory you use for --datadir. @item @strong{Option} @tab @strong{Meaning}
@item --bdb-lock-detect=# @tab Berkeley lock detect. One of (DEFAULT, OLDEST, RANDOM or YOUNGEST) @item @code{--bdb-home=directory} @tab Base directory for BDB tables. This should be the same directory you use for --datadir.
@item --bdb-logdir=directory @tab Berkeley DB log file directory @item @code{--bdb-lock-detect=#} @tab Berkeley lock detect. One of (DEFAULT, OLDEST, RANDOM or YOUNGEST)
@item --bdb-nosync @tab Don't synchronously flush logs @item @code{--bdb-logdir=directory} @tab Berkeley DB log file directory
@item --bdb-recover @tab Start Berkeley DB in recover mode @item @code{--bdb-nosync} @tab Don't synchronously flush logs
@item --bdb-tmpdir=directory @tab Berkeley DB tempfile name @item @code{--bdb-recover} @tab Start Berkeley DB in recover mode
@item --skip-bdb @tab Don't use berkeley db. @item @code{--bdb-tmpdir=directory} @tab Berkeley DB tempfile name
@item @code{--skip-bdb} @tab Don't use berkeley db.
@end multitable @end multitable
If you use @code{--skip-bdb}, @strong{MySQL} will not initialize the If you use @code{--skip-bdb}, @strong{MySQL} will not initialize the
...@@ -20855,7 +20871,7 @@ a @strong{MySQL} server is available to which you can connect. If this is ...@@ -20855,7 +20871,7 @@ a @strong{MySQL} server is available to which you can connect. If this is
not true, contact your @strong{MySQL} administrator. (If @emph{you} are the not true, contact your @strong{MySQL} administrator. (If @emph{you} are the
administrator, you will need to consult other sections of this manual.) administrator, you will need to consult other sections of this manual.)
The chapter describes the entire process of setting up and using a This chapter describes the entire process of setting up and using a
database. If you are interested only in accessing an already-existing database. If you are interested only in accessing an already-existing
database, you may want to skip over the sections that describe how to database, you may want to skip over the sections that describe how to
create the database and the tables it contains. create the database and the tables it contains.
...@@ -20917,7 +20933,7 @@ mysql> QUIT ...@@ -20917,7 +20933,7 @@ mysql> QUIT
Bye Bye
@end example @end example
You can also disconnect by typing control-D. You can also disconnect by typing Control-D.
Most examples in the following sections assume you are connected to the Most examples in the following sections assume you are connected to the
server. They indicate this by the @code{mysql>} prompt. server. They indicate this by the @code{mysql>} prompt.
...@@ -21189,7 +21205,7 @@ SELECT * FROM shop ...@@ -21189,7 +21205,7 @@ SELECT * FROM shop
@menu @menu
* example-Maximum-column:: The maximum value for a column * example-Maximum-column:: The maximum value for a column
* example-Maximum-row:: The row holding the maximum of a certain column * example-Maximum-row:: The row holding the maximum of a certain column
* example-Maximum-column-group:: Maximum of column: per group: only the values * example-Maximum-column-group:: Maximum of column per group
* example-Maximum-column-group-row:: The rows holding the group-wise maximum of a certain field * example-Maximum-column-group-row:: The rows holding the group-wise maximum of a certain field
* example-Foreign keys:: Using foreign keys * example-Foreign keys:: Using foreign keys
@end menu @end menu
...@@ -21251,7 +21267,7 @@ LIMIT 1 ...@@ -21251,7 +21267,7 @@ LIMIT 1
the @code{LIMIT} solution shows only one of them! the @code{LIMIT} solution shows only one of them!
@node example-Maximum-column-group, example-Maximum-column-group-row, example-Maximum-row, Examples @node example-Maximum-column-group, example-Maximum-column-group-row, example-Maximum-row, Examples
@subsection Maximum of column: per group: only the values @subsection Maximum of column per group
``What's the highest price per article?'' ``What's the highest price per article?''
...@@ -23318,7 +23334,8 @@ to 8 million terabytes (2 ^ 63 bytes). ...@@ -23318,7 +23334,8 @@ to 8 million terabytes (2 ^ 63 bytes).
Note however that operating systems have their own file size Note however that operating systems have their own file size
limits. Here are some examples: limits. Here are some examples:
@multitable @columnfractions .6 .4 @multitable @columnfractions .5 .5
@item @strong{Operating System} @tab @strong{File Size Limit}
@item Linux-Intel @tab 2G (or 4G with reiserfs) @item Linux-Intel @tab 2G (or 4G with reiserfs)
@item Linux-Alpha @tab 8T (?) @item Linux-Alpha @tab 8T (?)
@item Solaris 2.5.1 @tab 2G (possible 4G with patch) @item Solaris 2.5.1 @tab 2G (possible 4G with patch)
...@@ -23533,53 +23550,107 @@ databases should not be logged to the binary log with @code{binlog-ignore-db} ...@@ -23533,53 +23550,107 @@ databases should not be logged to the binary log with @code{binlog-ignore-db}
The table below explains the replications options in @code{my.cnf} . All The table below explains the replications options in @code{my.cnf} . All
of the are available starting in 3.23.15 unless indicated otherwise. of the are available starting in 3.23.15 unless indicated otherwise.
@multitable @columnfractions .25 .25 .25 .25 @multitable @columnfractions .3 .7
@item @strong{Option} @tab @strong{Description} @tab @strong{Where to set} @tab @strong{Example}
@item @code{log-bin} @tab Should be set on the master. Tells it to keep a binary update @item @strong{Option} @tab @strong{Description}
log. If a parameter is specified, the log will be written to the specified location. @tab Master @tab @item
@code{log-bin} @code{log-bin}
@item @code{log-bin-index} @tab Because the user could issue @code{FLUSH LOGS} command, we need to @tab Should be set on the master. Tells it to keep a binary update log.
know which log is currently active and which ones have been rotated out and it what sequence. This info If a parameter is specified, the log will be written to the specified
is stored in the binary log index file. The default is `hostname`.index . You can use this option location.
if you want to be a rebel. @tab Master @tab @code{log-bin-index=db.index} (Set on @strong{Master}, Example: @code{log-bin})
@item @code{master-host} @tab Master hostname or IP address for replication. If not set,
the slave thread will not be started @tab Slave @tab @code{master-host=db-master.mycompany.com} @item
@item @code{master-user} @tab The user the slave thread will authenticate as when connecting to @code{log-bin-index}
the master. The user must have @code{FILE} privilige. If the master user is not set, user @code{test} @tab Because the user could issue @code{FLUSH LOGS} command, we need to
is assumed. @tab Slave @tab @code{master-user=scott} know which log is currently active and which ones have been rotated out
@item @code{master-password} @tab The password the slave thread will authenticate with when and it what sequence. This info is stored in the binary log index file.
connecting to the master. If not set, empty password is assumed @tab Slave @tab The default is `hostname`.index . You can use this option
@code{master-password=tiger} if you want to be a rebel.
@item @code{master-port} @tab The port the master is listening on. If not set, the compiled setting of (Set on @strong{Master}, Example: @code{log-bin-index=db.index})
@code{MYSQL_PORT} is assumed. If you have not tinkered with @code{configure} options, this should be
3306. @tab Slave @tab @code{master-port=3306} @item
@item @code{master-connect-retry} @tab The number of seconds the slave thread will sleep before retrying @code{master-host}
to connect to the master in case the master goes down or the connection is lost. @tab Master hostname or IP address for replication. If not set, the slave
Default is 60. @tab Slave @tab @code{master-connect-retry=60} thread will not be started.
@item @code{master-info-file} @tab (Set on @strong{Slave}, Example: @code{master-host=db-master.mycompany.com})
The location of the file that remembers where we left off on the master
@item
@code{master-user}
@tab The user the slave thread will authenticate as when connecting to
the master. The user must have @code{FILE} privilige. If the master user
is not set, user @code{test} is assumed.
(Set on @strong{Slave}, Example: @code{master-user=scott})
@item
@code{master-password}
@tab The password the slave thread will authenticate with when connecting
to the master. If not set, empty password is assumed
(Set on @strong{Slave}, Example: @code{master-password=tiger})
@item
@code{master-port}
@tab The port the master is listening on. If not set, the compiled setting
of @code{MYSQL_PORT} is assumed. If you have not tinkered with @code{configure}
options, this should be 3306.
(Set on @strong{Slave}, Example: @code{master-port=3306})
@item
@code{master-connect-retry}
@tab The number of seconds the slave thread will sleep before retrying to
connect to the master in case the master goes down or the connection is lost.
Default is 60.
(Set on @strong{Slave}, Example: @code{master-connect-retry=60})
@item
@code{master-info-file}
@tab The location of the file that remembers where we left off on the master
during the replication process. The default is master.info in the data during the replication process. The default is master.info in the data
directory. Sasha: The only reason I see for ever changing the default directory. Sasha: The only reason I see for ever changing the default
is the desire to be rebelious. is the desire to be rebelious.
@tab Slave @tab @code{master-info-file=master.info} (Set on @strong{Slave}, Example: @code{master-info-file=master.info})
@item @code{replicate-do-db} @tab Tells the slave thread to restrict replication to the specified database. To specify more than one database, use the directive multiple times, once for each database.
Note that this will only work if you do not use cross-database queries such as @item
@code{UPDATE some_db.some_table SET foo='bar'} while having selected a different or @code{replicate-do-db}
no database. @tab Slave @tab @code{replicate-do-db=some_db} @tab Tells the slave thread to restrict replication to the specified database.
@item @code{replicate-ignore-db} @tab Tells the slave thread to not replicate to the specified To specify more than one database, use the directive multiple times, once for
database. To specify more than one database to ignore, use the directive multiple times, each database. Note that this will only work if you do not use cross-database
once for each database. You must not use cross database updates for this option. @tab Slave @tab @code{replicate-ignore-db=some_db} queries such as @code{UPDATE some_db.some_table SET foo='bar'} while having
@item @code{sql-bin-update-same} @tab If set, setting @code{SQL_LOG_BIN} to a value will selected a different or no database.
automatically set @code{SQL_LOG_UPDATE} to the same value and vice (Set on @strong{Slave}, Example: @code{replicate-do-db=some_db})
versa. @tab Master @tab @code{sql-bin-update-same}
@item
@item @code{log-slave-updates} @tab Tells the slave to log the updates from the slave thread to the binary log. Off by default. You will need to turn it on if you plan to daisy-chain the slaves @tab Slave @tab @code{log-slave-updates} @code{replicate-ignore-db}
@item @code{binlog-do-db} @tab Tells the master it should log updates @tab Tells the slave thread to not replicate to the specified database. To
for the specified database, and exclude all others not explicitly specify more than one database to ignore, use the directive multiple times,
mentioned. @tab Master @tab @code{binlog-do-db=some_database} once for each database. You must not use cross database updates for this
@item @code{binlog-ignore-db} @tab Tells the master that updates to the given database option.
should not be logged to the binary log @tab Master @tab (Set on @strong{Slave}, Example: @code{replicate-ignore-db=some_db})
@code{binlog-ignore-db=some_database}
@item
@code{sql-bin-update-same}
@tab If set, setting @code{SQL_LOG_BIN} to a value will automatically set
@code{SQL_LOG_UPDATE} to the same value and vice versa.
(Set on @strong{Master}, Example: @code{sql-bin-update-same})
@item
@code{log-slave-updates}
@tab Tells the slave to log the updates from the slave thread to the binary
log. Off by default. You will need to turn it on if you plan to daisy-chain
the slaves
(Set on @strong{Slave}, Example: @code{log-slave-updates})
@item
@code{binlog-do-db}
@tab Tells the master it should log updates for the specified database, and
exclude all others not explicitly mentioned.
(Set on @strong{Master}, Example: @code{binlog-do-db=some_database})
@item
@code{binlog-ignore-db}
@tab Tells the master that updates to the given database should not be logged
to the binary log
(Set on @strong{Master}, Example: @code{binlog-ignore-db=some_database})
@end multitable @end multitable
...@@ -23589,39 +23660,66 @@ should not be logged to the binary log @tab Master @tab ...@@ -23589,39 +23660,66 @@ should not be logged to the binary log @tab Master @tab
Replication can be controlled through the SQL interface. Below is the Replication can be controlled through the SQL interface. Below is the
summary of commands: summary of commands:
@multitable @columnfractions .30 .40 .30 @multitable @columnfractions .30 .70
@item @strong{Command} @tab @strong{Description} @tab @strong{Where to run} @item @strong{Command} @tab @strong{Description}
@item @code{SLAVE START} @tab Starts the slave thread. @tab Slave
@item @code{SLAVE STOP} @tab Stops the slave thread. @tab Slave
@item @code{SET SQL_LOG_BIN=0} @tab Disables update logging @tab Master
@item @code{SET SQL_LOG_BIN=1} @tab Re-enable update logging @tab Master
@item @code{FLUSH MASTER} @tab Deletes all binary logs listed in the inded file, resetting the binlog index file to be empty. @tab Master
@item @code{FLUSH SLAVE} @tab Makes the slave forget its replication position in the master logs @tab Slave
@item @code{LOAD TABLE tblname FROM MASTER} @tab Downloads a copy of the table from master to the slave @tab Slave
@item @code{CHANGE MASTER TO master_def_list} @tab Changes the master parameters
to the values specified in @code{master_def_list} and restarts the slave thread.
@code{master_def_list} is a comma-separated list of @code{master_def} where
@code{master_def} is one of the following: @code{MASTER_HOST},
@code{MASTER_USER}, @code{MASTER_PASSWORD}, @code{MASTER_PORT},
@code{MASTER_CONNECT_RETRY}, @code{MASTER_LOG_FILE}, @code{MASTER_LOG_POS}.
Example: @code{CHANGE MASTER TO MASTER_HOST='master2.mycompany.com',
MASTER_USER='replication', MASTER_PASSWORD='bigs3cret', MASTER_PORT=3306;}. You
only need to speficy the values that need to be changed. The values that you
omit will stay the same with the exception of when you change the host or the
port. In that case, the slave will assume that since you are connecting to a
different host or a different port, the master is different, therefore, the old
values of log and position are not any more applicable, and will automatically
reset them to empty string and 0 respectively ( the start values). Note that
if you restart the slave, it will remember its last master. If this is not desirable,
you should delete @code{master.info} file before restarting, and the slave will read
its master from @code{my.cnf} or command line.
@tab Slave
@item @code{SHOW MASTER STATUS} @tab Provides status info on the binlog of the
master @tab Master
@item @code{SHOW SLAVE STATUS} @tab Provides status info on essential parameters
of the slave thread @tab Slave
@item @code{SLAVE START}
@tab Starts the slave thread. (Slave)
@item @code{SLAVE STOP}
@tab Stops the slave thread. (Slave)
@item @code{SET SQL_LOG_BIN=0}
@tab Disables update logging (Master)
@item @code{SET SQL_LOG_BIN=1}
@tab Re-enable update logging (Master)
@item @code{FLUSH MASTER}
@tab Deletes all binary logs listed in the index file, resetting the binlog
index file to be empty. (Master)
@item @code{FLUSH SLAVE}
@tab Makes the slave forget its replication position in the master
logs. (Slave)
@item @code{LOAD TABLE tblname FROM MASTER}
@tab Downloads a copy of the table from master to the slave. (Slave)
@item @code{CHANGE MASTER TO master_def_list}
@tab Changes the master parameters to the values specified in
@code{master_def_list} and restarts the slave thread. @code{master_def_list}
is a comma-separated list of @code{master_def} where @code{master_def} is
one of the following: @code{MASTER_HOST}, @code{MASTER_USER},
@code{MASTER_PASSWORD}, @code{MASTER_PORT}, @code{MASTER_CONNECT_RETRY},
@code{MASTER_LOG_FILE}, @code{MASTER_LOG_POS}. Example:
@example
CHANGE MASTER TO
MASTER_HOST='master2.mycompany.com',
MASTER_USER='replication',
MASTER_PASSWORD='bigs3cret',
MASTER_PORT=3306;
@end example
You only need to specify the values that need to be changed. The values that
you omit will stay the same with the exception of when you change the host or
the port. In that case, the slave will assume that since you are connecting to
a different host or a different port, the master is different, therefore, the
old values of log and position are not applicable anymore, and will
automatically be reset to an empty string and 0, respectively (the start
values). Note that if you restart the slave, it will remember its last master.
If this is not desirable, you should delete the @file{master.info} file before
restarting, and the slave will read its master from @code{my.cnf} or the
command line. (Slave)
@item @code{SHOW MASTER STATUS}
@tab Provides status info on the binlog of the master. (Master)
@item @code{SHOW SLAVE STATUS}
@tab Provides status info on essential parameters of the slave thread. (Slave)
@end multitable @end multitable
...@@ -25324,9 +25422,9 @@ The more common case is that the index and data are stored together ...@@ -25324,9 +25422,9 @@ The more common case is that the index and data are stored together
(like in Oracle/Sybase et al). In this case you will find the row (like in Oracle/Sybase et al). In this case you will find the row
information at the leaf page of the index. The good thing with this information at the leaf page of the index. The good thing with this
layout is that it, in many cases, depending on how well the index is layout is that it, in many cases, depending on how well the index is
cached, saves a disk read. The bad things with this layout is: cached, saves a disk read. The bad things with this layout are:
@table @bullet @itemize @bullet
@item @item
Table scanning is much slower because you have to read through the indexes Table scanning is much slower because you have to read through the indexes
to get at the data. to get at the data.
...@@ -25339,8 +25437,8 @@ You lose a lot of space as you must duplicate indexes from the nodes ...@@ -25339,8 +25437,8 @@ You lose a lot of space as you must duplicate indexes from the nodes
Deletes will degenerate the table over time (as indexes in nodes are Deletes will degenerate the table over time (as indexes in nodes are
usually not updated on delete). usually not updated on delete).
@item @item
It's harder to cache ONLY the index data. Its harder to cache ONLY the index data.
@end table @end itemize
@node Design Limitations, Portability, Design, Performance @node Design Limitations, Portability, Design, Performance
@section MySQL design limitations/tradeoffs @section MySQL design limitations/tradeoffs
...@@ -28730,7 +28828,7 @@ FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' ...@@ -28730,7 +28828,7 @@ FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\'
* Temporary files:: Where @strong{MySQL} stores temporary files * Temporary files:: Where @strong{MySQL} stores temporary files
* Problems with mysql.sock:: How to protect @file{/tmp/mysql.sock} * Problems with mysql.sock:: How to protect @file{/tmp/mysql.sock}
* Error Access denied:: @code{Access denied} error * Error Access denied:: @code{Access denied} error
* Changing MySQL user :: How to run @strong{MySQL} as a normal user * Changing MySQL user:: How to run @strong{MySQL} as a normal user
* Resetting permissions:: How to reset a forgotten password. * Resetting permissions:: How to reset a forgotten password.
* File permissions :: Problems with file permissions * File permissions :: Problems with file permissions
* Not enough file handles:: File not found * Not enough file handles:: File not found
...@@ -29634,12 +29732,12 @@ only by their owners or the superuser (@code{root}). ...@@ -29634,12 +29732,12 @@ only by their owners or the superuser (@code{root}).
You can check if the @code{sticky} bit is set by executing @code{ls -ld /tmp}. You can check if the @code{sticky} bit is set by executing @code{ls -ld /tmp}.
If the last permission bit is @code{t}, the bit is set. If the last permission bit is @code{t}, the bit is set.
@node Error Access denied, Changing MySQL user , Problems with mysql.sock, Problems @node Error Access denied, Changing MySQL user, Problems with mysql.sock, Problems
@section @code{Access denied} error @section @code{Access denied} error
@xref{Privileges}. And especially see @ref{Access denied}. @xref{Privileges}. And especially see @ref{Access denied}.
@node Changing MySQL user , Resetting permissions, Error Access denied, Problems @node Changing MySQL user, Resetting permissions, Error Access denied, Problems
@section How to run MySQL as a normal user @section How to run MySQL as a normal user
The @strong{MySQL} server @code{mysqld} can be started and run by any user. The @strong{MySQL} server @code{mysqld} can be started and run by any user.
...@@ -29703,7 +29801,7 @@ password on the @strong{MySQL} @code{root} users in the access tables. ...@@ -29703,7 +29801,7 @@ password on the @strong{MySQL} @code{root} users in the access tables.
Otherwise, any user with an account on that machine can run @code{mysql -u Otherwise, any user with an account on that machine can run @code{mysql -u
root db_name} and do whatever he likes. root db_name} and do whatever he likes.
@node Resetting permissions, File permissions , Changing MySQL user , Problems @node Resetting permissions, File permissions , Changing MySQL user, Problems
@section How to reset a forgotten password. @section How to reset a forgotten password.
If you have forgotten the @code{root} user password for @strong{MySQL}, you If you have forgotten the @code{root} user password for @strong{MySQL}, you
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment