Commit 8c7186b9 authored by tim@black.box's avatar tim@black.box

Merge work.mysql.com:/home/bk/mysql-4.0 into black.box:/u/home/tim/my/4

parents 00ff406b 9d304d8c
...@@ -487,7 +487,7 @@ language already supports MySQL. ...@@ -487,7 +487,7 @@ language already supports MySQL.
@cindex MySQL, pronunciation @cindex MySQL, pronunciation
@cindex goals of MySQL @cindex goals of MySQL
The official way to pronounce MySQL is ``My Ess Que Ell'' (not The official way to pronounce MySQL is ``My Ess Que Ell'' (not
MY-SEQUEL), but we don't mind if you pronounce it as MY-SEQUEL ``my sequel''), but we don't mind if you pronounce it as ``my sequel''
or in some other localised way. or in some other localised way.
...@@ -1886,7 +1886,7 @@ the electronic mail address @email{mysql-unsubscribe@@lists.mysql.com}. ...@@ -1886,7 +1886,7 @@ the electronic mail address @email{mysql-unsubscribe@@lists.mysql.com}.
Only the address to which you send your messages is significant. The Only the address to which you send your messages is significant. The
subject line and the body of the message are ignored. subject line and the body of the message are ignored.
@c the last two addresses in this paragraph are NOT @email because they @c the last two addresses in this paragraph are not @email because they
@c shouldn't be live links. @c shouldn't be live links.
If your reply address is not valid, you can specify your address If your reply address is not valid, you can specify your address
explicitly. Adding a hyphen to the subscribe or unsubscribe command explicitly. Adding a hyphen to the subscribe or unsubscribe command
...@@ -2327,20 +2327,20 @@ try repairing your tables with @code{myisamchk} or @code{CHECK TABLE} and ...@@ -2327,20 +2327,20 @@ try repairing your tables with @code{myisamchk} or @code{CHECK TABLE} and
@item @item
If you often get corrupted tables you should try to find out when and why this If you often get corrupted tables you should try to find out when and why this
happens! In this case, the @file{mysql-data-directory/'hostname'.err} file happens. In this case, the @file{mysql-data-directory/'hostname'.err} file
may contain some information about what happened. @xref{Error log}. Please may contain some information about what happened. @xref{Error log}. Please
include any relevant information from this file in your bug report! Normally include any relevant information from this file in your bug report. Normally
@code{mysqld} should @strong{NEVER} crash a table if nothing killed it in the @code{mysqld} should @strong{never} crash a table if nothing killed it in the
middle of an update! If you can find the cause of @code{mysqld} dying, middle of an update! If you can find the cause of @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}.
@item @item
If possible, download and install the most recent version of MySQL If possible, download and install the most recent version of MySQL
and check whether or not it solves your problem. All versions of and check whether or not it solves your problem. All versions of
MySQL are thoroughly tested and should work without problems! We MySQL are thoroughly tested and should work without problems. We
believe in making everything as backward compatible as possible, and you believe in making everything as backward compatible as possible, and you
should be able to switch MySQL versions in minutes! should be able to switch MySQL versions without any hassle.
@xref{Which version}. @xref{Which version}.
@end itemize @end itemize
...@@ -5324,7 +5324,7 @@ benchmark page. ...@@ -5324,7 +5324,7 @@ benchmark page.
Before going to the other benchmarks we know of, we would like to give Before going to the other benchmarks we know of, we would like to give
some background on benchmarks: some background on benchmarks:
It's very easy to write a test that shows ANY database to be the best It's very easy to write a test that shows @strong{any} database to be the best
database in the world, by just restricting the test to something the database in the world, by just restricting the test to something the
database is very good at and not testing anything that the database is database is very good at and not testing anything that the database is
not good at. If one, after doing this, summarises the result with as not good at. If one, after doing this, summarises the result with as
...@@ -5362,12 +5362,12 @@ conduct. This was not only tuned to only test what PostgreSQL is absolutely ...@@ -5362,12 +5362,12 @@ conduct. This was not only tuned to only test what PostgreSQL is absolutely
best at, it was also totally unfair against every other database involved in best at, it was also totally unfair against every other database involved in
the test. the test.
@strong{NOTE}: We know that not even some of the main PostgreSQL @strong{Note}: We know that even some of the main PostgreSQL
developers did like the way Great Bridge conducted the benchmark, so we developers did not like the way Great Bridge conducted the benchmark, so we
don't blame them for the way the benchmark was done. don't blame the PostgreSQL team for the way the benchmark was done.
This benchmark has been condemned in a lot of postings and newsgroups so This benchmark has been condemned in a lot of postings and newsgroups so
we will here just shortly repeat some things that where wrong with it. we will here just shortly repeat some things that were wrong with it.
@itemize @bullet @itemize @bullet
@item @item
...@@ -5762,7 +5762,7 @@ Added @code{LOAD DATE INFILE.. UPDATE} syntax. ...@@ -5762,7 +5762,7 @@ Added @code{LOAD DATE INFILE.. UPDATE} syntax.
@item @item
For tables with primary keys, if the data contains the primary key, For tables with primary keys, if the data contains the primary key,
entries matching that primary key are updated from the remainder of the entries matching that primary key are updated from the remainder of the
columns. However, columns MISSING from the incoming data feed are not columns. However, columns @strong{missing} from the incoming data feed are not
touched. touched.
@item @item
For tables tables with primary keys that are missing some part of the key For tables tables with primary keys that are missing some part of the key
...@@ -5831,15 +5831,15 @@ Add support for UNICODE. ...@@ -5831,15 +5831,15 @@ Add support for UNICODE.
@code{NATURAL JOIN} and @code{UNION JOIN} @code{NATURAL JOIN} and @code{UNION JOIN}
@item @item
Allow @code{select a from crash_me left join crash_me2 using (a)}; In this Allow @code{select a from crash_me left join crash_me2 using (a)}; In this
case a is assumed to come from the crash_me table. case @code{a} is assumed to come from the @code{crash_me} table.
@item @item
Fix that @code{ON} and @code{USING} works with the @code{JOIN} Fix that @code{ON} and @code{USING} works with the @code{JOIN}
join type. join type.
@item @item
Oracle like @code{CONNECT BY PRIOR ...} to search hierarchy structures. Oracle like @code{CONNECT BY PRIOR ...} to search hierarchy structures.
@item @item
@code{mysqladmin copy database new-database}. -- Requires COPY command to be @code{mysqladmin copy database new-database}; Requires @code{COPY}
added to @code{mysqld} command to be added to @code{mysqld}
@item @item
Processlist should show number of queries/thread. Processlist should show number of queries/thread.
@item @item
...@@ -7439,7 +7439,7 @@ install the standard @code{MySQL} RPM. ...@@ -7439,7 +7439,7 @@ install the standard @code{MySQL} RPM.
@item @item
If you want to configure @code{mysqld} with some extra features that are If you want to configure @code{mysqld} with some extra features that are
NOT in the standard binary distributions. Here is a list of the most not in the standard binary distributions. Here is a list of the most
common extra options that you may want to use: common extra options that you may want to use:
@itemize @bullet @itemize @bullet
...@@ -7781,7 +7781,7 @@ An alternative installation method under Linux is to use RPM (RedHat Package ...@@ -7781,7 +7781,7 @@ An alternative installation method under Linux is to use RPM (RedHat Package
Manager) distributions. @xref{Linux-RPM}. Manager) distributions. @xref{Linux-RPM}.
@c texi2html fails to split chapters if I use strong for all of this. @c texi2html fails to split chapters if I use strong for all of this.
If you run into problems, @strong{PLEASE ALWAYS USE} @code{mysqlbug} when If you run into problems, @strong{please always use @code{mysqlbug}} when
posting questions to @email{mysql@@lists.mysql.com}. Even if the problem posting questions to @email{mysql@@lists.mysql.com}. Even if the problem
isn't a bug, @code{mysqlbug} gathers system information that will help others isn't a bug, @code{mysqlbug} gathers system information that will help others
solve your problem. By not using @code{mysqlbug}, you lessen the likelihood solve your problem. By not using @code{mysqlbug}, you lessen the likelihood
...@@ -8013,7 +8013,7 @@ sometimes required. If you have problems, we recommend trying GNU ...@@ -8013,7 +8013,7 @@ sometimes required. If you have problems, we recommend trying GNU
@end itemize @end itemize
If you are using a recent version of @strong{gcc}, recent enough to understand If you are using a recent version of @strong{gcc}, recent enough to understand
@code{-fno-exceptions} option, it is @strong{VERY IMPORTANT} that you use @code{-fno-exceptions} option, it is @strong{very important} that you use
it. Otherwise, you may compile a binary that crashes randomly. We also it. Otherwise, you may compile a binary that crashes randomly. We also
recommend that you use @code{-felide-contructors} and @code{-fno-rtti} along recommend that you use @code{-felide-contructors} and @code{-fno-rtti} along
with @code{-fno-exceptions}. When in doubt, do the following: with @code{-fno-exceptions}. When in doubt, do the following:
...@@ -8027,7 +8027,7 @@ CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtt ...@@ -8027,7 +8027,7 @@ CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtt
On most systems this will give you a fast and stable binary. On most systems this will give you a fast and stable binary.
@c texi2html fails to split chapters if I use strong for all of this. @c texi2html fails to split chapters if I use strong for all of this.
If you run into problems, @strong{PLEASE ALWAYS USE @code{mysqlbug}} when If you run into problems, @strong{please always use @code{mysqlbug}} when
posting questions to @email{mysql@@lists.mysql.com}. Even if the problem posting questions to @email{mysql@@lists.mysql.com}. Even if the problem
isn't a bug, @code{mysqlbug} gathers system information that will help others isn't a bug, @code{mysqlbug} gathers system information that will help others
solve your problem. By not using @code{mysqlbug}, you lessen the likelihood solve your problem. By not using @code{mysqlbug}, you lessen the likelihood
...@@ -8507,7 +8507,7 @@ system-specific section of this manual. ...@@ -8507,7 +8507,7 @@ system-specific section of this manual.
@cindex BitKeeper tree @cindex BitKeeper tree
@cindex cvs tree @cindex cvs tree
@strong{CAUTION:} You should read this section only if you are interested @strong{Caution:} You should read this section only if you are interested
in helping us test our new code. If you just want to get MySQL up in helping us test our new code. If you just want to get MySQL up
and running on your system, you should use a standard release distribution and running on your system, you should use a standard release distribution
(either a source or binary distribution will do). (either a source or binary distribution will do).
...@@ -9880,7 +9880,7 @@ return any server error, only @code{CR_UNKNOWN_ERROR} (but it ...@@ -9880,7 +9880,7 @@ return any server error, only @code{CR_UNKNOWN_ERROR} (but it
works for client errors), and the server uses the old @code{password()} works for client errors), and the server uses the old @code{password()}
checking 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:
@itemize @bullet @itemize @bullet
...@@ -10080,10 +10080,10 @@ Linux version that doesn't have @code{glibc2}, you must install ...@@ -10080,10 +10080,10 @@ Linux version that doesn't have @code{glibc2}, you must install
LinuxThreads before trying to compile MySQL. You can get LinuxThreads before trying to compile MySQL. You can get
LinuxThreads at @uref{http://www.mysql.com/Downloads/Linux}. LinuxThreads at @uref{http://www.mysql.com/Downloads/Linux}.
@strong{NOTE:} We have seen some strange problems with Linux 2.2.14 and @strong{Note:} We have seen some strange problems with Linux 2.2.14 and
MySQL on SMP systems; If you have a SMP system, we recommend MySQL on SMP systems; If you have a SMP system, we recommend
you to upgrade to Linux 2.4 ASAP! Your system will be faster and more you to upgrade to Linux 2.4 as soon as possible! Your system will be
stable by doing this! faster and more stable by doing this!
Note that @code{glibc} versions before and including Version 2.1.1 have Note that @code{glibc} versions before and including Version 2.1.1 have
a fatal bug in @code{pthread_mutex_timedwait} handling, which is used a fatal bug in @code{pthread_mutex_timedwait} handling, which is used
...@@ -10519,7 +10519,7 @@ Debugging threaded applications like MySQL will not work with ...@@ -10519,7 +10519,7 @@ Debugging threaded applications like MySQL will not work with
@item @item
If you try linking @code{mysqld} statically when using @code{gcc}, the If you try linking @code{mysqld} statically when using @code{gcc}, the
resulting image will core dump at start. In other words, @strong{DON'T} resulting image will core dump at start. In other words, @strong{don't}
use @code{--with-mysqld-ldflags=-all-static} with @code{gcc}. use @code{--with-mysqld-ldflags=-all-static} with @code{gcc}.
@end itemize @end itemize
...@@ -10852,7 +10852,7 @@ On your Windows machine, start some ODBC application (such as Access). ...@@ -10852,7 +10852,7 @@ On your Windows machine, start some ODBC application (such as Access).
@item @item
Create a new file in Windows and link to MySQL using the ODBC Create a new file in Windows and link to MySQL using the ODBC
driver the same way you normally do, EXCEPT type in @code{localhost} driver the same way you normally do, except type in @code{localhost}
for the MySQL host server --- not @code{yourmysqlservername}. for the MySQL host server --- not @code{yourmysqlservername}.
@end itemize @end itemize
...@@ -11952,7 +11952,7 @@ you must also remove the @code{-qstrict} option (this is a limitation in ...@@ -11952,7 +11952,7 @@ you must also remove the @code{-qstrict} option (this is a limitation in
the IBM C compiler). the IBM C compiler).
If you are using @code{gcc} or @code{egcs} to compile MySQL, you If you are using @code{gcc} or @code{egcs} to compile MySQL, you
@strong{MUST} use the @code{-fno-exceptions} flag, as the exception @strong{must} use the @code{-fno-exceptions} flag, as the exception
handling in @code{gcc}/@code{egcs} is not thread safe! (This is tested with handling in @code{gcc}/@code{egcs} is not thread safe! (This is tested with
@code{egcs} 1.1.) There are also some known problems with IBM's assembler, @code{egcs} 1.1.) There are also some known problems with IBM's assembler,
which may cause it to generate bad code when used with gcc. which may cause it to generate bad code when used with gcc.
...@@ -12806,7 +12806,7 @@ to ...@@ -12806,7 +12806,7 @@ to
$sysliblist .= " -lm -lz"; $sysliblist .= " -lm -lz";
@end example @end example
After this, you MUST run 'make realclean' and then proceed with the After this, you @strong{must} run 'make realclean' and then proceed with the
installation from the beginning. installation from the beginning.
If you want to use the Perl module on a system that doesn't support dynamic If you want to use the Perl module on a system that doesn't support dynamic
...@@ -16026,16 +16026,16 @@ files to @code{safe_mysqld} with @code{--log}, @code{--log-update}, or ...@@ -16026,16 +16026,16 @@ files to @code{safe_mysqld} with @code{--log}, @code{--log-update}, or
@code{--log-slow-queries}. Otherwise, both servers may be trying to @code{--log-slow-queries}. Otherwise, both servers may be trying to
write to the same log file. write to the same log file.
@strong{WARNING}: Normally you should never have two servers that update @strong{Warning}: Normally you should never have two servers that update
data in the same database! If your OS doesn't support fault-free system data in the same database! If your OS doesn't support fault-free system
locking, this may lead to unpleasant surprises! locking, this may lead to unpleasant surprises!
If you want to use another database directory for the second server, you If you want to use another database directory for the second server, you
can use the @code{--datadir=path} option to @code{safe_mysqld}. can use the @code{--datadir=path} option to @code{safe_mysqld}.
@strong{NOTE} also that starting several MySQL servers @strong{Note} also that starting several MySQL servers
(@code{mysqlds}) in different machines and letting them access one data (@code{mysqlds}) in different machines and letting them access one data
directory over @code{NFS} is generally a @strong{BAD IDEA}! The problem directory over @code{NFS} is generally a @strong{bad idea}! The problem
is that the @code{NFS} will become the bottleneck with the speed. It is is that the @code{NFS} will become the bottleneck with the speed. It is
not meant for such use. And last but not least, you would still have to not meant for such use. And last but not least, you would still have to
come up with a solution how to make sure that two or more @code{mysqlds} come up with a solution how to make sure that two or more @code{mysqlds}
...@@ -16138,11 +16138,12 @@ When running MySQL, follow these guidelines whenever possible: ...@@ -16138,11 +16138,12 @@ When running MySQL, follow these guidelines whenever possible:
@itemize @bullet @itemize @bullet
@item @item
DON'T EVER GIVE ANYONE (EXCEPT THE MySQL ROOT USER) ACCESS TO THE @strong{Do not ever give anyone (except the mysql root user) access to the
@code{user} TABLE IN THE @code{mysql} DATABASE! The encrypted password @code{user} table in the @code{mysql} database!} This is critical.
is the real password in MySQL. If you know the password listed in @strong{The encrypted password is the real password in MySQL.}
the @code{user} table for a given user, you can easily log in as that Anyone who knows the password which is listed in the @code{user} table
user if you have access to the host listed for that account. and has access to the host listed for the account @strong{can easily log
in as that user}.
@item @item
Learn the MySQL access privilege system. The @code{GRANT} and Learn the MySQL access privilege system. The @code{GRANT} and
...@@ -16872,7 +16873,7 @@ Alternate forms of the @code{-h}, @code{-u}, and @code{-p} options are ...@@ -16872,7 +16873,7 @@ Alternate forms of the @code{-h}, @code{-u}, and @code{-p} options are
@code{--password=your_pass}. Note that there is @emph{no space} between @code{--password=your_pass}. Note that there is @emph{no space} between
@code{-p} or @code{--password=} and the password following it. @code{-p} or @code{--password=} and the password following it.
@strong{NOTE:} Specifying a password on the command line is not secure! @strong{Note:} Specifying a password on the command line is not secure!
Any user on your system may then find out your password by typing a command Any user on your system may then find out your password by typing a command
like: @code{ps auxww}. @xref{Option files}. like: @code{ps auxww}. @xref{Option files}.
...@@ -17767,7 +17768,7 @@ you use a @code{column_list} clause) are @code{SELECT}, @code{INSERT}, and ...@@ -17767,7 +17768,7 @@ you use a @code{column_list} clause) are @code{SELECT}, @code{INSERT}, and
You can set global privileges by using @code{ON *.*} syntax. You can set You can set global privileges by using @code{ON *.*} syntax. You can set
database privileges by using @code{ON db_name.*} syntax. If you specify database privileges by using @code{ON db_name.*} syntax. If you specify
@code{ON *} and you have a current database, you will set the privileges for @code{ON *} and you have a current database, you will set the privileges for
that database. (@strong{WARNING:} If you specify @code{ON *} and you that database. (@strong{Warning:} If you specify @code{ON *} and you
@emph{don't} have a current database, you will affect the global privileges!) @emph{don't} have a current database, you will affect the global privileges!)
In order to accommodate granting rights to users from arbitrary hosts, In order to accommodate granting rights to users from arbitrary hosts,
...@@ -17783,7 +17784,7 @@ You can specify wild cards in the hostname. For example, ...@@ -17783,7 +17784,7 @@ You can specify wild cards in the hostname. For example,
for any host in the @code{144.155.166} class C subnet. for any host in the @code{144.155.166} class C subnet.
The simple form @code{user} is a synonym for @code{user@@"%"}. The simple form @code{user} is a synonym for @code{user@@"%"}.
@strong{NOTE:} If you allow anonymous users to connect to the MySQL @strong{Note:} If you allow anonymous users to connect to the MySQL
server (which is the default), you should also add all local users as server (which is the default), you should also add all local users as
@code{user@@localhost} because otherwise the anonymous user entry for the @code{user@@localhost} because otherwise the anonymous user entry for the
local host in the @code{mysql.user} table will be used when the user tries to local host in the @code{mysql.user} table will be used when the user tries to
...@@ -17833,7 +17834,7 @@ password will be set to the password specified by the @code{IDENTIFIED BY} ...@@ -17833,7 +17834,7 @@ password will be set to the password specified by the @code{IDENTIFIED BY}
clause, if one is given. If the user already had a password, it is replaced clause, if one is given. If the user already had a password, it is replaced
by the new one. by the new one.
@strong{WARNING:} If you create a new user but do not specify an @strong{Warning:} If you create a new user but do not specify an
@code{IDENTIFIED BY} clause, the user has no password. This is insecure. @code{IDENTIFIED BY} clause, the user has no password. This is insecure.
Passwords can also be set with the @code{SET PASSWORD} command. Passwords can also be set with the @code{SET PASSWORD} command.
...@@ -17986,7 +17987,7 @@ or the short form: ...@@ -17986,7 +17987,7 @@ or the short form:
mysql -u monty -p database_name mysql -u monty -p database_name
@end example @end example
Note that in the last example the password is @strong{NOT} 'database_name'. Note that in the last example the password is @strong{not} 'database_name'.
If you want to use the @code{-p} option to supply a password you should do so If you want to use the @code{-p} option to supply a password you should do so
like this: like this:
...@@ -18057,7 +18058,7 @@ of privileges: ...@@ -18057,7 +18058,7 @@ of privileges:
The MySQL @code{root} user is created as a superuser who can do The MySQL @code{root} user is created as a superuser who can do
anything. Connections must be made from the local host. anything. Connections must be made from the local host.
@strong{NOTE:} @strong{Note:}
The initial @code{root} password is empty, so anyone can connect as @code{root} The initial @code{root} password is empty, so anyone can connect as @code{root}
@emph{without a password} and be granted all privileges. @emph{without a password} and be granted all privileges.
...@@ -18073,7 +18074,7 @@ Other privileges are denied. For example, normal users can't use ...@@ -18073,7 +18074,7 @@ Other privileges are denied. For example, normal users can't use
@code{mysqladmin shutdown} or @code{mysqladmin processlist}. @code{mysqladmin shutdown} or @code{mysqladmin processlist}.
@end itemize @end itemize
@strong{NOTE:} The default privileges are different for Windows. @strong{Note:} The default privileges are different for Windows.
@xref{Windows running}. @xref{Windows running}.
Because your installation is initially wide open, one of the first things you Because your installation is initially wide open, one of the first things you
...@@ -18134,8 +18135,8 @@ the database directory, which is listed when you run @code{mysqld ...@@ -18134,8 +18135,8 @@ the database directory, which is listed when you run @code{mysqld
--help}.) Then run the @code{mysql_install_db} script, possibly after --help}.) Then run the @code{mysql_install_db} script, possibly after
editing it first to have the privileges you want. editing it first to have the privileges you want.
@strong{NOTE:} For MySQL versions older than Version 3.22.10, @strong{Note:} For MySQL versions older than Version 3.22.10,
you should NOT delete the @file{.frm} files. If you accidentally do this, you should not delete the @file{.frm} files. If you accidentally do this,
you should copy them back from your MySQL distribution before you should copy them back from your MySQL distribution before
running @code{mysql_install_db}. running @code{mysql_install_db}.
...@@ -18910,7 +18911,7 @@ CHECK TABLE test_table FAST QUICK; ...@@ -18910,7 +18911,7 @@ CHECK TABLE test_table FAST QUICK;
Which only would do a quick check on the table if it wasn't closed properly. Which only would do a quick check on the table if it wasn't closed properly.
@strong{NOTE:} that in some case @code{CHECK TABLE} will change the @strong{Note:} that in some case @code{CHECK TABLE} will change the
table! This happens if the table is marked as 'corrupted' or 'not table! This happens if the table is marked as 'corrupted' or 'not
closed properly' but @code{CHECK TABLE} didn't find any problems in the closed properly' but @code{CHECK TABLE} didn't find any problems in the
table. In this case @code{CHECK TABLE} will mark the table as ok. table. In this case @code{CHECK TABLE} will mark the table as ok.
...@@ -18935,7 +18936,7 @@ bug you have found a bug in the @code{MyISAM} code.) ...@@ -18935,7 +18936,7 @@ bug you have found a bug in the @code{MyISAM} code.)
@code{EXTENDED} is only to be used after you have run a normal check but @code{EXTENDED} is only to be used after you have run a normal check but
still get strange errors from a table when MySQL tries to still get strange errors from a table when MySQL tries to
update a row or find a row by key (this is VERY unlikely to happen if a update a row or find a row by key (this is very unlikely if a
normal check has succeeded!). normal check has succeeded!).
Some things reported by check table, can't be corrected automatically: Some things reported by check table, can't be corrected automatically:
...@@ -19221,7 +19222,7 @@ Check table for errors. This is the default operation if you are not ...@@ -19221,7 +19222,7 @@ Check table for errors. This is the default operation if you are not
giving @code{myisamchk} any options that override this. giving @code{myisamchk} any options that override this.
@item -e or --extend-check @item -e or --extend-check
Check the table VERY thoroughly (which is quite slow if you have many Check the table very thoroughly (which is quite slow if you have many
indexes). This option should only be used in extreme cases. Normally, indexes). This option should only be used in extreme cases. Normally,
@code{myisamchk} or @code{myisamchk --medium-check} should, in most @code{myisamchk} or @code{myisamchk --medium-check} should, in most
cases, be able to find out if there are any errors in the table. cases, be able to find out if there are any errors in the table.
...@@ -19345,7 +19346,7 @@ This will optimise seeks and will make table scanning by key faster. ...@@ -19345,7 +19346,7 @@ This will optimise seeks and will make table scanning by key faster.
@item -R or --sort-records=# @item -R or --sort-records=#
Sorts records according to an index. This makes your data much more localised Sorts records according to an index. This makes your data much more localised
and may speed up ranged @code{SELECT} and @code{ORDER BY} operations on and may speed up ranged @code{SELECT} and @code{ORDER BY} operations on
this index. (It may be VERY slow to do a sort the first time!) this index. (It may be very slow to do a sort the first time!)
To find out a table's index numbers, use @code{SHOW INDEX}, which shows a To find out a table's index numbers, use @code{SHOW INDEX}, which shows a
table's indexes in the same order that @code{myisamchk} sees them. Indexes are table's indexes in the same order that @code{myisamchk} sees them. Indexes are
numbered beginning with 1. numbered beginning with 1.
...@@ -19427,13 +19428,15 @@ to update the table will wait until @code{myisamchk} is ready before ...@@ -19427,13 +19428,15 @@ to update the table will wait until @code{myisamchk} is ready before
continuing. continuing.
If you use @code{myisamchk} to repair or optimise tables, you If you use @code{myisamchk} to repair or optimise tables, you
@strong{MUST} always ensure that the @code{mysqld} server is not using @strong{must} always ensure that the @code{mysqld} server is not using
the table (this also applies if you are using @code{--skip-locking}). the table (this also applies if you are using @code{--skip-locking}).
If you don't take down @code{mysqld} you should at least do a If you don't take down @code{mysqld} you should at least do a
@code{mysqladmin flush-tables} before you run @code{myisamchk}. @code{mysqladmin flush-tables} before you run @code{myisamchk}.
Your tables @strong{may be corrupted} if the server and @code{myisamchk}
access the tables simultaneously.
This chapter describes how to check for and deal with data corruption This chapter describes how to check for and deal with data corruption
in MySQL databases. If your tables get corrupted a lot you should in MySQL databases. If your tables get corrupted frequently you should
try to find the reason for this! @xref{Crashing}. try to find the reason for this! @xref{Crashing}.
The @code{MyISAM} table section contains reason for why a table could be The @code{MyISAM} table section contains reason for why a table could be
...@@ -19481,7 +19484,7 @@ To check a MyISAM table, use the following commands: ...@@ -19481,7 +19484,7 @@ To check a MyISAM table, use the following commands:
@table @code @table @code
@item myisamchk tbl_name @item myisamchk tbl_name
This finds 99.99% of all errors. What it can't find is corruption that This finds 99.99% of all errors. What it can't find is corruption that
involves @strong{ONLY} the data file (which is very unusual). If you want involves @strong{only} the data file (which is very unusual). If you want
to check a table, you should normally run @code{myisamchk} without options or to check a table, you should normally run @code{myisamchk} without options or
with either the @code{-s} or @code{--silent} option. with either the @code{-s} or @code{--silent} option.
...@@ -19494,7 +19497,7 @@ in the index tree. ...@@ -19494,7 +19497,7 @@ in the index tree.
@item myisamchk -e tbl_name @item myisamchk -e tbl_name
This does a complete and thorough check of all data (@code{-e} means This does a complete and thorough check of all data (@code{-e} means
``extended check''). It does a check-read of every key for each row to verify ``extended check''). It does a check-read of every key for each row to verify
that they indeed point to the correct row. This may take a LONG time on a that they indeed point to the correct row. This may take a long time on a
big table with many keys. @code{myisamchk} will normally stop after the first big table with many keys. @code{myisamchk} will normally stop after the first
error it finds. If you want to obtain more information, you can add the error it finds. If you want to obtain more information, you can add the
@code{--verbose} (@code{-v}) option. This causes @code{myisamchk} to keep @code{--verbose} (@code{-v}) option. This causes @code{myisamchk} to keep
...@@ -19606,7 +19609,7 @@ memory} errors), or if @code{myisamchk} crashes, go to Stage 3. ...@@ -19606,7 +19609,7 @@ memory} errors), or if @code{myisamchk} crashes, go to Stage 3.
@noindent @noindent
@strong{Stage 2: Easy safe repair} @strong{Stage 2: Easy safe repair}
NOTE: If you want repairing to go much faster, you should add: @code{-O Note: If you want repairing to go much faster, you should add: @code{-O
sort_buffer=# -O key_buffer=#} (where # is about 1/4 of the available sort_buffer=# -O key_buffer=#} (where # is about 1/4 of the available
memory) to all @code{isamchk/myisamchk} commands. memory) to all @code{isamchk/myisamchk} commands.
...@@ -20422,7 +20425,7 @@ host. You can also get this list using the @code{mysqlshow} command. ...@@ -20422,7 +20425,7 @@ host. You can also get this list using the @code{mysqlshow} command.
@code{SHOW TABLES} lists the tables in a given database. You can also @code{SHOW TABLES} lists the tables in a given database. You can also
get this list using the @code{mysqlshow db_name} command. get this list using the @code{mysqlshow db_name} command.
@strong{NOTE:} If a user doesn't have any privileges for a table, the table @strong{Note:} If a user doesn't have any privileges for a table, the table
will not show up in the output from @code{SHOW TABLES} or @code{mysqlshow will not show up in the output from @code{SHOW TABLES} or @code{mysqlshow
db_name}. db_name}.
...@@ -20796,7 +20799,7 @@ Is @code{ON} if @code{mysqld} was started with @code{--ansi}. ...@@ -20796,7 +20799,7 @@ Is @code{ON} if @code{mysqld} was started with @code{--ansi}.
@item @code{back_log} @item @code{back_log}
The number of outstanding connection requests MySQL can have. This The number of outstanding connection requests MySQL can have. This
comes into play when the main MySQL thread gets @strong{VERY} comes into play when the main MySQL thread gets @strong{very}
many connection requests in a very short time. It then takes some time many connection requests in a very short time. It then takes some time
(although very little) for the main thread to check the connection and start (although very little) for the main thread to check the connection and start
a new thread. The @code{back_log} value indicates how many requests can be a new thread. The @code{back_log} value indicates how many requests can be
...@@ -20971,7 +20974,7 @@ Increase this to get better index handling (for all reads and multiple ...@@ -20971,7 +20974,7 @@ Increase this to get better index handling (for all reads and multiple
writes) to as much as you can afford; 64M on a 256M machine that mainly writes) to as much as you can afford; 64M on a 256M machine that mainly
runs MySQL is quite common. If you, however, make this too big runs MySQL is quite common. If you, however, make this too big
(more than 50% of your total memory?) your system may start to page and (more than 50% of your total memory?) your system may start to page and
become REALLY slow. Remember that because MySQL does not cache become extremely slow. Remember that because MySQL does not cache
data read, that you will have to leave some room for the OS filesystem data read, that you will have to leave some room for the OS filesystem
cache. cache.
...@@ -21388,7 +21391,7 @@ use this character set for this connection. ...@@ -21388,7 +21391,7 @@ use this character set for this connection.
One should use @code{mysql_real_escape_string()} when escaping strings One should use @code{mysql_real_escape_string()} when escaping strings
for a SQL query. @code{mysql_real_escape_string()} is identical to the for a SQL query. @code{mysql_real_escape_string()} is identical to the
old @code{mysql_escape_string()} function, except that it takes the MYSQL old @code{mysql_escape_string()} function, except that it takes the @code{MYSQL}
connection handle as the first parameter. connection handle as the first parameter.
If the client is compiled with different paths than where the server is If the client is compiled with different paths than where the server is
...@@ -21634,7 +21637,7 @@ the discussion of string collating below. @xref{String collating}. ...@@ -21634,7 +21637,7 @@ the discussion of string collating below. @xref{String collating}.
@code{ctype[]} is an array of bit values, with one element for one character. @code{ctype[]} is an array of bit values, with one element for one character.
(Note that @code{to_lower[]}, @code{to_upper[]}, and @code{sort_order[]} (Note that @code{to_lower[]}, @code{to_upper[]}, and @code{sort_order[]}
are indexed by character value, but @code{ctype[]} is indexed by character are indexed by character value, but @code{ctype[]} is indexed by character
value + 1. This is an old legacy to be able to handle EOF.) value + 1. This is an old legacy to be able to handle @code{EOF}.)
You can find the following bitmask definitions in @file{m_ctype.h}: You can find the following bitmask definitions in @file{m_ctype.h}:
...@@ -21989,7 +21992,7 @@ edited version that you can reinstall. ...@@ -21989,7 +21992,7 @@ edited version that you can reinstall.
@cindex @code{mysqld_multi} @cindex @code{mysqld_multi}
@code{mysqld_multi} is meant for managing several @code{mysqld} @code{mysqld_multi} is meant for managing several @code{mysqld}
processes running in different UNIX sockets and TCP/IP ports. processes running in different Unix sockets and TCP/IP ports.
The program will search for group(s) named [mysqld#] from my.cnf (or the The program will search for group(s) named [mysqld#] from my.cnf (or the
given --config-file=...), where # can be any positive number starting given --config-file=...), where # can be any positive number starting
...@@ -22019,7 +22022,7 @@ list. Anything after a white space is ignored. ...@@ -22019,7 +22022,7 @@ list. Anything after a white space is ignored.
@itemize @itemize
@cindex config-file option @cindex config-file option
@item --config-file=... @item --config-file=...
Alternative config file. NOTE: This will not affect this program's own Alternative config file. Note: This will not affect this program's own
options (group @code{[mysqld_multi]}), but only groups options (group @code{[mysqld_multi]}), but only groups
[mysqld#]. Without this option everything will be searched from the [mysqld#]. Without this option everything will be searched from the
ordinary my.cnf file. ordinary my.cnf file.
...@@ -22031,7 +22034,7 @@ Give an example of a config file. ...@@ -22031,7 +22034,7 @@ Give an example of a config file.
Print this help and exit. Print this help and exit.
@cindex log option @cindex log option
@item --log=... @item --log=...
Log file. Full path to and the name for the log file. NOTE: If the file Log file. Full path to and the name for the log file. Note: If the file
exists, everything will be appended. exists, everything will be appended.
@cindex mysqladmin option @cindex mysqladmin option
@item --mysqladmin=... @item --mysqladmin=...
...@@ -22052,9 +22055,9 @@ Password for user for @code{mysqladmin}. ...@@ -22052,9 +22055,9 @@ Password for user for @code{mysqladmin}.
@cindex tcp-ip option @cindex tcp-ip option
@item --tcp-ip @item --tcp-ip
Connect to the MySQL server(s) via the TCP/IP port instead of Connect to the MySQL server(s) via the TCP/IP port instead of
the UNIX socket. This affects stopping and reporting. If a socket file the Unix socket. This affects stopping and reporting. If a socket file
is missing, the server may still be running, but can be accessed only is missing, the server may still be running, but can be accessed only
via the TCP/IP port. By default connecting is done via the UNIX socket. via the TCP/IP port. By default connecting is done via the Unix socket.
@cindex user option @cindex user option
@item --user=... @item --user=...
MySQL user for @code{mysqladmin}. MySQL user for @code{mysqladmin}.
...@@ -22091,7 +22094,7 @@ should have its own @code{pid-file}. The advantage using ...@@ -22091,7 +22094,7 @@ should have its own @code{pid-file}. The advantage using
it, if a @code{mysqld} process fails due to signal kill -9, or it, if a @code{mysqld} process fails due to signal kill -9, or
similar. (Like segmentation fault, which MySQL should never do, similar. (Like segmentation fault, which MySQL should never do,
of course ;) Please note that @code{safe_mysqld} script may require that of course ;) Please note that @code{safe_mysqld} script may require that
you start it from a certain place. This means that you may have to CD to you start it from a certain place. This means that you may have to @code{cd} to
a certain directory, before you start the @code{mysqld_multi}. If a certain directory, before you start the @code{mysqld_multi}. If
you have problems starting, please see the @code{safe_mysqld} you have problems starting, please see the @code{safe_mysqld}
script. Check especially the lines: script. Check especially the lines:
...@@ -22106,7 +22109,7 @@ release) if test -d /data/mysql -a -f ./share/mysql/english/errmsg.sys ...@@ -22106,7 +22109,7 @@ release) if test -d /data/mysql -a -f ./share/mysql/english/errmsg.sys
The above test should be successful, or you may encounter problems. The above test should be successful, or you may encounter problems.
@item @item
Beware of the dangers starting multiple @code{mysqlds} in the same data Beware of the dangers starting multiple @code{mysqlds} in the same data
directory. Use separate data directories, unless you @strong{KNOW} what directory. Use separate data directories, unless you @strong{know} what
you are doing! you are doing!
@item @item
The socket file and the TCP/IP port must be different for every @code{mysqld}. The socket file and the TCP/IP port must be different for every @code{mysqld}.
...@@ -22123,17 +22126,17 @@ You may want to use option '--user' for @code{mysqld}, but in order to ...@@ -22123,17 +22126,17 @@ You may want to use option '--user' for @code{mysqld}, but in order to
do this you need to be root when you start the @code{mysqld_multi} do this you need to be root when you start the @code{mysqld_multi}
script. Having the option in the config file doesn't matter; you will script. Having the option in the config file doesn't matter; you will
just get a warning, if you are not the superuser and the @code{mysqlds} just get a warning, if you are not the superuser and the @code{mysqlds}
are started under @strong{YOUR} UNIX account. @strong{IMPORTANT}: Make are started under @strong{your} Unix account. @strong{Important}: Make
sure that the @code{pid-file} and the data directory are sure that the @code{pid-file} and the data directory are
read+write(+execute for the latter one) accessible for @strong{THAT} read+write(+execute for the latter one) accessible for @strong{that}
UNIX user, who the specific @code{mysqld} process is started Unix user, who the specific @code{mysqld} process is started
as. @strong{DON'T} use the UNIX root account for this, unless you as. @strong{Do not} use the Unix root account for this, unless you
@strong{KNOW} what you are doing! @strong{know} what you are doing!
@item @item
@strong{MOST IMPORTANT}: Make sure that you understand the meanings of @strong{Most important}: Make sure that you understand the meanings of
the options that are passed to the @code{mysqlds} and why @strong{WOULD the options that are passed to the @code{mysqld}s and @strong{why one
YOU WANT} to have separate @code{mysqld} processes. Starting multiple would want} to have separate @code{mysqld} processes. Starting multiple
@code{mysqlds} in one data directory @strong{WILL NOT} give you extra @code{mysqld}s in one data directory @strong{will not} give you extra
performance in a threaded system! performance in a threaded system!
@end itemize @end itemize
...@@ -22256,7 +22259,7 @@ Display a help message and exit. ...@@ -22256,7 +22259,7 @@ Display a help message and exit.
@item -j big_tbl_name, --join=big_tbl_name @item -j big_tbl_name, --join=big_tbl_name
Join all tables named on the command line into a single table Join all tables named on the command line into a single table
@code{big_tbl_name}. All tables that are to be combined @code{big_tbl_name}. All tables that are to be combined
MUST be identical (same column names and types, same indexes, etc.). @strong{must} be identical (same column names and types, same indexes, etc.).
@item -p #, --packlength=# @item -p #, --packlength=#
Specify the record length storage size, in bytes. The value should be 1, 2, Specify the record length storage size, in bytes. The value should be 1, 2,
...@@ -22617,12 +22620,12 @@ The meaning of the values are: ...@@ -22617,12 +22620,12 @@ The meaning of the values are:
@multitable @columnfractions .3 .7 @multitable @columnfractions .3 .7
@item @strong{Value} @tab @strong{Meaning}. @item @strong{Value} @tab @strong{Meaning}.
@item YES @tab The option is activated and usable. @item @code{YES} @tab The option is activated and usable.
@item NO @tab MySQL is not compiled with support for this option. @item @code{NO} @tab MySQL is not compiled with support for this option.
@item DISABLED @tab The xxxx option is disabled because one started @code{mysqld} with @code{--skip-xxxx} or because one didn't start @code{mysqld} with all needed options to enable the option. In this case the @code{hostname.err} file should contain a reason for why the option is disabled. @item @code{DISABLED} @tab The xxxx option is disabled because one started @code{mysqld} with @code{--skip-xxxx} or because one didn't start @code{mysqld} with all needed options to enable the option. In this case the @code{hostname.err} file should contain a reason for why the option is disabled.
@end multitable @end multitable
@strong{NOTE}: To be able to create InnoDB tables you @strong{MUST} edit @strong{Note}: To be able to create InnoDB tables you @strong{must} edit
your startup options to include at least the @code{innodb_data_file_path} your startup options to include at least the @code{innodb_data_file_path}
option. @xref{InnoDB start}. option. @xref{InnoDB start}.
...@@ -22889,7 +22892,7 @@ Continue even if we get a SQL error. ...@@ -22889,7 +22892,7 @@ Continue even if we get a SQL error.
@item -g, --no-named-commands @item -g, --no-named-commands
Named commands are disabled. Use \* form only, or use named commands Named commands are disabled. Use \* form only, or use named commands
only in the beginning of a line ending with a semicolon (@samp{;}). Since only in the beginning of a line ending with a semicolon (@samp{;}). Since
Version 10.9, the client now starts with this option ENABLED by default! Version 10.9, the client now starts with this option @strong{enabled} by default!
With the -g option, long format commands will still work from the first With the -g option, long format commands will still work from the first
line, however. line, however.
...@@ -22944,7 +22947,7 @@ other database in the update log. ...@@ -22944,7 +22947,7 @@ other database in the update log.
@item @code{--pager[=...]} @item @code{--pager[=...]}
Output type. Default is your @code{ENV} variable @code{PAGER}. Valid Output type. Default is your @code{ENV} variable @code{PAGER}. Valid
pagers are less, more, cat [> filename], etc. See interactive help (\h) pagers are less, more, cat [> filename], etc. See interactive help (\h)
also. This option does not work in batch mode. Pager works only in UNIX. also. This option does not work in batch mode. Pager works only in Unix.
@cindex @code{password}, @code{mysql} option @cindex @code{password}, @code{mysql} option
@item -p[password], --password[=...] @item -p[password], --password[=...]
...@@ -23056,7 +23059,7 @@ tee (\T) Set outfile [to_outfile]. Append everything into given outfile. ...@@ -23056,7 +23059,7 @@ tee (\T) Set outfile [to_outfile]. Append everything into given outfile.
use (\u) Use another database. Takes database name as argument. use (\u) Use another database. Takes database name as argument.
@end example @end example
From the above, pager only works in UNIX. From the above, pager only works in Unix.
@cindex status command @cindex status command
The @code{status} command gives you some information about the The @code{status} command gives you some information about the
...@@ -23143,7 +23146,7 @@ each command, just before the command line appears again waiting for the ...@@ -23143,7 +23146,7 @@ each command, just before the command line appears again waiting for the
next command. next command.
@item @item
Browsing, or searching the results in the interactive mode in UNIX less, Browsing, or searching the results in the interactive mode in Unix less,
more, or any other similar program, is now possible with option more, or any other similar program, is now possible with option
@code{--pager[=...]}. Without argument, @code{mysql} client will look @code{--pager[=...]}. Without argument, @code{mysql} client will look
for environment variable PAGER and set @code{pager} to that. for environment variable PAGER and set @code{pager} to that.
...@@ -23152,7 +23155,7 @@ command @code{pager} and disabled with command @code{nopager}. The ...@@ -23152,7 +23155,7 @@ command @code{pager} and disabled with command @code{nopager}. The
command takes an argument optionally and the @code{pager} will be set to command takes an argument optionally and the @code{pager} will be set to
that. Command @code{pager} can be called without an argument, but this that. Command @code{pager} can be called without an argument, but this
requires that the option @code{--pager} was used, or the @code{pager} requires that the option @code{--pager} was used, or the @code{pager}
will default to stdout. @code{pager} works only in UNIX, since it uses will default to stdout. @code{pager} works only in Unix, since it uses
the popen() function, which doesn't exist in Windows. In Windows, the the popen() function, which doesn't exist in Windows. In Windows, the
@code{tee} option can be used instead, although it may not be as handy @code{tee} option can be used instead, although it may not be as handy
as @code{pager} can be in some situations. as @code{pager} can be in some situations.
...@@ -23191,11 +23194,11 @@ mysql> pager cat | tee /dr1/tmp/res.txt | tee /dr2/tmp/res2.txt | less -n -i -S ...@@ -23191,11 +23194,11 @@ mysql> pager cat | tee /dr1/tmp/res.txt | tee /dr2/tmp/res2.txt | less -n -i -S
You can also combine the two functions above; have the @code{tee} You can also combine the two functions above; have the @code{tee}
enabled, @code{pager} set to 'less' and you will be able to browse the enabled, @code{pager} set to 'less' and you will be able to browse the
results in unix 'less' and still have everything appended into a file results in unix 'less' and still have everything appended into a file
the same time. The difference between @code{UNIX tee} used with the the same time. The difference between Unix @code{tee} used with the
@code{pager} and the @code{mysql} client in-built @code{tee}, is that @code{pager} and the @code{mysql} client in-built @code{tee}, is that
the in-built @code{tee} works even if you don't have the @code{UNIX tee} the in-built @code{tee} works even if you don't have the Unix @code{tee}
available. The in-built @code{tee} also logs everything that is printed available. The in-built @code{tee} also logs everything that is printed
on the screen, where the @code{UNIX tee} used with @code{pager} doesn't on the screen, where the Unix @code{tee} used with @code{pager} doesn't
log quite that much. Last, but not least, the interactive @code{tee} is log quite that much. Last, but not least, the interactive @code{tee} is
more handy to switch on and off, when you want to log something into a more handy to switch on and off, when you want to log something into a
file, but want to be able to turn the feature off sometimes. file, but want to be able to turn the feature off sometimes.
...@@ -23586,7 +23589,7 @@ Verbose mode. Print out more information on what the program does. ...@@ -23586,7 +23589,7 @@ Verbose mode. Print out more information on what the program does.
@item -V, --version @item -V, --version
Print version information and exit. Print version information and exit.
@item -w, --where='where-condition' @item -w, --where='where-condition'
Dump only selected records. Note that QUOTES are mandatory: Dump only selected records. Note that quotes are mandatory:
@example @example
"--where=user='jimf'" "-wuserid>1" "-wuserid<1" "--where=user='jimf'" "-wuserid>1" "-wuserid<1"
...@@ -23781,7 +23784,7 @@ is @code{localhost}. ...@@ -23781,7 +23784,7 @@ is @code{localhost}.
See the description for the @code{--replace} option. See the description for the @code{--replace} option.
@item -l, --lock-tables @item -l, --lock-tables
Lock @strong{ALL} tables for writing before processing any text files. This Lock @strong{all} tables for writing before processing any text files. This
ensures that all tables are synchronised on the server. ensures that all tables are synchronised on the server.
@item -L, --local @item -L, --local
...@@ -24046,7 +24049,7 @@ after the query is executed, but before any locks are released. ...@@ -24046,7 +24049,7 @@ after the query is executed, but before any locks are released.
@cindex update log @cindex update log
@cindex files, update log @cindex files, update log
@strong{NOTE}: The update log is replaced by the binary @strong{Note}: The update log is replaced by the binary
log. @xref{Binary log}. With this you can do anything that you can do log. @xref{Binary log}. With this you can do anything that you can do
with the update log. with the update log.
...@@ -24060,7 +24063,7 @@ extension, @code{mysqld} will create log file names like so: ...@@ -24060,7 +24063,7 @@ extension, @code{mysqld} will create log file names like so:
time you execute @code{mysqladmin refresh}, execute @code{mysqladmin time you execute @code{mysqladmin refresh}, execute @code{mysqladmin
flush-logs}, execute the @code{FLUSH LOGS} statement, or restart the server. flush-logs}, execute the @code{FLUSH LOGS} statement, or restart the server.
@strong{NOTE:} For the above scheme to work, you should NOT create @strong{Note:} For the above scheme to work, you must not create
your own files with the same filename as the update log + some extensions your own files with the same filename as the update log + some extensions
that may be regarded as a number, in the directory used by the update log! that may be regarded as a number, in the directory used by the update log!
...@@ -25484,7 +25487,7 @@ is, they have different design compromises that lead to different ...@@ -25484,7 +25487,7 @@ is, they have different design compromises that lead to different
behavior. behavior.
If you strive for database independence, you need to get a good feeling If you strive for database independence, you need to get a good feeling
for each SQL server's bottlenecks. MySQL is VERY fast in for each SQL server's bottlenecks. MySQL is very fast in
retrieving and updating things, but will have a problem in mixing slow retrieving and updating things, but will have a problem in mixing slow
readers/writers on the same table. Oracle, on the other hand, has a big readers/writers on the same table. Oracle, on the other hand, has a big
problem when you try to access rows that you have recently updated problem when you try to access rows that you have recently updated
...@@ -25505,11 +25508,11 @@ MySQL-specific keywords to a query. The code inside ...@@ -25505,11 +25508,11 @@ MySQL-specific keywords to a query. The code inside
@code{/**/} will be treated as a comment (ignored) by most other SQL @code{/**/} will be treated as a comment (ignored) by most other SQL
servers. servers.
If REAL high performance is more important than exactness, as in some If high performance is more important than exactness, as in some
Web applications, a possibility is to create an application layer that Web applications, it is possibile to create an application layer that
caches all results to give you even higher performance. By letting caches all results to give you even higher performance. By letting
old results 'expire' after a while, you can keep the cache reasonably old results 'expire' after a while, you can keep the cache reasonably
fresh. This is quite nice in case of extremely high load, in which case fresh. This provides a method to handle high load spikes, in which case
you can dynamically increase the cache and set the expire timeout higher you can dynamically increase the cache and set the expire timeout higher
until things get back to normal. until things get back to normal.
...@@ -25635,7 +25638,7 @@ We have gather some more benchmark results at ...@@ -25635,7 +25638,7 @@ We have gather some more benchmark results at
Note that Oracle is not included because they asked to be removed. All Note that Oracle is not included because they asked to be removed. All
Oracle benchmarks have to be passed by Oracle! We believe that makes Oracle benchmarks have to be passed by Oracle! We believe that makes
Oracle benchmarks @strong{VERY} biased because the above benchmarks are Oracle benchmarks @strong{very} biased because the above benchmarks are
supposed to show what a standard installation can do for a single supposed to show what a standard installation can do for a single
client. client.
...@@ -25697,8 +25700,8 @@ It is very common that some problems only occur when the system is very ...@@ -25697,8 +25700,8 @@ It is very common that some problems only occur when the system is very
heavily loaded. We have had many customers who contact us when they heavily loaded. We have had many customers who contact us when they
have a (tested) system in production and have encountered load problems. In have a (tested) system in production and have encountered load problems. In
every one of these cases so far, it has been problems with basic design every one of these cases so far, it has been problems with basic design
(table scans are NOT good at high load) or OS/Library issues. Most of (table scans are @strong{not good} at high load) or OS/Library issues. Most of
this would be a @strong{LOT} easier to fix if the systems were not this would be a @strong{lot} easier to fix if the systems were not
already in production. already in production.
To avoid problems like this, you should put some effort into benchmarking To avoid problems like this, you should put some effort into benchmarking
...@@ -26773,7 +26776,7 @@ Try to keep the names simple (use @code{name} instead of ...@@ -26773,7 +26776,7 @@ Try to keep the names simple (use @code{name} instead of
@code{customer_name} in the customer table). To make your names portable @code{customer_name} in the customer table). To make your names portable
to other SQL servers you should keep them shorter than 18 characters. to other SQL servers you should keep them shorter than 18 characters.
@item @item
If you need REALLY high speed, you should take a look at the low-level If you need really high speed, you should take a look at the low-level
interfaces for data storage that the different SQL servers support! For interfaces for data storage that the different SQL servers support! For
example, by accessing the MySQL @code{MyISAM} directly, you could example, by accessing the MySQL @code{MyISAM} directly, you could
get a speed increase of 2-5 times compared to using the SQL interface. get a speed increase of 2-5 times compared to using the SQL interface.
...@@ -26887,7 +26890,7 @@ The table locking code in MySQL is deadlock free. ...@@ -26887,7 +26890,7 @@ The table locking code in MySQL is deadlock free.
MySQL uses table locking (instead of row locking or column MySQL uses table locking (instead of row locking or column
locking) on all table types, except @code{BDB} tables, to achieve a very locking) on all table types, except @code{BDB} tables, to achieve a very
high lock speed. For large tables, table locking is MUCH better than high lock speed. For large tables, table locking is much better than
row locking for most applications, but there are, of course, some row locking for most applications, but there are, of course, some
pitfalls. pitfalls.
...@@ -27039,7 +27042,7 @@ You lose a lot of space, as you must duplicate indexes from the nodes ...@@ -27039,7 +27042,7 @@ 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. It's harder to cache only the index data.
@end itemize @end itemize
...@@ -27099,7 +27102,7 @@ Only create the indexes that you really need. Indexes are good for ...@@ -27099,7 +27102,7 @@ Only create the indexes that you really need. Indexes are good for
retrieval but bad when you need to store things fast. If you mostly retrieval but bad when you need to store things fast. If you mostly
access a table by searching on a combination of columns, make an index access a table by searching on a combination of columns, make an index
on them. The first index part should be the most used column. If you are on them. The first index part should be the most used column. If you are
ALWAYS using many columns, you should use the column with more duplicates @strong{always} using many columns, you should use the column with more duplicates
first to get better compression of the index. first to get better compression of the index.
@item @item
...@@ -28106,7 +28109,7 @@ for replication of tables with fancy column names to work. ...@@ -28106,7 +28109,7 @@ for replication of tables with fancy column names to work.
@item TIMESTAMP = timestamp_value | DEFAULT @item TIMESTAMP = timestamp_value | DEFAULT
Set the time for this client. This is used to get the original timestamp if Set the time for this client. This is used to get the original timestamp if
you use the update log to restore rows. @code{timestamp_value} should be a you use the update log to restore rows. @code{timestamp_value} should be a
UNIX Epoch timestamp, not a MySQL timestamp. Unix epoch timestamp, not a MySQL timestamp.
@item LAST_INSERT_ID = # @item LAST_INSERT_ID = #
Set the value to be returned from @code{LAST_INSERT_ID()}. This is stored in Set the value to be returned from @code{LAST_INSERT_ID()}. This is stored in
...@@ -28335,7 +28338,7 @@ will be created in the same directory where the data/index file is. ...@@ -28335,7 +28338,7 @@ will be created in the same directory where the data/index file is.
@item @item
When you drop a table that is using symlinks, both the symlink and the When you drop a table that is using symlinks, both the symlink and the
file the symlink points to is dropped. This is a good reason to why you file the symlink points to is dropped. This is a good reason to why you
should NOT run @code{mysqld} as root and not allow persons to have write should @strong{not} run @code{mysqld} as root and not allow persons to have write
access to the MySQL database directories. access to the MySQL database directories.
@item @item
...@@ -29363,7 +29366,7 @@ These three are synonyms for @code{CHAR(1)}. ...@@ -29363,7 +29366,7 @@ These three are synonyms for @code{CHAR(1)}.
@tindex VARCHAR @tindex VARCHAR
@item [NATIONAL] VARCHAR(M) [BINARY] @item [NATIONAL] VARCHAR(M) [BINARY]
A variable-length string. @strong{NOTE:} Trailing spaces are removed when A variable-length string. @strong{Note:} Trailing spaces are removed when
the value is stored (this differs from the ANSI SQL specification). The range the value is stored (this differs from the ANSI SQL specification). The range
of @code{M} is 1 to 255 characters. @code{VARCHAR} values are sorted and of @code{M} is 1 to 255 characters. @code{VARCHAR} values are sorted and
compared in case-insensitive fashion unless the @code{BINARY} keyword is compared in case-insensitive fashion unless the @code{BINARY} keyword is
...@@ -30585,7 +30588,7 @@ An expression that contains @code{NULL} always produces a @code{NULL} value ...@@ -30585,7 +30588,7 @@ An expression that contains @code{NULL} always produces a @code{NULL} value
unless otherwise indicated in the documentation for the operators and unless otherwise indicated in the documentation for the operators and
functions involved in the expression. functions involved in the expression.
@strong{NOTE:} There must be no whitespace between a function name and the @strong{Note:} There must be no whitespace between a function name and the
parenthesis following it. This helps the MySQL parser distinguish parenthesis following it. This helps the MySQL parser distinguish
between function calls and references to tables or columns that happen to between function calls and references to tables or columns that happen to
have the same name as a function. Spaces around arguments are permitted, have the same name as a function. Spaces around arguments are permitted,
...@@ -33657,7 +33660,7 @@ the @code{ESCAPED BY} character: ...@@ -33657,7 +33660,7 @@ the @code{ESCAPED BY} character:
Additionally, @code{ASCII 0} is converted to @code{ESCAPED BY} followed by 0 Additionally, @code{ASCII 0} is converted to @code{ESCAPED BY} followed by 0
(@code{ASCII 48}). (@code{ASCII 48}).
The reason for the above is that you MUST escape any @code{FIELDS The reason for the above is that you @strong{must} escape any @code{FIELDS
TERMINATED BY}, @code{ESCAPED BY}, or @code{LINES TERMINATED BY} TERMINATED BY}, @code{ESCAPED BY}, or @code{LINES TERMINATED BY}
characters to reliably be able to read the file back. @code{ASCII 0} is characters to reliably be able to read the file back. @code{ASCII 0} is
escaped to make it easier to view with some pagers. escaped to make it easier to view with some pagers.
...@@ -34340,7 +34343,7 @@ all rows, and are willing to suffer a speed penalty, you can use a ...@@ -34340,7 +34343,7 @@ all rows, and are willing to suffer a speed penalty, you can use a
mysql> DELETE FROM table_name WHERE 1>0; mysql> DELETE FROM table_name WHERE 1>0;
@end example @end example
Note that this is MUCH slower than @code{DELETE FROM table_name} with no Note that this is much slower than @code{DELETE FROM table_name} with no
@code{WHERE} clause, because it deletes rows one at a time. @code{WHERE} clause, because it deletes rows one at a time.
If you specify the keyword @code{LOW_PRIORITY}, execution of the If you specify the keyword @code{LOW_PRIORITY}, execution of the
...@@ -34359,7 +34362,7 @@ TABLE} statement or the @code{myisamchk} utility to reorganise tables. ...@@ -34359,7 +34362,7 @@ TABLE} statement or the @code{myisamchk} utility to reorganise tables.
The multi table delete format is supported starting from MySQL 4.0.0. The multi table delete format is supported starting from MySQL 4.0.0.
The idea is that only matching rows from the tables listed BEFORE the The idea is that only matching rows from the tables listed @strong{before} the
@code{FROM} clause is deleted. The effect is that you can delete rows @code{FROM} clause is deleted. The effect is that you can delete rows
from many tables at the same time and also have additional tables that from many tables at the same time and also have additional tables that
are used for searching. are used for searching.
...@@ -35918,7 +35921,7 @@ exist. ...@@ -35918,7 +35921,7 @@ exist.
@code{RESTRICT} and @code{CASCADE} are allowed to make porting easier. @code{RESTRICT} and @code{CASCADE} are allowed to make porting easier.
For the moment they don't do anything. For the moment they don't do anything.
@strong{NOTE}: @code{DROP TABLE} is not transaction-safe and will @strong{Note}: @code{DROP TABLE} is not transaction-safe and will
automatically commit any active transactions. automatically commit any active transactions.
...@@ -36216,7 +36219,7 @@ tables to transactions safe tables. ...@@ -36216,7 +36219,7 @@ tables to transactions safe tables.
You can safely kill a thread that is waiting for a table lock with You can safely kill a thread that is waiting for a table lock with
@code{KILL}. @xref{KILL}. @code{KILL}. @xref{KILL}.
Note that you should @strong{NOT} lock any tables that you are using with Note that you should @strong{not} lock any tables that you are using with
@code{INSERT DELAYED}. This is because that in this case the @code{INSERT} @code{INSERT DELAYED}. This is because that in this case the @code{INSERT}
is done by a separate thread. is done by a separate thread.
...@@ -36768,9 +36771,9 @@ The following options to @code{mysqld} can be used to change the behavior of ...@@ -36768,9 +36771,9 @@ The following options to @code{mysqld} can be used to change the behavior of
@item @code{--myisam-recover=#} @tab Automatic recover of crashed tables. @item @code{--myisam-recover=#} @tab Automatic recover of crashed tables.
@item @code{-O myisam_sort_buffer_size=#} @tab Buffer used when recovering tables. @item @code{-O myisam_sort_buffer_size=#} @tab Buffer used when recovering tables.
@item @code{--delay-key-write-for-all-tables} @tab Don't flush key buffers between writes for any MyISAM table @item @code{--delay-key-write-for-all-tables} @tab Don't flush key buffers between writes for any MyISAM table
@item @code{-O myisam_max_extra_sort_file_size=#} @tab Used to help MySQL to decide when to use the slow but safe key cache index create method. @strong{NOTE} that this parameter is given in megabytes! @item @code{-O myisam_max_extra_sort_file_size=#} @tab Used to help MySQL to decide when to use the slow but safe key cache index create method. @strong{Note} that this parameter is given in megabytes!
@item @code{-O myisam_max_sort_file_size=#} @tab Don't use the fast sort index method to created index if the temporary file would get bigger than this. @strong{NOTE} that this paramter is given in megabytes! @item @code{-O myisam_max_sort_file_size=#} @tab Don't use the fast sort index method to created index if the temporary file would get bigger than this. @strong{Note} that this paramter is given in megabytes!
@item @code{-O myisam_bulk_insert_tree_size=#} @tab Size of tree cache used in bulk insert optimisation. @strong{NOTE} that this is a limit @strong{per thread}! @item @code{-O myisam_bulk_insert_tree_size=#} @tab Size of tree cache used in bulk insert optimisation. @strong{Note} that this is a limit @strong{per thread}!
@end multitable @end multitable
The automatic recovery is activated if you start @code{mysqld} with The automatic recovery is activated if you start @code{mysqld} with
...@@ -38901,7 +38904,7 @@ file size in @code{innodb_data_file_path}. The partition must be ...@@ -38901,7 +38904,7 @@ file size in @code{innodb_data_file_path}. The partition must be
innodb_data_file_path=hdd1:5Gnewraw;hdd2:2Gnewraw innodb_data_file_path=hdd1:5Gnewraw;hdd2:2Gnewraw
@end example @end example
When you start the database again you MUST change the keyword When you start the database again you @strong{must} change the keyword
to @code{raw}. Otherwise InnoDB will write over your to @code{raw}. Otherwise InnoDB will write over your
partition! partition!
...@@ -39270,7 +39273,7 @@ stored as the key data + the @code{PRIMARY KEY}, it's important to keep the ...@@ -39270,7 +39273,7 @@ stored as the key data + the @code{PRIMARY KEY}, it's important to keep the
@code{PRIMARY KEY} as short as possible to save disk and get better speed. @code{PRIMARY KEY} as short as possible to save disk and get better speed.
@item @item
@code{LOCK TABLES} works on @code{BDB} tables as with other tables. If @code{LOCK TABLES} works on @code{BDB} tables as with other tables. If
you don't use @code{LOCK TABLE}, MYSQL will issue an internal you don't use @code{LOCK TABLE}, MySQL will issue an internal
multiple-write lock on the table to ensure that the table will be multiple-write lock on the table to ensure that the table will be
properly locked if another thread issues a table lock. properly locked if another thread issues a table lock.
@item @item
...@@ -39708,7 +39711,7 @@ $rv = $dbh->do($statement) ...@@ -39708,7 +39711,7 @@ $rv = $dbh->do($statement)
or die "Can't execute $statement: $dbh- >errstr\n"; or die "Can't execute $statement: $dbh- >errstr\n";
@end example @end example
Generally the 'do' statement is MUCH faster (and is preferable) Generally the 'do' statement is much faster (and is preferable)
than prepare/execute for statements that don't contain parameters. than prepare/execute for statements that don't contain parameters.
@findex DBI->quote() @findex DBI->quote()
...@@ -42593,7 +42596,7 @@ else // query succeeded, process any data returned by it ...@@ -42593,7 +42596,7 @@ else // query succeeded, process any data returned by it
@} @}
@end example @end example
An alternative (if you KNOW that your query should have returned a result set) An alternative (if you know that your query should have returned a result set)
is to replace the @code{mysql_errno(&mysql)} call with a check if is to replace the @code{mysql_errno(&mysql)} call with a check if
@code{mysql_field_count(&mysql)} is = 0. This will only happen if something @code{mysql_field_count(&mysql)} is = 0. This will only happen if something
went wrong. went wrong.
...@@ -44973,7 +44976,7 @@ parameter to @code{1}: ...@@ -44973,7 +44976,7 @@ parameter to @code{1}:
If @code{xxx()} sets @code{*error} to @code{1} for any row, the function If @code{xxx()} sets @code{*error} to @code{1} for any row, the function
value is @code{NULL} for the current row and for any subsequent rows value is @code{NULL} for the current row and for any subsequent rows
processed by the statement in which @code{XXX()} was invoked. (@code{xxx()} processed by the statement in which @code{XXX()} was invoked. (@code{xxx()}
will not even be called for subsequent rows.) @strong{NOTE:} In will not even be called for subsequent rows.) @strong{Note:} In
MySQL versions prior to 3.22.10, you should set both @code{*error} MySQL versions prior to 3.22.10, you should set both @code{*error}
and @code{*is_null}: and @code{*is_null}:
...@@ -45289,7 +45292,7 @@ The machine doesn't answer to a remote machine's pings. ...@@ -45289,7 +45292,7 @@ The machine doesn't answer to a remote machine's pings.
Different, unrelated programs don't behave correctly. Different, unrelated programs don't behave correctly.
@item @item
If your system rebooted unexpectedly (a faulty user level program should If your system rebooted unexpectedly (a faulty user level program should
NEVER be able to take down your system). @strong{never} be able to take down your system).
@end itemize @end itemize
In this case you should start by checking all your cables and run some In this case you should start by checking all your cables and run some
...@@ -46034,10 +46037,10 @@ symbols that start with @code{mysql_}, like the following: ...@@ -46034,10 +46037,10 @@ symbols that start with @code{mysql_}, like the following:
@end example @end example
you should be able to solve this by adding @code{-Lpath-to-the-mysql-library you should be able to solve this by adding @code{-Lpath-to-the-mysql-library
-lmysqlclient} @strong{LAST} on your link line. -lmysqlclient} @strong{last} on your link line.
If you get @code{undefined reference} errors for the @code{uncompress} If you get @code{undefined reference} errors for the @code{uncompress}
or @code{compress} function, add @code{-lz} @strong{LAST} on your link or @code{compress} function, add @code{-lz} @strong{last} on your link
line and try again! line and try again!
If you get @code{undefined reference} errors for functions that should If you get @code{undefined reference} errors for functions that should
...@@ -46978,9 +46981,9 @@ SELECT col_name1, col_name3, col_name2 FROM tbl_name; ...@@ -46978,9 +46981,9 @@ SELECT col_name1, col_name3, col_name2 FROM tbl_name;
will return columns in the order @code{col_name1}, @code{col_name3}, @code{col_name2}. will return columns in the order @code{col_name1}, @code{col_name3}, @code{col_name2}.
You should @strong{NEVER}, in an application, use @code{SELECT *} and You should @strong{never}, in an application, use @code{SELECT *} and
retrieve the columns based on their position, because the order in which retrieve the columns based on their position, because the order in which
columns are returned @strong{CANNOT} be guaranteed over time. A simple columns are returned @strong{cannot} be guaranteed over time. A simple
change to your database may cause your application to fail rather change to your database may cause your application to fail rather
dramatically. dramatically.
...@@ -49480,7 +49483,7 @@ Initialise signals early to avoid problem with signals in InnoDB. ...@@ -49480,7 +49483,7 @@ Initialise signals early to avoid problem with signals in InnoDB.
@item @item
Applied patch for the @code{tis620} character set to make comparisons Applied patch for the @code{tis620} character set to make comparisons
case-independent and to fix a bug in @code{LIKE} for this character set. case-independent and to fix a bug in @code{LIKE} for this character set.
@strong{NOTE}: All tables that uses the @code{tis620} character set must be @strong{Note}: All tables that uses the @code{tis620} character set must be
fixed with @code{myisamchk -r} or @code{REPAIR TABLE} ! fixed with @code{myisamchk -r} or @code{REPAIR TABLE} !
@item @item
Added @code{--skip-safemalloc} option to @code{mysqld}. Added @code{--skip-safemalloc} option to @code{mysqld}.
...@@ -49496,7 +49499,7 @@ Fixed a bug that allowed you to use database names containing a @samp{.} ...@@ -49496,7 +49499,7 @@ Fixed a bug that allowed you to use database names containing a @samp{.}
character. This fixes a serious security issue when @code{mysqld} is run character. This fixes a serious security issue when @code{mysqld} is run
as root. as root.
@item @item
Fixed bug when thread creation failed (could happen when doing a LOT Fixed bug when thread creation failed (could happen when doing a @strong{lot}
of connections in a short time). of connections in a short time).
@item @item
Fixed some problems with @code{FLUSH TABLES} and @code{TEMPORARY} tables. Fixed some problems with @code{FLUSH TABLES} and @code{TEMPORARY} tables.
...@@ -50027,7 +50030,7 @@ and the interactive help for more information. ...@@ -50027,7 +50030,7 @@ and the interactive help for more information.
Fixed crash when automatic repair of @code{MyISAM} table failed. Fixed crash when automatic repair of @code{MyISAM} table failed.
@item @item
Fixed a major performance bug in the table locking code when one Fixed a major performance bug in the table locking code when one
constantly had a LOT of @code{SELECT}, @code{UPDATE} and @code{INSERT} constantly had a lot of @code{SELECT}, @code{UPDATE} and @code{INSERT}
statements running. The symptom was that the @code{UPDATE} and statements running. The symptom was that the @code{UPDATE} and
@code{INSERT} queries were locked for a long time while new @code{SELECT} @code{INSERT} queries were locked for a long time while new @code{SELECT}
statements were executed before the updates. statements were executed before the updates.
...@@ -51549,7 +51552,7 @@ Added @code{mysqld} option @code{--default-table-type}. ...@@ -51549,7 +51552,7 @@ Added @code{mysqld} option @code{--default-table-type}.
The 3.22 version has faster and safer connect code than version 3.21, as well The 3.22 version has faster and safer connect code than version 3.21, as well
as a lot of new nice enhancements. The reason for not including these changes as a lot of new nice enhancements. The reason for not including these changes
As there aren't really any MAJOR changes, upgrading from 3.21 to 3.22 should As there aren't really any major changes, upgrading from 3.21 to 3.22 should
be very easy and painless. @xref{Upgrading-from-3.21}. be very easy and painless. @xref{Upgrading-from-3.21}.
@menu @menu
...@@ -52088,7 +52091,7 @@ Fix for @code{isamchk} for tables which need big temporary files. ...@@ -52088,7 +52091,7 @@ Fix for @code{isamchk} for tables which need big temporary files.
@itemize @bullet @itemize @bullet
@item @item
@strong{IMPORTANT}: You must run the @code{mysql_fix_privilege_tables} script @strong{Important}: You must run the @code{mysql_fix_privilege_tables} script
when you upgrade to this version! This is needed because of the new when you upgrade to this version! This is needed because of the new
@code{GRANT} system. If you don't do this, you will get @code{Access @code{GRANT} system. If you don't do this, you will get @code{Access
denied} when you try to use @code{ALTER TABLE}, @code{CREATE INDEX} or denied} when you try to use @code{ALTER TABLE}, @code{CREATE INDEX} or
...@@ -52169,7 +52172,7 @@ Added @code{maybe_null} to the UDF structure. ...@@ -52169,7 +52172,7 @@ Added @code{maybe_null} to the UDF structure.
Added option @code{IGNORE} to @code{INSERT} statements with many rows. Added option @code{IGNORE} to @code{INSERT} statements with many rows.
@item @item
Fixed some problems with sorting of the koi8 character sets; Users of koi8 Fixed some problems with sorting of the koi8 character sets; Users of koi8
@strong{MUST} run @code{isamchk -rq} on each table that has an index on @strong{must} run @code{isamchk -rq} on each table that has an index on
a @code{CHAR} or @code{VARCHAR} column. a @code{CHAR} or @code{VARCHAR} column.
@item @item
New script @code{mysql_setpermission}, by Luuk de Boer, allows one New script @code{mysql_setpermission}, by Luuk de Boer, allows one
...@@ -52218,7 +52221,7 @@ Added a lot more output to @code{mysqladmin debug}. ...@@ -52218,7 +52221,7 @@ Added a lot more output to @code{mysqladmin debug}.
@item @item
You can now start @code{mysqld} on Windows with the @code{--flush} option. You can now start @code{mysqld} on Windows with the @code{--flush} option.
This will flush all tables to disk after each update. This makes things This will flush all tables to disk after each update. This makes things
much safer on NT/Win98 but also @strong{MUCH} slower. much safer on NT/Win98 but also @strong{much} slower.
@end itemize @end itemize
...@@ -52421,13 +52424,13 @@ trailing @samp{;}. ...@@ -52421,13 +52424,13 @@ trailing @samp{;}.
@item @item
Fix for corrupted fixed-format output generated by @code{SELECT INTO OUTFILE}. Fix for corrupted fixed-format output generated by @code{SELECT INTO OUTFILE}.
@item @item
@strong{WARNING: INCOMPATIBLE CHANGE!!} @strong{Warning: Incompatible change!}
Added Oracle @code{GREATEST()} and @code{LEAST()} functions. You must now use Added Oracle @code{GREATEST()} and @code{LEAST()} functions. You must now use
these instead of the @code{MAX()} and @code{MIN()} functions to get the these instead of the @code{MAX()} and @code{MIN()} functions to get the
largest/smallest value from a list of values. These can now handle @code{REAL}, largest/smallest value from a list of values. These can now handle @code{REAL},
@code{BIGINT} and string (@code{CHAR} or @code{VARCHAR}) values. @code{BIGINT} and string (@code{CHAR} or @code{VARCHAR}) values.
@item @item
@strong{WARNING: INCOMPATIBLE CHANGE!!} @strong{Warning: Incompatible change!}
@code{DAYOFWEEK()} had offset 0 for Sunday. Changed the offset to 1. @code{DAYOFWEEK()} had offset 0 for Sunday. Changed the offset to 1.
@item @item
Give an error for queries that mix @code{GROUP BY} columns and fields when Give an error for queries that mix @code{GROUP BY} columns and fields when
...@@ -53247,7 +53250,7 @@ Added ODBC 2.0 & 3.0 functions @code{POWER()}, @code{SPACE()}, ...@@ -53247,7 +53250,7 @@ Added ODBC 2.0 & 3.0 functions @code{POWER()}, @code{SPACE()},
@code{COT()}, @code{DEGREES()}, @code{RADIANS()}, @code{ROUND(2 arg)} @code{COT()}, @code{DEGREES()}, @code{RADIANS()}, @code{ROUND(2 arg)}
and @code{TRUNCATE()}. and @code{TRUNCATE()}.
@item @item
@strong{WARNING: INCOMPATIBLE CHANGE!!} @code{LOCATE()} parameters were @strong{Warning: Incompatible change!} @code{LOCATE()} parameters were
swapped according to ODBC standard. Fixed. swapped according to ODBC standard. Fixed.
@item @item
Added function @code{TIME_TO_SEC()}. Added function @code{TIME_TO_SEC()}.
...@@ -53266,14 +53269,14 @@ be compatible with @code{mysqldump}. ...@@ -53266,14 +53269,14 @@ be compatible with @code{mysqldump}.
@itemize @bullet @itemize @bullet
@item @item
@strong{WARNING: INCOMPATIBLE CHANGE!!} @code{mysqlperl} is now from @strong{Warning: Incompatible change!} @code{mysqlperl} is now from
Msql-Mysql-modules. This means that @code{connect()} now takes Msql-Mysql-modules. This means that @code{connect()} now takes
@code{host}, @code{database}, @code{user}, @code{password} arguments! The old @code{host}, @code{database}, @code{user}, @code{password} arguments! The old
version took @code{host}, @code{database}, @code{password}, @code{user}. version took @code{host}, @code{database}, @code{password}, @code{user}.
@item @item
Allow @code{DATE '1997-01-01'}, @code{TIME '12:10:10'} and Allow @code{DATE '1997-01-01'}, @code{TIME '12:10:10'} and
@code{TIMESTAMP '1997-01-01 12:10:10'} formats required by ANSI SQL. @code{TIMESTAMP '1997-01-01 12:10:10'} formats required by ANSI SQL.
@strong{WARNING: INCOMPATIBLE CHANGE!!} This has the unfortunate @strong{Warning: Incompatible change!} This has the unfortunate
side-effect that you no longer can have columns named @code{DATE}, @code{TIME} side-effect that you no longer can have columns named @code{DATE}, @code{TIME}
or @code{TIMESTAMP}. :( Old columns can still be accessed through or @code{TIMESTAMP}. :( Old columns can still be accessed through
@code{tablename.columnname}!) @code{tablename.columnname}!)
...@@ -54758,7 +54761,7 @@ After this you can use the @code{mysql.exe} command line tool in a ...@@ -54758,7 +54761,7 @@ After this you can use the @code{mysql.exe} command line tool in a
second DOS window to reproduce the problem. You can take down the above second DOS window to reproduce the problem. You can take down the above
@code{mysqld} server with @code{mysqladmin shutdown}. @code{mysqld} server with @code{mysqladmin shutdown}.
Note that the trace file will get very @emph{BIG}! Note that the trace file will get @strong{very big}!
If you want to have a smaller trace file, you can use something like: If you want to have a smaller trace file, you can use something like:
@code{mysqld --debug=d,info,error,query,general,where:O,/tmp/mysqld.trace} @code{mysqld --debug=d,info,error,query,general,where:O,/tmp/mysqld.trace}
...@@ -54867,7 +54870,7 @@ setting the @code{DBI_TRACE} environment variable. ...@@ -54867,7 +54870,7 @@ setting the @code{DBI_TRACE} environment variable.
On some operating systems, the error log will contain a stack trace if On some operating systems, the error log will contain a stack trace if
@code{mysqld} dies unexpectedly. You can use this to find out where (and @code{mysqld} dies unexpectedly. You can use this to find out where (and
maybe why) @code{mysqld} died. @xref{Error log}. To get a stack trace, maybe why) @code{mysqld} died. @xref{Error log}. To get a stack trace,
you should NOT compile @code{mysqld} with the @code{-fomit-frame-pointer} you must not compile @code{mysqld} with the @code{-fomit-frame-pointer}
option to gcc. @xref{Compiling for debugging}. option to gcc. @xref{Compiling for debugging}.
If the error file contains something like the following: If the error file contains something like the following:
...@@ -55235,7 +55238,7 @@ Here are some tips about locking in MySQL: ...@@ -55235,7 +55238,7 @@ Here are some tips about locking in MySQL:
On web application most applications do lots of selects, very few On web application most applications do lots of selects, very few
deletes, updates mainly on keys and inserts in some specific tables. deletes, updates mainly on keys and inserts in some specific tables.
The base MySQL setup is VERY tuned for this. The base MySQL setup is very well tuned for this.
Concurrent users is not a problem if one doesn't mix updates and selects Concurrent users is not a problem if one doesn't mix updates and selects
that needs to examine many rows in the same table. that needs to examine many rows in the same table.
...@@ -1712,7 +1712,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, ...@@ -1712,7 +1712,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
charset_name=charset_name_buff; charset_name=charset_name_buff;
sprintf(charset_name,"%d",mysql->server_language); /* In case of errors */ sprintf(charset_name,"%d",mysql->server_language); /* In case of errors */
if (!(mysql->charset = if (!(mysql->charset =
get_charset((uint8) mysql->server_language, MYF(MY_WME)))) get_charset((uint8) mysql->server_language, MYF(0))))
mysql->charset = default_charset_info; /* shouldn't be fatal */ mysql->charset = default_charset_info; /* shouldn't be fatal */
} }
......
...@@ -296,7 +296,7 @@ static CHARSET_INFO *find_charset_by_name(CHARSET_INFO **table, ...@@ -296,7 +296,7 @@ static CHARSET_INFO *find_charset_by_name(CHARSET_INFO **table,
return NULL; return NULL;
} }
static CHARSET_INFO *add_charset(uint cs_number, const char *cs_name) static CHARSET_INFO *add_charset(uint cs_number, const char *cs_name, myf flags)
{ {
CHARSET_INFO tmp_cs,*cs; CHARSET_INFO tmp_cs,*cs;
uchar tmp_ctype[CTYPE_TABLE_SIZE]; uchar tmp_ctype[CTYPE_TABLE_SIZE];
...@@ -311,11 +311,11 @@ static CHARSET_INFO *add_charset(uint cs_number, const char *cs_name) ...@@ -311,11 +311,11 @@ static CHARSET_INFO *add_charset(uint cs_number, const char *cs_name)
cs->to_lower=tmp_to_lower; cs->to_lower=tmp_to_lower;
cs->to_upper=tmp_to_upper; cs->to_upper=tmp_to_upper;
cs->sort_order=tmp_sort_order; cs->sort_order=tmp_sort_order;
if (read_charset_file(cs_number, cs, MYF(MY_WME))) if (read_charset_file(cs_number, cs, flags))
return NULL; return NULL;
cs = (CHARSET_INFO*) my_once_alloc(sizeof(CHARSET_INFO), cs = (CHARSET_INFO*) my_once_alloc(sizeof(CHARSET_INFO),
MYF(MY_WME)); MYF(MY_WME));
*cs=tmp_cs; *cs=tmp_cs;
cs->name = (char *) my_once_alloc((uint) strlen(cs_name)+1, MYF(MY_WME)); cs->name = (char *) my_once_alloc((uint) strlen(cs_name)+1, MYF(MY_WME));
cs->ctype = (uchar*) my_once_alloc(CTYPE_TABLE_SIZE, MYF(MY_WME)); cs->ctype = (uchar*) my_once_alloc(CTYPE_TABLE_SIZE, MYF(MY_WME));
...@@ -333,7 +333,7 @@ static CHARSET_INFO *add_charset(uint cs_number, const char *cs_name) ...@@ -333,7 +333,7 @@ static CHARSET_INFO *add_charset(uint cs_number, const char *cs_name)
return cs; return cs;
} }
static CHARSET_INFO *get_internal_charset(uint cs_number) static CHARSET_INFO *get_internal_charset(uint cs_number, myf flags)
{ {
CHARSET_INFO *cs; CHARSET_INFO *cs;
/* /*
...@@ -344,13 +344,13 @@ static CHARSET_INFO *get_internal_charset(uint cs_number) ...@@ -344,13 +344,13 @@ static CHARSET_INFO *get_internal_charset(uint cs_number)
if (!(cs = find_charset((CHARSET_INFO**) cs_info_table.buffer, cs_number, if (!(cs = find_charset((CHARSET_INFO**) cs_info_table.buffer, cs_number,
cs_info_table.elements))) cs_info_table.elements)))
if (!(cs = find_compiled_charset(cs_number))) if (!(cs = find_compiled_charset(cs_number)))
cs=add_charset(cs_number, get_charset_name(cs_number)); cs=add_charset(cs_number, get_charset_name(cs_number), flags);
pthread_mutex_unlock(&THR_LOCK_charset); pthread_mutex_unlock(&THR_LOCK_charset);
return cs; return cs;
} }
static CHARSET_INFO *get_internal_charset_by_name(const char *name) static CHARSET_INFO *get_internal_charset_by_name(const char *name, myf flags)
{ {
CHARSET_INFO *cs; CHARSET_INFO *cs;
/* /*
...@@ -361,7 +361,7 @@ static CHARSET_INFO *get_internal_charset_by_name(const char *name) ...@@ -361,7 +361,7 @@ static CHARSET_INFO *get_internal_charset_by_name(const char *name)
if (!(cs = find_charset_by_name((CHARSET_INFO**) cs_info_table.buffer, name, if (!(cs = find_charset_by_name((CHARSET_INFO**) cs_info_table.buffer, name,
cs_info_table.elements))) cs_info_table.elements)))
if (!(cs = find_compiled_charset_by_name(name))) if (!(cs = find_compiled_charset_by_name(name)))
cs=add_charset(get_charset_number(name), name); cs=add_charset(get_charset_number(name), name, flags);
pthread_mutex_unlock(&THR_LOCK_charset); pthread_mutex_unlock(&THR_LOCK_charset);
return cs; return cs;
} }
...@@ -371,7 +371,7 @@ CHARSET_INFO *get_charset(uint cs_number, myf flags) ...@@ -371,7 +371,7 @@ CHARSET_INFO *get_charset(uint cs_number, myf flags)
{ {
CHARSET_INFO *cs; CHARSET_INFO *cs;
(void) init_available_charsets(MYF(0)); /* If it isn't initialized */ (void) init_available_charsets(MYF(0)); /* If it isn't initialized */
cs=get_internal_charset(cs_number); cs=get_internal_charset(cs_number, flags);
if (!cs && (flags & MY_WME)) if (!cs && (flags & MY_WME))
{ {
...@@ -403,7 +403,7 @@ CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags) ...@@ -403,7 +403,7 @@ CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags)
{ {
CHARSET_INFO *cs; CHARSET_INFO *cs;
(void) init_available_charsets(MYF(0)); /* If it isn't initialized */ (void) init_available_charsets(MYF(0)); /* If it isn't initialized */
cs=get_internal_charset_by_name(cs_name); cs=get_internal_charset_by_name(cs_name, flags);
if (!cs && (flags & MY_WME)) if (!cs && (flags & MY_WME))
{ {
......
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