INSTALL-SOURCE
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:201k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. 'dummy' `c_asm.h' file with:
  2.      touch include/c_asm.h
  3.      CC=gcc CFLAGS=-I./include 
  4.      CXX=gcc CXXFLAGS=-O3 
  5.      ./configure --prefix=/usr/local/mysql
  6. Note that the following problems with the `ld' program can be fixed by
  7. downloading the latest DEC (Compaq) patch kit from:
  8. `http://ftp.support.compaq.com/public/unix/'.
  9. On OSF1 V4.0D and compiler "DEC C V5.6-071 on Digital Unix V4.0 (Rev.
  10. 878)" the compiler had some strange behavior (undefined `asm' symbols).
  11. `/bin/ld' also appears to be broken (problems with `_exit undefined'
  12. errors occuring while linking `mysqld').  On this system, we have
  13. managed to compile *MySQL* with the following `configure' line, after
  14. replacing `/bin/ld' with the version from OSF 4.0C:
  15.      CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
  16. With the Digital compiler "C++ V6.1-029", the following should work:
  17.      CC=cc -pthread
  18.      CFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all -arch host
  19.      CXX=cxx -pthread
  20.      CXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all -arch host -noexceptions -nortti
  21.      export CC CFLAGS CXX CXXFLAGS
  22.      ./configure --prefix=/usr/mysql/mysql --with-mysqld-ldflags=-all-static --disable-shared --with-named-thread-libs="-lmach -lexc -lc"
  23. In some versions of OSF1, the `alloca()' function is broken. Fix this
  24. by removing the line in `config.h' that defines `'HAVE_ALLOCA''.
  25. The `alloca()' function also may have an incorrect prototype in
  26. `/usr/include/alloca.h'.  This warning resulting from this can be
  27. ignored.
  28. `configure' will use the following thread libraries automatically:
  29. `--with-named-thread-libs="-lpthread -lmach -lexc -lc"'.
  30. When using `gcc', you can also try running `configure' like this:
  31.      shell> CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ....
  32. If you have problems with signals (*MySQL* dies unexpectedly under high
  33. load), you may have found an OS bug with threads and signals. In this
  34. case you can tell *MySQL* not to use signals by configuring with:
  35.      shell> CFLAGS=-DDONT_USE_THR_ALARM 
  36.             CXXFLAGS=-DDONT_USE_THR_ALARM 
  37.             ./configure ...
  38. This doesn't affect the performance of *MySQL*, but has the side effect
  39. that you can't kill clients that are "sleeping" on a connection with
  40. `mysqladmin kill' or `mysqladmin shutdown'.  Instead, the client will
  41. die when it issues its next command.
  42. With `gcc' 2.95.2, you will probably run into the following compile
  43. error:
  44.      sql_acl.cc:1456: Internal compiler error in `scan_region', at except.c:2566
  45.      Please submit a full bug report.
  46. To fix this you should change to the `sql' directory and do a "cut and
  47. paste" of the last `gcc' line, but change `-O3' to `-O0' (or add `-O0'
  48. immediately after `gcc' if you don't have any `-O' option on your
  49. compile line.) After this is done you can just change back to the
  50. top-level directly and run `make' again.
  51. SGI-Irix Notes
  52. --------------
  53. If you are using Irix Version 6.5.3 or newer `mysqld' will only be able
  54. to create threads if you run it as a user with `CAP_SCHED_MGT'
  55. privileges (like `root') or give the `mysqld' server this privilege
  56. with the following shell command:
  57.      shell> chcap "CAP_SCHED_MGT+epi" /opt/mysql/libexec/mysqld
  58. You may have to undefine some things in `config.h' after running
  59. `configure' and before compiling.
  60. In some Irix implementations, the `alloca()' function is broken. If the
  61. `mysqld' server dies on some `SELECT' statements, remove the lines from
  62. `config.h' that define `HAVE_ALLOC' and `HAVE_ALLOCA_H'.  If
  63. `mysqladmin create' doesn't work, remove the line from `config.h' that
  64. defines `HAVE_READDIR_R'. You may have to remove the `HAVE_TERM_H' line
  65. as well.
  66. SGI recommends that you install all of the patches on this page as a
  67. set:
  68. http://support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html
  69. At the very minimum, you should install the latest kernel rollup, the
  70. latest `rld' rollup, and the latest `libc' rollup.
  71. You definately need all the POSIX patches on this page, for pthreads
  72. support:
  73. http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html
  74. If you get the something like the following error when compiling
  75. `mysql.cc':
  76.      "/usr/include/curses.h", line 82: error(1084): invalid combination of type
  77. then type the following in the top-level directory of your *MySQL*
  78. source tree:
  79.      shell> extra/replace bool curses_bool < /usr/include/curses.h > include/curses.h
  80.      shell> make
  81. There have also been reports of scheduling problems.  If only one
  82. thread is running, things go slow. Avoid this by starting another
  83. client. This may lead to a 2-to-10-fold increase in execution speed
  84. thereafter for the other thread.  This is a poorly understood problem
  85. with Irix threads; you may have to improvise to find solutions until
  86. this can be fixed.
  87. If you are compiling with `gcc', you can use the following `configure'
  88. command:
  89.      CC=gcc CXX=gcc CXXFLAGS=-O3 
  90.      ./configure --prefix=/usr/local/mysql --with-thread-safe-client --with-named-thread-libs=-lpthread
  91. FreeBSD Notes
  92. -------------
  93. FreeBSD 3.x is recommended for running *MySQL* since the thread package
  94. is much more integrated.
  95. The easiest and therefor the preferred way to install is to use the
  96. mysql-server and mysql-client ports available on
  97. `http://www.freebsd.org'.
  98. Using these gives you:
  99.    * A working *MySQL* with all optimizations known to work on your
  100.      version of FreeBSD enabled.
  101.    * Automatic configuration and build.
  102.    * Startup scripts installed in /usr/local/etc/rc.d.
  103.    * Ability to see which files that are installed with pkg_info -L.
  104.      And to remove them all with pkg_delete if you no longer want
  105.      *MySQL* on that machine.
  106. It is recomended you use MIT-pthreads on FreeBSD 2.x and native threads
  107. on Versions 3 and up. It is possible to run with  native threads on
  108. some late 2.2.x versions but you may encounter problems shutting down
  109. mysqld.
  110. The *MYSQL* Makefiles require GNU make (`gmake') to work.  If you want
  111. to compile *MYSQL* you need to install GNU make first.
  112. Be sure to have your name resolver setup correct. Otherwise you may
  113. experience resolver delays or failures when connecting to mysqld.
  114. Make sure that the `localhost' entry in the `/etc/hosts' file is
  115. correct (otherwise you will have problems connecting to the database).
  116. The `/etc/hosts' file should start with a line:
  117.      127.0.0.1       localhost localhost.your.domain
  118. If you notice that `configure' will use MIT-pthreads, you should read
  119. the MIT-pthreads notes. *Note MIT-pthreads::.
  120. If you get an error from `make install' that it can't find
  121. `/usr/include/pthreads', `configure' didn't detect that you need
  122. MIT-pthreads. This is fixed by executing these commands:
  123.      shell> rm config.cache
  124.      shell> ./configure --with-mit-threads
  125. FreeBSD is also known to have a very low default file handle limit.
  126. *Note Not enough file handles::. Uncomment the ulimit -n section in
  127. safe_mysqld or raise the limits for the mysqld user in /etc/login.conf
  128. (and rebuild it witg cap_mkdb /etc/login.conf.) Also be sure you set the
  129. appropriate class for this user in the password file if you are not
  130. using the default (use: chpass mysqld-user-name). *Note safe_mysqld::.
  131. If you get problems with the current date in *MySQL*, setting the `TZ'
  132. variable will probably help. *Note Environment variables::.
  133. To get a secure and stable system you should only use FreeBSD kernels
  134. that are marked `-STABLE'
  135. NetBSD notes
  136. ------------
  137. To compile on NetBSD you need GNU `make'. Otherwise the compile will
  138. crash when `make' tries to run `lint' on C++ files.
  139. OpenBSD Notes
  140. -------------
  141. * Menu:
  142. * OpenBSD 2.5::                 OpenBSD 2.5 Notes
  143. * OpenBSD 2.8::                 OpenBSD 2.8 Notes
  144. OpenBSD 2.5 Notes
  145. .................
  146. On OpenBSD Version 2.5, you can compile *MySQL* with native threads
  147. with the following options:
  148.      CFLAGS=-pthread CXXFLAGS=-pthread ./configure --with-mit-threads=no
  149. OpenBSD 2.8 Notes
  150. .................
  151. Our users have reported that OpenBSD 2.8 has a threading bug which
  152. causes problems with MySQL.  The OpenBSD Developers have fixed the
  153. problem, but as of January 25th, 2001, it's only available in the
  154. "-current" branch.  The symptoms of this threading bug are: slow
  155. response, high load, high cpu usage, and crashes.
  156. BSD/OS Notes
  157. ------------
  158. * Menu:
  159. * BSDI2::                       BSD/OS 2.x notes
  160. * BSDI3::                       BSD/OS 3.x notes
  161. * BSDI4::                       BSD/OS 4.x notes
  162. BSD/OS Version 2.x Notes
  163. ........................
  164. If you get the following error when compiling *MySQL*, your `ulimit'
  165. value for virtual memory is too low:
  166.      item_func.h: In method `Item_func_ge::Item_func_ge(const Item_func_ge &)':
  167.      item_func.h:28: virtual memory exhausted
  168.      make[2]: *** [item_func.o] Error 1
  169. Try using `ulimit -v 80000' and run `make' again.  If this doesn't work
  170. and you are using `bash', try switching to `csh' or `sh'; some BSDI
  171. users have reported problems with `bash' and `ulimit'.
  172. If you are using `gcc', you may also use have to use the
  173. `--with-low-memory' flag for `configure' to be able to compile
  174. `sql_yacc.cc'.
  175. If you get problems with the current date in *MySQL*, setting the `TZ'
  176. variable will probably help. *Note Environment variables::.
  177. BSD/OS Version 3.x Notes
  178. ........................
  179. Upgrade to BSD/OS Version 3.1. If that is not possible, install
  180. BSDIpatch M300-038.
  181. Use the following command when configuring *MySQL*:
  182.      shell> env CXX=shlicc++ CC=shlicc2 
  183.             ./configure 
  184.                 --prefix=/usr/local/mysql 
  185.                 --localstatedir=/var/mysql 
  186.                 --without-perl 
  187.                 --with-unix-socket-path=/var/mysql/mysql.sock
  188. The following is also known to work:
  189.      shell> env CC=gcc CXX=gcc CXXFLAGS=-O3 
  190.             ./configure 
  191.                 --prefix=/usr/local/mysql 
  192.                 --with-unix-socket-path=/var/mysql/mysql.sock
  193. You can change the directory locations if you wish, or just use the
  194. defaults by not specifying any locations.
  195. If you have problems with performance under heavy load, try using the
  196. `--skip-thread-priority' option to `mysqld'!  This will run all threads
  197. with the same priority; on BSDI Version 3.1, this gives better
  198. performance (at least until BSDI fixes their thread scheduler).
  199. If you get the error `virtual memory exhausted' while compiling, you
  200. should try using `ulimit -v 80000' and run `make' again.  If this
  201. doesn't work and you are using `bash', try switching to `csh' or `sh';
  202. some BSDI users have reported problems with `bash' and `ulimit'.
  203. BSD/OS Version 4.x Notes
  204. ........................
  205. BSDI Version 4.x has some thread-related bugs.  If you want to use
  206. *MySQL* on this, you should install all thread-related patches. At least
  207. M400-023 should be installed.
  208. On some BSDI Version 4.x systems, you may get problems with shared
  209. libraries.  The symptom is that you can't execute any client programs,
  210. for example, `mysqladmin'.  In this case you need to reconfigure not to
  211. use shared libraries with the `--disable-shared' option to configure.
  212. Some customers have had problems on BSDI 4.0.1 that the `mysqld' binary
  213. after a while can't open tables.  This is because some library/system
  214. related bug causes `mysqld' to change current directory without asking
  215. for this!
  216. The fix is to either upgrade to 3.23.34 or after running `configure'
  217. remove the line `#define HAVE_REALPATH' from `config.h' before running
  218. make.
  219. Note that the above means that you can't symbolic link a database
  220. directories to another database directory or symbolic link a table to
  221. another database on BSDI!  (Making a symbolic link to another disk is
  222. ok).
  223. SCO Notes
  224. ---------
  225. The current port is tested only on a "sco3.2v5.0.4" and "sco3.2v5.0.5"
  226. system.  There has also been a lot of progress on a port to "sco
  227. 3.2v4.2".
  228. For the moment the recommended compiler on OpenServer is gcc 2.95.2.
  229. With this you should be able to compile *MySQL* with just:
  230.      CC=gcc CXX=gcc ./configure ... (options)
  231.   1. For OpenServer 5.0.X you need to use GDS in Skunkware 95 (95q4c).
  232.      This is necessary because GNU `gcc' 2.7.2 in Skunkware 97 does not
  233.      have GNU `as'.  You can also use `egcs' 1.1.2 or newer
  234.      `http://www.egcs.com/'.  If you are using `egcs' 1.1.2 you have to
  235.      execute the following command:
  236.           shell> cp -p /usr/include/pthread/stdtypes.h /usr/local/lib/gcc-lib/i386-pc-sco3.2v5.0.5/egcs-2.91.66/include/pthread/
  237.   2. You need the port of GCC 2.5.x for this product and the Development
  238.      system.  They are required on this version of SCO Unix.  You cannot
  239.      just use the GCC Dev system.
  240.   3. You should get the FSU Pthreads package and install it first.
  241.      This can be found at
  242.      `http://www.cs.wustl.edu/~schmidt/ACE_wrappers/FSU-threads.tar.gz'.
  243.      You can also get a precompiled package from
  244.      `http://www.mysql.com/Downloads/SCO/FSU-threads-3.5c.tar.gz'.
  245.   4. FSU Pthreads can be compiled with SCO Unix 4.2 with tcpip.  Or
  246.      OpenServer 3.0 or Open Desktop 3.0 (OS 3.0 ODT 3.0), with the SCO
  247.      Development System installed using a good port of GCC 2.5.x ODT or
  248.      OS 3.0 you will need a good port of GCC 2.5.x There are a lot of
  249.      problems without a good port.  The port for this product requires
  250.      the SCO Unix Development system.  Without it, you are missing the
  251.      libraries and the linker that is needed.
  252.   5. To build FSU Pthreads on your system, do the following:
  253.        a. Run `./configure' in the `threads/src' directory and select
  254.           the SCO OpenServer option. This command copies
  255.           `Makefile.SCO5' to `Makefile'.
  256.        b. Run `make'.
  257.        c. To install in the default `/usr/include' directory, login as
  258.           root, then `cd' to the `thread/src' directory, and run `make
  259.           install'.
  260.   6. Remember to use GNU `make' when making *MySQL*.
  261.   7. If you don't start `safe_mysqld' as root, you probably will get
  262.      only the default 110 open files per process.  `mysqld' will write
  263.      a note about this in the log file.
  264.   8. With SCO 3.2V5.0.5, you should use FSU Pthreads version 3.5c or
  265.      newer.  You should also use gcc 2.95.2 or newer!
  266.      The following `configure' command should work:
  267.           shell> ./configure --prefix=/usr/local/mysql --disable-shared
  268.   9. With SCO 3.2V4.2, you should use FSU Pthreads version 3.5c or
  269.      newer.  The following `configure' command should work:
  270.           shell> CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" 
  271.                  ./configure 
  272.                      --with-debug --prefix=/usr/local/mysql 
  273.                      --with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads" 
  274.                      --with-named-curses-libs="-lcurses"
  275.      You may get some problems with some include files. In this case,
  276.      you can find new SCO-specific include files at
  277.      `http://www.mysql.com/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz'.
  278.      You should unpack this file in the `include' directory of your
  279.      *MySQL* source tree.
  280. SCO development notes:
  281.    * *MySQL* should automatically detect FSU Pthreads and link `mysqld'
  282.      with `-lgthreads -lsocket -lgthreads'.
  283.    * The SCO development libraries are re-entrant in FSU Pthreads. SCO
  284.      claims that its libraries' functions are re-entrant, so they must
  285.      be reentrant with FSU Pthreads. FSU Pthreads on OpenServer tries
  286.      to use the SCO scheme to make re-entrant libraries.
  287.    * FSU Pthreads (at least the version at `http://www.mysql.com/')
  288.      comes linked with GNU `malloc'.  If you encounter problems with
  289.      memory usage, make sure that `gmalloc.o' is included in
  290.      `libgthreads.a' and `libgthreads.so'.
  291.    * In FSU Pthreads, the following system calls are pthreads-aware:
  292.      `read()', `write()', `getmsg()', `connect()', `accept()',
  293.      `select()', and `wait()'.
  294. If you want to install DBI on SCO, you have to edit the `Makefile' in
  295. DBI-xxx and each subdirectory.
  296. Note that the following assumes gcc 2.95.2 or newer:
  297.      OLD:                                  NEW:
  298.      CC = cc                               CC = gcc
  299.      CCCDLFLAGS = -KPIC -W1,-Bexport       CCCDLFLAGS = -fpic
  300.      CCDLFLAGS = -wl,-Bexport              CCDLFLAGS =
  301.      
  302.      LD = ld                               LD = gcc -G -fpic
  303.      LDDLFLAGS = -G -L/usr/local/lib       LDDLFLAGS = -L/usr/local/lib
  304.      LDFLAGS = -belf -L/usr/local/lib      LDFLAGS = -L/usr/local/lib
  305.      
  306.      LD = ld                               LD = gcc -G -fpic
  307.      OPTIMISE = -Od                        OPTIMISE = -O1
  308.      
  309.      OLD:
  310.      CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include
  311.      
  312.      NEW:
  313.      CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include
  314. This is because the Perl dynaloader will not load the `DBI' modules if
  315. they were compiled with `icc' or `cc'.
  316. Perl works best when compiled with `cc'.
  317. SCO Unixware Version 7.0 Notes
  318. ------------------------------
  319. You must use a version of *MySQL* at least as recent as Version 3.22.13
  320. because that version fixes some portability problems under Unixware.
  321. We have been able to compile *MySQL* with the following `configure'
  322. command on Unixware Version 7.0.1:
  323.      CC=cc CXX=CC ./configure --prefix=/usr/local/mysql
  324. If you want to use `gcc', you must use `gcc' 2.95.2 or newer.
  325. IBM-AIX notes
  326. -------------
  327. Automatic detection of `xlC' is missing from Autoconf, so a `configure'
  328. command something like this is needed when compiling *MySQL* (The
  329. example uses the IBM compiler):
  330.      export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 "
  331.      export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192"
  332.      export CFLAGS="-I /usr/local/include"
  333.      export LDLFAGS="-L /usr/local/lib"
  334.      export CPPFLAGS=$CFLAGS
  335.      export CXXFLAGS=$CFLAGS
  336.      
  337.      ./configure --prefix=/usr/local 
  338.       --localstatedir=/var/mysql 
  339.       --sysconfdir=/etc/mysql 
  340.       --sbindir='/usr/local/bin' 
  341.       --libexecdir='/usr/local/bin' 
  342.       --enable-thread-safe-client 
  343.       --enable-large-files
  344. Above are the options used to compile the *MySQL* distribution that can
  345. be found at www-frec.bull.com (http://www-frec.bull.com/).
  346. If you change the `-O3' to `-O2' in the above configure line, you must
  347. also remove the `-qstrict' option (this is a limitation in the IBM C
  348. compiler).
  349. If you are using `gcc' or `egcs' to compile *MySQL*, you *MUST* use the
  350. `-fno-exceptions' flag, as the exception handling in `gcc'/`egcs' is
  351. not thread safe!  (This is tested with `egcs' 1.1.).  There are also
  352. some known problems with IBM's assembler, which may cause it to
  353. generate bad code when used with gcc.
  354. We recommend the following `configure' line with `egcs' and `gcc 2.95'
  355. on AIX:
  356.      CC="gcc -pipe -mcpu=power2 -Wa,-many" 
  357.      CXX="gcc -pipe -mcpu=power2 -Wa,-many" 
  358.      CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" 
  359.      ./configure --prefix=/usr/local/mysql --with-low-memory
  360. The `-Wa,-many' is necessary for the compile to be successful. IBM is
  361. aware of this problem but is in to hurry to fix it because of the
  362. workaround available.  We don't know if the `-fno-exceptions' is
  363. required with `gcc 2.95', but as *MySQL* doesn't use exceptions and the
  364. above option generates faster code, we recommend that you should always
  365. use this option with `egcs / gcc'.
  366. If you have problems with signals (*MySQL* dies unexpectedly under high
  367. load) you may have found an OS bug with threads and signals. In this
  368. case you can tell *MySQL* not to use signals by configuring with:
  369.      shell> CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc 
  370.             CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -DDONT_USE_THR_ALARM" 
  371.             ./configure --prefix=/usr/local/mysql --with-debug --with-low-memory
  372. This doesn't affect the performance of *MySQL*, but has the side effect
  373. that you can't kill clients that are "sleeping" on a connection with
  374. `mysqladmin kill' or `mysqladmin shutdown'.  Instead, the client will
  375. die when it issues its next command.
  376. On some versions of AIX, linking with `libbind.a' makes `getservbyname'
  377. core dump. This is an AIX bug and should be reported to IBM.
  378. HP-UX Version 10.20 Notes
  379. -------------------------
  380. There are a couple of small problems when compiling *MySQL* on HP-UX.
  381. We recommend that you use `gcc' instead of the HP-UX native compiler,
  382. because `gcc' produces better code!
  383. We recommend using gcc 2.95 on HP-UX.  Don't use high optimization
  384. flags (like -O6) as this may not be safe on HP-UX.
  385. Note that MIT-pthreads can't be compiled with the HP-UX compiler
  386. because it can't compile `.S' (assembler) files.
  387. The following configure line should work:
  388.      CFLAGS="-DHPUX -I/opt/dce/include" CXXFLAGS="-DHPUX -I/opt/dce/include -felide-constructors -fno-exceptions -fno-rtti" CXX=gcc ./configure --with-pthread --with-named-thread-libs='-ldce' --prefix=/usr/local/mysql --disable-shared
  389. If you are compiling `gcc' 2.95 yourself, you should NOT link it with
  390. the DCE libraries (`libdce.a' or `libcma.a') if you want to compile
  391. *MySQL* with MIT-pthreads.  If you mix the DCE and MIT-pthreads
  392. packages you will get a `mysqld' to which you cannot connect.  Remove
  393. the DCE libraries while you compile `gcc' 2.95!
  394. HP-UX Version 11.x Notes
  395. ------------------------
  396. For HPUX Version 11.x we recommend *MySQL* Version 3.23.15 or later.
  397. Because of some critical bugs in the standard HPUX libraries, one should
  398. install the following patches before trying to run MySQL on HPUX 11.0:
  399.      PHKL_22840 Streams cumulative
  400.      PHNE_22397 ARPA cumulative
  401. This will solve a problem that one gets `EWOULDBLOCK' from `recv()' and
  402. `EBADF' from `accept()' in threaded applications.
  403. If you are using `gcc' 2.95.1 on a unpatched HPUX 11.x system, you will
  404. get the error:
  405.      In file included from /usr/include/unistd.h:11,
  406.                       from ../include/global.h:125,
  407.                       from mysql_priv.h:15,
  408.                       from item.cc:19:
  409.      /usr/include/sys/unistd.h:184: declaration of C function ...
  410.      /usr/include/sys/pthread.h:440: previous declaration ...
  411.      In file included from item.h:306,
  412.                       from mysql_priv.h:158,
  413.                       from item.cc:19:
  414. The problem is that HP-UX doesn't define `pthreads_atfork()'
  415. consistently.  It has conflicting prototypes in
  416. `/usr/include/sys/unistd.h':184 and `/usr/include/sys/pthread.h':440 (I
  417. post the details below).
  418. One solution is to copy `/usr/include/sys/unistd.h' into
  419. `mysql/include' and edit `unistd.h' and change it to match the
  420. definition in `pthread.h'.  Here's the diff:
  421.      183,184c183,184
  422.      <      extern int pthread_atfork(void (*prepare)(), void (*parent)(),
  423.      <                                                void (*child)());
  424.      ---
  425.      >      extern int pthread_atfork(void (*prepare)(void), void (*parent)(void),
  426.      >                                                void (*child)(void));
  427. After this, the following configure line should work:
  428.      CFLAGS="-fomit-frame-pointer -O6 -fpic" CXX=gcc CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -O6" ./configure --prefix=/usr/local/mysql --disable-shared
  429. Here is some information that a HPUX Version 11.x user sent us about
  430. compiling *MySQL* with HPUX:x compiler:
  431.       Environment:
  432.            proper compilers.
  433.               setenv CC cc
  434.               setenv CXX aCC
  435.            flags
  436.               setenv CFLAGS -D_REENTRANT
  437.               setenv CXXFLAGS -D_REENTRANT
  438.               setenv CPPFLAGS -D_REENTRANT
  439.           % aCC -V
  440.           aCC: HP ANSI C++ B3910B X.03.14.06
  441.           % cc -V /tmp/empty.c
  442.           cpp.ansi: HP92453-01 A.11.02.00 HP C Preprocessor (ANSI)
  443.           ccom: HP92453-01 A.11.01.00 HP C Compiler
  444.           cc: "/tmp/empty.c", line 1: warning 501: Empty source file.
  445.      
  446.        configuration:
  447.           ./configure  --with-pthread        
  448.           --prefix=/source-control/mysql     
  449.           --with-named-thread-libs=-lpthread 
  450.           --with-low-memory
  451.      
  452.          added '#define _CTYPE_INCLUDED' to include/m_ctype.h. This
  453.          symbol is the one defined in HP's /usr/include/ctype.h:
  454.      
  455.           /* Don't include std ctype.h when this is included */
  456.           #define _CTYPE_H
  457.           #define __CTYPE_INCLUDED
  458.           #define _CTYPE_INCLUDED
  459.           #define _CTYPE_USING   /* Don't put names in global namespace. */
  460.    * I had to use the compile-time flag `-D_REENTRANT' to get the
  461.      compiler to recognize the prototype for `localtime_r'.
  462.      Alternatively I could have supplied the prototype for
  463.      `localtime_r'. But I wanted to catch other bugs without needing to
  464.      run into them. I wasn't sure where I needed it, so I added it to
  465.      all flags.
  466.    * The optimization flags used by *MySQL* (-O3) are not recognized by
  467.      HP's compilers. I did not change the flags.
  468. Mac OS X Notes
  469. --------------
  470. * Menu:
  471. * Mac OS X Public Data::
  472. * Mac OS X Server::
  473. Mac OS X Public beta
  474. ....................
  475. *MySQL* should work without any probelms on Mac OS X public beta.
  476. (Darwin); You don't need the pthread patches for this os!
  477. Mac OS X Server
  478. ...............
  479. Before trying to configure *MySQL* on Mac OS X server you must first
  480. first install the pthread package from
  481. `http://www.prnet.de/RegEx/mysql.html'.  Note that this is not neeaded
  482. Our binary for Mac OS X is compiled on Rhapsody 5.5 with the following
  483. configure line:
  484.      CC=gcc CFLAGS="-O2 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O2 -fomit-frame-pointer" ./configure --prefix=/usr/local/mysql "--with-comment=Official MySQL binary" --with-extra-charsets=complex  --disable-shared
  485. You might want to also add aliases to your shell's resource file to
  486. access `mysql' and `mysqladmin' from the command line:
  487.      alias mysql '/usr/local/mysql/bin/mysql'
  488.      alias mysqladmin '/usr/local/mysql/bin/mysqladmin'
  489. BeOS Notes
  490. ----------
  491. We are really interested in getting *MySQL* to work on BeOS, but
  492. unfortunately we don't have any person who knows BeOS or has time to do
  493. a port.
  494. We are interested in finding someone to do a port, and we will help them
  495. with any techincal questions they may have while doing the port.
  496. We have previously talked with some BeOS developers that have said that
  497. *MySQL* is 80% ported to BeOS, but we haven't heard from these in a
  498. while.
  499. Windows Notes
  500. =============
  501. This section describes installation and use of *MySQL* on Windows.  This
  502. is also described in the `README' file that comes with the *MySQL*
  503. Windows distribution.
  504. * Menu:
  505. * Windows installation::        Installing *MySQL* on Windows
  506. * Win95 start::                 Starting *MySQL* on Win95 / Win98
  507. * NT start::                    Starting *MySQL* on NT / Win2000
  508. * Windows running::             Running *MySQL* on Windows
  509. * Windows and SSH::             Connecting to a remote *MySQL* from Windows with SSH
  510. * Windows symbolic links::      Splitting data across different disks under Win32
  511. * Windows compiling::           Compiling MySQL clients on Windows.
  512. * Windows and BDB tables.::     Windows and BDB Tables
  513. * Windows vs Unix::             *MySQL*-Windows compared to Unix *MySQL*
  514. Installing MySQL on Windows
  515. ---------------------------
  516. If you don't have a copy of the MySQL distribution, you should first
  517. download one from `http://www.mysql.com/'.
  518. If you plan to connect to *MySQL* from some other program, you will
  519. probably also need the *MyODBC* driver. You can find this at the
  520. *MyODBC* download page
  521. (`http://www.mysql.com/downloads/api-myodbc.html').
  522. To install either distribution, unzip it in some empty directory and
  523. run the `Setup.exe' program.
  524. By default, *MySQL*-Windows is configured to be installed in
  525. `C:mysql'.  If you want to install *MySQL* elsewhere, install it in
  526. `C:mysql', then move the installation to where you want it.  If you do
  527. move *MySQL*, you must tell `mysqld' where everything is by supplying
  528. options to `mysqld'. Use `C:mysqlbinmysqld --help' to display all
  529. options!  For example, if you have moved the *MySQL* distribution to
  530. `D:programsmysql', you must start `mysqld' with:
  531. `D:programsmysqlbinmysqld --basedir D:programsmysql'
  532. With all newer *MySQL* versions, you can also create a `C:my.cnf' file
  533. that holds any default options for the *MySQL* server.  Copy the file
  534. `mysqlmy-xxxxx.cnf' to `C:my.cnf' and edit this to suit your setup.
  535. Note that you should specify all paths with `/' instead of `'. If you
  536. use `', you need to specify this twice, as `' is the escape character
  537. in *MySQL*.  *Note Option files::.
  538. Starting MySQL on Windows 95 or Windows 98
  539. ------------------------------------------
  540. *MySQL* uses TCP/IP to connect a client to a server. (This will allow
  541. any machine on your network to connect to your *MySQL* server.) Because
  542. of this, you must install TCP/IP on your machine before starting
  543. *MySQL*.  You can find TCP/IP on your Windows CD-ROM.
  544. Note that if you are using an old Win95 release (for example OSR2), it's
  545. likely that you have an old Winsock package!  *MySQL* requires Winsock
  546. 2!  You can get the newest Winsock from Microsoft
  547. (http://www.microsoft.com).  Win98 has as default the new Winsock 2
  548. library, so the above doesn't apply for Win98.
  549. There are 2 different *MySQL* servers you can use:
  550. `mysqld'           Compiled with full debugging and automatic memory
  551.                    allocation checking
  552. `mysqld-opt'       Optimized for a Pentium processor.
  553. Both of the above should work on any Intel processor >= i386.
  554. To start the `mysqld' server, you should start an MS-DOS window and
  555. type:
  556.      C:mysqlbinmysqld
  557. This will start `mysqld' in the background without a window.
  558. You can kill the *MySQL* server by executing:
  559.      C:mysqlbinmysqladmin -u root shutdown
  560. Note that Win95/Win98 don't support creation of named pipes.  On
  561. Win95/Win98, you can only use named pipes to connect to a remote
  562. *MySQL* running on an NT server.
  563. If `mysqld' doesn't start, please check whether or not the
  564. `mysqlmysql.err' file contains any reason for this.  You can also try
  565. to start it with `mysqld --standalone';  In this case you may get some
  566. useful information on the screen that may help solve this.
  567. The last option is to start `mysqld' with `--debug'.  In this case
  568. `mysqld' will write a log file in `mysqld.trace' that should contain
  569. the reason why `mysqld' doesn't start.  If you make a bug report about
  570. this, please only send the lines  to the mailing list where something
  571. seems to go wrong!
  572. Starting MySQL on NT or Windows 2000
  573. ------------------------------------
  574. The Win95/Win98 section also applies to *MySQL* on NT/Win2000, with the
  575. following differences:
  576. To get *MySQL* to work with TCP/IP on NT, you must install service pack
  577. 3 (or newer)!
  578. Note that everything in the following that applies for NT also applies
  579. for Win2000!
  580. For NT/Win2000, the server name is `mysqld-nt'.  Normally you should
  581. install *MySQL* as a service on NT/Win2000:
  582.      C:mysqlbinmysqld-nt --install
  583. (You could use the `mysqld' or `mysqld-opt' servers on NT, but those
  584. cannot be started as a service or use named pipes.)
  585. You can start and stop the *MySQL* service with:
  586.      NET START mysql
  587.      NET STOP mysql
  588. Note that in this case you can't use any other options for `mysqld-nt'!
  589. You can also run `mysqld-nt' as a stand-alone program on NT if you need
  590. to start `mysqld-nt' with any options!  If you start `mysqld-nt'
  591. without options on NT, `mysqld-nt' tries to starts itself as a service
  592. with the default service options.  If you have stopped `mysqld-nt', you
  593. have to start it with `NET START mysql'.
  594. The service is installed with the name `MySql'. Once installed, it must
  595. be started using the Services Control Manager (SCM) Utility (found in
  596. Control Panel) or by using the `NET START MySQL' command. If any
  597. options are desired, they must be specified as "Startup parameters" in
  598. the SCM utility before you start the *MySQL* service.  Once running,
  599. `mysqld-nt' can be stopped using `mysqladmin' or from the SCM utility
  600. or by using the command `NET STOP MySQL'. If you use SCM to stop
  601. `mysqld-nt', there is a strange message from SCM about `mysqld shutdown
  602. normally'.  When run as a service, `mysqld-nt' has no access to a
  603. console and so no messages can be seen.
  604. On NT you can get the following service error messages:
  605. Permission Denied      Means that it cannot find `mysqld-nt.exe'.
  606. Cannot Register        Means that the path is incorrect.
  607. Failed to install      Means that the service is already installed or
  608. service.               that the Service Control Manager is in bad state.
  609. If you have problems installing `mysqld-nt' as a service, try starting
  610. it with the full path:
  611.      C:mysqlbinmysqld-nt --install
  612. If this doesn't work, you can get `mysqld-nt' to start properly by
  613. fixing the path in the registry!
  614. If you don't want to start `mysqld-nt' as a service, you can start it as
  615. follows:
  616.      C:mysqlbinmysqld-nt --standalone
  617. or
  618.      C:mysqlbinmysqld --standalone --debug
  619. The last version gives you a debug trace in `C:mysqld.trace'.
  620. Running MySQL on Windows
  621. ------------------------
  622. *MySQL* supports TCP/IP on all Windows platforms and named pipes on NT.
  623. The default is to use named pipes for local connections on NT and
  624. TCP/IP for all other cases if the client has TCP/IP installed.  The
  625. host name specifies which protocol is used:
  626. *Host name* *Protocol*             
  627. NULL (none)            On NT, try named pipes first; if that doesn't
  628.                        work, use TCP/IP. On Win95/Win98, TCP/IP is used.
  629. .                      Named pipes
  630. localhost              TCP/IP to current host
  631. hostname               TCP/IP
  632. You can force a *MySQL* client to use named pipes by specifying the
  633. `--pipe' option or by specifying `.' as the host name.   Use the
  634. `--socket' option to specify the name of the pipe.
  635. You can test whether or not *MySQL* is working by executing the
  636. following commands:
  637.      C:mysqlbinmysqlshow
  638.      C:mysqlbinmysqlshow -u root mysql
  639.      C:mysqlbinmysqladmin version status proc
  640.      C:mysqlbinmysql test
  641. If `mysqld' is slow to answer to connections on Win95/Win98, there is
  642. probably a problem with your DNS. In this case, start `mysqld' with
  643. `--skip-name-resolve' and use only `localhost' and IP numbers in the
  644. *MySQL* grant tables.  You can also avoid DNS when connecting to a
  645. `mysqld-nt' *MySQL* server running on NT by using the `--pipe' argument
  646. to specify use of named pipes.  This works for most *MySQL* clients.
  647. There are two versions of the *MySQL* command-line tool:
  648. `mysql'            Compiled on native Windows, which offers very limited
  649.                    text editing capabilities.
  650. `mysqlc'           Compiled with the Cygnus GNU compiler and libraries,
  651.                    which offers `readline' editing.
  652. If you want to use `mysqlc.exe', you must copy
  653. `C:mysqllibcygwinb19.dll' to `windowssystem' (or similar place).
  654. The default privileges on Windows give all local users full privileges
  655. to all databases.  To make *MySQL* more secure, you should set a
  656. password for all users and remove the row in the `mysql.user' table
  657. that has `Host='localhost'' and `User='''.
  658. You should also add a password for the `root' user.  (The following
  659. example starts by removing the anonymous user, that allows anyone to
  660. access the 'test' database.):
  661.      C:mysqlbinmysql mysql
  662.      mysql> DELETE FROM user WHERE Host='localhost' AND User='';
  663.      mysql> QUIT
  664.      C:mysqlbinmysqladmin reload
  665.      C:mysqlbinmysqladmin -u root password your_password
  666. After you've set the password, if you want to take down the `mysqld'
  667. server, you can do so using this command:
  668.      mysqladmin --user=root --password=your_password shutdown
  669. If you are using the old shareware version of *MySQL* Version 3.21
  670. under Windows, the above command will fail with an error: `parse error
  671. near 'SET OPTION password''.  This is because the old shareware version,
  672. which is based on *MySQL* Version 3.21, doesn't have the `SET PASSWORD'
  673. command.  The fix is in this case to upgrade to the Version 3.22
  674. shareware.
  675. With the newer *MySQL* versions you can easily add new users and change
  676. privileges with `GRANT' and `REVOKE' commands.  *Note GRANT::.
  677. Connecting to a Remote MySQL from Windows with SSH
  678. --------------------------------------------------
  679. Here is a note about how to connect to get a secure connection to
  680. remote MySQL server with SSH (by David Carlson <dcarlson@mplcomm.com>):
  681.    * Install an SSH client on your windows machine - As a user, the
  682.      best non-free one I've found is from `secureCRT' from
  683.      `http://www.vandyke.com/'.  Another option is `f-secure' from
  684.      `http://www.f-secure.com/'. You can also find some free ones on
  685.      *Google* at
  686.      `http://directory.google.com/Top/Computers/Security/Products_and_Tools/Cryptography/SSH/Clients/Windows/'.
  687.    * Start your windows SSH client. Set `Host_Name =
  688.      yourmysqlserver_URL_or_IP'. Set `userid=your_userid' to log in to
  689.      your server (probably not the same as your *MySQL* login/ password.
  690.    * Set up port forwarding. Either do a remote forward (Set
  691.      `local_port: 3306', `remote_host: yourmysqlservername_or_ip',
  692.      `remote_port: 3306' ) or a local forward (Set `port: 3306',
  693.      `host: localhost', `remote port: 3306').
  694.    * Save everything, otherwise you'll have to redo it the next time.
  695.    * Log in to your server with SSH session you just created.
  696.    * Start some ODBC application on your windows machine (for example
  697.      Access).
  698.    * Create a new file in windows and link to *MySQL* using the ODBC
  699.      driver the same way you normally do, EXCEPT type in `localhost'
  700.      for the *MySQL* host server - not `yourmysqlservername'.
  701. You should now have your ODBC connection to *MySQL* encrypted using SSH.
  702. Splitting Data Across Different Disks Under Windows
  703. ---------------------------------------------------
  704. On windows *MySQL* Version 3.23.16 and above is compiled with the
  705. `-DUSE_SYMDIR' option.  This allows you to put a database on different
  706. disk by adding a symbolic link to it (in a similar manner that symbolic
  707. links works on Unix).
  708. On windows you make a symbolic link to a database by creating a file
  709. that contains the path to the destination directory and saving this in
  710. the `mysql_data' directory under the filename `database.sym'.  Note
  711. that the symbolic link will only be used if the directory
  712. `mysql_data_dirdatabase' doesn't exist.
  713. For example, if you want to have database `foo' on `D:datafoo', you
  714. should create the file `C:mysqldatafoo.sym' that contains the text
  715. `D:datafoo'.  After this, all tables created in the database `foo'
  716. will be created in `D:datafoo'.
  717. Compiling MySQL Clients on Windows
  718. ----------------------------------
  719. In your source files, you should include `windows.h' before you include
  720. `mysql.h':
  721.      #if defined(_WIN32) || defined(_WIN64)
  722.      #include <windows.h>
  723.      #endif
  724.      #include <mysql.h>
  725. You can either link your code with the dynamic `libmysql.lib' library,
  726. which is just a wrapper to load in `libmysql.dll' on demand, or link
  727. with the static `mysqlclient.lib' library.
  728. Note that as the mysqlclient libraries are compiled as threaded
  729. libraries, you should also compile your code to be multi-threaded!
  730. Windows and BDB Tables
  731. ----------------------
  732. We will shortly do a full test on the new BDB interface on Windows.
  733. When this is done we will start to release binary distributions (for
  734. Windows and Unix) of *MySQL* that will include support for BDB tables.
  735. MySQL-Windows Compared to Unix MySQL
  736. ------------------------------------
  737. *MySQL*-Windows has by now proven itself to be very stable. This version
  738. of *MySQL* has the same features as the corresponding Unix version with
  739. the following exceptions:
  740. *Win95 and threads*
  741.      Win95 leaks about 200 bytes of main memory for each thread
  742.      creation.  Because of this, you shouldn't run `mysqld' for an
  743.      extended time on Win95 if you do many connections, because each
  744.      connection in *MySQL* creates a new thread!  WinNT and Win98 don't
  745.      suffer from this bug.
  746. *Concurrent reads*
  747.      *MySQL* depends on the `pread()' and `pwrite()' calls to be able
  748.      to mix `INSERT' and `SELECT'. Currently we use mutexes to emulate
  749.      `pread()'/`pwrite()'.  We will, in the long run, replace the file
  750.      level interface with a virtual interface so that we can use the
  751.      `readfile()'/`writefile()' interface on NT to get more speed.  The
  752.      current implementation will however limit the number of open files
  753.      *MySQL* can use to 1024, which means that you will not be able to
  754.      run as many concurrent threads on NT as on Unix.
  755. *Blocking read*
  756.      *MySQL* uses a blocking read for each connection.  This means that:
  757.         * A connection will not be disconnected automatically after 8
  758.           hours, as happens with the Unix version of *MySQL*.
  759.         * If a connection hangs, it's impossible to break it without
  760.           killing *MySQL*.
  761.         * `mysqladmin kill' will not work on a sleeping connection.
  762.         * `mysqladmin shutdown' can't abort as long as there are
  763.           sleeping connections.
  764.      We plan to fix this when our windows developers have figured out a
  765.      nice workaround for this.
  766. *UDF functions*
  767.      For the moment, *MySQL*-Windows does not support user-definable
  768.      functions.
  769. *`DROP DATABASE'*
  770.      You can't drop a database that is in use by some thread.
  771. *Killing *MySQL* from the task manager*
  772.      You can't kill *MySQL* from the task manager or with the shutdown
  773.      utility in Win95. You must take it down with `mysqladmin shutdown'.
  774. *Case-insensitive names*
  775.      Filenames are case insensitive on Windows, so database and table
  776.      names are also case insensitive in *MySQL* for Windows.  The only
  777.      restriction is that database and table names must be given in the
  778.      same case throughout a given statement.  *Note Name case
  779.      sensitivity::.
  780. *The `' directory character*
  781.      Pathname components in Win95 are separated by the `' character,
  782.      which is also the escape character in *MySQL*.  If you are using
  783.      `LOAD DATA INFILE' or `SELECT ... INTO OUTFILE', you must double
  784.      the `' character or use Unix style filenames `/' characters:
  785.           LOAD DATA INFILE "C:\tmp\skr.txt" INTO TABLE skr;
  786.           SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;
  787. *`Can't open named pipe' error*
  788.      If you use a MySQL 3.22 version on NT with the newest
  789.      mysql-clients you will get the following error:
  790.           error 2017: can't open named pipe to host: . pipe...
  791.      This is because the release version of *MySQL* uses named pipes on
  792.      NT by default.  You can avoid this error by using the
  793.      `--host=localhost' option to the new *MySQL* clients or create a
  794.      file `C:my.cnf' that contains the following information:
  795.           [client]
  796.           host = localhost
  797. *`Access denied for user' error*
  798.      If you get the error `Access denied for user: 'some-user@unknown'
  799.      to database 'mysql'' when accessing a *MySQL* server on the same
  800.      machine, this means that *MySQL* can't resolve your host name
  801.      properly.
  802.      To fix this, you should create a file `windowshosts' with the
  803.      following information:
  804.           127.0.0.1       localhost
  805. *`ALTER TABLE'*
  806.      While you are doing an `ALTER TABLE' the table is locked from usage
  807.      by other threads. This has to do with the fact that you on Windows
  808.      can't delete a file that is in use by another threads. (We may in
  809.      the future find some way to go around this problem).
  810. *`DROP TABLE' on a table that is in use by a `MERGE' table will not work.*
  811.      The `MERGE' handler does it table mapping hidden from *MySQL*.
  812.      Because windows doesn't allow one to drop files that are open, you
  813.      have to first flush all `MERGE' tables (with `FLUSH TABLES') or
  814.      drop the `MERGE' table before drooping the table.  We will fix
  815.      this at the same time we introduce `VIEW''s.
  816. Here are some open issues for anyone who might want to help us with the
  817. Windows release:
  818.    * Make a single-user `MYSQL.DLL' server.  This should include
  819.      everything in a standard *MySQL* server, except thread creation.
  820.      This will make *MySQL* much easier to use in applications that
  821.      don't need a true client/server and don't need to access the
  822.      server from other hosts.
  823.    * Add some nice start and shutdown icons to the *MySQL* installation.
  824.    * Create a tool to manage registry entries for the *MySQL* startup
  825.      options.  The registry entry reading is already coded into
  826.      `mysqld.cc', but it should be recoded to be more parameter
  827.      oriented.  The tool should also be able to update the `my.cnf'
  828.      file if the user prefers to use this instead of the registry.
  829.    * When registering `mysqld' as a service with `--install' (on NT) it
  830.      would be nice if you could also add default options on the command
  831.      line.  For the moment, the workaround is to update the `C:my.cnf'
  832.      file instead.
  833.    * When you suspend a laptop running Win95, the `mysqld' daemon
  834.      doesn't accept new connections when the laptop is resumed.  We
  835.      don't know if this is a problem with Win95, TCP/IP, or *MySQL*.
  836.    * It would be real nice to be able to kill `mysqld' from the task
  837.      manager.  For the moment, you must use `mysqladmin shutdown'.
  838.    * Port `readline' to Windows for use in the `mysql' command line
  839.      tool.
  840.    * GUI versions of the standard *MySQL* clients (`mysql',
  841.      `mysqlshow', `mysqladmin', and `mysqldump') would be nice.
  842.    * It would be nice if the socket read and write functions in `net.c'
  843.      were interruptible. This would make it possible to kill open
  844.      threads with `mysqladmin kill' on Windows.
  845.    * Documentation of which Windows programs work with
  846.      *MySQL*-Windows/*MyODBC* and what must be done to get them working.
  847.    * `mysqld' always starts in the "C" locale and not in the default
  848.      locale.  We would like to have `mysqld' use the current locale for
  849.      the sort order.
  850.    * Implement UDF functions with `.DLL's.
  851.    * Add macros to use the faster thread-safe increment/decrement
  852.      methods provided by Windows.
  853. Other Windows-specific issues are described in the `README' file that
  854. comes with the *MySQL*-Windows distribution.
  855. OS/2 Notes
  856. ==========
  857. *MySQL* uses quite a few open files. Because of this, you should add
  858. something like the following to your `CONFIG.SYS' file:
  859.      SET EMXOPT=-c -n -h1024
  860. If you don't do this, you will probably run into the following error:
  861.      File 'xxxx' not found (Errcode: 24)
  862. When using *MySQL* with OS/2 Warp 3, FixPack 29 or above is required.
  863. With OS/2 Warp 4, FixPack 4 or above is required. This is a requirement
  864. of the Pthreads library.  *MySQL* must be installed in a partition that
  865. supports long filenames such as HPFS, FAT32, etc.
  866. The `INSTALL.CMD' script must be run from OS/2's own `CMD.EXE' and may
  867. not work with replacement shells such as `4OS2.EXE'.
  868. The `scripts/mysql-install-db' script has been renamed. It is now called
  869. `install.cmd' and is a REXX script, which will set up the default
  870. *MySQL* security settings and create the WorkPlace Shell icons for
  871. *MySQL*.
  872. Dynamic module support is compiled in but not fully tested. Dynamic
  873. modules should be compiled using the Pthreads run-time library.
  874.      gcc -Zdll -Zmt -Zcrtdll=pthrdrtl -I../include -I../regex -I.. 
  875.          -o example udf_example.cc -L../lib -lmysqlclient udf_example.def
  876.      mv example.dll example.udf
  877. *Note:* Due to limitations in OS/2, UDF module name stems must not
  878. exceed 8 characters. Modules are stored in the `/mysql2/udf' directory;
  879. the `safe-mysqld.cmd' script will put this directory in the
  880. `BEGINLIBPATH' environment variable. When using UDF modules, specified
  881. extensions are ignored -- it is assumed to be `.udf'.  For example, in
  882. Unix, the shared module might be named `example.so' and you would load
  883. a function from it like this:
  884.      CREATE FUNCTION metaphon RETURNS STRING SONAME "example.so";
  885. Is OS/2, the module would be named `example.udf', but you would not
  886. specify the module extension:
  887.      CREATE FUNCTION metaphon RETURNS STRING SONAME "example";
  888. MySQL Binaries
  889. ==============
  890. As a service, we at MySQL AB provides a set of binary distributions of
  891. *MySQL* that are compiled at our site or at sites where customers
  892. kindly have given us access to their machines.
  893. These distributions are generated with
  894. `scripts/make_binary_distribution' and are configured with the
  895. following compilers and options:
  896. SunOS 4.1.4 2 sun4c with `gcc' 2.7.2.1
  897.      `CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors" ./configure
  898.      --prefix=/usr/local/mysql --disable-shared
  899.      --with-extra-charsets=complex --enable-assembler'
  900. SunOS 5.5.1 sun4u with `egcs' 1.0.3a
  901.      `CC=gcc CFLAGS="-O6 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6
  902.      -fomit-frame-pointer -felide-constructors -fno-exceptions
  903.      -fno-rtti" ./configure --prefix=/usr/local/mysql --with-low-memory
  904.      --with-extra-charsets=complex'
  905. SunOS 5.6 sun4u with `egcs' 2.90.27
  906.      `CC=gcc CFLAGS="-O6 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6
  907.      -fomit-frame-pointer -felide-constructors -fno-exceptions
  908.      -fno-rtti" ./configure --prefix=/usr/local/mysql --with-low-memory
  909.      --with-extra-charsets=complex'
  910. SunOS 5.6 i86pc with `gcc' 2.8.1
  911.      `CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
  912.      --with-low-memory --with-extra-charsets=complex'
  913. Linux 2.0.33 i386 with `pgcc' 2.90.29 (`egcs' 1.0.3a)
  914.      `CFLAGS="-O6 -mpentium -mstack-align-double -fomit-frame-pointer"
  915.      CXX=gcc CXXFLAGS="-O6 -mpentium -mstack-align-double
  916.      -fomit-frame-pointer -felide-constructors -fno-exceptions
  917.      -fno-rtti" ./configure --prefix=/usr/local/mysql
  918.      --enable-assembler --with-mysqld-ldflags=-all-static
  919.      --with-extra-charsets=complex'
  920. Linux 2.2.x with x686 with `gcc' 2.95.2
  921.      `CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc
  922.      CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer
  923.      -felide-constructors -fno-exceptions -fno-rtti" ./configure
  924.      --prefix=/usr/local/mysql --enable-assembler
  925.      --with-mysqld-ldflags=-all-static --disable-shared
  926.      --with-extra-charset=complex'
  927. SCO 3.2v5.0.4 i386 with `gcc' 2.7-95q4
  928.      `CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
  929.      --with-extra-charsets=complex'
  930. AIX 2 4 with `gcc' 2.7.2.2
  931.      `CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
  932.      --with-extra-charsets=complex'
  933. OSF1 V4.0 564 alpha with `gcc' 2.8.1
  934.      `CC=gcc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 ./configure
  935.      --prefix=/usr/local/mysql --with-low-memory
  936.      --with-extra-charsets=complex'
  937. Irix 6.3 IP32 with `gcc' 2.8.0
  938.      `CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
  939.      --with-extra-charsets=complex'
  940. BSDI BSD/OS 3.1 i386 with `gcc' 2.7.2.1
  941.      `CC=gcc CXX=gcc CXXFLAGS=-O ./configure --prefix=/usr/local/mysql
  942.      --with-extra-charsets=complex'
  943. BSDI BSD/OS 2.1 i386 with `gcc' 2.7.2
  944.      `CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
  945.      --with-extra-charsets=complex'
  946. Anyone who has more optimal options for any of the configurations listed
  947. above can always mail them to the developer's mailing list at
  948. <internals@lists.mysql.com>.
  949. RPM distributions prior to *MySQL* Version 3.22 are user-contributed.
  950. Beginning with Version 3.22, some RPMs are generated by us at MySQL AB.
  951. If you want to compile a debug version of *MySQL*, you should add
  952. `--with-debug' or `--with-debug=full' to the above configure lines and
  953. remove any `-fomit-frame-pointer' options.
  954. Post-installation Setup and Testing
  955. ===================================
  956. * Menu:
  957. * mysql_install_db::            Problems running `mysql_install_db'
  958. * Starting server::             Problems starting the *MySQL* server
  959. * Automatic start::             Starting and stopping *MySQL* automatically
  960. * Command-line options::        Command-line options
  961. * Option files::                Option files
  962. Once you've installed *MySQL* (from either a binary or source
  963. distribution), you need to initialize the grant tables, start the
  964. server, and make sure that the server works okay.  You may also wish to
  965. arrange for the server to be started and stopped automatically when
  966. your system starts up and shuts down.
  967. Normally you install the grant tables and start the server like this
  968. for installation from a source distribution:
  969.      shell> ./scripts/mysql_install_db
  970.      shell> cd mysql_installation_directory
  971.      shell> ./bin/safe_mysqld --user=mysql &
  972. For a binary distribution, do this:
  973.      shell> cd mysql_installation_directory
  974.      shell> ./bin/mysql_install_db
  975.      shell> ./bin/safe_mysqld --user=mysql &
  976. This creates the `mysql' database which will hold all database
  977. privileges, the `test' database which you can use to test *MySQL* and
  978. also privilege entries for the user that run `mysql_install_db' and a
  979. `root' user (without any passwords).  This also starts the `mysqld'
  980. server.
  981. `mysql_install_db' will not overwrite any old privilege tables, so it
  982. should be safe to run in any circumstances.  If you don't want to have
  983. the `test' database you can remove it with `mysqladmin -u root drop
  984. test'.
  985. Testing is most easily done from the top-level directory of the *MySQL*
  986. distribution.  For a binary distribution, this is your installation
  987. directory (typically something like `/usr/local/mysql').  For a source
  988. distribution, this is the main directory of your *MySQL* source tree.
  989. In the commands shown below in this section and in the following
  990. subsections, `BINDIR' is the path to the location in which programs
  991. like `mysqladmin' and `safe_mysqld' are installed.  For a binary
  992. distribution, this is the `bin' directory within the distribution.  For
  993. a source distribution, `BINDIR' is probably `/usr/local/bin', unless
  994. you specified an installation directory other than `/usr/local' when
  995. you ran `configure'.  `EXECDIR' is the location in which the `mysqld'
  996. server is installed.  For a binary distribution, this is the same as
  997. `BINDIR'.  For a source distribution, `EXECDIR' is probably
  998. `/usr/local/libexec'.
  999. Testing is described in detail below:
  1000.   1. If necessary, start the `mysqld' server and set up the initial
  1001.      *MySQL* grant tables containing the privileges that determine how
  1002.      users are allowed to connect to the server.  This is normally done
  1003.      with the `mysql_install_db' script:
  1004.           shell> scripts/mysql_install_db
  1005.      Typically, `mysql_install_db' needs to be run only the first time
  1006.      you install *MySQL*.  Therefore, if you are upgrading an existing
  1007.      installation, you can skip this step. (However, `mysql_install_db'
  1008.      is quite safe to use and will not update any tables that already
  1009.      exist, so if you are unsure of what to do, you can always run
  1010.      `mysql_install_db'.)
  1011.      `mysql_install_db' creates six tables (`user', `db', `host',
  1012.      `tables_priv', `columns_priv', and `func') in the `mysql'
  1013.      database.  A description of the initial privileges is given in
  1014.      *Note Default privileges::.  Briefly, these privileges allow the
  1015.      *MySQL* `root' user to do anything, and allow anybody to create or
  1016.      use databases with a name of `'test'' or starting with `'test_''.
  1017.      If you don't set up the grant tables, the following error will
  1018.      appear in the log file when you start the server:
  1019.           mysqld: Can't find file: 'host.frm'
  1020.      The above may also happen with a binary *MySQL* distribution if you
  1021.      don't start *MySQL* by executing exactly `./bin/safe_mysqld'!
  1022.      *Note safe_mysqld::.
  1023.      You might need to run `mysql_install_db' as `root'.  However, if
  1024.      you prefer, you can run the *MySQL* server as an unprivileged
  1025.      (non-`root') user, provided that user can read and write files in
  1026.      the database directory.  Instructions for running *MySQL* as an
  1027.      unprivileged user are given in *Note Changing *MySQL* user:
  1028.      Changing MySQL user.
  1029.      If you have problems with `mysql_install_db', see *Note
  1030.      `mysql_install_db': mysql_install_db.
  1031.      There are some alternatives to running the `mysql_install_db'
  1032.      script as it is provided in the *MySQL* distribution:
  1033.         * You may want to edit `mysql_install_db' before running it, to
  1034.           change the initial privileges that are installed into the
  1035.           grant tables.  This is useful if you want to install *MySQL*
  1036.           on a lot of machines with the same privileges.  In this case
  1037.           you probably should need only to add a few extra `INSERT'
  1038.           statements to the `mysql.user' and `mysql.db' tables!
  1039.         * If you want to change things in the grant tables after
  1040.           installing them, you can run `mysql_install_db', then use
  1041.           `mysql -u root mysql' to connect to the grant tables as the
  1042.           *MySQL* `root' user and issue SQL statements to modify the
  1043.           grant tables directly.
  1044.         * It is possible to re-create the grant tables completely after
  1045.           they have already been created.  You might want to do this if
  1046.           you've already installed the tables but then want to
  1047.           re-create them after editing `mysql_install_db'.
  1048.      For more information about these alternatives, see *Note Default
  1049.      privileges::.
  1050.   2. Start the *MySQL* server like this:
  1051.           shell> cd mysql_installation_directory
  1052.           shell> bin/safe_mysqld &
  1053.      If you have problems starting the server, see *Note Starting
  1054.      server::.
  1055.   3. Use `mysqladmin' to verify that the server is running.  The
  1056.      following commands provide a simple test to check that the server
  1057.      is up and responding to connections:
  1058.           shell> BINDIR/mysqladmin version
  1059.           shell> BINDIR/mysqladmin variables
  1060.      The output from `mysqladmin version' varies slightly depending on
  1061.      your platform and version of *MySQL*, but should be similar to
  1062.      that shown below:
  1063.           shell> BINDIR/mysqladmin version
  1064.           mysqladmin  Ver 8.14 Distrib 3.23.32, for linux on i586
  1065.           Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  1066.           This software comes with ABSOLUTELY NO WARRANTY. This is free software,
  1067.           and you are welcome to modify and redistribute it under the GPL license
  1068.           
  1069.           Server version          3.23.32-debug
  1070.           Protocol version        10
  1071.           Connection              Localhost via Unix socket
  1072.           TCP port                3306
  1073.           UNIX socket             /tmp/mysql.sock
  1074.           Uptime:                 16 sec
  1075.           
  1076.           Threads: 1  Questions: 9  Slow queries: 0  Opens: 7  Flush tables: 2  Open tables: 0 Queries per second avg: 0.000  Memory in use: 132K  Max memory used: 16773K
  1077.      To get a feeling for what else you can do with `BINDIR/mysqladmin',
  1078.      invoke it with the `--help' option.
  1079.   4. Verify that you can shut down the server:
  1080.           shell> BINDIR/mysqladmin -u root shutdown
  1081.   5. Verify that you can restart the server.  Do this using
  1082.      `safe_mysqld' or by invoking `mysqld' directly.  For example:
  1083.           shell> BINDIR/safe_mysqld --log &
  1084.      If `safe_mysqld' fails, try running it from the *MySQL*
  1085.      installation directory (if you are not already there).  If that
  1086.      doesn't work, see *Note Starting server::.
  1087.   6. Run some simple tests to verify that the server is working.  The
  1088.      output should be similar to what is shown below:
  1089.           shell> BINDIR/mysqlshow
  1090.           +-----------+
  1091.           | Databases |
  1092.           +-----------+
  1093.           | mysql     |
  1094.           +-----------+
  1095.           
  1096.           shell> BINDIR/mysqlshow mysql
  1097.           Database: mysql
  1098.           +--------------+
  1099.           |    Tables    |
  1100.           +--------------+
  1101.           | columns_priv |
  1102.           | db           |
  1103.           | func         |
  1104.           | host         |
  1105.           | tables_priv  |
  1106.           | user         |
  1107.           +--------------+
  1108.           
  1109.           shell> BINDIR/mysql -e "select host,db,user from db" mysql
  1110.           +------+--------+------+
  1111.           | host | db     | user |
  1112.           +------+--------+------+
  1113.           | %    | test   |      |
  1114.           | %    | test_% |      |
  1115.           +------+--------+------+
  1116.      There is also a benchmark suite in the `sql-bench' directory
  1117.      (under the *MySQL* installation directory) that you can use to
  1118.      compare how *MySQL* performs on different platforms. The
  1119.      `sql-bench/Results' directory contains the results from many runs
  1120.      against different databases and platforms.  To run all tests,
  1121.      execute these commands:
  1122.           shell> cd sql-bench
  1123.           shell> run-all-tests
  1124.      If you don't have the `sql-bench' directory, you are probably
  1125.      using an RPM for a binary distribution.  (Source distribution RPMs
  1126.      include the benchmark directory.) In this case, you must first
  1127.      install the benchmark suite before you can use it.  Beginning with
  1128.      *MySQL* Version 3.22, there are benchmark RPM files named
  1129.      `mysql-bench-VERSION-i386.rpm' that contain benchmark code and
  1130.      data.
  1131.      If you have a source distribution, you can also run the tests in
  1132.      the `tests' subdirectory. For example, to run
  1133.      `auto_increment.tst', do this:
  1134.           shell> BINDIR/mysql -vvf test < ./tests/auto_increment.tst
  1135.      The expected results are shown in the `./tests/auto_increment.res'
  1136.      file.
  1137. Problems Running mysql_install_db
  1138. ---------------------------------
  1139. The purpose of the `mysql_install_db' script is to generate new *MySQL*
  1140. privilege tables.  It will not affect any other data!  It will also not
  1141. do anything if you already have MySQL privilege tables installed!
  1142. If you want to re-create your privilege tables, you should take down
  1143. the mysqld server, if it's running, and then do something like:
  1144.      mv mysql-data-directory/mysql mysql-data-directory/mysql-old
  1145.      mysql_install_db
  1146. This section lists problems you might encounter when you run
  1147. `mysql_install_db':
  1148. *`mysql_install_db' doesn't install the grant tables*
  1149.      You may find that `mysql_install_db' fails to install the grant
  1150.      tables and terminates after displaying the following messages:
  1151.           starting mysqld daemon with databases from XXXXXX
  1152.           mysql daemon ended
  1153.      In this case, you should examine the log file very carefully!  The
  1154.      log should be located in the directory `XXXXXX' named by the error
  1155.      message, and should indicate why `mysqld' didn't start.  If you
  1156.      don't understand what happened, include the log when you post a
  1157.      bug report using `mysqlbug'!  *Note Bug reports::.
  1158. *There is already a `mysqld' daemon running*
  1159.      In this case, you probably don't have to run `mysql_install_db' at
  1160.      all.  You have to run `mysql_install_db' only once, when you
  1161.      install *MySQL* the first time.
  1162. *Installing a second `mysqld' daemon doesn't work when one daemon is running*
  1163.      This can happen when you already have an existing *MySQL*
  1164.      installation, but want to put a new installation in a different
  1165.      place (for example, for testing, or perhaps you simply want to run
  1166.      two installations at the same time).  Generally the problem that
  1167.      occurs when you try to run the second server is that it tries to
  1168.      use the same socket and port as the old one.  In this case you
  1169.      will get the error message: `Can't start server: Bind on TCP/IP
  1170.      port: Address already in use' or `Can't start server : Bind on
  1171.      unix socket...'. *Note Installing many servers::.
  1172. *You don't have write access to `/tmp'*
  1173.      If you don't have write access to create a socket file at the
  1174.      default place (in `/tmp') or permission to create temporary files
  1175.      in `/tmp,' you will get an error when running `mysql_install_db'
  1176.      or when starting or using `mysqld'.
  1177.      You can specify a different socket and temporary directory as
  1178.      follows:
  1179.           shell> TMPDIR=/some_tmp_dir/
  1180.           shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysqld.sock
  1181.           shell> export TMPDIR MYSQL_UNIX_PORT
  1182.      `some_tmp_dir' should be the path to some directory for which you
  1183.      have write permission. *Note Environment variables::.
  1184.      After this you should be able to run `mysql_install_db' and start
  1185.      the server with these commands:
  1186.           shell> scripts/mysql_install_db
  1187.           shell> BINDIR/safe_mysqld &
  1188. *`mysqld' crashes immediately*
  1189.      If you are running RedHat Version 5.0 with a version of `glibc'
  1190.      older than 2.0.7-5, you should make sure you have installed all
  1191.      `glibc' patches!  There is a lot of information about this in the
  1192.      *MySQL* mail archives.  Links to the mail archives are available
  1193.      at the online *MySQL* documentation page
  1194.      (http://www.mysql.com/documentation/).  Also, see *Note Linux::.
  1195.      You can also start `mysqld' manually using the
  1196.      `--skip-grant-tables' option and add the privilege information
  1197.      yourself using `mysql':
  1198.           shell> BINDIR/safe_mysqld --skip-grant-tables &
  1199.           shell> BINDIR/mysql -u root mysql
  1200.      From `mysql', manually execute the SQL commands in
  1201.      `mysql_install_db'.  Make sure you run `mysqladmin
  1202.      flush-privileges' or `mysqladmin reload' afterward to tell the
  1203.      server to reload the grant tables.
  1204. Problems Starting the MySQL Server
  1205. ----------------------------------
  1206. Generally, you start the `mysqld' server in one of three ways:
  1207.    * By invoking `mysql.server'.  This script is used primarily at
  1208.      system startup and shutdown, and is described more fully in *Note
  1209.      Automatic start::.
  1210.    * By invoking `safe_mysqld', which tries to determine the proper
  1211.      options for `mysqld' and then runs it with those options. *Note
  1212.      safe_mysqld::.
  1213.    * On NT you should install `mysqld' as a service as follows:
  1214.           binmysqld-nt --install               # Install MySQL as a service
  1215.      You can now start/stop `mysqld' as follows:
  1216.           NET START mysql
  1217.           NET STOP mysql
  1218.      Note that in this case you can't use any other options for
  1219.      `mysqld'!
  1220.      You can remove the service as follows:
  1221.           binmysqld-nt --remove                # remove MySQL as a service
  1222.    * By invoking `mysqld' directly.
  1223. When the `mysqld' daemon starts up, it changes directory to the data
  1224. directory.  This is where it expects to write log files and the pid
  1225. (process ID) file, and where it expects to find databases.
  1226. The data directory location is hardwired in when the distribution is
  1227. compiled.  However, if `mysqld' expects to find the data directory
  1228. somewhere other than where it really is on your system, it will not work
  1229. properly.  If you have problems with incorrect paths, you can find out
  1230. what options `mysqld' allows and what the default path settings are by
  1231. invoking `mysqld' with the `--help' option.  You can override the
  1232. defaults by specifying the correct pathnames as command-line arguments
  1233. to `mysqld'.  (These options can be used with `safe_mysqld' as well.)
  1234. Normally you should need to tell `mysqld' only the base directory under
  1235. which *MySQL* is installed.  You can do this with the `--basedir'
  1236. option.  You can also use `--help' to check the effect of changing path
  1237. options (note that `--help' _must_ be the final option of the `mysqld'
  1238. command).  For example:
  1239.      shell> EXECDIR/mysqld --basedir=/usr/local --help
  1240. Once you determine the path settings you want, start the server without
  1241. the `--help' option.
  1242. Whichever method you use to start the server, if it fails to start up
  1243. correctly, check the log file to see if you can find out why.  Log files
  1244. are located in the data directory (typically `/usr/local/mysql/data'
  1245. for a binary distribution, `/usr/local/var' for a source distribution,
  1246. `mysqlmysql.err' on Windows.)  Look in the data directory for files
  1247. with names of the form `host_name.err' and `host_name.log' where
  1248. `host_name' is the name of your server host.  Then check the last few
  1249. lines of these files:
  1250.      shell> tail host_name.err
  1251.      shell> tail host_name.log
  1252. If you find something like the following in the log file:
  1253.      000729 14:50:10  bdb:  Recovery function for LSN 1 27595 failed
  1254.      000729 14:50:10  bdb:  warning: ./test/t1.db: No such file or directory
  1255.      000729 14:50:10  Can't init databases
  1256. this means that you didn't started mysqld with `--bdb-no-recover' and
  1257. Berkeley DB found something wrong with it's log files when it tried to
  1258. recover your databases.  To be able to continue, you should move away
  1259. the old Berkeley DB log file from the database directory to some other
  1260. place, where you can later examine these.  The log files are named
  1261. `log.0000000001', where the number will increase over time.
  1262. If you are running `mysqld' with BDB table support and mysqld core
  1263. dumps at start this could be because of some problems with the BDB
  1264. recover log.  In this case you can try starting `mysqld' with
  1265. `--bdb-no-recover'.  If this helps, then you should remove all `log.*'
  1266. files from the data directory and try starting `mysqld' again.
  1267. If you get the following error, it means that some other program (or
  1268. another `mysqld' server) is already using the TCP/IP port or socket
  1269. `mysqld' is trying to use:
  1270.      Can't start server: Bind on TCP/IP port: Address already in use
  1271.        or
  1272.      Can't start server : Bind on unix socket...
  1273. Use `ps' to make sure that you don't have another `mysqld' server
  1274. running.  If you can't find another server running, you can try to
  1275. execute the command `telnet your-host-name tcp-ip-port-number' and press
  1276. `RETURN' a couple of times.  If you don't get an error message like
  1277. `telnet: Unable to connect to remote host: Connection refused',
  1278. something is using the TCP/IP port `mysqld' is trying to use.  See
  1279. *Note mysql_install_db:: and *Note Multiple servers::.
  1280. If `mysqld' is currently running, you can find out what path settings
  1281. it is using by executing this command:
  1282.      shell> mysqladmin variables
  1283.      
  1284.      or
  1285.      
  1286.      shell> mysqladmin -h 'your-host-name' variables
  1287. If `safe_mysqld' starts the server but you can't connect to it, you
  1288. should make sure you have an entry in `/etc/hosts' that looks like this:
  1289.      127.0.0.1       localhost
  1290. This problem occurs only on systems that don't have a working thread
  1291. library and for which *MySQL* must be configured to use MIT-pthreads.
  1292. On Windows, you can try to start `mysqld' as follows:
  1293.      C:mysqlbinmysqld --standalone --debug
  1294. This will not run in the background and it should also write a trace in
  1295. `mysqld.trace', which may help you determine the source of your
  1296. problems. *Note Windows::.
  1297. If you are using BDB (Berkeley DB) tables, you should familiarize
  1298. yourself with the different BDB specific startup options. *Note BDB
  1299. start::.
  1300. If you are using Gemini tables, refer to the Gemini-specific startup
  1301. options.  *Note GEMINI start::.
  1302. If you are using Innobase tables, refer to the Innobase-specific startup
  1303. options. *Note INNOBASE start::.
  1304. Starting and Stopping MySQL Automatically
  1305. -----------------------------------------
  1306. The `mysql.server' script can be used to start or stop the server by
  1307. invoking it with `start' or `stop' arguments:
  1308.      shell> mysql.server start
  1309.      shell> mysql.server stop
  1310. `mysql.server' can be found in the `share/mysql' directory under the
  1311. *MySQL* installation directory or in the `support-files' directory of
  1312. the *MySQL* source tree.
  1313. Before `mysql.server' starts the server, it changes directory to the
  1314. *MySQL* installation directory, then invokes `safe_mysqld'.  You might
  1315. need to edit `mysql.server' if you have a binary distribution that
  1316. you've installed in a non-standard location.  Modify it to `cd' into
  1317. the proper directory before it runs `safe_mysqld'. If you want the
  1318. server to run as some specific user, you can change the
  1319. `mysql_daemon_user=root' line to use another user.  You can also modify
  1320. `mysql.server' to pass other options to `safe_mysqld'.
  1321. `mysql.server stop' brings down the server by sending a signal to it.
  1322. You can take down the server manually by executing `mysqladmin
  1323. shutdown'.
  1324. You might want to add these start and stop commands to the appropriate
  1325. places in your `/etc/rc*' files when you start using *MySQL* for
  1326. production applications.  Note that if you modify `mysql.server', then
  1327. upgrade *MySQL* sometime, your modified version will be overwritten, so
  1328. you should make a copy of your edited version that you can reinstall.
  1329. If your system uses `/etc/rc.local' to start external scripts, you
  1330. should append the following to it:
  1331.      /bin/sh -c 'cd /usr/local/mysql ; ./bin/safe_mysqld --user=mysql &'
  1332. You can also add options for `mysql.server' in a global `/etc/my.cnf'
  1333. file.  A typical `/etc/my.cnf' file might look like this:
  1334.      [mysqld]
  1335.      datadir=/usr/local/mysql/var
  1336.      socket=/tmp/mysqld.sock
  1337.      port=3306
  1338.      
  1339.      [mysql.server]
  1340.      user=mysql
  1341.      basedir=/usr/local/mysql
  1342. The `mysql.server' script uses the following variables: `user',
  1343. `datadir', `basedir', `bindir', and `pid-file'.
  1344. The following table shows which option sections each of the startup
  1345. script uses:
  1346. `mysqld'       `mysqld' and `server'
  1347. `mysql.server' `mysql.server', `mysqld' and `server'
  1348. `safe_mysqld'  `mysql.server', `mysqld' and `server'
  1349. *Note Option files::.
  1350. Command-line Options
  1351. --------------------
  1352. `mysqld' accepts the following command-line options:
  1353. `--ansi'
  1354.      Use ANSI SQL syntax instead of MySQL syntax. *Note ANSI mode::.
  1355. `-b, --basedir=path'
  1356.      Path to installation directory. All paths are usually resolved
  1357.      relative to this.
  1358. `--big-tables'
  1359.      Allow big result sets by saving all temporary sets on file. It
  1360.      solves most 'table full' errors, but also slows down the queries
  1361.      where in-memory tables would suffice. Since Version 3.23.2,
  1362.      *MySQL* is able to solve it automaticaly by using memory for small
  1363.      temporary tables and switching to disk tables where necessary.
  1364. `--bind-address=IP'
  1365.      IP address to bind to.
  1366. `--character-sets-dir=path'
  1367.      Directory where character sets are. *Note Character sets::.
  1368. `--chroot=path'
  1369.      Chroot mysqld daemon during startup.  Recommended security
  1370.      measure. It will somewhat limit `LOAD DATA INFILE' and `SELECT ...
  1371.      INTO OUTFILE' though.
  1372. `-h, --datadir=path'
  1373.      Path to the database root.
  1374. `--default-character-set=charset'
  1375.      Set the default character set. *Note Character sets::.
  1376. `--default-table-type=type'
  1377.      Set the default table type for tables. *Note Table types::.
  1378. `--delay-key-write-for-all-tables'
  1379.      Don't flush key buffers between writes for any `MyISAM' table.
  1380.      *Note Server parameters::.
  1381. `--enable-locking'
  1382.      Enable system locking.  Note that if you use this option on a
  1383.      system which a not fully working lockd() (as on Linux) you will
  1384.      easily get mysqld to deadlock.
  1385. `-T, --exit-info'
  1386.      This is a bit mask of different flags one can use for debugging the
  1387.      mysqld server;  One should not use this option if one doesn't know
  1388.      exactly what it does!
  1389. `--flush'
  1390.      Flush all changes to disk after each SQL command.  Normally *MySQL*
  1391.      only does a write of all changes to disk after each SQL command
  1392.      and lets the operating system handle the syncing to disk.  *Note
  1393.      Crashing::.
  1394. `-?, --help'
  1395.      Display short help and exit.
  1396. `--init-file=file'
  1397.      Read SQL commands from this file at startup.
  1398. `-L, --language=...'
  1399.      Client error messages in given language. May be given as a full
  1400.      path.  *Note Languages::.
  1401. `-l, --log[=file]'
  1402.      Log connections and queries to file. *Note Query log::.
  1403. `--log-isam[=file]'
  1404.      Log all ISAM/MyISAM changes to file (only used when debugging
  1405.      ISAM/MyISAM).
  1406. `--log-slow-queries[=file]'
  1407.      Log all queries that have taken more than `long_query_time'
  1408.      seconds to execute to file. *Note Slow query log::.
  1409. `--log-update[=file]'
  1410.      Log updates to `file.#' where `#' is a unique number if not given.
  1411.      *Note Update log::.
  1412. `--log-long-format'
  1413.      Log some extra information to update log.  If you are using
  1414.      `--log-slow-queries' then queries that are not using indexes are
  1415.      logged to the slow query log.
  1416. `--low-priority-updates'
  1417.      Table-modifying operations (`INSERT'/`DELETE'/`UPDATE') will have
  1418.      lower priority than selects.  It can also be done via `{INSERT |
  1419.      REPLACE | UPDATE | DELETE} LOW_PRIORITY ...' to lower the priority
  1420.      of only one query, or by `SET OPTION SQL_LOW_PRIORITY_UPDATES=1'
  1421.      to change the priority in one thread.  *Note Table locking::.
  1422. `--memlock'
  1423.      Lock the `mysqld' process in memory.  This works only if your
  1424.      system supports the `mlockall()' system call.  This may help if
  1425.      you have a problem where the operating system is causing `mysqld'
  1426.      to swap on disk.
  1427. `--myisam-recover [=option[,option...]]] where option is one of DEFAULT, BACKUP, FORCE or QUICK.'
  1428.      If this option is used, `mysqld' will on open check if the table is
  1429.      marked as crashed or if if the table wasn't closed properly (The
  1430.      last option only works if you are running with `--skip-locking').
  1431.      If this is the case mysqld will run check on the table. If the
  1432.      table was corrupted, `mysqld' will attempt to repair it.
  1433.      The following options affects how the repair works.
  1434.      DEFAULT              The same as not giving any option to
  1435.                           `--myisam-recover'.
  1436.      BACKUP               If the data table was changed during recover,
  1437.                           save a backup of the `table_name.MYD' data
  1438.                           file as `table_name-datetime.BAK'.
  1439.      FORCE                Run recover even if we will loose more than
  1440.                           one row from the .MYD file.
  1441.      QUICK                Don't check the rows in the table if there
  1442.                           isn't any delete blocks.
  1443.      Before a table is automaticly repaired, mysqld will add a note
  1444.      about this in the error log.  If you want to be able to recover
  1445.      from most things without user intervention, you should use the
  1446.      options `BACKUP,FORCE'.  This will force a repair of a table even
  1447.      if some rows would be deleted, but it will keep the old data file
  1448.      as a backup so that you can later examine what happened.
  1449. `--pid-file=path'
  1450.      Path to pid file used by `safe_mysqld'.
  1451. `-P, --port=...'
  1452.      Port number to listen for TCP/IP connections.
  1453. `-o, --old-protocol'
  1454.      Use the 3.20 protocol for compatibility with some very old clients.
  1455.      *Note Upgrading-from-3.20::.
  1456. `--one-thread'
  1457.      Only use one thread (for debugging under Linux). *Note Debugging
  1458.      server::.
  1459. `-O, --set-variable var=option'
  1460.      Give a variable a value. `--help' lists variables.  You can find a
  1461.      full description for all variables in the `SHOW VARIABLES' section
  1462.      in this manual. *Note SHOW VARIABLES::.  The tuning server
  1463.      parameters section includes information of how to optimize these.
  1464.      *Note Server parameters::.
  1465. `--safe-mode'
  1466.      Skip some optimize stages.  Implies `--skip-delay-key-write'.
  1467. `--safe-show-database'
  1468.      Don't show databases for which the user doesn't have any
  1469.      privileges.
  1470. `--secure'
  1471.      IP numbers returned by the `gethostbyname()' system call are
  1472.      checked to make sure they resolve back to the original hostname.
  1473.      This makes it harder for someone on the outside to get access by
  1474.      pretending to be another host. This option also adds some sanity
  1475.      checks of hostnames. The option is turned off by default in
  1476.      *MySQL* Version 3.21 because sometimes it takes a long time to
  1477.      perform backward resolutions.  *MySQL* Version 3.22 caches
  1478.      hostnames (unless `--skip-host-cache' is used) and has this option
  1479.      enabled by default.
  1480. `--skip-concurrent-insert'
  1481.      Turn off the ability to select and insert at the same time on
  1482.      `MyISAM' tables. (This is only to be used if you think you have
  1483.      found a bug in this feature).
  1484. `--skip-delay-key-write'
  1485.      Ignore the `delay_key_write' option for all tables.  *Note Server
  1486.      parameters::.
  1487. `-Sg, --skip-grant-tables'
  1488.      This option causes the server not to use the privilege system at
  1489.      all. This gives everyone _full access_ to all databases!  (You can
  1490.      tell a running server to start using the grant tables again by
  1491.      executing `mysqladmin flush-privileges' or `mysqladmin reload'.)
  1492. `--skip-locking'
  1493.      Don't use system locking. To use `isamchk' or `myisamchk' you must
  1494.      shut down the server. *Note Stability::.  Note that in *MySQL*
  1495.      Version 3.23 you can use `REPAIR' and `CHECK' to repair/check
  1496.      `MyISAM' tables.
  1497. `--skip-name-resolve'
  1498.      Hostnames are not resolved.  All `Host' column values in the grant
  1499.      tables must be IP numbers or `localhost'. *Note DNS::.
  1500. `--skip-networking'
  1501.      Don't listen for TCP/IP connections at all.  All interaction with
  1502.      `mysqld' must be made via Unix sockets.  This option is highly
  1503.      recommended for systems where only local requests are allowed.
  1504.      *Note DNS::.
  1505. `--skip-new'
  1506.      Don't use new, possible wrong routines.  Implies
  1507.      `--skip-delay-key-write'.  This will also set default table type
  1508.      to `ISAM'. *Note ISAM::.
  1509. `--skip-host-cache'
  1510.      Never use host name cache for faster name-ip resolution, but query
  1511.      DNS server on every connect instead. *Note DNS::.
  1512. `--skip-show-database'
  1513.      Don't allow 'SHOW DATABASE' commands, unless the user has
  1514.      *process* privilege.
  1515. `--skip-thread-priority'
  1516.      Disable using thread priorities for faster response time.
  1517. `--socket=path'
  1518.      Socket file to use for local connections instead of default
  1519.      `/tmp/mysql.sock'.
  1520. `-t, --tmpdir=path'
  1521.      Path for temporary files. It may be useful if your default `/tmp'
  1522.      directory resides on a partition too small to hold temporary
  1523.      tables.
  1524. `-u, --user=user_name'
  1525.      Run `mysqld' daemon as user `user_name'. This option is
  1526.      _mandatory_ when starting `mysqld' as root.
  1527. `-V, --version'
  1528.      Output version information and exit.
  1529. Option Files
  1530. ------------
  1531. *MySQL* Version 3.22 can read default startup options for the server
  1532. and for clients from option files.
  1533. *MySQL* reads default options from the following files on Unix:
  1534. *Filename*             *Purpose*
  1535. `/etc/my.cnf'          Global options
  1536. `DATADIR/my.cnf'       Server-specific options
  1537. `defaults-extra-file'  The file specified with -defaults-extra-file=#
  1538. `~/.my.cnf'            User-specific options
  1539. `DATADIR' is the *MySQL* data directory (typically
  1540. `/usr/local/mysql/data' for a binary installation or `/usr/local/var'
  1541. for a source installation).  Note that this is the directory that was
  1542. specified at configuration time, not the one specified with `--datadir'
  1543. when `mysqld' starts up!  (`--datadir' has no effect on where the
  1544. server looks for option files, because it looks for them before it
  1545. processes any command-line arguments.)
  1546. *MySQL* reads default options from the following files on Windows:
  1547. *Filename*             *Purpose*
  1548. `windows-system-directorymy.ini'Global options
  1549. `C:my.cnf'            Global options
  1550. `C:mysqldatamy.cnf' Server-specific options
  1551. Note that on Windows, you should specify all paths with `/' instead of
  1552. `'. If you use `', you need to specify this twice, as `' is the
  1553. escape character in *MySQL*.
  1554. *MySQL* tries to read option files in the order listed above.  If
  1555. multiple option files exist, an option specified in a file read later
  1556. takes precedence over the same option specified in a file read earlier.
  1557. Options specified on the command line take precedence over options
  1558. specified in any option file.  Some options can be specified using
  1559. environment variables.  Options specified on the command line or in
  1560. option files take precedence over environment variable values. *Note
  1561. Environment variables::.
  1562. The following programs support option files:  `mysql', `mysqladmin',
  1563. `mysqld', `mysqldump', `mysqlimport', `mysql.server', `myisamchk', and
  1564. `myisampack'.
  1565. You can use option files to specify any long option that a program
  1566. supports!  Run the program with `--help' to get a list of available
  1567. options.
  1568. An option file can contain lines of the following forms:
  1569. `#comment'
  1570.      Comment lines start with `#' or `;'. Empty lines are ignored.
  1571. `[group]'
  1572.      `group' is the name of the program or group for which you want to
  1573.      set options.  After a group line, any `option' or `set-variable'
  1574.      lines apply to the named group until the end of the option file or
  1575.      another group line is given.
  1576. `option'
  1577.      This is equivalent to `--option' on the command line.
  1578. `option=value'
  1579.      This is equivalent to `--option=value' on the command line.
  1580. `set-variable = variable=value'
  1581.      This is equivalent to `--set-variable variable=value' on the
  1582.      command line.  This syntax must be used to set a `mysqld' variable.
  1583. The `client' group allows you to specify options that apply to all
  1584. *MySQL* clients (not `mysqld'). This is the perfect group to use to
  1585. specify the password you use to connect to the server.  (But make sure
  1586. the option file is readable and writable only to yourself.)
  1587. Note that for options and values, all leading and trailing blanks are
  1588. automatically deleted.  You may use the escape sequences `b', `t',
  1589. `n', `r', `\', and `s' in your value string (`s' == blank).
  1590. Here is a typical global option file:
  1591.      [client]
  1592.      port=3306
  1593.      socket=/tmp/mysql.sock
  1594.      
  1595.      [mysqld]
  1596.      port=3306
  1597.      socket=/tmp/mysql.sock
  1598.      set-variable = key_buffer_size=16M
  1599.      set-variable = max_allowed_packet=1M
  1600.      
  1601.      [mysqldump]
  1602.      quick
  1603. Here is typical user option file:
  1604.      [client]
  1605.      # The following password will be sent to all standard MySQL clients
  1606.      password=my_password
  1607.      
  1608.      [mysql]
  1609.      no-auto-rehash
  1610.      set-variable = connect_timeout=2
  1611.      
  1612.      [mysql-hot-copy]
  1613.      interactive-timeout
  1614. If you have a source distribution, you will find sample configuration
  1615. files named `my-xxxx.cnf' in the `support-files' directory.  If you
  1616. have a binary distribution, look in the `DIR/share/mysql' directory,
  1617. where `DIR' is the pathname to the *MySQL* installation directory
  1618. (typically `/usr/local/mysql').  Currently there are sample
  1619. configuration files for small, medium, large, and very large systems.
  1620. You can copy `my-xxxx.cnf' to your home directory (rename the copy to
  1621. `.my.cnf') to experiment with this.
  1622. All *MySQL* clients that support option files support the following
  1623. options:
  1624. -no-defaults                  Don't read any option files.
  1625. -print-defaults               Print the program name and all options
  1626.                               that it will get.
  1627. -defaults-file=full-path-to-default-fileOnly use the given configuration file.
  1628. -defaults-extra-file=full-path-to-default-fileRead this configuration file after the
  1629.                               global configuration file but before the
  1630.                               user configuration file.
  1631. Note that the above options must be first on the command line to work!
  1632. `--print-defaults' may however be used directly after the
  1633. `--defaults-xxx-file' commands.
  1634. Note for developers:  Option file handling is implemented simply by
  1635. processing all matching options (that is, options in the appropriate
  1636. group) before any command-line arguments. This works nicely for
  1637. programs that use the last instance of an option that is specified
  1638. multiple times. If you have an old program that handles
  1639. multiply-specified options this way but doesn't read option files, you
  1640. need add only two lines to give it that capability.  Check the source
  1641. code of any of the standard *MySQL* clients to see how to do this.
  1642. In shell scripts you can use the `my_print_defaults' command to parse
  1643. the config files:
  1644.      shell> my_print_defaults client mysql
  1645.      --port=3306
  1646.      --socket=/tmp/mysql.sock
  1647.      --no-auto-rehash
  1648. The above output contains all options for the groups 'client' and
  1649. 'mysql'.
  1650. Installing many servers on the same machine
  1651. ===========================================
  1652. In some cases you may want to have many different `mysqld' deamons
  1653. (servers) running on the same machine.  You may for example want to run
  1654. a new version of *MySQL* for testing together with an old version that
  1655. is in production.  Another case is when you want to give different
  1656. users access to different mysqld servers that they manage themself.
  1657. One way to get a new server running is by starting it with a different
  1658. socket and port as follows:
  1659.      shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
  1660.      shell> MYSQL_TCP_PORT=3307
  1661.      shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
  1662.      shell> scripts/mysql_install_db
  1663.      shell> bin/safe_mysqld &
  1664. The environment variables appendix includes a list of other environment
  1665. variables you can use to affect `mysqld'. *Note Environment variables::.
  1666. The above is the quick and dirty way that one commonly use for testing.
  1667. The nice thing with this is that all connections you do in the above
  1668. shell will automaticly be directed to the new running server!
  1669. If you need to do this more permanently, you should create an own option
  1670. file for each server. *Note Option files::.  In your startup script that
  1671. is executed at boot time (mysql.server?) you should specify for both
  1672. servers:
  1673. `safe_mysqld --default-file=path-to-option-file'
  1674. At least the following options should be different per server:
  1675. `port=#'
  1676. `socket=path'
  1677. `pid-file=path'
  1678. The following options should be different, if they are used:
  1679. `log=path'
  1680. `log-bin=path'
  1681. `log-update=path'
  1682. `log-isam=path'
  1683. `bdb-logdir=path'
  1684. If you want more performance, you can also specify the following
  1685. differently:
  1686. `tmpdir=path'
  1687. `bdb-tmpdir=path'
  1688. *Note Command-line options::.
  1689. If you are installing binary *MySQL* versions (.tar files) and start
  1690. them with `./bin/safe_mysqld' then in most cases the only option you
  1691. need to add/change is the `socket' and `port' argument to `safe_mysqld'.
  1692. Upgrading/Downgrading MySQL
  1693. ===========================
  1694. You can always move the *MySQL* form and data files between different
  1695. versions on the same architecture as long as you have the same base
  1696. version of *MySQL*. The current base version is 3. If you change the
  1697. character set when running *MySQL* (which may also change the sort
  1698. order), you must run `myisamchk -r -q' on all tables.  Otherwise your
  1699. indexes may not be ordered correctly.
  1700. If you are afraid of new versions, you can always rename your old
  1701. `mysqld' to something like `mysqld'-'old-version-number'.  If your new
  1702. `mysqld' then does something unexpected, you can simply shut it down
  1703. and restart with your old `mysqld'!
  1704. When you do an upgrade you should also back up your old databases, of
  1705. course.
  1706. If after an upgrade, you experience problems with recompiled client
  1707. programs, like `Commands out of sync' or unexpected core dumps, you
  1708. probably have used an old header or library file when compiling your
  1709. programs.  In this case you should check the date for your `mysql.h'
  1710. file and `libmysqlclient.a' library to verify that they are from the new
  1711. *MySQL* distribution.  If not, please recompile your programs!
  1712. If you get some problems that the new `mysqld' server doesn't want to
  1713. start or that you can't connect without a password, check that you don't
  1714. have some old `my.cnf' file from your old installation!  You can check
  1715. this with: `program-name --print-defaults'.  If this outputs anything
  1716. other than the program name, you have an active `my.cnf' file that will
  1717. may affect things!
  1718. It is a good idea to rebuild and reinstall the `Msql-Mysql-modules'
  1719. distribution whenever you install a new release of *MySQL*,
  1720. particularly if you notice symptoms such as all your `DBI' scripts
  1721. dumping core after you upgrade *MySQL*.
  1722. * Menu:
  1723. * Upgrading-from-3.22::         Upgrading from a 3.22 version to 3.23
  1724. * Upgrading-from-3.21::         Upgrading from a 3.21 version to 3.22
  1725. * Upgrading-from-3.20::         Upgrading from a 3.20 version to 3.21
  1726. * Upgrading-to-arch::           Upgrading to another architecture
  1727. Upgrading From Version 3.22 to Version 3.23
  1728. -------------------------------------------
  1729. *MySQL* Version 3.23 supports tables of the new `MyISAM' type and the
  1730. old `ISAM' type.  You don't have to convert your old tables to use
  1731. these with Version 3.23.  By default, all new tables will be created
  1732. with type `MyISAM' (unless you start `mysqld' with the
  1733. `--default-table-type=isam' option). You can change an `ISAM' table to
  1734. a `MyISAM' table with `ALTER TABLE' or the Perl script
  1735. `mysql_convert_table_format'.
  1736. Version 3.22 and 3.21 clients will work without any problems with a
  1737. Version 3.23 server.
  1738. The following lists tell what you have to watch out for when upgrading
  1739. to Version 3.23:
  1740.    * If you do a `DROP DATABASE' on a symbolic linked database, both the
  1741.      link and the original database is deleted.  (This didn't happen in
  1742.      3.22 because configure didn't detect the `readlink' system call).
  1743.    * `OPTIMIZE TABLE' now only works for *MyISAM* tables.  For other
  1744.      table types, you can use `ALTER TABLE' to optimize the table.
  1745.      During `OPTIMIZE TABLE' the table is now locked from other threads.
  1746.    * The *MySQL* client `mysql' is now by default started with the
  1747.      option `--no-named-commands (-g)'. This option can be disabled with
  1748.      `--enable-named-commands (-G)'. This may cause incompatibility
  1749.      problems in some cases, for example in SQL scripts that use named
  1750.      commands without a semicolon!  Long format commands still work
  1751.      from the first line.
  1752.    * If you are using the `german' character sort order, you must repair
  1753.      all your tables with `isamchk -r', as we have made some changes in
  1754.      the sort order!
  1755.    * The default return type of `IF' will now depend on both arguments
  1756.      and not only the first argument.
  1757.    * `AUTO_INCREMENT' will not work with negative numbers. The reason
  1758.      for this is that negative numbers caused problems when wrapping
  1759.      from -1 to 0.  `AUTO_INCREMENT' is now for MyISAM tables handled
  1760.      at a lower level and is much faster than before. For MyISAM tables
  1761.      old numbers are also not reused anymore, even if you delete some
  1762.      rows from the table.
  1763.    * `CASE', `DELAYED', `ELSE', `END', `FULLTEXT', `INNER', `RIGHT',
  1764.      `THEN' and `WHEN' are now reserved words.
  1765.    * `FLOAT(X)' is now a true floating-point type and not a value with
  1766.      a fixed number of decimals.
  1767.    * When declaring `DECIMAL(length,dec)' the length argument no longer
  1768.      includes a place for the sign or the decimal point.
  1769.    * A `TIME' string must now be of one of the following formats:
  1770.      `[[[DAYS] [H]H:]MM:]SS[.fraction]' or
  1771.      `[[[[[H]H]H]H]MM]SS[.fraction]'
  1772.    * `LIKE' now compares strings using the same character comparison
  1773.      rules as `'=''.  If you require the old behavior, you can compile
  1774.      *MySQL* with the `CXXFLAGS=-DLIKE_CMP_TOUPPER' flag.
  1775.    * `REGEXP' is now case insensitive for normal (not binary) strings.
  1776.    * When you check/repair tables you should use `CHECK TABLE' or
  1777.      `myisamchk' for `MyISAM' tables (`.MYI') and `isamchk' for ISAM
  1778.      (`.ISM') tables.
  1779.    * If you want your `mysqldump' files to be compatible between
  1780.      *MySQL* Version 3.22 and Version 3.23, you should not use the
  1781.      `--opt' or `--full' option to `mysqldump'.
  1782.    * Check all your calls to `DATE_FORMAT()' to make sure there is a
  1783.      `%' before each format character.  (Later *MySQL* Version 3.22 did
  1784.      allow this syntax.)
  1785.    * `mysql_fetch_fields_direct' is now a function (it was a macro) and
  1786.      it returns a pointer to a `MYSQL_FIELD' instead of a `MYSQL_FIELD'.
  1787.    * `mysql_num_fields()' can no longer be used on a `MYSQL*' object
  1788.      (it's now a function that takes `MYSQL_RES*' as an argument. You
  1789.      should now use `mysql_field_count()' instead.
  1790.    * In *MySQL* Version 3.22, the output of `SELECT DISTINCT ...' was
  1791.      almost always sorted.  In Version 3.23, you must use `GROUP BY' or
  1792.      `ORDER BY' to obtain sorted output.
  1793.    * `SUM()' now returns `NULL', instead of 0, if there is no matching
  1794.      rows. This is according to ANSI SQL.
  1795.    * An `AND' or `OR' with `NULL' values will now return `NULL' instead
  1796.      of 0. This mostly affects queries that use `NOT' on an `AND/OR'
  1797.      expression as `NOT NULL' = `NULL'.  `LPAD()' and `RPAD()' will
  1798.      shorten the result string if it's longer than the length argument.
  1799. Upgrading from Version 3.21 to Version 3.22
  1800. -------------------------------------------
  1801. Nothing that affects compatibility has changed between Version 3.21 and
  1802. 3.22.  The only pitfall is that new tables that are created with `DATE'
  1803. type columns will use the new way to store the date. You can't access
  1804. these new fields from an old version of `mysqld'.
  1805. After installing *MySQL* Version 3.22, you should start the new server
  1806. and then run the `mysql_fix_privilege_tables' script. This will add the
  1807. new privileges that you need to use the `GRANT' command.  If you forget
  1808. this, you will get `Access denied' when you try to use `ALTER TABLE',
  1809. `CREATE INDEX', or `DROP INDEX'. If your *MySQL* root user requires a
  1810. password, you should give this as an argument to
  1811. `mysql_fix_privilege_tables'.
  1812. The C API interface to `mysql_real_connect()' has changed.  If you have
  1813. an old client program that calls this function, you must place a `0' for
  1814. the new `db' argument (or recode the client to send the `db' element
  1815. for faster connections).  You must also call `mysql_init()' before
  1816. calling `mysql_real_connect()'!  This change was done to allow the new
  1817. `mysql_options()' function to save options in the `MYSQL' handler
  1818. structure.
  1819. The `mysqld' variable `key_buffer' has changed names to
  1820. `key_buffer_size', but you can still use the old name in your startup
  1821. files.
  1822. Upgrading from Version 3.20 to Version 3.21
  1823. -------------------------------------------
  1824. If you are running a version older than Version 3.20.28 and want to
  1825. switch to Version 3.21, you need to do the following:
  1826. You can start the `mysqld' Version 3.21 server with `safe_mysqld
  1827. --old-protocol' to use it with clients from a Version 3.20 distribution.
  1828. In this case, the new client function `mysql_errno()' will not return
  1829. any server error, only `CR_UNKNOWN_ERROR' (but it works for client
  1830. errors), and the server uses the old `password()' checking rather than
  1831. the new one.
  1832. If you are *NOT* using the `--old-protocol' option to `mysqld', you
  1833. will need to make the following changes:
  1834.    * All client code must be recompiled. If you are using ODBC, you
  1835.      must get the new *MyODBC* 2.x driver.
  1836.    * The script `scripts/add_long_password' must be run to convert the
  1837.      `Password' field in the `mysql.user' table to `CHAR(16)'.
  1838.    * All passwords must be reassigned in the `mysql.user' table (to get
  1839.      62-bit rather than 31-bit passwords).
  1840.    * The table format hasn't changed, so you don't have to convert any
  1841.      tables.
  1842. *MySQL* Version 3.20.28 and above can handle the new `user' table
  1843. format without affecting clients. If you have a *MySQL* version earlier
  1844. than Version 3.20.28, passwords will no longer work with it if you
  1845. convert the `user' table. So to be safe, you should first upgrade to at
  1846. least Version 3.20.28 and then upgrade to Version 3.21.
  1847. The new client code works with a 3.20.x `mysqld' server, so if you
  1848. experience problems with 3.21.x, you can use the old 3.20.x server
  1849. without having to recompile the clients again.
  1850. If you are not using the `--old-protocol' option to `mysqld', old
  1851. clients will issue the error message:
  1852.      ERROR: Protocol mismatch. Server Version = 10 Client Version = 9
  1853. The new Perl `DBI'/`DBD' interface also supports the old `mysqlperl'
  1854. interface.  The only change you have to make if you use `mysqlperl' is
  1855. to change the arguments to the `connect()' function.  The new arguments
  1856. are: `host', `database', `user', `password' (the `user' and `password'
  1857. arguments have changed places).  *Note Perl `DBI' Class: Perl DBI Class.
  1858. The following changes may affect queries in old applications:
  1859.    * `HAVING' must now be specified before any `ORDER BY' clause.
  1860.    * The parameters to `LOCATE()' have been swapped.
  1861.    * There are some new reserved words. The most notable are `DATE',
  1862.      `TIME', and `TIMESTAMP'.
  1863. Upgrading to Another Architecture
  1864. ---------------------------------
  1865. If you are using *MySQL* Version 3.23, you can copy the `.frm', `.MYI',
  1866. and `.MYD' files between different architectures that support the same
  1867. floating-point format.  (*MySQL* takes care of any byte swapping
  1868. issues.)
  1869. The *MySQL* `ISAM' data and index files (`.ISD' and `*.ISM',
  1870. respectively) are architecture-dependent and in some cases
  1871. OS-dependent.  If you want to move your applications to another machine
  1872. that has a different architecture or OS than your current machine, you
  1873. should not try to move a database by simply copying the files to the
  1874. other machine. Use `mysqldump' instead.
  1875. By default, `mysqldump' will create a file full of SQL statements.  You
  1876. can then transfer the file to the other machine and feed it as input to
  1877. the `mysql' client.
  1878. Try `mysqldump --help' to see what options are available.  If you are
  1879. moving the data to a newer version of *MySQL*, you should use
  1880. `mysqldump --opt' with the newer version to get a fast, compact dump.
  1881. The easiest (although not the fastest) way to move a database between
  1882. two machines is to run the following commands on the machine on which
  1883. the database is located:
  1884.      shell> mysqladmin -h 'other hostname' create db_name
  1885.      shell> mysqldump --opt db_name 
  1886.              | mysql -h 'other hostname' db_name
  1887. If you want to copy a database from a remote machine over a slow
  1888. network, you can use:
  1889.      shell> mysqladmin create db_name
  1890.      shell> mysqldump -h 'other hostname' --opt --compress db_name 
  1891.              | mysql db_name
  1892. You can also store the result in a file, then transfer the file to the
  1893. target machine and load the file into the database there.  For example,
  1894. you can dump a database to a file on the source machine like this:
  1895.      shell> mysqldump --quick db_name | gzip > db_name.contents.gz
  1896. (The file created in this example is compressed.) Transfer the file
  1897. containing the database contents to the target machine and run these
  1898. commands there:
  1899.      shell> mysqladmin create db_name
  1900.      shell> gunzip < db_name.contents.gz | mysql db_name
  1901. You can also use `mysqldump' and `mysqlimport' to accomplish the
  1902. database transfer.  For big tables, this is much faster than simply
  1903. using `mysqldump'.  In the commands shown below, `DUMPDIR' represents
  1904. the full pathname of the directory you use to store the output from
  1905. `mysqldump'.
  1906. First, create the directory for the output files and dump the database:
  1907.      shell> mkdir DUMPDIR
  1908.      shell> mysqldump --tab=DUMPDIR db_name
  1909. Then transfer the files in the `DUMPDIR' directory to some corresponding
  1910. directory on the target machine and load the files into *MySQL* there:
  1911.      shell> mysqladmin create db_name           # create database
  1912.      shell> cat DUMPDIR/*.sql | mysql db_name   # create tables in database
  1913.      shell> mysqlimport db_name DUMPDIR/*.txt   # load data into tables
  1914. Also, don't forget to copy the `mysql' database, because that's where
  1915. the grant tables (`user', `db', `host') are stored.  You may have to
  1916. run commands as the *MySQL* `root' user on the new machine until you
  1917. have the `mysql' database in place.
  1918. After you import the `mysql' database on the new machine, execute
  1919. `mysqladmin flush-privileges' so that the server reloads the grant table
  1920. information.