Table of Contents
This appendix lists common problems and errors that may occur and potential resolutions, in addition to listing the errors that may appear when you call MySQL from any host language. The first section covers problems and resolutions. Detailed information on errors is provided; The first list displays server error messages. The second list displays client program messages.
This section lists some common problems and error messages that you may encounter. It describes how to determine the causes of the problems and what to do to solve them.
When you run into a problem, the first thing you should do is to find out which program or piece of equipment is causing it:
If you have one of the following symptoms, then it is probably a hardware problems (such as memory, motherboard, CPU, or hard disk) or kernel problem:
The keyboard doesn't work. This can normally be checked by pressing the Caps Lock key. If the Caps Lock light doesn't change, you have to replace your keyboard. (Before doing this, you should try to restart your computer and check all cables to the keyboard.)
The mouse pointer doesn't move.
The machine doesn't answer to a remote machine's pings.
Other programs that are not related to MySQL don't behave correctly.
Your system restarted unexpectedly. (A faulty user-level program should never be able to take down your system.)
            In this case, you should start by checking all your cables
            and run some diagnostic tool to check your hardware! You
            should also check whether there are any patches, updates, or
            service packs for your operating system that could likely
            solve your problem. Check also that all your libraries (such
            as glibc) are up to date.
          
It's always good to use a machine with ECC memory to discover memory problems early.
            If your keyboard is locked up, you may be able to recover by
            logging in to your machine from another machine and
            executing kbd_mode -a.
          
            Please examine your system log file
            (/var/log/messages or similar) for
            reasons for your problem. If you think the problem is in
            MySQL, you should also examine MySQL's log files. See
            Section聽5.11, 鈥淢ySQL Server Logs鈥.
          
If you don't think you have hardware problems, you should try to find out which program is causing problems. Try using top, ps, Task Manager, or some similar program, to check which program is taking all CPU or is locking the machine.
Use top, df, or a similar program to check whether you are out of memory, disk space, file descriptors, or some other critical resource.
If the problem is some runaway process, you can always try to kill it. If it doesn't want to die, there is probably a bug in the operating system.
If after you have examined all other possibilities and you have concluded that the MySQL server or a MySQL client is causing the problem, it's time to create a bug report for our mailing list or our support team. In the bug report, try to give a very detailed description of how the system is behaving and what you think is happening. You should also state why you think that MySQL is causing the problem. Take into consideration all the situations in this chapter. State any problems exactly how they appear when you examine your system. Use the 鈥copy and paste鈥 method for any output and error messages from programs and log files.
Try to describe in detail which program is not working and all symptoms you see. We have in the past received many bug reports that state only 鈥the system doesn't work.鈥 This doesn't provide us with any information about what could be the problem.
If a program fails, it's always useful to know the following information:
Has the program in question made a segmentation fault (did it dump core)?
Is the program taking up all available CPU time? Check with top. Let the program run for a while, it may simply be evaluating something computationally intensive.
If the mysqld server is causing problems, can you get any response from it with mysqladmin -u root ping or mysqladmin -u root processlist?
What does a client program say when you try to connect to the MySQL server? (Try with mysql, for example.) Does the client jam? Do you get any output from the program?
When sending a bug report, you should follow the outline described in Section聽1.8, 鈥淗ow to Report Bugs or Problems鈥.
Access deniedCan't connect to [local] MySQL serverClient does not support authentication protocolHost 'host_name' is
          blockedToo many connectionsOut of memoryMySQL server has gone awayPacket too largeThe table is fullCan't create/write to fileCommands out of syncIgnoring userTable 'tbl_name' doesn't
          existCan't initialize character setFile' Not Found and
          Similar ErrorsThis section lists some errors that users frequently encounter when running MySQL programs. Although the problems show up when you try to run client programs, the solutions to many of the problems involves changing the configuration of the MySQL server.
          An Access denied error can have many
          causes. Often the problem is related to the MySQL accounts
          that the server allows client programs to use when connecting.
          See Section聽5.7.8, 鈥淐auses of Access denied Errors鈥, and
          Section聽5.7.2, 鈥淗ow the Privilege System Works鈥.
        
          A MySQL client on Unix can connect to the
          mysqld server in two different ways: By
          using a Unix socket file to connect through a file in the
          filesystem (default /tmp/mysql.sock), or
          by using TCP/IP, which connects through a port number. A Unix
          socket file connection is faster than TCP/IP, but can be used
          only when connecting to a server on the same computer. A Unix
          socket file is used if you don't specify a hostname or if you
          specify the special hostname localhost.
        
          If the MySQL server is running on Windows, you can connect via
          TCP/IP. If the server is started with the
          --enable-named-pipe option, you can also
          connect with named pipes if you run the client on the host
          where the server is running. The name of the named pipe is
          MySQL by default. If you don't give a
          hostname when connecting to mysqld, a MySQL
          client first tries to connect to the named pipe. If that
          doesn't work, it connects to the TCP/IP port. You can force
          the use of named pipes on Windows by using
          . as the hostname.
        
          The error (2002) Can't connect to ...
          normally means that there is no MySQL server running on the
          system or that you are using an incorrect Unix socket filename
          or TCP/IP port number when trying to connect to the server.
        
          The error (2003) Can't connect to MySQL server on
          '
          indicates that the network connection has been refused. You
          should check that there is a MySQL server running, that it has
          network connections enabled, the network port you specified is
          the one configured on the server, and that the TCP/IP port you
          are using has not been blocked by a firewall or port blocking
          service.
        server' (10061)
Start by checking whether there is a process named mysqld running on your server host. (Use ps xa | grep mysqld on Unix or the Task Manager on Windows.) If there is no such process, you should start the server. See Section聽2.10.2.3, 鈥淪tarting and Troubleshooting the MySQL Server鈥.
          If a mysqld process is running, you can
          check it by trying the following commands. The port number or
          Unix socket filename might be different in your setup.
          host_ip represents the IP number of the
          machine where the server is running.
        
shell>mysqladmin versionshell>mysqladmin variablesshell>mysqladmin -h `hostname` version variablesshell>mysqladmin -h `hostname` --port=3306 versionshell>mysqladmin -h host_ip versionshell>mysqladmin --protocol=socket --socket=/tmp/mysql.sock version
          Note the use of backticks rather than forward quotes with the
          hostname command; these cause the output of
          hostname (that is, the current hostname) to
          be substituted into the mysqladmin command.
          If you have no hostname command or are
          running on Windows, you can manually type the hostname of your
          machine (without backticks) following the
          -h option. You can also try -h
          127.0.0.1 to connect with TCP/IP to the local host.
        
          Here are some reasons the Can't connect to local
          MySQL server error might occur:
        
mysqld is not running. Check your operating system's process list to ensure the mysqld process is present.
              You're running a MySQL server on Windows with many TCP/IP
              connections to it. If you're experiencing that quite often
              your clients get that error, you can find a workaround
              here:
              Section聽B.1.2.2.1, 鈥Connection to MySQL Server Failing on Windows鈥.
            
You are running on a system that uses MIT-pthreads. If you are running on a system that doesn't have native threads, mysqld uses the MIT-pthreads package. See Section聽2.1.1, 鈥淥perating Systems Supported by MySQL Community Server鈥. However, not all MIT-pthreads versions support Unix socket files. On a system without socket file support, you must always specify the hostname explicitly when connecting to the server. Try using this command to check the connection to the server:
shell> mysqladmin -h `hostname` version
              Someone has removed the Unix socket file that
              mysqld uses
              (/tmp/mysql.sock by default). For
              example, you might have a cron job that
              removes old files from the /tmp
              directory. You can always run mysqladmin
              version to check whether the Unix socket file
              that mysqladmin is trying to use really
              exists. The fix in this case is to change the
              cron job to not remove
              mysql.sock or to place the socket
              file somewhere else. See
              Section聽B.1.4.5, 鈥淗ow to Protect or Change the MySQL Unix Socket File鈥.
            
              You have started the mysqld server with
              the --socket=/path/to/socket option, but
              forgotten to tell client programs the new name of the
              socket file. If you change the socket pathname for the
              server, you must also notify the MySQL clients. You can do
              this by providing the same --socket
              option when you run client programs. You also need to
              ensure that clients have permission to access the
              mysql.sock file. To find out where
              the socket file is, you can do:
            
shell> netstat -ln | grep mysql
See Section聽B.1.4.5, 鈥淗ow to Protect or Change the MySQL Unix Socket File鈥.
              You are using Linux and one server thread has died (dumped
              core). In this case, you must kill the other
              mysqld threads (for example, with
              kill or with the
              mysql_zap script) before you can
              restart the MySQL server. See Section聽B.1.4.2, 鈥淲hat to Do If MySQL Keeps Crashing鈥.
            
              The server or client program might not have the proper
              access privileges for the directory that holds the Unix
              socket file or the socket file itself. In this case, you
              must either change the access privileges for the directory
              or socket file so that the server and clients can access
              them, or restart mysqld with a
              --socket option that specifies a socket
              filename in a directory where the server can create it and
              where client programs can access it.
            
          If you get the error message Can't connect to MySQL
          server on some_host, you can try the following
          things to find out what the problem is:
        
              Check whether the server is running on that host by
              executing telnet some_host 3306 and
              pressing the Enter key a couple of times. (3306 is the
              default MySQL port number. Change the value if your server
              is listening to a different port.) If there is a MySQL
              server running and listening to the port, you should get a
              response that includes the server's version number. If you
              get an error such as telnet: Unable to connect to
              remote host: Connection refused, then there is
              no server running on the given port.
            
              If the server is running on the local host, try using
              mysqladmin -h localhost variables to
              connect using the Unix socket file. Verify the TCP/IP port
              number that the server is configured to listen to (it is
              the value of the port variable.)
            
              Make sure that your mysqld server was
              not started with the --skip-networking
              option. If it was, you cannot connect to it using TCP/IP.
            
Check to make sure that there is no firewall blocking access to MySQL. Your firewall may be configured on the basis of the application being executed, or the post number used by MySQL for communication (3306 by default).
Under Linux or Unix, check your IP tables (or similar) configuration to ensure that the port has not been blocked.
Under Windows, applications such as ZoneAlarm and the Windows XP personal firewall may need to be configured to allow external access to a MySQL server.
              If you are running under Linux and Security-Enhanced Linux
              (SELinux) is enabled, make sure you have disabled SELinux
              protection for the mysqld process.
            
            When you're running a MySQL server on Windows with many
            TCP/IP connections to it, and you're experiencing that quite
            often your clients get a Can't connect to MySQL
            server error, the reason might be that Windows
            doesn't allow for enough ephemeral (short-lived) ports to
            serve those connections.
          
            By default, Windows allows 5000 ephemeral (short-lived) TCP
            ports to the user. After any port is closed it will remain
            in a TIME_WAIT status for 120 seconds.
            This status allows the connection to be reused at a much
            lower cost than reinitializing a brand new connection.
            However, the port will not be available again until this
            time expires.
          
            With a small stack of available TCP ports (5000) and a high
            number of TCP ports being open and closed over a short
            period of time along with the TIME_WAIT
            status you have a good chance for running out of ports.
            There are two ways to address this problem:
          
Reduce the number of TCP ports consumed quickly by investigating connection pooling or persistent connections where possible
Tune some settings in the Windows registry (see below)
IMPORTANT: The following procedure involves modifying the Windows registry. Before you modify the registry, make sure to back it up and make sure that you understand how to restore the registry if a problem occurs. For information about how to back up, restore, and edit the registry, view the following article in the Microsoft Knowledge Base: http://support.microsoft.com/kb/256986/EN-US/.
                Start Registry Editor
                (Regedt32.exe).
              
Locate the following key in the registry:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
                On the Edit menu, click Add
                Value, and then add the following registry
                value:
              
Value Name: MaxUserPort Data Type: REG_DWORD Value: 65534
This sets the number of ephemeral ports available to any user. The valid range is between 5000 and 65534 (decimal). The default value is 0x1388 (5000 decimal).
                On the Edit menu, click Add
                Value, and then add the following registry
                value:
              
Value Name: TcpTimedWaitDelay Data Type: REG_DWORD Value: 30
                This sets the number of seconds to hold a TCP port
                connection in TIME_WAIT state before
                closing. The valid range is between 0 (zero) and 300
                (decimal). The default value is 0x78 (120 decimal).
              
Quit Registry Editor.
Reboot the machine.
Note: Undoing the above should be as simple as deleting the registry entries you've created.
MySQL 5.1 uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older (pre-4.1) clients. If you upgrade the server from 4.0, attempts to connect to it with an older client may fail with the following message:
shell> mysql
Client does not support authentication protocol requested
by server; consider upgrading MySQL client
To solve this problem, you should use one of the following approaches:
Upgrade all client programs to use a 4.1.1 or newer client library.
When connecting to the server with a pre-4.1 client program, use an account that still has a pre-4.1-style password.
              Reset the password to pre-4.1 style for each user that
              needs to use a pre-4.1 client program. This can be done
              using the SET PASSWORD statement and
              the OLD_PASSWORD() function:
            
mysql>SET PASSWORD FOR->'some_user'@'some_host' = OLD_PASSWORD('newpwd');
              Alternatively, use UPDATE and
              FLUSH PRIVILEGES:
            
mysql>UPDATE mysql.user SET Password = OLD_PASSWORD('->newpwd')WHERE Host = 'mysql>some_host' AND User = 'some_user';FLUSH PRIVILEGES;
              Substitute the password you want to use for
              鈥newpwd鈥 in the
              preceding examples. MySQL cannot tell you what the
              original password was, so you'll need to pick a new one.
            
Tell the server to use the older password hashing algorithm:
                  Start mysqld with the
                  --old-passwords option.
                
Assign an old-format password to each account that has had its password updated to the longer 4.1 format. You can identify these accounts with the following query:
mysql>SELECT Host, User, Password FROM mysql.user->WHERE LENGTH(Password) > 16;
                  For each account record displayed by the query, use
                  the Host and
                  User values and assign a password
                  using the OLD_PASSWORD() function
                  and either SET PASSWORD or
                  UPDATE, as described earlier.
                
          Note: In older versions of
          PHP, the mysql extension does not support
          the authentication protocol in MySQL 4.1.1 and higher. This is
          true regardless of the PHP version being used. If you wish to
          use the mysql extension with MySQL 4.1 or
          newer, you may need to follow one of the options discussed
          above for configuring MySQL to work with old clients. The
          mysqli extension (stands for "MySQL,
          Improved"; added in PHP 5) is compatible with the improved
          password hashing employed in MySQL 4.1 and higher, and no
          special configuration of MySQL need be done to use this MySQL
          client library. For more information about the
          mysqli extension, see
          http://php.net/mysqli.
        
          It may also be possible to compile the older
          mysql extension against the new MySQL
          client library. This is beyond the scope of this Manual;
          consult the PHP documentation for more information. You also
          be able to obtain assistance with these issues in our
          MySQL with PHP
          forum.
        
For additional background on password hashing and authentication, see Section聽5.7.9, 鈥淧assword Hashing as of MySQL 4.1鈥.
          MySQL client programs prompt for a password when invoked with
          a --password or -p option
          that has no following password value:
        
shell> mysql -u user_name -p
Enter password:
          On some systems, you may find that your password works when
          specified in an option file or on the command line, but not
          when you enter it interactively at the Enter
          password: prompt. This occurs when the library
          provided by the system to read passwords limits password
          values to a small number of characters (typically eight). That
          is a problem with the system library, not with MySQL. To work
          around it, change your MySQL password to a value that is eight
          or fewer characters long, or put your password in an option
          file.
        
          If you get the following error, it means that
          mysqld has received many connect requests
          from the host
          ' that
          have been interrupted in the middle:
        host_name'
Host 'host_name' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'
          The number of interrupted connect requests allowed is
          determined by the value of the
          max_connect_errors system variable. After
          max_connect_errors failed requests,
          mysqld assumes that something is wrong (for
          example, that someone is trying to break in), and blocks the
          host from further connections until you execute a
          mysqladmin flush-hosts command or issue a
          FLUSH HOSTS statement. See
          Section聽5.2.3, 鈥淪ystem Variables鈥.
        
By default, mysqld blocks a host after 10 connection errors. You can adjust the value by starting the server like this:
shell> mysqld_safe --max_connect_errors=10000 &
          If you get this error message for a given host, you should
          first verify that there isn't anything wrong with TCP/IP
          connections from that host. If you are having network
          problems, it does you no good to increase the value of the
          max_connect_errors variable.
        
          If you get a Too many connections error
          when you try to connect to the mysqld
          server, this means that all available connections are in use
          by other clients.
        
          The number of connections allowed is controlled by the
          max_connections system variable. Beginning
          with MySQL 5.1.15, its default value is 151 to improve
          performance when MySQL is used with the Apache Web server.
          (Previously, the default was 100.) If you need to support more
          connections, you should restart mysqld with
          a larger value for this variable.
        
MySQL Enterprise
            Subscribers to the MySQL Network Monitoring and Advisory
            Service receive advice on dynamically configuring the
            max_connections variable 鈥 avoiding
            failed connection attempts. For more information see,
            http://www.mysql.com/products/enterprise/advisors.html.
          
          mysqld actually allows
          max_connections+1 clients to connect. The
          extra connection is reserved for use by accounts that have the
          SUPER privilege. By granting the
          SUPER privilege to administrators and not
          to normal users (who should not need it), an administrator can
          connect to the server and use SHOW
          PROCESSLIST to diagnose problems even if the maximum
          number of unprivileged clients are connected. See
          Section聽13.5.4.24, 鈥SHOW PROCESSLIST Syntax鈥.
        
The maximum number of connections MySQL can support depends on the quality of the thread library on a given platform. Linux or Solaris should be able to support 500-1000 simultaneous connections, depending on how much RAM you have and what your clients are doing. Static Linux binaries provided by MySQL AB can support up to 4000 connections.
If you issue a query using the mysql client program and receive an error like the following one, it means that mysql does not have enough memory to store the entire query result:
mysql: Out of memory at line 42, 'malloc.c' mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k) ERROR 2008: MySQL client ran out of memory
          To remedy the problem, first check whether your query is
          correct. Is it reasonable that it should return so many rows?
          If not, correct the query and try again. Otherwise, you can
          invoke mysql with the
          --quick option. This causes it to use the
          mysql_use_result() C API function to
          retrieve the result set, which places less of a load on the
          client (but more on the server).
        
          This section also covers the related Lost connection
          to server during query error.
        
          The most common reason for the MySQL server has gone
          away error is that the server timed out and closed
          the connection. In this case, you normally get one of the
          following error codes (which one you get is operating
          system-dependent):
        
| Error Code | Description | 
| CR_SERVER_GONE_ERROR | The client couldn't send a question to the server. | 
| CR_SERVER_LOST | The client didn't get an error when writing to the server, but it didn't get a full answer (or any answer) to the question. | 
          By default, the server closes the connection after eight hours
          if nothing has happened. You can change the time limit by
          setting the wait_timeout variable when you
          start mysqld. See
          Section聽5.2.3, 鈥淪ystem Variables鈥.
        
          If you have a script, you just have to issue the query again
          for the client to do an automatic reconnection. This assumes
          that you have automatic reconnection in the client enabled
          (which is the default for the mysql
          command-line client).
        
          Some other common reasons for the MySQL server has
          gone away error are:
        
              You (or the db administrator) has killed the running
              thread with a KILL statement or a
              mysqladmin kill command.
            
You tried to run a query after closing the connection to the server. This indicates a logic error in the application that should be corrected.
A client application running on a different host does not have the necessary privileges to connect to the MySQL server from that host.
              You got a timeout from the TCP/IP connection on the client
              side. This may happen if you have been using the commands:
              mysql_options(...,
              MYSQL_OPT_READ_TIMEOUT,...) or
              mysql_options(...,
              MYSQL_OPT_WRITE_TIMEOUT,...). In this case
              increasing the timeout may help solve the problem.
            
              You have encountered a timeout on the server side and the
              automatic reconnection in the client is disabled (the
              reconnect flag in the
              MYSQL structure is equal to 0).
            
              You are using a Windows client and the server had dropped
              the connection (probably because
              wait_timeout expired) before the
              command was issued.
            
The problem on Windows is that in some cases MySQL doesn't get an error from the OS when writing to the TCP/IP connection to the server, but instead gets the error when trying to read the answer from the connection.
              Prior to MySQL 5.1.8, even if the
              reconnect flag in the
              MYSQL structure is equal to 1, MySQL
              does not automatically reconnect and re-issue the query as
              it doesn't know if the server did get the original query
              or not.
            
              The solution to this is to either do a
              mysql_ping on the connection if there
              has been a long time since the last query (this is what
              MyODBC does) or set
              wait_timeout on the
              mysqld server so high that it in
              practice never times out.
            
              You can also get these errors if you send a query to the
              server that is incorrect or too large. If
              mysqld receives a packet that is too
              large or out of order, it assumes that something has gone
              wrong with the client and closes the connection. If you
              need big queries (for example, if you are working with big
              BLOB columns), you can increase the
              query limit by setting the server's
              max_allowed_packet variable, which has
              a default value of 1MB. You may also need to increase the
              maximum packet size on the client end. More information on
              setting the packet size is given in
              Section聽B.1.2.9, 鈥Packet too large鈥.
            
              An INSERT or REPLACE
              statement that inserts a great many rows can also cause
              these sorts of errors. Either one of these statements
              sends a single request to the server irrespective of the
              number of rows to be inserted; thus, you can often avoid
              the error by reducing the number of rows sent per
              INSERT or REPLACE.
            
You also get a lost connection if you are sending a packet 16MB or larger if your client is older than 4.0.8 and your server is 4.0.8 and above, or the other way around.
It is also possible to see this error if hostname lookups fail (for example, if the DNS server on which your server or network relies goes down). This is because MySQL is dependent on the host system for name resolution, but has no way of knowing whether it is working 鈥 from MySQL's point of view the problem is indistinguishable from any other network timeout.
              You may also see the MySQL server has gone
              away error if MySQL is started with the
              --skip-networking option.
            
Another networking issue that can cause this error occurs if the MySQL port (default 3306) is blocked by your firewall, thus preventing any connections at all to the MySQL server.
You can also encounter this error with applications that fork child processes, all of which try to use the same connection to the MySQL server. This can be avoided by using a separate connection for each child process.
You have encountered a bug where the server died while executing the query.
You can check whether the MySQL server died and restarted by executing mysqladmin version and examining the server's uptime. If the client connection was broken because mysqld crashed and restarted, you should concentrate on finding the reason for the crash. Start by checking whether issuing the query again kills the server again. See Section聽B.1.4.2, 鈥淲hat to Do If MySQL Keeps Crashing鈥.
          You can get more information about the lost connections by
          starting mysqld with the --log-warnings=2
          option. This logs some of the disconnected errors in the
          hostname.err file. See
          Section聽5.11.2, 鈥淭he Error Log鈥.
        
If you want to create a bug report regarding this problem, be sure that you include the following information:
Indicate whether the MySQL server died. You can find information about this in the server error log. See Section聽B.1.4.2, 鈥淲hat to Do If MySQL Keeps Crashing鈥.
              If a specific query kills mysqld and
              the tables involved were checked with CHECK
              TABLE before you ran the query, can you provide
              a reproducible test case? See
              MySQL
              Internals: Porting.
            
              What is the value of the wait_timeout
              system variable in the MySQL server? (mysqladmin
              variables gives you the value of this variable.)
            
              Have you tried to run mysqld with the
              --log option to determine whether the
              problem query appears in the log?
            
See also Section聽B.1.2.10, 鈥淐ommunication Errors and Aborted Connections鈥, and Section聽1.8, 鈥淗ow to Report Bugs or Problems鈥.
A communication packet is a single SQL statement sent to the MySQL server, a single row that is sent to the client, or a binary log event sent from a master replication server to a slave.
The largest possible packet that can be transmitted to or from a MySQL 5.1 server or client is 1GB.
          When a MySQL client or the mysqld server
          receives a packet bigger than
          max_allowed_packet bytes, it issues a
          Packet too large error and closes the
          connection. With some clients, you may also get a
          Lost connection to MySQL server during
          query error if the communication packet is too
          large.
        
          Both the client and the server have their own
          max_allowed_packet variable, so if you want
          to handle big packets, you must increase this variable both in
          the client and in the server.
        
          If you are using the mysql client program,
          its default max_allowed_packet variable is
          16MB. To set a larger value, start mysql
          like this:
        
shell> mysql --max_allowed_packet=32M
That sets the packet size to 32MB.
          The server's default max_allowed_packet
          value is 1MB. You can increase this if the server needs to
          handle big queries (for example, if you are working with big
          BLOB columns). For example, to set the
          variable to 16MB, start the server like this:
        
shell> mysqld --max_allowed_packet=16M
          You can also use an option file to set
          max_allowed_packet. For example, to set the
          size for the server to 16MB, add the following lines in an
          option file:
        
[mysqld] max_allowed_packet=16M
It is safe to increase the value of this variable because the extra memory is allocated only when needed. For example, mysqld allocates more memory only when you issue a long query or when mysqld must return a large result row. The small default value of the variable is a precaution to catch incorrect packets between the client and server and also to ensure that you do not run out of memory by using large packets accidentally.
          You can also get strange problems with large packets if you
          are using large BLOB values but have not
          given mysqld access to enough memory to
          handle the query. If you suspect this is the case, try adding
          ulimit -d 256000 to the beginning of the
          mysqld_safe script and restarting
          mysqld.
        
          The server error log can be a useful source of information
          about connection problems. See Section聽5.11.2, 鈥淭he Error Log鈥. If
          you start the server with the --log-warnings
          option, you might find messages like this in your error log:
        
010301 14:38:23 Aborted connection 854 to db: 'users' user: 'josh'
          If Aborted connections messages appear in
          the error log, the cause can be any of the following:
        
              The client program did not call
              mysql_close() before exiting.
            
              The client had been sleeping more than
              wait_timeout or
              interactive_timeout seconds without
              issuing any requests to the server. See
              Section聽5.2.3, 鈥淪ystem Variables鈥.
            
The client program ended abruptly in the middle of a data transfer.
          When any of these things happen, the server increments the
          Aborted_clients status variable.
        
          The server increments the Aborted_connects
          status variable when the following things happen:
        
A client doesn't have privileges to connect to a database.
A client uses an incorrect password.
A connection packet doesn't contain the right information.
              It takes more than connect_timeout
              seconds to get a connect packet. See
              Section聽5.2.3, 鈥淪ystem Variables鈥.
            
If these kinds of things happen, it might indicate that someone is trying to break into your server!
MySQL Enterprise
            For reasons of security and performance the advisors
            provided by the MySQL Network Monitoring and Advisory
            Service pay special attention to the
            Aborted_connections status variable. For
            more information see
            http://www.mysql.com/products/enterprise/advisors.html.
          
Other reasons for problems with aborted clients or aborted connections:
Use of Ethernet protocol with Linux, both half and full duplex. Many Linux Ethernet drivers have this bug. You should test for this bug by transferring a huge file via FTP between the client and server machines. If a transfer goes in burst-pause-burst-pause mode, you are experiencing a Linux duplex syndrome. The only solution is switching the duplex mode for both your network card and hub/switch to either full duplex or to half duplex and testing the results to determine the best setting.
Some problem with the thread library that causes interrupts on reads.
Badly configured TCP/IP.
Faulty Ethernets, hubs, switches, cables, and so forth. This can be diagnosed properly only by replacing hardware.
              The max_allowed_packet variable value
              is too small or queries require more memory than you have
              allocated for mysqld. See
              Section聽B.1.2.9, 鈥Packet too large鈥.
            
The maximum effective table size for MySQL databases is usually determined by operating system constraints on file sizes, not by MySQL internal limits. The following table lists some examples of operating system file-size limits. This is only a rough guide and is not intended to be definitive. For the most up-to-date information, be sure to check the documentation specific to your operating system.
| Operating System | File-size Limit | 
| Win32 w/ FAT/FAT32 | 2GB/4GB | 
| Win32 w/ NTFS | 2TB (possibly larger) | 
| Linux 2.2-Intel 32-bit | 2GB (LFS: 4GB) | 
| Linux 2.4+ | (using ext3 filesystem) 4TB | 
| Solaris 9/10 | 16TB | 
| MacOS X w/ HFS+ | 2TB | 
| NetWare w/NSS filesystem | 8TB | 
Windows users, please note that FAT and VFAT (FAT32) are not considered suitable for production use with MySQL. Use NTFS instead.
          On Linux 2.2, you can get MyISAM tables
          larger than 2GB in size by using the Large File Support (LFS)
          patch for the ext2 filesystem. Most current Linux
          distributions are based on kernel 2.4 or higher and include
          all the required LFS patches. On Linux 2.4, patches also exist
          for ReiserFS to get support for big files (up to 2TB). With
          JFS and XFS, petabyte and larger files are possible on Linux.
        
For a detailed overview about LFS in Linux, have a look at Andreas Jaeger's Large File Support in Linux page at http://www.suse.de/~aj/linux_lfs.html.
If you do encounter a full-table error, there are several reasons why it might have occurred:
              The InnoDB storage engine maintains
              InnoDB tables within a tablespace that
              can be created from several files. This allows a table to
              exceed the maximum individual file size. The tablespace
              can include raw disk partitions, which allows extremely
              large tables. The maximum tablespace size is 64TB.
            
              If you are using InnoDB tables and run
              out of room in the InnoDB tablespace.
              In this case, the solution is to extend the
              InnoDB tablespace. See
              Section聽14.5.7, 鈥淎dding and Removing InnoDB Data and Log Files鈥.
            
              You are using MyISAM tables on an
              operating system that supports files only up to 2GB in
              size and you have hit this limit for the data file or
              index file.
            
              You are using a MyISAM table and the
              space required for the table exceeds what is allowed by
              the internal pointer size. MyISAM
              creates tables to allow up to 256GB by default, but this
              limit can be changed up to the maximum allowable size of
              65,536TB (2567 鈥 1
              bytes).
            
              If you need a MyISAM table that is
              larger than the default limit and your operating system
              supports large files, the CREATE TABLE
              statement supports AVG_ROW_LENGTH and
              MAX_ROWS options. See
              Section聽13.1.8, 鈥CREATE TABLE Syntax鈥. The server uses these
              options to determine how large a table to allow.
            
              If the pointer size is too small for an existing table,
              you can change the options with ALTER
              TABLE to increase a table's maximum allowable
              size. See Section聽13.1.2, 鈥ALTER TABLE Syntax鈥.
            
ALTER TABLEtbl_nameMAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;
              You have to specify AVG_ROW_LENGTH only
              for tables with BLOB or
              TEXT columns; in this case, MySQL can't
              optimize the space required based only on the number of
              rows.
            
              To change the default size limit for
              MyISAM tables, set the
              myisam_data_pointer_size, which sets
              the number of bytes used for internal row pointers. The
              value is used to set the pointer size for new tables if
              you do not specify the MAX_ROWS option.
              The value of myisam_data_pointer_size
              can be from 2 to 7. A value of 4 allows tables up to 4GB;
              a value of 6 allows tables up to 256TB.
            
You can check the maximum data and index sizes by using this statement:
SHOW TABLE STATUS FROMdb_nameLIKE 'tbl_name';
              You also can use myisamchk -dv
              /path/to/table-index-file. See
              Section聽13.5.4, 鈥SHOW Syntax鈥, or Section聽8.5, 鈥myisamchk 鈥 MyISAM Table-Maintenance Utility鈥.
            
              Other ways to work around file-size limits for
              MyISAM tables are as follows:
            
If your large table is read-only, you can use myisampack to compress it. myisampack usually compresses a table by at least 50%, so you can have, in effect, much bigger tables. myisampack also can merge multiple tables into a single table. See Section聽8.7, 鈥myisampack 鈥 Generate Compressed, Read-Only MyISAM Tables鈥.
                  MySQL includes a MERGE library that
                  allows you to handle a collection of
                  MyISAM tables that have identical
                  structure as a single MERGE table.
                  See Section聽14.6, 鈥淭he MERGE Storage Engine鈥.
                
              You are using the NDB storage engine,
              in which case you need to increase the values for the
              DataMemory and
              IndexMemory configuration parameters in
              your config.ini file. See
              Section聽15.4.5.1, 鈥淒ata Node Configuration Parameters鈥.
            
              You are using the MEMORY
              (HEAP) storage engine; in this case you
              need to increase the value of the
              max_heap_table_size system variable.
              See Section聽5.2.3, 鈥淪ystem Variables鈥.
            
If you get an error of the following type for some queries, it means that MySQL cannot create a temporary file for the result set in the temporary directory:
Can't create/write to file '\\sqla3fe_0.ism'.
The preceding error is a typical message for Windows; the Unix message is similar.
          One fix is to start mysqld with the
          --tmpdir option or to add the option to the
          [mysqld] section of your option file. For
          example, to specify a directory of
          C:\temp, use these lines:
        
[mysqld] tmpdir=C:/temp
          The C:\temp directory must exist and have
          sufficient space for the MySQL server to write to. See
          Section聽4.3.2, 鈥淯sing Option Files鈥.
        
          Another cause of this error can be permissions issues. Make
          sure that the MySQL server can write to the
          tmpdir directory.
        
Check also the error code that you get with perror. One reason the server cannot write to a table is that the filesystem is full:
shell> perror 28
Error code  28:  No space left on device
          If you get Commands out of sync; you can't run this
          command now in your client code, you are calling
          client functions in the wrong order.
        
          This can happen, for example, if you are using
          mysql_use_result() and try to execute a new
          query before you have called
          mysql_free_result(). It can also happen if
          you try to execute two queries that return data without
          calling mysql_use_result() or
          mysql_store_result() in between.
        
          If you get the following error, it means that when
          mysqld was started or when it reloaded the
          grant tables, it found an account in the
          user table that had an invalid password.
        
          Found wrong password for user
          '
        some_user'@'some_host';
          ignoring user
As a result, the account is simply ignored by the permission system.
The following list indicates possible causes of and fixes for this problem:
              You may be running a new version of
              mysqld with an old
              user table. You can check this by
              executing mysqlshow mysql user to see
              whether the Password column is shorter
              than 16 characters. If so, you can correct this condition
              by running the
              scripts/add_long_password script.
            
              The account has an old password (eight characters long)
              and you didn't start mysqld with the
              --old-protocol option. Update the account
              in the user table to have a new
              password or restart mysqld with the
              --old-protocol option.
            
              
              You have specified a password in the
              user table without using the
              PASSWORD() function. Use
              mysql to update the account in the
              user table with a new password, making
              sure to use the PASSWORD() function:
            
mysql>UPDATE user SET Password=PASSWORD('->newpwd')WHERE User='some_user' AND Host='some_host';
If you get either of the following errors, it usually means that no table exists in the default database with the given name:
Table 'tbl_name' doesn't exist Can't find file: 'tbl_name' (errno: 2)
In some cases, it may be that the table does exist but that you are referring to it incorrectly:
Because MySQL uses directories and files to store databases and tables, database and table names are case sensitive if they are located on a filesystem that has case-sensitive filenames.
Even for filesystems that are not case sensitive, such as on Windows, all references to a given table within a query must use the same lettercase.
          You can check which tables are in the default database with
          SHOW TABLES. See Section聽13.5.4, 鈥SHOW Syntax鈥.
        
You might see an error like this if you have character set problems:
MySQL Connection Failed: Can't initialize character set charset_name
This error can have any of the following causes:
              The character set is a multi-byte character set and you
              have no support for the character set in the client. In
              this case, you need to recompile the client by running
              configure with the
              --with-charset=
              or
              charset_name--with-extra-charsets=
              option. See Section聽2.9.2, 鈥淭ypical configure Options鈥.
            charset_name
              All standard MySQL binaries are compiled with
              --with-extra-character-sets=complex,
              which enables support for all multi-byte character sets.
              See Section聽5.10.1, 鈥淭he Character Set Used for Data and Sorting鈥.
            
The character set is a simple character set that is not compiled into mysqld, and the character set definition files are not in the place where the client expects to find them.
In this case, you need to use one of the following methods to solve the problem:
Recompile the client with support for the character set. See Section聽2.9.2, 鈥淭ypical configure Options鈥.
                  Specify to the client the directory where the
                  character set definition files are located. For many
                  clients, you can do this with the
                  --character-sets-dir option.
                
Copy the character definition files to the path where the client expects them to be.
          If you get ERROR '...' not found (errno:
          23), Can't open file: ... (errno:
          24), or any other error with errno
          23 or errno 24 from MySQL, it
          means that you haven't allocated enough file descriptors for
          the MySQL server. You can use the perror
          utility to get a description of what the error number means:
        
shell>perror 23Error code 23: File table overflow shell>perror 24Error code 24: Too many open files shell>perror 11Error code 11: Resource temporarily unavailable
The problem here is that mysqld is trying to keep open too many files simultaneously. You can either tell mysqld not to open so many files at once or increase the number of file descriptors available to mysqld.
          To tell mysqld to keep open fewer files at
          a time, you can make the table cache smaller by reducing the
          value of the table_open_cache system
          variable (the default value is 64). Reducing the value of
          max_connections also reduces the number of
          open files (the default value is 100).
        
          To change the number of file descriptors available to
          mysqld, you can use the
          --open-files-limit option to
          mysqld_safe or (as of MySQL 3.23.30) set
          the open_files_limit system variable. See
          Section聽5.2.3, 鈥淪ystem Variables鈥. The easiest way to
          set these values is to add an option to your option file. See
          Section聽4.3.2, 鈥淯sing Option Files鈥. If you have an old version of
          mysqld that doesn't support setting the
          open files limit, you can edit the
          mysqld_safe script. There is a
          commented-out line ulimit -n 256 in the
          script. You can remove the 鈥#鈥
          character to uncomment this line, and change the number
          256 to set the number of file descriptors
          to be made available to mysqld.
        
          --open-files-limit and
          ulimit can increase the number of file
          descriptors, but only up to the limit imposed by the operating
          system. There is also a 鈥hard鈥 limit that can be
          overridden only if you start mysqld_safe or
          mysqld as root (just
          remember that you also need to start the server with the
          --user option in this case so that it does
          not continue to run as root after it starts
          up). If you need to increase the operating system limit on the
          number of file descriptors available to each process, consult
          the documentation for your system.
        
Note: If you run the tcsh shell, ulimit does not work! tcsh also reports incorrect values when you ask for the current limits. In this case, you should start mysqld_safe using sh.
          When you are linking an application program to use the MySQL
          client library, you might get undefined reference errors for
          symbols that start with mysql_, such as
          those shown here:
        
/tmp/ccFKsdPa.o: In function `main': /tmp/ccFKsdPa.o(.text+0xb): undefined reference to `mysql_init' /tmp/ccFKsdPa.o(.text+0x31): undefined reference to `mysql_real_connect' /tmp/ccFKsdPa.o(.text+0x57): undefined reference to `mysql_real_connect' /tmp/ccFKsdPa.o(.text+0x69): undefined reference to `mysql_error' /tmp/ccFKsdPa.o(.text+0x9a): undefined reference to `mysql_close'
          You should be able to solve this problem by adding
          -Ldir_path -lmysqlclient at the end of your
          link command, where dir_path represents the
          pathname of the directory where the client library is located.
          To determine the correct directory, try this command:
        
shell> mysql_config --libs
The output from mysql_config might indicate other libraries that should be specified on the link command as well.
          If you get undefined reference errors for
          the uncompress or
          compress function, add
          -lz to the end of your link command and try
          again.
        
          If you get undefined reference errors for a
          function that should exist on your system, such as
          connect, check the manual page for the
          function in question to determine which libraries you should
          add to the link command.
        
          You might get undefined reference errors
          such as the following for functions that don't exist on your
          system:
        
mf_format.o(.text+0x201): undefined reference to `__lxstat'
This usually means that your MySQL client library was compiled on a system that is not 100% compatible with yours. In this case, you should download the latest MySQL source distribution and compile MySQL yourself. See Section聽2.9, 鈥淢ySQL Installation Using a Source Distribution鈥.
          You might get undefined reference errors at runtime when you
          try to execute a MySQL program. If these errors specify
          symbols that start with mysql_ or indicate
          that the mysqlclient library can't be
          found, it means that your system can't find the shared
          libmysqlclient.so library. The fix for
          this is to tell your system to search for shared libraries
          where the library is located. Use whichever of the following
          methods is appropriate for your system:
        
              Add the path to the directory where
              libmysqlclient.so is located to the
              LD_LIBRARY_PATH environment variable.
            
              Add the path to the directory where
              libmysqlclient.so is located to the
              LD_LIBRARY environment variable.
            
              Copy libmysqlclient.so to some
              directory that is searched by your system, such as
              /lib, and update the shared library
              information by executing ldconfig.
            
          Another way to solve this problem is by linking your program
          statically with the -static option, or by
          removing the dynamic MySQL libraries before linking your code.
          Before trying the second method, you should be sure that no
          other programs are using the dynamic libraries.
        
          If you have problems with file permissions, the
          UMASK environment variable might be set
          incorrectly when mysqld starts. For
          example, MySQL might issue the following error message when
          you create a table:
        
ERROR: Can't find file: 'path/with/filename.frm' (Errcode: 13)
          The default UMASK value is
          0660. You can change this behavior by
          starting mysqld_safe as follows:
        
shell>UMASK=384 # = 600 in octalshell>export UMASKshell>mysqld_safe &
          By default, MySQL creates database directories with an access
          permission value of 0700. You can modify
          this behavior by setting the UMASK_DIR
          variable. If you set its value, new directories are created
          with the combined UMASK and
          UMASK_DIR values. For example, if you want
          to give group access to all new directories, you can do this:
        
shell>UMASK_DIR=504 # = 770 in octalshell>export UMASK_DIRshell>mysqld_safe &
          In MySQL 3.23.25 and above, MySQL assumes that the value for
          UMASK and UMASK_DIR is
          in octal if it starts with a zero.
        
          If you have never set a root password for
          MySQL, the server does not require a password at all for
          connecting as root. However, it is
          recommended to set a password for each account. See
          Section聽5.6.1, 鈥淕eneral Security Guidelines鈥.
        
          If you set a root password previously, but
          have forgotten what it was, you can set a new password. The
          following procedure is for Windows systems. The procedure for
          Unix systems is given later in this section.
        
The procedure under Windows:
Log on to your system as Administrator.
Stop the MySQL server if it is running. For a server that is running as a Windows service, go to the Services manager:
Start Menu -> Control Panel -> Administrative Tools -> Services
Then find the MySQL service in the list, and stop it.
If your server is not running as a service, you may need to use the Task Manager to force it to stop.
Create a text file and place the following command within it on a single line:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPassword');
              Save the file with any name. For this example the file
              will be C:\mysql-init.txt.
            
Open a console window to get to the DOS command prompt:
Start Menu -> Run -> cmd
              We are assuming that you installed MySQL to
              C:\mysql. If you installed MySQL to
              another location, adjust the following commands
              accordingly.
            
At the DOS command prompt, execute this command:
C:\> C:\mysql\bin\mysqld-nt --init-file=C:\mysql-init.txt
              The contents of the file named by the
              --init-file option are executed at server
              startup, changing the root password.
              After the server has started successfully, you should
              delete C:\mysql-init.txt.
            
              If you install MySQL using the MySQL Installation Wizard,
              you may need to specify a --defaults-file
              option:
            
C:\>"C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld-nt.exe"--defaults-file="C:\Program Files\MySQL\MySQL Server 5.1\my.ini"--init-file=C:\mysql-init.txt
              The appropriate --defaults-file setting
              can be found using the Services Manager:
            
Start Menu -> Control Panel -> Administrative Tools -> Services
              Find the MySQL service in the list, right-click on it, and
              choose the Properties option. The
              Path to executable field contains the
              --defaults-file setting.
            
Stop the MySQL server, then restart it in normal mode again. If you run the server as a service, start it from the Windows Services window. If you start the server manually, use whatever command you normally use.
You should be able to connect using the new password.
          In a Unix environment, the procedure for resetting the
          root password is as follows:
        
              Log on to your system as either the Unix
              root user or as the same user that the
              mysqld server runs as.
            
              Locate the .pid file that contains
              the server's process ID. The exact location and name of
              this file depend on your distribution, hostname, and
              configuration. Common locations are
              /var/lib/mysql/,
              /var/run/mysqld/, and
              /usr/local/mysql/data/. Generally,
              the filename has the extension of
              .pid and begins with either
              mysqld or your system's hostname.
            
              You can stop the MySQL server by sending a normal
              kill (not kill -9)
              to the mysqld process, using the
              pathname of the .pid file in the
              following command:
            
shell> kill `cat /mysql-data-directory/host_name.pid`
              Note the use of backticks rather than forward quotes with
              the cat command; these cause the output
              of cat to be substituted into the
              kill command.
            
Create a text file and place the following command within it on a single line:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPassword');
              Save the file with any name. For this example the file
              will be ~/mysql-init.
            
              Restart the MySQL server with the special
              --init-file=~/mysql-init option:
            
shell> mysqld_safe --init-file=~/mysql-init &
              The contents of the init-file are executed at server
              startup, changing the root password. After the server has
              started successfully you should delete
              ~/mysql-init.
            
You should be able to connect using the new password.
Alternatively, on any platform, you can set the new password using the mysql client(but this approach is less secure):
              Stop mysqld and restart it with the
              --skip-grant-tables --user=root options
              (Windows users omit the --user=root
              portion).
            
Connect to the mysqld server with this command:
shell> mysql -u root
Issue the following statements in the mysql client:
mysql>UPDATE mysql.user SET Password=PASSWORD('->newpwd')WHERE User='root';mysql>FLUSH PRIVILEGES;
              Replace 鈥newpwd鈥
              with the actual root password that you
              want to use.
            
You should be able to connect using the new password.
Each MySQL version is tested on many platforms before it is released. This doesn't mean that there are no bugs in MySQL, but if there are bugs, they should be very few and can be hard to find. If you have a problem, it always helps if you try to find out exactly what crashes your system, because you have a much better chance of getting the problem fixed quickly.
First, you should try to find out whether the problem is that the mysqld server dies or whether your problem has to do with your client. You can check how long your mysqld server has been up by executing mysqladmin version. If mysqld has died and restarted, you may find the reason by looking in the server's error log. See Section聽5.11.2, 鈥淭he Error Log鈥.
          On some systems, you can find in the error log a stack trace
          of where mysqld died that you can resolve
          with the resolve_stack_dump program. See
          MySQL
          Internals: Porting. Note that the variable values
          written in the error log may not always be 100% correct.
        
          Many server crashes are caused by corrupted data files or
          index files. MySQL updates the files on disk with the
          write() system call after every SQL
          statement and before the client is notified about the result.
          (This is not true if you are running with
          --delay-key-write, in which case data files
          are written but not index files.) This means that data file
          contents are safe even if mysqld crashes,
          because the operating system ensures that the unflushed data
          is written to disk. You can force MySQL to flush everything to
          disk after every SQL statement by starting
          mysqld with the --flush
          option.
        
The preceding means that normally you should not get corrupted tables unless one of the following happens:
The MySQL server or the server host was killed in the middle of an update.
You have found a bug in mysqld that caused it to die in the middle of an update.
Some external program is manipulating data files or index files at the same time as mysqld without locking the table properly.
              You are running many mysqld servers
              using the same data directory on a system that doesn't
              support good filesystem locks (normally handled by the
              lockd lock manager), or you are running
              multiple servers with external locking disabled.
            
You have a crashed data file or index file that contains very corrupt data that confused mysqld.
              You have found a bug in the data storage code. This isn't
              likely, but it's at least possible. In this case, you can
              try to change the storage engine to another engine by
              using ALTER TABLE on a repaired copy of
              the table.
            
Because it is very difficult to know why something is crashing, first try to check whether things that work for others crash for you. Please try the following things:
              Stop the mysqld server with
              mysqladmin shutdown, run
              myisamchk --silent --force */*.MYI from
              the data directory to check all MyISAM
              tables, and restart mysqld. This
              ensures that you are running from a clean state. See
              Chapter聽5, Database Administration.
            
              Start mysqld with the
              --log option and try to determine from
              the information written to the log whether some specific
              query kills the server. About 95% of all bugs are related
              to a particular query. Normally, this is one of the last
              queries in the log file just before the server restarts.
              See Section聽5.11.3, 鈥淭he General Query Log鈥. If you can repeatedly
              kill MySQL with a specific query, even when you have
              checked all tables just before issuing it, then you have
              been able to locate the bug and should submit a bug report
              for it. See Section聽1.8, 鈥淗ow to Report Bugs or Problems鈥.
            
Try to make a test case that we can use to repeat the problem. See MySQL Internals: Porting.
              Try running the tests in the
              mysql-test directory and the MySQL
              benchmarks. See Section聽26.1.2, 鈥淢ySQL Test Suite鈥. They
              should test MySQL rather well. You can also add code to
              the benchmarks that simulates your application. The
              benchmarks can be found in the
              sql-bench directory in a source
              distribution or, for a binary distribution, in the
              sql-bench directory under your MySQL
              installation directory.
            
              Try the fork_big.pl script. (It is
              located in the tests directory of
              source distributions.)
            
              If you configure MySQL for debugging, it is much easier to
              gather information about possible errors if something goes
              wrong. Configuring MySQL for debugging causes a safe
              memory allocator to be included that can find some errors.
              It also provides a lot of output about what is happening.
              Reconfigure MySQL with the --with-debug
              or --with-debug=full option to
              configure and then recompile. See
              MySQL
              Internals: Porting.
            
Make sure that you have applied the latest patches for your operating system.
              Use the --skip-external-locking option to
              mysqld. On some systems, the
              lockd lock manager does not work
              properly; the --skip-external-locking
              option tells mysqld not to use external
              locking. (This means that you cannot run two
              mysqld servers on the same data
              directory and that you must be careful if you use
              myisamchk. Nevertheless, it may be
              instructive to try the option as a test.)
            
Have you tried mysqladmin -u root processlist when mysqld appears to be running but not responding? Sometimes mysqld is not comatose even though you might think so. The problem may be that all connections are in use, or there may be some internal lock problem. mysqladmin -u root processlist usually is able to make a connection even in these cases, and can provide useful information about the current number of connections and their status.
Run the command mysqladmin -i 5 status or mysqladmin -i 5 -r status in a separate window to produce statistics while you run your other queries.
Try the following:
Start mysqld from gdb (or another debugger). See MySQL Internals: Porting.
Run your test scripts.
Print the backtrace and the local variables at the three lowest levels. In gdb, you can do this with the following commands when mysqld has crashed inside gdb:
backtrace info local up info local up info local
                  With gdb, you can also examine
                  which threads exist with info
                  threads and switch to a specific thread with
                  thread
                  , where
                  NN is the thread ID.
                
Try to simulate your application with a Perl script to force MySQL to crash or misbehave.
Send a normal bug report. See Section聽1.8, 鈥淗ow to Report Bugs or Problems鈥. Be even more detailed than usual. Because MySQL works for many people, it may be that the crash results from something that exists only on your computer (for example, an error that is related to your particular system libraries).
              If you have a problem with tables containing
              dynamic-length rows and you are using only
              VARCHAR columns (not
              BLOB or TEXT
              columns), you can try to change all
              VARCHAR to CHAR with
              ALTER TABLE. This forces MySQL to use
              fixed-size rows. Fixed-size rows take a little extra
              space, but are much more tolerant to corruption.
            
The current dynamic row code has been in use at MySQL AB for several years with very few problems, but dynamic-length rows are by nature more prone to errors, so it may be a good idea to try this strategy to see whether it helps.
Do not rule out your server hardware when diagnosing problems. Defective hardware can be the cause of data corruption. Particular attention should be paid to both RAMS and hard-drives when troubleshooting hardware.
This section describes how MySQL responds to disk-full errors (such as 鈥no space left on device鈥), and to quota-exceeded errors (such as 鈥write failed鈥 or 鈥user block limit reached鈥).
          This section is relevant for writes to
          MyISAM tables. It also applies for writes
          to binary log files and binary log index file, except that
          references to 鈥row鈥 and 鈥record鈥
          should be understood to mean 鈥event.鈥
        
When a disk-full condition occurs, MySQL does the following:
It checks once every minute to see whether there is enough space to write the current row. If there is enough space, it continues as if nothing had happened.
Every 10 minutes it writes an entry to the log file, warning about the disk-full condition.
To alleviate the problem, you can take the following actions:
To continue, you only have to free enough disk space to insert all records.
To abort the thread, you must use mysqladmin kill. The thread is aborted the next time it checks the disk (in one minute).
Other threads might be waiting for the table that caused the disk-full condition. If you have several 鈥locked鈥 threads, killing the one thread that is waiting on the disk-full condition allows the other threads to continue.
          Exceptions to the preceding behavior are when you use
          REPAIR TABLE or OPTIMIZE
          TABLE or when the indexes are created in a batch
          after LOAD DATA INFILE or after an
          ALTER TABLE statement. All of these
          statements may create large temporary files that, if left to
          themselves, would cause big problems for the rest of the
          system. If the disk becomes full while MySQL is doing any of
          these operations, it removes the big temporary files and mark
          the table as crashed. The exception is that for ALTER
          TABLE, the old table is left unchanged.
        
          MySQL uses the value of the TMPDIR
          environment variable as the pathname of the directory in which
          to store temporary files. If you don't have
          TMPDIR set, MySQL uses the system default,
          which is normally /tmp,
          /var/tmp, or
          /usr/tmp. If the filesystem containing
          your temporary file directory is too small, you can use the
          --tmpdir option to mysqld
          to specify a directory in a filesystem where you have enough
          space.
        
          In MySQL 5.1, the --tmpdir
          option can be set to a list of several paths that are used in
          round-robin fashion. Paths should be separated by colon
          characters (鈥:鈥) on Unix and
          semicolon characters (鈥;鈥) on
          Windows, NetWare, and OS/2.
          Note: To spread the load
          effectively, these paths should be located on different
          physical disks, not different partitions
          of the same disk.
        
          If the MySQL server is acting as a replication slave, you
          should not set --tmpdir to point to a
          directory on a memory-based filesystem or to a directory that
          is cleared when the server host restarts. A replication slave
          needs some of its temporary files to survive a machine restart
          so that it can replicate temporary tables or LOAD
          DATA INFILE operations. If files in the temporary
          file directory are lost when the server restarts, replication
          fails.
        
MySQL creates all temporary files as hidden files. This ensures that the temporary files are removed if mysqld is terminated. The disadvantage of using hidden files is that you do not see a big temporary file that fills up the filesystem in which the temporary file directory is located.
MySQL Enterprise Advisors provided by the MySQL Network Monitoring and Advisory Service automatically detect excessive temporary table storage to disk. For more information see, http://www.mysql.com/products/enterprise/advisors.html.
          When sorting (ORDER BY or GROUP
          BY), MySQL normally uses one or two temporary files.
          The maximum disk space required is determined by the following
          expression:
        
(length of what is sorted + sizeof(row pointer)) * number of matched rows * 2
The row pointer size is usually four bytes, but may grow in the future for really big tables.
          For some SELECT queries, MySQL also creates
          temporary SQL tables. These are not hidden and have names of
          the form SQL_*.
        
          ALTER TABLE creates a temporary table in
          the same directory as the original table.
        
          The default location for the Unix socket file that the server
          uses for communication with local clients is
          /tmp/mysql.sock. (For some distribution
          formats, the directory might be different, such as
          /var/lib/mysql for RPMs.)
        
          On some versions of Unix, anyone can delete files in the
          /tmp directory or other similar
          directories used for temporary files. If the socket file is
          located in such a directory on your system, this might cause
          problems.
        
          On most versions of Unix, you can protect your
          /tmp directory so that files can be
          deleted only by their owners or the superuser
          (root). To do this, set the
          sticky bit on the /tmp
          directory by logging in as root and using
          the following command:
        
shell> chmod +t /tmp
          You can check whether the sticky bit is set
          by executing ls -ld /tmp. If the last
          permission character is t, the bit is set.
        
Another approach is to change the place where the server creates the Unix socket file. If you do this, you should also let client programs know the new location of the file. You can specify the file location in several ways:
              Specify the path in a global or local option file. For
              example, put the following lines in
              /etc/my.cnf:
            
[mysqld] socket=/path/to/socket [client] socket=/path/to/socket
              Specify a --socket option on the command
              line to mysqld_safe and when you run
              client programs.
            
              Set the MYSQL_UNIX_PORT environment
              variable to the path of the Unix socket file.
            
              Recompile MySQL from source to use a different default
              Unix socket file location. Define the path to the file
              with the --with-unix-socket-path option
              when you run configure. See
              Section聽2.9.2, 鈥淭ypical configure Options鈥.
            
You can test whether the new socket location works by attempting to connect to the server with this command:
shell> mysqladmin --socket=/path/to/socket version
          If you have a problem with SELECT NOW()
          returning values in UTC and not your local time, you have to
          tell the server your current time zone. The same applies if
          UNIX_TIMESTAMP() returns the wrong value.
          This should be done for the environment in which the server
          runs; for example, in mysqld_safe or
          mysql.server. See
          Section聽2.14, 鈥淓nvironment Variables鈥.
        
          You can set the time zone for the server with the
          --timezone=
          option to mysqld_safe. You can also set it
          by setting the timezone_nameTZ environment variable
          before you start mysqld.
        
          The allowable values for --timezone or
          TZ are system-dependent. Consult your
          operating system documentation to see what values are
          acceptable.
        
DATE ColumnsNULL Values
          By default, MySQL searches are not case sensitive (although
          there are some character sets that are never case insensitive,
          such as czech). This means that if you
          search with col_name LIKE
          'a%'A or a. If you want to
          make this search case sensitive, make sure that one of the
          operands has a case sensitive or binary collation. For
          example, if you are comparing a column and a string that both
          have the latin1 character set, you can use
          the COLLATE operator to cause either
          operand to have the latin1_general_cs or
          latin1_bin collation. For example:
        
col_nameCOLLATE latin1_general_cs LIKE 'a%'col_nameLIKE 'a%' COLLATE latin1_general_cscol_nameCOLLATE latin1_bin LIKE 'a%'col_nameLIKE 'a%' COLLATE latin1_bin
          If you want a column always to be treated in case-sensitive
          fashion, declare it with a case sensitive or binary collation.
          See Section聽13.1.8, 鈥CREATE TABLE Syntax鈥.
        
          Simple comparison operations (>=, >, =, <,
          <=, sorting, and grouping) are based on each
          character's 鈥sort value.鈥 Characters with the
          same sort value (such as 鈥E鈥,
          鈥e鈥, and
          鈥脙聝脗漏鈥) are treated as the
          same character.
        
          The format of a DATE value is
          'YYYY-MM-DD'. According to standard SQL, no
          other format is allowed. You should use this format in
          UPDATE expressions and in the
          WHERE clause of SELECT
          statements. For example:
        
mysql> SELECT * FROM tbl_name WHERE date >= '2003-05-05';
          As a convenience, MySQL automatically converts a date to a
          number if the date is used in a numeric context (and vice
          versa). It is also smart enough to allow a
          鈥relaxed鈥 string form when updating and in a
          WHERE clause that compares a date to a
          TIMESTAMP, DATE, or
          DATETIME column. (鈥Relaxed
          form鈥 means that any punctuation character may be used
          as the separator between parts. For example,
          '2004-08-15' and
          '2004#08#15' are equivalent.) MySQL can
          also convert a string containing no separators (such as
          '20040815'), provided it makes sense as a
          date.
        
          When you compare a DATE,
          TIME, DATETIME, or
          TIMESTAMP to a constant string with the
          <, <=,
          =, >=,
          >, or BETWEEN
          operators, MySQL normally converts the string to an internal
          long integer for faster comparison (and also for a bit more
          鈥relaxed鈥 string checking). However, this
          conversion is subject to the following exceptions:
        
When you compare two columns
              When you compare a DATE,
              TIME, DATETIME, or
              TIMESTAMP column to an expression
            
              When you use any other comparison method than those just
              listed, such as IN or
              STRCMP().
            
For these exceptional cases, the comparison is done by converting the objects to strings and performing a string comparison.
To keep things safe, assume that strings are compared as strings and use the appropriate string functions if you want to compare a temporal value to a string.
          The special date '0000-00-00' can be stored
          and retrieved as '0000-00-00'. When using a
          '0000-00-00' date through MyODBC, it is
          automatically converted to NULL in MyODBC
          2.50.12 and above, because ODBC can't handle this kind of
          date.
        
Because MySQL performs the conversions described above, the following statements work:
mysql>INSERT INTOmysql>tbl_name(idate) VALUES (19970505);INSERT INTOmysql>tbl_name(idate) VALUES ('19970505');INSERT INTOmysql>tbl_name(idate) VALUES ('97-05-05');INSERT INTOmysql>tbl_name(idate) VALUES ('1997.05.05');INSERT INTOmysql>tbl_name(idate) VALUES ('1997 05 05');INSERT INTOmysql>tbl_name(idate) VALUES ('0000-00-00');SELECT idate FROMmysql>tbl_nameWHERE idate >= '1997-05-05';SELECT idate FROMmysql>tbl_nameWHERE idate >= 19970505;SELECT MOD(idate,100) FROMmysql>tbl_nameWHERE idate >= 19970505;SELECT idate FROMtbl_nameWHERE idate >= '19970505';
However, the following does not work:
mysql> SELECT idate FROM tbl_name WHERE STRCMP(idate,'20030505')=0;
          STRCMP() is a string function, so it
          converts idate to a string in
          'YYYY-MM-DD' format and performs a string
          comparison. It does not convert '20030505'
          to the date '2003-05-05' and perform a date
          comparison.
        
          If you are using the ALLOW_INVALID_DATES
          SQL mode, MySQL allows you to store dates that are given only
          limited checking: MySQL requires only that the day is in the
          range from 1 to 31 and the month is in the range from 1 to 12.
        
This makes MySQL very convenient for Web applications where you obtain year, month, and day in three different fields and you want to store exactly what the user inserted (without date validation).
          If you are not using the NO_ZERO_IN_DATE
          SQL mode, the day or month part can be zero. This is
          convenient if you want to store a birthdate in a
          DATE column and you know only part of the
          date.
        
          If you are not using the NO_ZERO_DATE SQL
          mode, MySQL also allows you to store
          '0000-00-00' as a 鈥dummy
          date.鈥 This is in some cases more convenient than using
          NULL values.
        
          If the date cannot be converted to any reasonable value, a
          0 is stored in the DATE
          column, which is retrieved as '0000-00-00'.
          This is both a speed and a convenience issue. We believe that
          the database server's responsibility is to retrieve the same
          date you stored (even if the data was not logically correct in
          all cases). We think it is up to the application and not the
          server to check the dates.
        
          If you want MySQL to check all dates and accept only legal
          dates (unless overridden by IGNORE), you should set
          sql_mode to
          "NO_ZERO_IN_DATE,NO_ZERO_DATE".
        
          The concept of the NULL value is a common
          source of confusion for newcomers to SQL, who often think that
          NULL is the same thing as an empty string
          ''. This is not the case. For example, the
          following statements are completely different:
        
mysql>INSERT INTO my_table (phone) VALUES (NULL);mysql>INSERT INTO my_table (phone) VALUES ('');
          Both statements insert a value into the
          phone column, but the first inserts a
          NULL value and the second inserts an empty
          string. The meaning of the first can be regarded as
          鈥phone number is not known鈥 and the meaning of
          the second can be regarded as 鈥the person is known to
          have no phone, and thus no phone number.鈥
        
          To help with NULL handling, you can use the
          IS NULL and IS NOT NULL
          operators and the IFNULL() function.
        
          In SQL, the NULL value is never true in
          comparison to any other value, even NULL.
          An expression that contains NULL always
          produces a NULL value unless otherwise
          indicated in the documentation for the operators and functions
          involved in the expression. All columns in the following
          example return NULL:
        
mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);
          If you want to search for column values that are
          NULL, you cannot use an expr =
          NULL test. The following statement returns no rows,
          because expr = NULL is never true for any
          expression:
        
mysql> SELECT * FROM my_table WHERE phone = NULL;
          To look for NULL values, you must use the
          IS NULL test. The following statements show
          how to find the NULL phone number and the
          empty phone number:
        
mysql>SELECT * FROM my_table WHERE phone IS NULL;mysql>SELECT * FROM my_table WHERE phone = '';
          See Section聽3.3.4.6, 鈥淲orking with NULL Values鈥, for additional
          information and examples.
        
          You can add an index on a column that can have
          NULL values if you are using the
          MyISAM, InnoDB, or
          MEMORY storage engine. Otherwise, you must
          declare an indexed column NOT NULL, and you
          cannot insert NULL into the column.
        
          When reading data with LOAD DATA INFILE,
          empty or missing columns are updated with
          ''. If you want a NULL
          value in a column, you should use \N in the
          data file. The literal word
          鈥NULL鈥 may also be used under
          some circumstances. See Section聽13.2.5, 鈥LOAD DATA INFILE Syntax鈥.
        
          When using DISTINCT, GROUP
          BY, or ORDER BY, all
          NULL values are regarded as equal.
        
          When using ORDER BY,
          NULL values are presented first, or last if
          you specify DESC to sort in descending
          order.
        
          Aggregate (summary) functions such as
          COUNT(), MIN(), and
          SUM() ignore NULL
          values. The exception to this is COUNT(*),
          which counts rows and not individual column values. For
          example, the following statement produces two counts. The
          first is a count of the number of rows in the table, and the
          second is a count of the number of non-NULL
          values in the age column:
        
mysql> SELECT COUNT(*), COUNT(age) FROM person;
          For some data types, MySQL handles NULL
          values specially. If you insert NULL into a
          TIMESTAMP column, the current date and time
          is inserted. If you insert NULL into an
          integer column that has the AUTO_INCREMENT
          attribute, the next number in the sequence is inserted.
        
          You can use an alias to refer to a column in GROUP
          BY, ORDER BY, or
          HAVING clauses. Aliases can also be used to
          give columns better names:
        
SELECT SQRT(a*b) AS root FROMtbl_nameGROUP BY root HAVING root > 0; SELECT id, COUNT(*) AS cnt FROMtbl_nameGROUP BY id HAVING cnt > 0; SELECT id AS 'Customer identity' FROMtbl_name;
          Standard SQL doesn't allow you to refer to a column alias in a
          WHERE clause. This restriction is imposed
          because when the WHERE code is executed,
          the column value may not yet be determined. For example, the
          following query is illegal:
        
SELECT id, COUNT(*) AS cnt FROM tbl_name WHERE cnt > 0 GROUP BY id;
          The WHERE statement is executed to
          determine which rows should be included in the GROUP
          BY part, whereas HAVING is used
          to decide which rows from the result set should be used.
        
          If you receive the following message when trying to perform a
          ROLLBACK, it means that one or more of the
          tables you used in the transaction do not support
          transactions:
        
Warning: Some non-transactional changed tables couldn't be rolled back
          These non-transactional tables are not affected by the
          ROLLBACK statement.
        
          If you were not deliberately mixing transactional and
          non-transactional tables within the transaction, the most
          likely cause for this message is that a table you thought was
          transactional actually is not. This can happen if you try to
          create a table using a transactional storage engine that is
          not supported by your mysqld server (or
          that was disabled with a startup option). If
          mysqld doesn't support a storage engine, it
          instead creates the table as a MyISAM
          table, which is non-transactional.
        
You can check the storage engine for a table by using either of these statements:
SHOW TABLE STATUS LIKE 'tbl_name'; SHOW CREATE TABLEtbl_name;
          See Section聽13.5.4.27, 鈥SHOW TABLE STATUS Syntax鈥, and
          Section聽13.5.4.9, 鈥SHOW CREATE TABLE Syntax鈥.
        
You can check which storage engines your mysqld server supports by using this statement:
SHOW ENGINES;
You can also use the following statement, and check the value of the variable that is associated with the storage engine in which you are interested:
SHOW VARIABLES LIKE 'have_%';
          For example, to determine whether the
          InnoDB storage engine is available, check
          the value of the have_innodb variable.
        
          See Section聽13.5.4.13, 鈥SHOW ENGINES Syntax鈥, and
          Section聽13.5.4.30, 鈥SHOW VARIABLES Syntax鈥.
        
          If the total length of the DELETE statement
          for related_table is more than 1MB (the
          default value of the max_allowed_packet
          system variable), you should split it into smaller parts and
          execute multiple DELETE statements. You
          probably get the fastest DELETE by
          specifying only 100 to 1,000 related_column
          values per statement if the related_column
          is indexed. If the related_column isn't
          indexed, the speed is independent of the number of arguments
          in the IN clause.
        
If you have a complicated query that uses many tables but that doesn't return any rows, you should use the following procedure to find out what is wrong:
              Test the query with EXPLAIN to check
              whether you can find something that is obviously wrong.
              See Section聽7.2.1, 鈥淥ptimizing Queries with EXPLAIN鈥.
            
              Select only those columns that are used in the
              WHERE clause.
            
              Remove one table at a time from the query until it returns
              some rows. If the tables are large, it's a good idea to
              use LIMIT 10 with the query.
            
              Issue a SELECT for the column that
              should have matched a row against the table that was last
              removed from the query.
            
              If you are comparing FLOAT or
              DOUBLE columns with numbers that have
              decimals, you can't use equality (=)
              comparisons. This problem is common in most computer
              languages because not all floating-point values can be
              stored with exact precision. In some cases, changing the
              FLOAT to a DOUBLE
              fixes this. See Section聽B.1.5.8, 鈥淧roblems with Floating-Point Comparisons鈥.
            
              If you still can't figure out what's wrong, create a
              minimal test that can be run with mysql test <
              query.sql that shows your problems. You can
              create a test file by dumping the tables with
              mysqldump --quick db_name
              tbl_name_1 ...
              tbl_name_n >
              query.sql. Open the file in an editor, remove
              some insert lines (if there are more than needed to
              demonstrate the problem), and add your
              SELECT statement at the end of the
              file.
            
Verify that the test file demonstrates the problem by executing these commands:
shell>mysqladmin create test2shell>mysql test2 < query.sql
Attach the test file to a bug report, which you can file using the instructions in Section聽1.8, 鈥淗ow to Report Bugs or Problems鈥.
          Floating-point numbers sometimes cause confusion because they
          are approximate. That is, they are not stored as exact values
          inside computer architecture. What you can see on the screen
          usually is not the exact value of the number. The
          FLOAT and DOUBLE data
          types are such. For DECIMAL columns, MySQL
          performs operations with a precision of 64 decimal digits,
          which should solve most common inaccuracy problems.
        
          The following example demonstrates the problem using
          DOUBLE. It shows that are calculations that
          are done using floating-point operations are subject to
          floating-point error.
        
mysql>CREATE TABLE t1 (i INT, d1 DOUBLE, d2 DOUBLE);mysql>INSERT INTO t1 VALUES (1, 101.40, 21.40), (1, -80.00, 0.00),->(2, 0.00, 0.00), (2, -13.20, 0.00), (2, 59.60, 46.40),->(2, 30.40, 30.40), (3, 37.00, 7.40), (3, -29.60, 0.00),->(4, 60.00, 15.40), (4, -10.60, 0.00), (4, -34.00, 0.00),->(5, 33.00, 0.00), (5, -25.80, 0.00), (5, 0.00, 7.20),->(6, 0.00, 0.00), (6, -51.40, 0.00);mysql>SELECT i, SUM(d1) AS a, SUM(d2) AS b->FROM t1 GROUP BY i HAVING a <> b;+------+-------+------+ | i | a | b | +------+-------+------+ | 1 | 21.4 | 21.4 | | 2 | 76.8 | 76.8 | | 3 | 7.4 | 7.4 | | 4 | 15.4 | 15.4 | | 5 | 7.2 | 7.2 | | 6 | -51.4 | 0 | +------+-------+------+
          The result is correct. Although the first five records look
          like they should not satisfy the comparison (the values of
          a and b do not appear to
          be different), they may do so because the difference between
          the numbers shows up around the tenth decimal or so, depending
          on factors such as computer architecture or the compiler
          version or optimization level. For example, different CPUs may
          evaluate floating-point numbers differently.
        
          If columns d1 and d2 had
          been defined as DECIMAL rather than
          DOUBLE, the result of the
          SELECT query would have contained only one
          row 鈥 the last one shown above.
        
The correct way to do floating-point number comparison is to first decide on an acceptable tolerance for differences between the numbers and then do the comparison against the tolerance value. For example, if we agree that floating-point numbers should be regarded the same if they are same within a precision of one in ten thousand (0.0001), the comparison should be written to find differences larger than the tolerance value:
mysql>SELECT i, SUM(d1) AS a, SUM(d2) AS b FROM t1->GROUP BY i HAVING ABS(a - b) > 0.0001;+------+-------+------+ | i | a | b | +------+-------+------+ | 6 | -51.4 | 0 | +------+-------+------+ 1 row in set (0.00 sec)
Conversely, to get rows where the numbers are the same, the test should find differences within the tolerance value:
mysql>SELECT i, SUM(d1) AS a, SUM(d2) AS b FROM t1->GROUP BY i HAVING ABS(a - b) <= 0.0001;+------+------+------+ | i | a | b | +------+------+------+ | 1 | 21.4 | 21.4 | | 2 | 76.8 | 76.8 | | 3 | 7.4 | 7.4 | | 4 | 15.4 | 15.4 | | 5 | 7.2 | 7.2 | +------+------+------+ 5 rows in set (0.03 sec)
MySQL uses a cost-based optimizer to determine the best way to resolve a query. In many cases, MySQL can calculate the best possible query plan, but sometimes MySQL doesn't have enough information about the data at hand and has to make 鈥educated鈥 guesses about the data.
For the cases when MySQL does not do the "right" thing, tools that you have available to help MySQL are:
            Use the EXPLAIN statement to get
            information about how MySQL processes a query. To use it,
            just add the keyword EXPLAIN to the front
            of your SELECT statement:
          
mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;
            EXPLAIN is discussed in more detail in
            Section聽7.2.1, 鈥淥ptimizing Queries with EXPLAIN鈥.
          
            Use ANALYZE TABLE
             to update the
            key distributions for the scanned table. See
            Section聽13.5.2.1, 鈥tbl_nameANALYZE TABLE Syntax鈥.
          
            
            Use FORCE INDEX for the scanned table to
            tell MySQL that table scans are very expensive compared to
            using the given index:
          
SELECT * FROM t1, t2 FORCE INDEX (index_for_column) WHERE t1.col_name=t2.col_name;
            USE INDEX and IGNORE
            INDEX may also be useful. See
            Section聽13.2.7.2, 鈥淚ndex Hint Syntax鈥.
          
            Global and table-level STRAIGHT_JOIN. See
            Section聽13.2.7, 鈥SELECT Syntax鈥.
          
            You can tune global or thread-specific system variables. For
            example, Start mysqld with the
            --max-seeks-for-key=1000 option or use
            SET max_seeks_for_key=1000 to tell the
            optimizer to assume that no key scan causes more than 1,000
            key seeks. See Section聽5.2.3, 鈥淪ystem Variables鈥.
          
          ALTER TABLE changes a table to the current
          character set. If you get a duplicate-key error during
          ALTER TABLE, the cause is either that the
          new character sets maps two keys to the same value or that the
          table is corrupted. In the latter case, you should run
          REPAIR TABLE on the table.
        
          If ALTER TABLE dies with the following
          error, the problem may be that MySQL crashed during an earlier
          ALTER TABLE operation and there is an old
          table named
          A- or
          xxxB- lying
          around:
        xxx
Error on rename of './database/name.frm'
to './database/B-xxx.frm' (Errcode: 17)
          In this case, go to the MySQL data directory and delete all
          files that have names starting with A- or
          B-. (You may want to move them elsewhere
          instead of deleting them.)
        
          ALTER TABLE works in the following way:
        
              Create a new table named
              A- with
              the requested structural changes.
            xxx
              Copy all rows from the original table to
              A-.
            xxx
              Rename the original table to
              B-.
            xxx
              Rename
              A- to
              your original table name.
            xxx
              Delete
              B-.
            xxx
          If something goes wrong with the renaming operation, MySQL
          tries to undo the changes. If something goes seriously wrong
          (although this shouldn't happen), MySQL may leave the old
          table as
          B-. A
          simple rename of the table files at the system level should
          get your data back.
        xxx
          If you use ALTER TABLE on a transactional
          table or if you are using Windows or OS/2, ALTER
          TABLE unlocks the table if you had done a
          LOCK TABLE on it. This is done because
          InnoDB and these operating systems cannot
          drop a table that is in use.
        
          First, consider whether you really need to change the column
          order in a table. The whole point of SQL is to abstract the
          application from the data storage format. You should always
          specify the order in which you wish to retrieve your data. The
          first of the following statements returns columns in the order
          col_name1,
          col_name2,
          col_name3, whereas the second
          returns them in the order
          col_name1,
          col_name3,
          col_name2:
        
mysql>SELECTmysql>col_name1,col_name2,col_name3FROMtbl_name;SELECTcol_name1,col_name3,col_name2FROMtbl_name;
If you decide to change the order of table columns anyway, you can do so as follows:
Create a new table with the columns in the new order.
Execute this statement:
mysql>INSERT INTO new_table->SELECT columns-in-new-order FROM old_table;
              Drop or rename old_table.
            
Rename the new table to the original name:
mysql> ALTER TABLE new_table RENAME old_table;
          SELECT * is quite suitable for testing
          queries. However, in an application, you should
          never rely on using SELECT
          * and retrieving the columns based on their
          position. The order and position in which columns are returned
          does not remain the same if you add, move, or delete columns.
          A simple change to your table structure could cause your
          application to fail.
        
          The following list indicates limitations on the use of
          TEMPORARY tables:
        
              A TEMPORARY table can only be of type
              MEMORY, MyISAM,
              MERGE, or InnoDB.
            
Temporary tables are not supported for MySQL Cluster.
              You cannot refer to a TEMPORARY table
              more than once in the same query. For example, the
              following does not work:
            
mysql> SELECT * FROM temp_table, temp_table AS t2;
ERROR 1137: Can't reopen table: 'temp_table'
              The SHOW TABLES statement does not list
              TEMPORARY tables.
            
              You cannot use RENAME to rename a
              TEMPORARY table. However, you can use
              ALTER TABLE instead:
            
mysql> ALTER TABLE orig_name RENAME new_name;
There are known issues in using temporary tables with replication. See Section聽6.3.1, 鈥淩eplication Features and Issues鈥, for more information.
This section is a list of the known issues in recent versions of MySQL.
For information about platform-specific issues, see the installation and porting instructions in Section聽2.13, 鈥淥perating System-Specific Notes鈥, and MySQL Internals: Porting.
The following problems are known and fixing them is a high priority:
MySQL Cluster fails to recover from an out-of-disk failure when using disk data. (Bug#17614)
              If you compare a NULL value to a
              subquery using ALL/ANY/SOME and the
              subquery returns an empty result, the comparison might
              evaluate to the non-standard result of
              NULL rather than to
              TRUE or FALSE. This
              will be fixed in MySQL 5.1.
            
              Subquery optimization for IN is not as
              effective as for =.
            
              Even if you use
              lower_case_table_names=2 (which enables
              MySQL to remember the case used for databases and table
              names), MySQL does not remember the case used for database
              names for the function DATABASE() or
              within the various logs (on case-insensitive systems).
            
              Dropping a FOREIGN KEY constraint
              doesn't work in replication because the constraint may
              have another name on the slave.
            
              REPLACE (and LOAD
              DATA with the REPLACE option)
              does not trigger ON DELETE CASCADE.
            
              DISTINCT with ORDER
              BY doesn't work inside
              GROUP_CONCAT() if you don't use all and
              only those columns that are in the
              DISTINCT list.
            
              If one user has a long-running transaction and another
              user drops a table that is updated in the transaction,
              there is small chance that the binary log may contain the
              DROP TABLE command before the table is
              used in the transaction itself. We plan to fix this by
              having the DROP TABLE command wait
              until the table is not being used in any transaction.
            
When inserting a big integer value (between 263 and 264鈥1) into a decimal or string column, it is inserted as a negative value because the number is evaluated in a signed integer context.
              FLUSH TABLES WITH READ LOCK does not
              block COMMIT if the server is running
              without binary logging, which may cause a problem (of
              consistency between tables) when doing a full backup.
            
              ANALYZE TABLE, OPTIMIZE
              TABLE, and REPAIR TABLE may
              cause problems on tables for which you are using
              INSERT DELAYED.
            
              Performing LOCK TABLE ... and
              FLUSH TABLES ... doesn't guarantee that
              there isn't a half-finished transaction in progress on the
              table.
            
Replication uses query-level logging: The master writes the executed queries to the binary log. This is a very fast, compact, and efficient logging method that works perfectly in most cases.
It is possible for the data on the master and slave to become different if a query is designed in such a way that the data modification is non-deterministic (generally not a recommended practice, even outside of replication).
For example:
                  CREATE ... SELECT or
                  INSERT ... SELECT statements that
                  insert zero or NULL values into an
                  AUTO_INCREMENT column.
                
                  DELETE if you are deleting rows
                  from a table that has foreign keys with ON
                  DELETE CASCADE properties.
                
                  REPLACE ... SELECT, INSERT
                  IGNORE ... SELECT if you have duplicate key
                  values in the inserted data.
                
              If and only if the preceding queries
              have no ORDER BY clause guaranteeing a
              deterministic order.
            
              For example, for INSERT ... SELECT with
              no ORDER BY, the
              SELECT may return rows in a different
              order (which results in a row having different ranks,
              hence getting a different number in the
              AUTO_INCREMENT column), depending on
              the choices made by the optimizers on the master and
              slave.
            
A query is optimized differently on the master and slave only if:
                  The table is stored using a different storage engine
                  on the master than on the slave. (It is possible to
                  use different storage engines on the master and slave.
                  For example, you can use InnoDB on
                  the master, but MyISAM on the slave
                  if the slave has less available disk space.)
                
                  MySQL buffer sizes
                  (key_buffer_size, and so on) are
                  different on the master and slave.
                
The master and slave run different MySQL versions, and the optimizer code differs between these versions.
This problem may also affect database restoration using mysqlbinlog|mysql.
              The easiest way to avoid this problem is to add an
              ORDER BY clause to the aforementioned
              non-deterministic queries to ensure that the rows are
              always stored or modified in the same order.
            
              In future MySQL versions, we will automatically add an
              ORDER BY clause when needed.
            
The following issues are known and will be fixed in due time:
              Log filenames are based on the server hostname (if you
              don't specify a filename with the startup option). You
              have to use options such as
              --log-bin=
              if you change your hostname to something else. Another
              option is to rename the old files to reflect your hostname
              change (if these are binary logs, you need to edit the
              binary log index file and fix the binlog names there as
              well). See Section聽5.2.2, 鈥淐ommand Options鈥.
            old_host_name-bin
              mysqlbinlog does not delete temporary
              files left after a LOAD DATA INFILE
              command. See Section聽8.11, 鈥mysqlbinlog 鈥 Utility for Processing Binary Log Files鈥.
            
              RENAME doesn't work with
              TEMPORARY tables or tables used in a
              MERGE table.
            
              Due to the way table format (.frm)
              files are stored, you cannot use character 255
              (CHAR(255)) in table names, column
              names, or enumerations. This is scheduled to be fixed in
              version 5.1 when we implement new table definition format
              files.
            
              When using SET CHARACTER SET, you can't
              use translated characters in database, table, and column
              names.
            
              You can't use 鈥_鈥 or
              鈥%鈥 with
              ESCAPE in LIKE ...
              ESCAPE.
            
              If you have a DECIMAL column in which
              the same number is stored in different formats (for
              example, +01.00,
              1.00, 01.00),
              GROUP BY may regard each value as a
              different value.
            
You cannot build the server in another directory when using MIT-pthreads. Because this requires changes to MIT-pthreads, we are not likely to fix this. See Section聽2.9.5, 鈥淢IT-pthreads Notes鈥.
              BLOB and TEXT values
              can't reliably be used in GROUP BY,
              ORDER BY or
              DISTINCT. Only the first
              max_sort_length bytes are used when
              comparing BLOB values in these cases.
              The default value of max_sort_length is
              1024 and can be changed at server startup time or at
              runtime.
            
              Numeric calculations are done with
              BIGINT or DOUBLE
              (both are normally 64 bits long). Which precision you get
              depends on the function. The general rule is that bit
              functions are performed with BIGINT
              precision, IF and
              ELT() with BIGINT or
              DOUBLE precision, and the rest with
              DOUBLE precision. You should try to
              avoid using unsigned long long values if they resolve to
              be larger than 63 bits (9223372036854775807) for anything
              other than bit fields.
            
              You can have up to 255 ENUM and
              SET columns in one table.
            
              In MIN(), MAX(), and
              other aggregate functions, MySQL currently compares
              ENUM and SET columns
              by their string value rather than by the string's relative
              position in the set.
            
              mysqld_safe redirects all messages from
              mysqld to the mysqld
              log. One problem with this is that if you execute
              mysqladmin refresh to close and reopen
              the log, stdout and
              stderr are still redirected to the old
              log. If you use --log extensively, you
              should edit mysqld_safe to log to
              host_name.errhost_name.log
              In an UPDATE statement, columns are
              updated from left to right. If you refer to an updated
              column, you get the updated value instead of the original
              value. For example, the following statement increments
              KEY by 2,
              not 1:
            
mysql> UPDATE tbl_name SET KEY=KEY+1,KEY=KEY+1;
You can refer to multiple temporary tables in the same query, but you cannot refer to any given temporary table more than once. For example, the following doesn't work:
mysql> SELECT * FROM temp_table, temp_table AS t2;
ERROR 1137: Can't reopen table: 'temp_table'
              The optimizer may handle DISTINCT
              differently when you are using 鈥hidden鈥
              columns in a join than when you are not. In a join, hidden
              columns are counted as part of the result (even if they
              are not shown), whereas in normal queries, hidden columns
              don't participate in the DISTINCT
              comparison. We will probably change this in the future to
              never compare the hidden columns when executing
              DISTINCT.
            
An example of this is:
SELECT DISTINCT mp3id FROM band_downloads
       WHERE userid = 9 ORDER BY id DESC;
and
SELECT DISTINCT band_downloads.mp3id
       FROM band_downloads,band_mp3
       WHERE band_downloads.userid = 9
       AND band_mp3.id = band_downloads.mp3id
       ORDER BY band_downloads.id DESC;
              In the second case, using MySQL Server 3.23.x, you may get
              two identical rows in the result set (because the values
              in the hidden id column may differ).
            
              Note that this happens only for queries where that do not
              have the ORDER BY columns in the
              result.
            
              If you execute a PROCEDURE on a query
              that returns an empty set, in some cases the
              PROCEDURE does not transform the
              columns.
            
              Creation of a table of type MERGE
              doesn't check whether the underlying tables are compatible
              types.
            
              If you use ALTER TABLE to add a
              UNIQUE index to a table used in a
              MERGE table and then add a normal index
              on the MERGE table, the key order is
              different for the tables if there was an old,
              non-UNIQUE key in the table. This is
              because ALTER TABLE puts
              UNIQUE indexes before normal indexes to
              be able to detect duplicate keys as early as possible.
            
MySQL programs have access to several types of error information when the server returns an error. For example, the mysql client program displays errors using the following format:
shell> SELECT * FROM no_such_table;
ERROR 1146 (42S02): Table 'test.no_such_table' doesn't exist
The message displayed contains three types of information:
          A numeric error value (1146). This number
          is MySQL-specific and is not portable to other database
          systems.
        
          A five-character SQLSTATE value ('42S02').
          The values are specified by ANSI SQL and ODBC and are more
          standardized. Not all MySQL error numbers are mapped to
          SQLSTATE error codes. The value 'HY000'
          (general error) is used for unmapped errors.
        
A string that provides a textual description of the error.
Server error information comes from the following source files. For details about the way that error information is defined, see the MySQL Internals manual, available at http://dev.mysql.com/doc/.
          Error message information is listed in the
          share/errmsg.txt file.
          %d and %s represent
          numbers and strings, respectively, that are substituted into
          the Message values when they are displayed.
        
          The Error values listed in
          share/errmsg.txt are used to generate the
          definitions in the include/mysqld_error.h
          and include/mysqld_ername.h MySQL source
          files.
        
          The SQLSTATE values listed in
          share/errmsg.txt are used to generate the
          definitions in the include/sql_state.h
          MySQL source file.
        
Because updates are frequent, it is possible that those files will contain additional error information not listed here.
      Error: 1000 SQLSTATE: HY000
      (ER_HASHCHK)
    
Message: hashchk
      Error: 1001 SQLSTATE: HY000
      (ER_NISAMCHK)
    
Message: isamchk
      Error: 1002 SQLSTATE: HY000
      (ER_NO)
    
Message: NO
      Error: 1003 SQLSTATE: HY000
      (ER_YES)
    
Message: YES
      Error: 1004 SQLSTATE: HY000
      (ER_CANT_CREATE_FILE)
    
Message: Can't create file '%s' (errno: %d)
      Error: 1005 SQLSTATE: HY000
      (ER_CANT_CREATE_TABLE)
    
Message: Can't create table '%s' (errno: %d)
      Error: 1006 SQLSTATE: HY000
      (ER_CANT_CREATE_DB)
    
Message: Can't create database '%s' (errno: %d)
      Error: 1007 SQLSTATE: HY000
      (ER_DB_CREATE_EXISTS)
    
Message: Can't create database '%s'; database exists
      Error: 1008 SQLSTATE: HY000
      (ER_DB_DROP_EXISTS)
    
Message: Can't drop database '%s'; database doesn't exist
      Error: 1009 SQLSTATE: HY000
      (ER_DB_DROP_DELETE)
    
Message: Error dropping database (can't delete '%s', errno: %d)
      Error: 1010 SQLSTATE: HY000
      (ER_DB_DROP_RMDIR)
    
Message: Error dropping database (can't rmdir '%s', errno: %d)
      Error: 1011 SQLSTATE: HY000
      (ER_CANT_DELETE_FILE)
    
Message: Error on delete of '%s' (errno: %d)
      Error: 1012 SQLSTATE: HY000
      (ER_CANT_FIND_SYSTEM_REC)
    
Message: Can't read record in system table
      Error: 1013 SQLSTATE: HY000
      (ER_CANT_GET_STAT)
    
Message: Can't get status of '%s' (errno: %d)
      Error: 1014 SQLSTATE: HY000
      (ER_CANT_GET_WD)
    
Message: Can't get working directory (errno: %d)
      Error: 1015 SQLSTATE: HY000
      (ER_CANT_LOCK)
    
Message: Can't lock file (errno: %d)
      Error: 1016 SQLSTATE: HY000
      (ER_CANT_OPEN_FILE)
    
Message: Can't open file: '%s' (errno: %d)
      Error: 1017 SQLSTATE: HY000
      (ER_FILE_NOT_FOUND)
    
Message: Can't find file: '%s' (errno: %d)
      Error: 1018 SQLSTATE: HY000
      (ER_CANT_READ_DIR)
    
Message: Can't read dir of '%s' (errno: %d)
      Error: 1019 SQLSTATE: HY000
      (ER_CANT_SET_WD)
    
Message: Can't change dir to '%s' (errno: %d)
      Error: 1020 SQLSTATE: HY000
      (ER_CHECKREAD)
    
Message: Record has changed since last read in table '%s'
      Error: 1021 SQLSTATE: HY000
      (ER_DISK_FULL)
    
Message: Disk full (%s); waiting for someone to free some space...
      Error: 1022 SQLSTATE: 23000
      (ER_DUP_KEY)
    
Message: Can't write; duplicate key in table '%s'
      Error: 1023 SQLSTATE: HY000
      (ER_ERROR_ON_CLOSE)
    
Message: Error on close of '%s' (errno: %d)
      Error: 1024 SQLSTATE: HY000
      (ER_ERROR_ON_READ)
    
Message: Error reading file '%s' (errno: %d)
      Error: 1025 SQLSTATE: HY000
      (ER_ERROR_ON_RENAME)
    
Message: Error on rename of '%s' to '%s' (errno: %d)
      Error: 1026 SQLSTATE: HY000
      (ER_ERROR_ON_WRITE)
    
Message: Error writing file '%s' (errno: %d)
      Error: 1027 SQLSTATE: HY000
      (ER_FILE_USED)
    
Message: '%s' is locked against change
      Error: 1028 SQLSTATE: HY000
      (ER_FILSORT_ABORT)
    
Message: Sort aborted
      Error: 1029 SQLSTATE: HY000
      (ER_FORM_NOT_FOUND)
    
Message: View '%s' doesn't exist for '%s'
      Error: 1030 SQLSTATE: HY000
      (ER_GET_ERRNO)
    
Message: Got error %d from storage engine
      Error: 1031 SQLSTATE: HY000
      (ER_ILLEGAL_HA)
    
Message: Table storage engine for '%s' doesn't have this option
      Error: 1032 SQLSTATE: HY000
      (ER_KEY_NOT_FOUND)
    
Message: Can't find record in '%s'
      Error: 1033 SQLSTATE: HY000
      (ER_NOT_FORM_FILE)
    
Message: Incorrect information in file: '%s'
      Error: 1034 SQLSTATE: HY000
      (ER_NOT_KEYFILE)
    
Message: Incorrect key file for table '%s'; try to repair it
      Error: 1035 SQLSTATE: HY000
      (ER_OLD_KEYFILE)
    
Message: Old key file for table '%s'; repair it!
      Error: 1036 SQLSTATE: HY000
      (ER_OPEN_AS_READONLY)
    
Message: Table '%s' is read only
      Error: 1037 SQLSTATE: HY001
      (ER_OUTOFMEMORY)
    
Message: Out of memory; restart server and try again (needed %d bytes)
      Error: 1038 SQLSTATE: HY001
      (ER_OUT_OF_SORTMEMORY)
    
Message: Out of sort memory; increase server sort buffer size
      Error: 1039 SQLSTATE: HY000
      (ER_UNEXPECTED_EOF)
    
Message: Unexpected EOF found when reading file '%s' (errno: %d)
      Error: 1040 SQLSTATE: 08004
      (ER_CON_COUNT_ERROR)
    
Message: Too many connections
      Error: 1041 SQLSTATE: HY000
      (ER_OUT_OF_RESOURCES)
    
Message: Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space
      Error: 1042 SQLSTATE: 08S01
      (ER_BAD_HOST_ERROR)
    
Message: Can't get hostname for your address
      Error: 1043 SQLSTATE: 08S01
      (ER_HANDSHAKE_ERROR)
    
Message: Bad handshake
      Error: 1044 SQLSTATE: 42000
      (ER_DBACCESS_DENIED_ERROR)
    
Message: Access denied for user '%s'@'%s' to database '%s'
      Error: 1045 SQLSTATE: 28000
      (ER_ACCESS_DENIED_ERROR)
    
Message: Access denied for user '%s'@'%s' (using password: %s)
      Error: 1046 SQLSTATE: 3D000
      (ER_NO_DB_ERROR)
    
Message: No database selected
      Error: 1047 SQLSTATE: 08S01
      (ER_UNKNOWN_COM_ERROR)
    
Message: Unknown command
      Error: 1048 SQLSTATE: 23000
      (ER_BAD_NULL_ERROR)
    
Message: Column '%s' cannot be null
      Error: 1049 SQLSTATE: 42000
      (ER_BAD_DB_ERROR)
    
Message: Unknown database '%s'
      Error: 1050 SQLSTATE: 42S01
      (ER_TABLE_EXISTS_ERROR)
    
Message: Table '%s' already exists
      Error: 1051 SQLSTATE: 42S02
      (ER_BAD_TABLE_ERROR)
    
Message: Unknown table '%s'
      Error: 1052 SQLSTATE: 23000
      (ER_NON_UNIQ_ERROR)
    
Message: Column '%s' in %s is ambiguous
      Error: 1053 SQLSTATE: 08S01
      (ER_SERVER_SHUTDOWN)
    
Message: Server shutdown in progress
      Error: 1054 SQLSTATE: 42S22
      (ER_BAD_FIELD_ERROR)
    
Message: Unknown column '%s' in '%s'
      Error: 1055 SQLSTATE: 42000
      (ER_WRONG_FIELD_WITH_GROUP)
    
Message: '%s' isn't in GROUP BY
      Error: 1056 SQLSTATE: 42000
      (ER_WRONG_GROUP_FIELD)
    
Message: Can't group on '%s'
      Error: 1057 SQLSTATE: 42000
      (ER_WRONG_SUM_SELECT)
    
Message: Statement has sum functions and columns in same statement
      Error: 1058 SQLSTATE: 21S01
      (ER_WRONG_VALUE_COUNT)
    
Message: Column count doesn't match value count
      Error: 1059 SQLSTATE: 42000
      (ER_TOO_LONG_IDENT)
    
Message: Identifier name '%s' is too long
      Error: 1060 SQLSTATE: 42S21
      (ER_DUP_FIELDNAME)
    
Message: Duplicate column name '%s'
      Error: 1061 SQLSTATE: 42000
      (ER_DUP_KEYNAME)
    
Message: Duplicate key name '%s'
      Error: 1062 SQLSTATE: 23000
      (ER_DUP_ENTRY)
    
Message: Duplicate entry '%s' for key %d
      Error: 1063 SQLSTATE: 42000
      (ER_WRONG_FIELD_SPEC)
    
Message: Incorrect column specifier for column '%s'
      Error: 1064 SQLSTATE: 42000
      (ER_PARSE_ERROR)
    
Message: %s near '%s' at line %d
      Error: 1065 SQLSTATE: 42000
      (ER_EMPTY_QUERY)
    
Message: Query was empty
      Error: 1066 SQLSTATE: 42000
      (ER_NONUNIQ_TABLE)
    
Message: Not unique table/alias: '%s'
      Error: 1067 SQLSTATE: 42000
      (ER_INVALID_DEFAULT)
    
Message: Invalid default value for '%s'
      Error: 1068 SQLSTATE: 42000
      (ER_MULTIPLE_PRI_KEY)
    
Message: Multiple primary key defined
      Error: 1069 SQLSTATE: 42000
      (ER_TOO_MANY_KEYS)
    
Message: Too many keys specified; max %d keys allowed
      Error: 1070 SQLSTATE: 42000
      (ER_TOO_MANY_KEY_PARTS)
    
Message: Too many key parts specified; max %d parts allowed
      Error: 1071 SQLSTATE: 42000
      (ER_TOO_LONG_KEY)
    
Message: Specified key was too long; max key length is %d bytes
      Error: 1072 SQLSTATE: 42000
      (ER_KEY_COLUMN_DOES_NOT_EXITS)
    
Message: Key column '%s' doesn't exist in table
      Error: 1073 SQLSTATE: 42000
      (ER_BLOB_USED_AS_KEY)
    
Message: BLOB column '%s' can't be used in key specification with the used table type
      Error: 1074 SQLSTATE: 42000
      (ER_TOO_BIG_FIELDLENGTH)
    
Message: Column length too big for column '%s' (max = %d); use BLOB or TEXT instead
      Error: 1075 SQLSTATE: 42000
      (ER_WRONG_AUTO_KEY)
    
Message: Incorrect table definition; there can be only one auto column and it must be defined as a key
      Error: 1076 SQLSTATE: HY000
      (ER_READY)
    
Message: %s: ready for connections. Version: '%s' socket: '%s' port: %d
      Error: 1077 SQLSTATE: HY000
      (ER_NORMAL_SHUTDOWN)
    
Message: %s: Normal shutdown
      Error: 1078 SQLSTATE: HY000
      (ER_GOT_SIGNAL)
    
Message: %s: Got signal %d. Aborting!
      Error: 1079 SQLSTATE: HY000
      (ER_SHUTDOWN_COMPLETE)
    
Message: %s: Shutdown complete
      Error: 1080 SQLSTATE: 08S01
      (ER_FORCING_CLOSE)
    
Message: %s: Forcing close of thread %ld user: '%s'
      Error: 1081 SQLSTATE: 08S01
      (ER_IPSOCK_ERROR)
    
Message: Can't create IP socket
      Error: 1082 SQLSTATE: 42S12
      (ER_NO_SUCH_INDEX)
    
Message: Table '%s' has no index like the one used in CREATE INDEX; recreate the table
      Error: 1083 SQLSTATE: 42000
      (ER_WRONG_FIELD_TERMINATORS)
    
Message: Field separator argument is not what is expected; check the manual
      Error: 1084 SQLSTATE: 42000
      (ER_BLOBS_AND_NO_TERMINATED)
    
Message: You can't use fixed rowlength with BLOBs; please use 'fields terminated by'
      Error: 1085 SQLSTATE: HY000
      (ER_TEXTFILE_NOT_READABLE)
    
Message: The file '%s' must be in the database directory or be readable by all
      Error: 1086 SQLSTATE: HY000
      (ER_FILE_EXISTS_ERROR)
    
Message: File '%s' already exists
      Error: 1087 SQLSTATE: HY000
      (ER_LOAD_INFO)
    
Message: Records: %ld Deleted: %ld Skipped: %ld Warnings: %ld
      Error: 1088 SQLSTATE: HY000
      (ER_ALTER_INFO)
    
Message: Records: %ld Duplicates: %ld
      Error: 1089 SQLSTATE: HY000
      (ER_WRONG_SUB_KEY)
    
Message: Incorrect sub part key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique sub keys
      Error: 1090 SQLSTATE: 42000
      (ER_CANT_REMOVE_ALL_FIELDS)
    
Message: You can't delete all columns with ALTER TABLE; use DROP TABLE instead
      Error: 1091 SQLSTATE: 42000
      (ER_CANT_DROP_FIELD_OR_KEY)
    
Message: Can't DROP '%s'; check that column/key exists
      Error: 1092 SQLSTATE: HY000
      (ER_INSERT_INFO)
    
Message: Records: %ld Duplicates: %ld Warnings: %ld
      Error: 1093 SQLSTATE: HY000
      (ER_UPDATE_TABLE_USED)
    
Message: You can't specify target table '%s' for update in FROM clause
      Error: 1094 SQLSTATE: HY000
      (ER_NO_SUCH_THREAD)
    
Message: Unknown thread id: %lu
      Error: 1095 SQLSTATE: HY000
      (ER_KILL_DENIED_ERROR)
    
Message: You are not owner of thread %lu
      Error: 1096 SQLSTATE: HY000
      (ER_NO_TABLES_USED)
    
Message: No tables used
      Error: 1097 SQLSTATE: HY000
      (ER_TOO_BIG_SET)
    
Message: Too many strings for column %s and SET
      Error: 1098 SQLSTATE: HY000
      (ER_NO_UNIQUE_LOGFILE)
    
Message: Can't generate a unique log-filename %s.(1-999)
      Error: 1099 SQLSTATE: HY000
      (ER_TABLE_NOT_LOCKED_FOR_WRITE)
    
Message: Table '%s' was locked with a READ lock and can't be updated
      Error: 1100 SQLSTATE: HY000
      (ER_TABLE_NOT_LOCKED)
    
Message: Table '%s' was not locked with LOCK TABLES
      Error: 1101 SQLSTATE: 42000
      (ER_BLOB_CANT_HAVE_DEFAULT)
    
Message: BLOB/TEXT column '%s' can't have a default value
      Error: 1102 SQLSTATE: 42000
      (ER_WRONG_DB_NAME)
    
Message: Incorrect database name '%s'
      Error: 1103 SQLSTATE: 42000
      (ER_WRONG_TABLE_NAME)
    
Message: Incorrect table name '%s'
      Error: 1104 SQLSTATE: 42000
      (ER_TOO_BIG_SELECT)
    
Message: The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay
      Error: 1105 SQLSTATE: HY000
      (ER_UNKNOWN_ERROR)
    
Message: Unknown error
      Error: 1106 SQLSTATE: 42000
      (ER_UNKNOWN_PROCEDURE)
    
Message: Unknown procedure '%s'
      Error: 1107 SQLSTATE: 42000
      (ER_WRONG_PARAMCOUNT_TO_PROCEDURE)
    
Message: Incorrect parameter count to procedure '%s'
      Error: 1108 SQLSTATE: HY000
      (ER_WRONG_PARAMETERS_TO_PROCEDURE)
    
Message: Incorrect parameters to procedure '%s'
      Error: 1109 SQLSTATE: 42S02
      (ER_UNKNOWN_TABLE)
    
Message: Unknown table '%s' in %s
      Error: 1110 SQLSTATE: 42000
      (ER_FIELD_SPECIFIED_TWICE)
    
Message: Column '%s' specified twice
      Error: 1111 SQLSTATE: HY000
      (ER_INVALID_GROUP_FUNC_USE)
    
Message: Invalid use of group function
      Error: 1112 SQLSTATE: 42000
      (ER_UNSUPPORTED_EXTENSION)
    
Message: Table '%s' uses an extension that doesn't exist in this MySQL version
      Error: 1113 SQLSTATE: 42000
      (ER_TABLE_MUST_HAVE_COLUMNS)
    
Message: A table must have at least 1 column
      Error: 1114 SQLSTATE: HY000
      (ER_RECORD_FILE_FULL)
    
Message: The table '%s' is full
      Error: 1115 SQLSTATE: 42000
      (ER_UNKNOWN_CHARACTER_SET)
    
Message: Unknown character set: '%s'
      Error: 1116 SQLSTATE: HY000
      (ER_TOO_MANY_TABLES)
    
Message: Too many tables; MySQL can only use %d tables in a join
      Error: 1117 SQLSTATE: HY000
      (ER_TOO_MANY_FIELDS)
    
Message: Too many columns
      Error: 1118 SQLSTATE: 42000
      (ER_TOO_BIG_ROWSIZE)
    
Message: Row size too large. The maximum row size for the used table type, not counting BLOBs, is %ld. You have to change some columns to TEXT or BLOBs
      Error: 1119 SQLSTATE: HY000
      (ER_STACK_OVERRUN)
    
Message: Thread stack overrun: Used: %ld of a %ld stack. Use 'mysqld -O thread_stack=#' to specify a bigger stack if needed
      Error: 1120 SQLSTATE: 42000
      (ER_WRONG_OUTER_JOIN)
    
Message: Cross dependency found in OUTER JOIN; examine your ON conditions
      Error: 1121 SQLSTATE: 42000
      (ER_NULL_COLUMN_IN_INDEX)
    
Message: Table handler doesn't support NULL in given index. Please change column '%s' to be NOT NULL or use another handler
      Error: 1122 SQLSTATE: HY000
      (ER_CANT_FIND_UDF)
    
Message: Can't load function '%s'
      Error: 1123 SQLSTATE: HY000
      (ER_CANT_INITIALIZE_UDF)
    
Message: Can't initialize function '%s'; %s
      Error: 1124 SQLSTATE: HY000
      (ER_UDF_NO_PATHS)
    
Message: No paths allowed for shared library
      Error: 1125 SQLSTATE: HY000
      (ER_UDF_EXISTS)
    
Message: Function '%s' already exists
      Error: 1126 SQLSTATE: HY000
      (ER_CANT_OPEN_LIBRARY)
    
Message: Can't open shared library '%s' (errno: %d %s)
      Error: 1127 SQLSTATE: HY000
      (ER_CANT_FIND_DL_ENTRY)
    
Message: Can't find symbol '%s' in library
      Error: 1128 SQLSTATE: HY000
      (ER_FUNCTION_NOT_DEFINED)
    
Message: Function '%s' is not defined
      Error: 1129 SQLSTATE: HY000
      (ER_HOST_IS_BLOCKED)
    
Message: Host '%s' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
      Error: 1130 SQLSTATE: HY000
      (ER_HOST_NOT_PRIVILEGED)
    
Message: Host '%s' is not allowed to connect to this MySQL server
      Error: 1131 SQLSTATE: 42000
      (ER_PASSWORD_ANONYMOUS_USER)
    
Message: You are using MySQL as an anonymous user and anonymous users are not allowed to change passwords
      Error: 1132 SQLSTATE: 42000
      (ER_PASSWORD_NOT_ALLOWED)
    
Message: You must have privileges to update tables in the mysql database to be able to change passwords for others
      Error: 1133 SQLSTATE: 42000
      (ER_PASSWORD_NO_MATCH)
    
Message: Can't find any matching row in the user table
      Error: 1134 SQLSTATE: HY000
      (ER_UPDATE_INFO)
    
Message: Rows matched: %ld Changed: %ld Warnings: %ld
      Error: 1135 SQLSTATE: HY000
      (ER_CANT_CREATE_THREAD)
    
Message: Can't create a new thread (errno %d); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug
      Error: 1136 SQLSTATE: 21S01
      (ER_WRONG_VALUE_COUNT_ON_ROW)
    
Message: Column count doesn't match value count at row %ld
      Error: 1137 SQLSTATE: HY000
      (ER_CANT_REOPEN_TABLE)
    
Message: Can't reopen table: '%s'
      Error: 1138 SQLSTATE: 22004
      (ER_INVALID_USE_OF_NULL)
    
Message: Invalid use of NULL value
      Error: 1139 SQLSTATE: 42000
      (ER_REGEXP_ERROR)
    
Message: Got error '%s' from regexp
      Error: 1140 SQLSTATE: 42000
      (ER_MIX_OF_GROUP_FUNC_AND_FIELDS)
    
Message: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
      Error: 1141 SQLSTATE: 42000
      (ER_NONEXISTING_GRANT)
    
Message: There is no such grant defined for user '%s' on host '%s'
      Error: 1142 SQLSTATE: 42000
      (ER_TABLEACCESS_DENIED_ERROR)
    
Message: %s command denied to user '%s'@'%s' for table '%s'
      Error: 1143 SQLSTATE: 42000
      (ER_COLUMNACCESS_DENIED_ERROR)
    
Message: %s command denied to user '%s'@'%s' for column '%s' in table '%s'
      Error: 1144 SQLSTATE: 42000
      (ER_ILLEGAL_GRANT_FOR_TABLE)
    
Message: Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used
      Error: 1145 SQLSTATE: 42000
      (ER_GRANT_WRONG_HOST_OR_USER)
    
Message: The host or user argument to GRANT is too long
      Error: 1146 SQLSTATE: 42S02
      (ER_NO_SUCH_TABLE)
    
Message: Table '%s.%s' doesn't exist
      Error: 1147 SQLSTATE: 42000
      (ER_NONEXISTING_TABLE_GRANT)
    
Message: There is no such grant defined for user '%s' on host '%s' on table '%s'
      Error: 1148 SQLSTATE: 42000
      (ER_NOT_ALLOWED_COMMAND)
    
Message: The used command is not allowed with this MySQL version
      Error: 1149 SQLSTATE: 42000
      (ER_SYNTAX_ERROR)
    
Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
      Error: 1150 SQLSTATE: HY000
      (ER_DELAYED_CANT_CHANGE_LOCK)
    
Message: Delayed insert thread couldn't get requested lock for table %s
      Error: 1151 SQLSTATE: HY000
      (ER_TOO_MANY_DELAYED_THREADS)
    
Message: Too many delayed threads in use
      Error: 1152 SQLSTATE: 08S01
      (ER_ABORTING_CONNECTION)
    
Message: Aborted connection %ld to db: '%s' user: '%s' (%s)
      Error: 1153 SQLSTATE: 08S01
      (ER_NET_PACKET_TOO_LARGE)
    
Message: Got a packet bigger than 'max_allowed_packet' bytes
      Error: 1154 SQLSTATE: 08S01
      (ER_NET_READ_ERROR_FROM_PIPE)
    
Message: Got a read error from the connection pipe
      Error: 1155 SQLSTATE: 08S01
      (ER_NET_FCNTL_ERROR)
    
Message: Got an error from fcntl()
      Error: 1156 SQLSTATE: 08S01
      (ER_NET_PACKETS_OUT_OF_ORDER)
    
Message: Got packets out of order
      Error: 1157 SQLSTATE: 08S01
      (ER_NET_UNCOMPRESS_ERROR)
    
Message: Couldn't uncompress communication packet
      Error: 1158 SQLSTATE: 08S01
      (ER_NET_READ_ERROR)
    
Message: Got an error reading communication packets
      Error: 1159 SQLSTATE: 08S01
      (ER_NET_READ_INTERRUPTED)
    
Message: Got timeout reading communication packets
      Error: 1160 SQLSTATE: 08S01
      (ER_NET_ERROR_ON_WRITE)
    
Message: Got an error writing communication packets
      Error: 1161 SQLSTATE: 08S01
      (ER_NET_WRITE_INTERRUPTED)
    
Message: Got timeout writing communication packets
      Error: 1162 SQLSTATE: 42000
      (ER_TOO_LONG_STRING)
    
Message: Result string is longer than 'max_allowed_packet' bytes
      Error: 1163 SQLSTATE: 42000
      (ER_TABLE_CANT_HANDLE_BLOB)
    
Message: The used table type doesn't support BLOB/TEXT columns
      Error: 1164 SQLSTATE: 42000
      (ER_TABLE_CANT_HANDLE_AUTO_INCREMENT)
    
Message: The used table type doesn't support AUTO_INCREMENT columns
      Error: 1165 SQLSTATE: HY000
      (ER_DELAYED_INSERT_TABLE_LOCKED)
    
Message: INSERT DELAYED can't be used with table '%s' because it is locked with LOCK TABLES
      Error: 1166 SQLSTATE: 42000
      (ER_WRONG_COLUMN_NAME)
    
Message: Incorrect column name '%s'
      Error: 1167 SQLSTATE: 42000
      (ER_WRONG_KEY_COLUMN)
    
Message: The used storage engine can't index column '%s'
      Error: 1168 SQLSTATE: HY000
      (ER_WRONG_MRG_TABLE)
    
Message: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
      Error: 1169 SQLSTATE: 23000
      (ER_DUP_UNIQUE)
    
Message: Can't write, because of unique constraint, to table '%s'
      Error: 1170 SQLSTATE: 42000
      (ER_BLOB_KEY_WITHOUT_LENGTH)
    
Message: BLOB/TEXT column '%s' used in key specification without a key length
      Error: 1171 SQLSTATE: 42000
      (ER_PRIMARY_CANT_HAVE_NULL)
    
Message: All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead
      Error: 1172 SQLSTATE: 42000
      (ER_TOO_MANY_ROWS)
    
Message: Result consisted of more than one row
      Error: 1173 SQLSTATE: 42000
      (ER_REQUIRES_PRIMARY_KEY)
    
Message: This table type requires a primary key
      Error: 1174 SQLSTATE: HY000
      (ER_NO_RAID_COMPILED)
    
Message: This version of MySQL is not compiled with RAID support
      Error: 1175 SQLSTATE: HY000
      (ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE)
    
Message: You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
      Error: 1176 SQLSTATE: 42000
      (ER_KEY_DOES_NOT_EXITS)
    
Message: Key '%s' doesn't exist in table '%s'
      Error: 1177 SQLSTATE: 42000
      (ER_CHECK_NO_SUCH_TABLE)
    
Message: Can't open table
      Error: 1178 SQLSTATE: 42000
      (ER_CHECK_NOT_IMPLEMENTED)
    
Message: The storage engine for the table doesn't support %s
      Error: 1179 SQLSTATE: 25000
      (ER_CANT_DO_THIS_DURING_AN_TRANSACTION)
    
Message: You are not allowed to execute this command in a transaction
      Error: 1180 SQLSTATE: HY000
      (ER_ERROR_DURING_COMMIT)
    
Message: Got error %d during COMMIT
      Error: 1181 SQLSTATE: HY000
      (ER_ERROR_DURING_ROLLBACK)
    
Message: Got error %d during ROLLBACK
      Error: 1182 SQLSTATE: HY000
      (ER_ERROR_DURING_FLUSH_LOGS)
    
Message: Got error %d during FLUSH_LOGS
      Error: 1183 SQLSTATE: HY000
      (ER_ERROR_DURING_CHECKPOINT)
    
Message: Got error %d during CHECKPOINT
      Error: 1184 SQLSTATE: 08S01
      (ER_NEW_ABORTING_CONNECTION)
    
Message: Aborted connection %ld to db: '%s' user: '%s' host: '%s' (%s)
      Error: 1185 SQLSTATE: HY000
      (ER_DUMP_NOT_IMPLEMENTED)
    
Message: The storage engine for the table does not support binary table dump
      Error: 1186 SQLSTATE: HY000
      (ER_FLUSH_MASTER_BINLOG_CLOSED)
    
Message: Binlog closed, cannot RESET MASTER
      Error: 1187 SQLSTATE: HY000
      (ER_INDEX_REBUILD)
    
Message: Failed rebuilding the index of dumped table '%s'
      Error: 1188 SQLSTATE: HY000
      (ER_MASTER)
    
Message: Error from master: '%s'
      Error: 1189 SQLSTATE: 08S01
      (ER_MASTER_NET_READ)
    
Message: Net error reading from master
      Error: 1190 SQLSTATE: 08S01
      (ER_MASTER_NET_WRITE)
    
Message: Net error writing to master
      Error: 1191 SQLSTATE: HY000
      (ER_FT_MATCHING_KEY_NOT_FOUND)
    
Message: Can't find FULLTEXT index matching the column list
      Error: 1192 SQLSTATE: HY000
      (ER_LOCK_OR_ACTIVE_TRANSACTION)
    
Message: Can't execute the given command because you have active locked tables or an active transaction
      Error: 1193 SQLSTATE: HY000
      (ER_UNKNOWN_SYSTEM_VARIABLE)
    
Message: Unknown system variable '%s'
      Error: 1194 SQLSTATE: HY000
      (ER_CRASHED_ON_USAGE)
    
Message: Table '%s' is marked as crashed and should be repaired
      Error: 1195 SQLSTATE: HY000
      (ER_CRASHED_ON_REPAIR)
    
Message: Table '%s' is marked as crashed and last (automatic?) repair failed
      Error: 1196 SQLSTATE: HY000
      (ER_WARNING_NOT_COMPLETE_ROLLBACK)
    
Message: Some non-transactional changed tables couldn't be rolled back
      Error: 1197 SQLSTATE: HY000
      (ER_TRANS_CACHE_FULL)
    
Message: Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again
      Error: 1198 SQLSTATE: HY000
      (ER_SLAVE_MUST_STOP)
    
Message: This operation cannot be performed with a running slave; run STOP SLAVE first
      Error: 1199 SQLSTATE: HY000
      (ER_SLAVE_NOT_RUNNING)
    
Message: This operation requires a running slave; configure slave and do START SLAVE
      Error: 1200 SQLSTATE: HY000
      (ER_BAD_SLAVE)
    
Message: The server is not configured as slave; fix in config file or with CHANGE MASTER TO
      Error: 1201 SQLSTATE: HY000
      (ER_MASTER_INFO)
    
Message: Could not initialize master info structure; more error messages can be found in the MySQL error log
      Error: 1202 SQLSTATE: HY000
      (ER_SLAVE_THREAD)
    
Message: Could not create slave thread; check system resources
      Error: 1203 SQLSTATE: 42000
      (ER_TOO_MANY_USER_CONNECTIONS)
    
Message: User %s already has more than 'max_user_connections' active connections
      Error: 1204 SQLSTATE: HY000
      (ER_SET_CONSTANTS_ONLY)
    
Message: You may only use constant expressions with SET
      Error: 1205 SQLSTATE: HY000
      (ER_LOCK_WAIT_TIMEOUT)
    
Message: Lock wait timeout exceeded; try restarting transaction
      Error: 1206 SQLSTATE: HY000
      (ER_LOCK_TABLE_FULL)
    
Message: The total number of locks exceeds the lock table size
      Error: 1207 SQLSTATE: 25000
      (ER_READ_ONLY_TRANSACTION)
    
Message: Update locks cannot be acquired during a READ UNCOMMITTED transaction
      Error: 1208 SQLSTATE: HY000
      (ER_DROP_DB_WITH_READ_LOCK)
    
Message: DROP DATABASE not allowed while thread is holding global read lock
      Error: 1209 SQLSTATE: HY000
      (ER_CREATE_DB_WITH_READ_LOCK)
    
Message: CREATE DATABASE not allowed while thread is holding global read lock
      Error: 1210 SQLSTATE: HY000
      (ER_WRONG_ARGUMENTS)
    
Message: Incorrect arguments to %s
      Error: 1211 SQLSTATE: 42000
      (ER_NO_PERMISSION_TO_CREATE_USER)
    
Message: '%s'@'%s' is not allowed to create new users
      Error: 1212 SQLSTATE: HY000
      (ER_UNION_TABLES_IN_DIFFERENT_DIR)
    
Message: Incorrect table definition; all MERGE tables must be in the same database
      Error: 1213 SQLSTATE: 40001
      (ER_LOCK_DEADLOCK)
    
Message: Deadlock found when trying to get lock; try restarting transaction
      Error: 1214 SQLSTATE: HY000
      (ER_TABLE_CANT_HANDLE_FT)
    
Message: The used table type doesn't support FULLTEXT indexes
      Error: 1215 SQLSTATE: HY000
      (ER_CANNOT_ADD_FOREIGN)
    
Message: Cannot add foreign key constraint
      Error: 1216 SQLSTATE: 23000
      (ER_NO_REFERENCED_ROW)
    
Message: Cannot add or update a child row: a foreign key constraint fails
      Error: 1217 SQLSTATE: 23000
      (ER_ROW_IS_REFERENCED)
    
Message: Cannot delete or update a parent row: a foreign key constraint fails
      Error: 1218 SQLSTATE: 08S01
      (ER_CONNECT_TO_MASTER)
    
Message: Error connecting to master: %s
      Error: 1219 SQLSTATE: HY000
      (ER_QUERY_ON_MASTER)
    
Message: Error running query on master: %s
      Error: 1220 SQLSTATE: HY000
      (ER_ERROR_WHEN_EXECUTING_COMMAND)
    
Message: Error when executing command %s: %s
      Error: 1221 SQLSTATE: HY000
      (ER_WRONG_USAGE)
    
Message: Incorrect usage of %s and %s
      Error: 1222 SQLSTATE: 21000
      (ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT)
    
Message: The used SELECT statements have a different number of columns
      Error: 1223 SQLSTATE: HY000
      (ER_CANT_UPDATE_WITH_READLOCK)
    
Message: Can't execute the query because you have a conflicting read lock
      Error: 1224 SQLSTATE: HY000
      (ER_MIXING_NOT_ALLOWED)
    
Message: Mixing of transactional and non-transactional tables is disabled
      Error: 1225 SQLSTATE: HY000
      (ER_DUP_ARGUMENT)
    
Message: Option '%s' used twice in statement
      Error: 1226 SQLSTATE: 42000
      (ER_USER_LIMIT_REACHED)
    
Message: User '%s' has exceeded the '%s' resource (current value: %ld)
      Error: 1227 SQLSTATE: 42000
      (ER_SPECIFIC_ACCESS_DENIED_ERROR)
    
Message: Access denied; you need the %s privilege for this operation
      Error: 1228 SQLSTATE: HY000
      (ER_LOCAL_VARIABLE)
    
Message: Variable '%s' is a SESSION variable and can't be used with SET GLOBAL
      Error: 1229 SQLSTATE: HY000
      (ER_GLOBAL_VARIABLE)
    
Message: Variable '%s' is a GLOBAL variable and should be set with SET GLOBAL
      Error: 1230 SQLSTATE: 42000
      (ER_NO_DEFAULT)
    
Message: Variable '%s' doesn't have a default value
      Error: 1231 SQLSTATE: 42000
      (ER_WRONG_VALUE_FOR_VAR)
    
Message: Variable '%s' can't be set to the value of '%s'
      Error: 1232 SQLSTATE: 42000
      (ER_WRONG_TYPE_FOR_VAR)
    
Message: Incorrect argument type to variable '%s'
      Error: 1233 SQLSTATE: HY000
      (ER_VAR_CANT_BE_READ)
    
Message: Variable '%s' can only be set, not read
      Error: 1234 SQLSTATE: 42000
      (ER_CANT_USE_OPTION_HERE)
    
Message: Incorrect usage/placement of '%s'
      Error: 1235 SQLSTATE: 42000
      (ER_NOT_SUPPORTED_YET)
    
Message: This version of MySQL doesn't yet support '%s'
      Error: 1236 SQLSTATE: HY000
      (ER_MASTER_FATAL_ERROR_READING_BINLOG)
    
Message: Got fatal error %d: '%s' from master when reading data from binary log
      Error: 1237 SQLSTATE: HY000
      (ER_SLAVE_IGNORED_TABLE)
    
Message: Slave SQL thread ignored the query because of replicate-*-table rules
      Error: 1238 SQLSTATE: HY000
      (ER_INCORRECT_GLOBAL_LOCAL_VAR)
    
Message: Variable '%s' is a %s variable
      Error: 1239 SQLSTATE: 42000
      (ER_WRONG_FK_DEF)
    
Message: Incorrect foreign key definition for '%s': %s
      Error: 1240 SQLSTATE: HY000
      (ER_KEY_REF_DO_NOT_MATCH_TABLE_REF)
    
Message: Key reference and table reference don't match
      Error: 1241 SQLSTATE: 21000
      (ER_OPERAND_COLUMNS)
    
Message: Operand should contain %d column(s)
      Error: 1242 SQLSTATE: 21000
      (ER_SUBQUERY_NO_1_ROW)
    
Message: Subquery returns more than 1 row
      Error: 1243 SQLSTATE: HY000
      (ER_UNKNOWN_STMT_HANDLER)
    
Message: Unknown prepared statement handler (%.*s) given to %s
      Error: 1244 SQLSTATE: HY000
      (ER_CORRUPT_HELP_DB)
    
Message: Help database is corrupt or does not exist
      Error: 1245 SQLSTATE: HY000
      (ER_CYCLIC_REFERENCE)
    
Message: Cyclic reference on subqueries
      Error: 1246 SQLSTATE: HY000
      (ER_AUTO_CONVERT)
    
Message: Converting column '%s' from %s to %s
      Error: 1247 SQLSTATE: 42S22
      (ER_ILLEGAL_REFERENCE)
    
Message: Reference '%s' not supported (%s)
      Error: 1248 SQLSTATE: 42000
      (ER_DERIVED_MUST_HAVE_ALIAS)
    
Message: Every derived table must have its own alias
      Error: 1249 SQLSTATE: 01000
      (ER_SELECT_REDUCED)
    
Message: Select %u was reduced during optimization
      Error: 1250 SQLSTATE: 42000
      (ER_TABLENAME_NOT_ALLOWED_HERE)
    
Message: Table '%s' from one of the SELECTs cannot be used in %s
      Error: 1251 SQLSTATE: 08004
      (ER_NOT_SUPPORTED_AUTH_MODE)
    
Message: Client does not support authentication protocol requested by server; consider upgrading MySQL client
      Error: 1252 SQLSTATE: 42000
      (ER_SPATIAL_CANT_HAVE_NULL)
    
Message: All parts of a SPATIAL index must be NOT NULL
      Error: 1253 SQLSTATE: 42000
      (ER_COLLATION_CHARSET_MISMATCH)
    
Message: COLLATION '%s' is not valid for CHARACTER SET '%s'
      Error: 1254 SQLSTATE: HY000
      (ER_SLAVE_WAS_RUNNING)
    
Message: Slave is already running
      Error: 1255 SQLSTATE: HY000
      (ER_SLAVE_WAS_NOT_RUNNING)
    
Message: Slave already has been stopped
      Error: 1256 SQLSTATE: HY000
      (ER_TOO_BIG_FOR_UNCOMPRESS)
    
Message: Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)
      Error: 1257 SQLSTATE: HY000
      (ER_ZLIB_Z_MEM_ERROR)
    
Message: ZLIB: Not enough memory
      Error: 1258 SQLSTATE: HY000
      (ER_ZLIB_Z_BUF_ERROR)
    
Message: ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)
      Error: 1259 SQLSTATE: HY000
      (ER_ZLIB_Z_DATA_ERROR)
    
Message: ZLIB: Input data corrupted
      Error: 1260 SQLSTATE: HY000
      (ER_CUT_VALUE_GROUP_CONCAT)
    
Message: %d line(s) were cut by GROUP_CONCAT()
      Error: 1261 SQLSTATE: 01000
      (ER_WARN_TOO_FEW_RECORDS)
    
Message: Row %ld doesn't contain data for all columns
      Error: 1262 SQLSTATE: 01000
      (ER_WARN_TOO_MANY_RECORDS)
    
Message: Row %ld was truncated; it contained more data than there were input columns
      Error: 1263 SQLSTATE: 22004
      (ER_WARN_NULL_TO_NOTNULL)
    
Message: Column set to default value; NULL supplied to NOT NULL column '%s' at row %ld
      Error: 1264 SQLSTATE: 22003
      (ER_WARN_DATA_OUT_OF_RANGE)
    
Message: Out of range value for column '%s' at row %ld
      Error: 1265 SQLSTATE: 01000
      (WARN_DATA_TRUNCATED)
    
Message: Data truncated for column '%s' at row %ld
      Error: 1266 SQLSTATE: HY000
      (ER_WARN_USING_OTHER_HANDLER)
    
Message: Using storage engine %s for table '%s'
      Error: 1267 SQLSTATE: HY000
      (ER_CANT_AGGREGATE_2COLLATIONS)
    
Message: Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'
      Error: 1268 SQLSTATE: HY000
      (ER_DROP_USER)
    
Message: Cannot drop one or more of the requested users
      Error: 1269 SQLSTATE: HY000
      (ER_REVOKE_GRANTS)
    
Message: Can't revoke all privileges for one or more of the requested users
      Error: 1270 SQLSTATE: HY000
      (ER_CANT_AGGREGATE_3COLLATIONS)
    
Message: Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'
      Error: 1271 SQLSTATE: HY000
      (ER_CANT_AGGREGATE_NCOLLATIONS)
    
Message: Illegal mix of collations for operation '%s'
      Error: 1272 SQLSTATE: HY000
      (ER_VARIABLE_IS_NOT_STRUCT)
    
Message: Variable '%s' is not a variable component (can't be used as XXXX.variable_name)
      Error: 1273 SQLSTATE: HY000
      (ER_UNKNOWN_COLLATION)
    
Message: Unknown collation: '%s'
      Error: 1274 SQLSTATE: HY000
      (ER_SLAVE_IGNORED_SSL_PARAMS)
    
Message: SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started
      Error: 1275 SQLSTATE: HY000
      (ER_SERVER_IS_IN_SECURE_AUTH_MODE)
    
Message: Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format
      Error: 1276 SQLSTATE: HY000
      (ER_WARN_FIELD_RESOLVED)
    
Message: Field or reference '%s%s%s%s%s' of SELECT #%d was resolved in SELECT #%d
      Error: 1277 SQLSTATE: HY000
      (ER_BAD_SLAVE_UNTIL_COND)
    
Message: Incorrect parameter or combination of parameters for START SLAVE UNTIL
      Error: 1278 SQLSTATE: HY000
      (ER_MISSING_SKIP_SLAVE)
    
Message: It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart
      Error: 1279 SQLSTATE: HY000
      (ER_UNTIL_COND_IGNORED)
    
Message: SQL thread is not to be started so UNTIL options are ignored
      Error: 1280 SQLSTATE: 42000
      (ER_WRONG_NAME_FOR_INDEX)
    
Message: Incorrect index name '%s'
      Error: 1281 SQLSTATE: 42000
      (ER_WRONG_NAME_FOR_CATALOG)
    
Message: Incorrect catalog name '%s'
      Error: 1282 SQLSTATE: HY000
      (ER_WARN_QC_RESIZE)
    
Message: Query cache failed to set size %lu; new query cache size is %lu
      Error: 1283 SQLSTATE: HY000
      (ER_BAD_FT_COLUMN)
    
Message: Column '%s' cannot be part of FULLTEXT index
      Error: 1284 SQLSTATE: HY000
      (ER_UNKNOWN_KEY_CACHE)
    
Message: Unknown key cache '%s'
      Error: 1285 SQLSTATE: HY000
      (ER_WARN_HOSTNAME_WONT_WORK)
    
Message: MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work
      Error: 1286 SQLSTATE: 42000
      (ER_UNKNOWN_STORAGE_ENGINE)
    
Message: Unknown table engine '%s'
      Error: 1287 SQLSTATE: HY000
      (ER_UNUSED_1)
    
Message: '%s' is deprecated; use '%s' instead
      Error: 1288 SQLSTATE: HY000
      (ER_NON_UPDATABLE_TABLE)
    
Message: The target table %s of the %s is not updatable
      Error: 1289 SQLSTATE: HY000
      (ER_FEATURE_DISABLED)
    
Message: The '%s' feature is disabled; you need MySQL built with '%s' to have it working
      Error: 1290 SQLSTATE: HY000
      (ER_OPTION_PREVENTS_STATEMENT)
    
Message: The MySQL server is running with the %s option so it cannot execute this statement
      Error: 1291 SQLSTATE: HY000
      (ER_DUPLICATED_VALUE_IN_TYPE)
    
Message: Column '%s' has duplicated value '%s' in %s
      Error: 1292 SQLSTATE: 22007
      (ER_TRUNCATED_WRONG_VALUE)
    
Message: Truncated incorrect %s value: '%s'
      Error: 1293 SQLSTATE: HY000
      (ER_TOO_MUCH_AUTO_TIMESTAMP_COLS)
    
Message: Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
      Error: 1294 SQLSTATE: HY000
      (ER_INVALID_ON_UPDATE)
    
Message: Invalid ON UPDATE clause for '%s' column
      Error: 1295 SQLSTATE: HY000
      (ER_UNSUPPORTED_PS)
    
Message: This command is not supported in the prepared statement protocol yet
      Error: 1296 SQLSTATE: HY000
      (ER_GET_ERRMSG)
    
Message: Got error %d '%s' from %s
      Error: 1297 SQLSTATE: HY000
      (ER_GET_TEMPORARY_ERRMSG)
    
Message: Got temporary error %d '%s' from %s
      Error: 1298 SQLSTATE: HY000
      (ER_UNKNOWN_TIME_ZONE)
    
Message: Unknown or incorrect time zone: '%s'
      Error: 1299 SQLSTATE: HY000
      (ER_WARN_INVALID_TIMESTAMP)
    
Message: Invalid TIMESTAMP value in column '%s' at row %ld
      Error: 1300 SQLSTATE: HY000
      (ER_INVALID_CHARACTER_STRING)
    
Message: Invalid %s character string: '%s'
      Error: 1301 SQLSTATE: HY000
      (ER_WARN_ALLOWED_PACKET_OVERFLOWED)
    
Message: Result of %s() was larger than max_allowed_packet (%ld) - truncated
      Error: 1302 SQLSTATE: HY000
      (ER_CONFLICTING_DECLARATIONS)
    
Message: Conflicting declarations: '%s%s' and '%s%s'
      Error: 1303 SQLSTATE: 2F003
      (ER_SP_NO_RECURSIVE_CREATE)
    
Message: Can't create a %s from within another stored routine
      Error: 1304 SQLSTATE: 42000
      (ER_SP_ALREADY_EXISTS)
    
Message: %s %s already exists
      Error: 1305 SQLSTATE: 42000
      (ER_SP_DOES_NOT_EXIST)
    
Message: %s %s does not exist
      Error: 1306 SQLSTATE: HY000
      (ER_SP_DROP_FAILED)
    
Message: Failed to DROP %s %s
      Error: 1307 SQLSTATE: HY000
      (ER_SP_STORE_FAILED)
    
Message: Failed to CREATE %s %s
      Error: 1308 SQLSTATE: 42000
      (ER_SP_LILABEL_MISMATCH)
    
Message: %s with no matching label: %s
      Error: 1309 SQLSTATE: 42000
      (ER_SP_LABEL_REDEFINE)
    
Message: Redefining label %s
      Error: 1310 SQLSTATE: 42000
      (ER_SP_LABEL_MISMATCH)
    
Message: End-label %s without match
      Error: 1311 SQLSTATE: 01000
      (ER_SP_UNINIT_VAR)
    
Message: Referring to uninitialized variable %s
      Error: 1312 SQLSTATE: 0A000
      (ER_SP_BADSELECT)
    
Message: PROCEDURE %s can't return a result set in the given context
      Error: 1313 SQLSTATE: 42000
      (ER_SP_BADRETURN)
    
Message: RETURN is only allowed in a FUNCTION
      Error: 1314 SQLSTATE: 0A000
      (ER_SP_BADSTATEMENT)
    
Message: %s is not allowed in stored procedures
      Error: 1315 SQLSTATE: 42000
      (ER_UPDATE_LOG_DEPRECATED_IGNORED)
    
Message: The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored
      Error: 1316 SQLSTATE: 42000
      (ER_UPDATE_LOG_DEPRECATED_TRANSLATED)
    
Message: The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been translated to SET SQL_LOG_BIN
      Error: 1317 SQLSTATE: 70100
      (ER_QUERY_INTERRUPTED)
    
Message: Query execution was interrupted
      Error: 1318 SQLSTATE: 42000
      (ER_SP_WRONG_NO_OF_ARGS)
    
Message: Incorrect number of arguments for %s %s; expected %u, got %u
      Error: 1319 SQLSTATE: 42000
      (ER_SP_COND_MISMATCH)
    
Message: Undefined CONDITION: %s
      Error: 1320 SQLSTATE: 42000
      (ER_SP_NORETURN)
    
Message: No RETURN found in FUNCTION %s
      Error: 1321 SQLSTATE: 2F005
      (ER_SP_NORETURNEND)
    
Message: FUNCTION %s ended without RETURN
      Error: 1322 SQLSTATE: 42000
      (ER_SP_BAD_CURSOR_QUERY)
    
Message: Cursor statement must be a SELECT
      Error: 1323 SQLSTATE: 42000
      (ER_SP_BAD_CURSOR_SELECT)
    
Message: Cursor SELECT must not have INTO
      Error: 1324 SQLSTATE: 42000
      (ER_SP_CURSOR_MISMATCH)
    
Message: Undefined CURSOR: %s
      Error: 1325 SQLSTATE: 24000
      (ER_SP_CURSOR_ALREADY_OPEN)
    
Message: Cursor is already open
      Error: 1326 SQLSTATE: 24000
      (ER_SP_CURSOR_NOT_OPEN)
    
Message: Cursor is not open
      Error: 1327 SQLSTATE: 42000
      (ER_SP_UNDECLARED_VAR)
    
Message: Undeclared variable: %s
      Error: 1328 SQLSTATE: HY000
      (ER_SP_WRONG_NO_OF_FETCH_ARGS)
    
Message: Incorrect number of FETCH variables
      Error: 1329 SQLSTATE: 02000
      (ER_SP_FETCH_NO_DATA)
    
Message: No data - zero rows fetched, selected, or processed
      Error: 1330 SQLSTATE: 42000
      (ER_SP_DUP_PARAM)
    
Message: Duplicate parameter: %s
      Error: 1331 SQLSTATE: 42000
      (ER_SP_DUP_VAR)
    
Message: Duplicate variable: %s
      Error: 1332 SQLSTATE: 42000
      (ER_SP_DUP_COND)
    
Message: Duplicate condition: %s
      Error: 1333 SQLSTATE: 42000
      (ER_SP_DUP_CURS)
    
Message: Duplicate cursor: %s
      Error: 1334 SQLSTATE: HY000
      (ER_SP_CANT_ALTER)
    
Message: Failed to ALTER %s %s
      Error: 1335 SQLSTATE: 0A000
      (ER_SP_SUBSELECT_NYI)
    
Message: Subquery value not supported
      Error: 1336 SQLSTATE: 0A000
      (ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG)
    
Message: %s is not allowed in stored function or trigger
      Error: 1337 SQLSTATE: 42000
      (ER_SP_VARCOND_AFTER_CURSHNDLR)
    
Message: Variable or condition declaration after cursor or handler declaration
      Error: 1338 SQLSTATE: 42000
      (ER_SP_CURSOR_AFTER_HANDLER)
    
Message: Cursor declaration after handler declaration
      Error: 1339 SQLSTATE: 20000
      (ER_SP_CASE_NOT_FOUND)
    
Message: Case not found for CASE statement
      Error: 1340 SQLSTATE: HY000
      (ER_FPARSER_TOO_BIG_FILE)
    
Message: Configuration file '%s' is too big
      Error: 1341 SQLSTATE: HY000
      (ER_FPARSER_BAD_HEADER)
    
Message: Malformed file type header in file '%s'
      Error: 1342 SQLSTATE: HY000
      (ER_FPARSER_EOF_IN_COMMENT)
    
Message: Unexpected end of file while parsing comment '%s'
      Error: 1343 SQLSTATE: HY000
      (ER_FPARSER_ERROR_IN_PARAMETER)
    
Message: Error while parsing parameter '%s' (line: '%s')
      Error: 1344 SQLSTATE: HY000
      (ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER)
    
Message: Unexpected end of file while skipping unknown parameter '%s'
      Error: 1345 SQLSTATE: HY000
      (ER_VIEW_NO_EXPLAIN)
    
Message: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
      Error: 1346 SQLSTATE: HY000
      (ER_FRM_UNKNOWN_TYPE)
    
Message: File '%s' has unknown type '%s' in its header
      Error: 1347 SQLSTATE: HY000
      (ER_WRONG_OBJECT)
    
Message: '%s.%s' is not %s
      Error: 1348 SQLSTATE: HY000
      (ER_NONUPDATEABLE_COLUMN)
    
Message: Column '%s' is not updatable
      Error: 1349 SQLSTATE: HY000
      (ER_VIEW_SELECT_DERIVED)
    
Message: View's SELECT contains a subquery in the FROM clause
      Error: 1350 SQLSTATE: HY000
      (ER_VIEW_SELECT_CLAUSE)
    
Message: View's SELECT contains a '%s' clause
      Error: 1351 SQLSTATE: HY000
      (ER_VIEW_SELECT_VARIABLE)
    
Message: View's SELECT contains a variable or parameter
      Error: 1352 SQLSTATE: HY000
      (ER_VIEW_SELECT_TMPTABLE)
    
Message: View's SELECT refers to a temporary table '%s'
      Error: 1353 SQLSTATE: HY000
      (ER_VIEW_WRONG_LIST)
    
Message: View's SELECT and view's field list have different column counts
      Error: 1354 SQLSTATE: HY000
      (ER_WARN_VIEW_MERGE)
    
Message: View merge algorithm can't be used here for now (assumed undefined algorithm)
      Error: 1355 SQLSTATE: HY000
      (ER_WARN_VIEW_WITHOUT_KEY)
    
Message: View being updated does not have complete key of underlying table in it
      Error: 1356 SQLSTATE: HY000
      (ER_VIEW_INVALID)
    
Message: View '%s.%s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
      Error: 1357 SQLSTATE: HY000
      (ER_SP_NO_DROP_SP)
    
Message: Can't drop or alter a %s from within another stored routine
      Error: 1358 SQLSTATE: HY000
      (ER_SP_GOTO_IN_HNDLR)
    
Message: GOTO is not allowed in a stored procedure handler
      Error: 1359 SQLSTATE: HY000
      (ER_TRG_ALREADY_EXISTS)
    
Message: Trigger already exists
      Error: 1360 SQLSTATE: HY000
      (ER_TRG_DOES_NOT_EXIST)
    
Message: Trigger does not exist
      Error: 1361 SQLSTATE: HY000
      (ER_TRG_ON_VIEW_OR_TEMP_TABLE)
    
Message: Trigger's '%s' is view or temporary table
      Error: 1362 SQLSTATE: HY000
      (ER_TRG_CANT_CHANGE_ROW)
    
Message: Updating of %s row is not allowed in %strigger
      Error: 1363 SQLSTATE: HY000
      (ER_TRG_NO_SUCH_ROW_IN_TRG)
    
Message: There is no %s row in %s trigger
      Error: 1364 SQLSTATE: HY000
      (ER_NO_DEFAULT_FOR_FIELD)
    
Message: Field '%s' doesn't have a default value
      Error: 1365 SQLSTATE: 22012
      (ER_DIVISION_BY_ZERO)
    
Message: Division by 0
      Error: 1366 SQLSTATE: HY000
      (ER_TRUNCATED_WRONG_VALUE_FOR_FIELD)
    
Message: Incorrect %s value: '%s' for column '%s' at row %ld
      Error: 1367 SQLSTATE: 22007
      (ER_ILLEGAL_VALUE_FOR_TYPE)
    
Message: Illegal %s '%s' value found during parsing
      Error: 1368 SQLSTATE: HY000
      (ER_VIEW_NONUPD_CHECK)
    
Message: CHECK OPTION on non-updatable view '%s.%s'
      Error: 1369 SQLSTATE: HY000
      (ER_VIEW_CHECK_FAILED)
    
Message: CHECK OPTION failed '%s.%s'
      Error: 1370 SQLSTATE: 42000
      (ER_PROCACCESS_DENIED_ERROR)
    
Message: %s command denied to user '%s'@'%s' for routine '%s'
      Error: 1371 SQLSTATE: HY000
      (ER_RELAY_LOG_FAIL)
    
Message: Failed purging old relay logs: %s
      Error: 1372 SQLSTATE: HY000
      (ER_PASSWD_LENGTH)
    
Message: Password hash should be a %d-digit hexadecimal number
      Error: 1373 SQLSTATE: HY000
      (ER_UNKNOWN_TARGET_BINLOG)
    
Message: Target log not found in binlog index
      Error: 1374 SQLSTATE: HY000
      (ER_IO_ERR_LOG_INDEX_READ)
    
Message: I/O error reading log index file
      Error: 1375 SQLSTATE: HY000
      (ER_BINLOG_PURGE_PROHIBITED)
    
Message: Server configuration does not permit binlog purge
      Error: 1376 SQLSTATE: HY000
      (ER_FSEEK_FAIL)
    
Message: Failed on fseek()
      Error: 1377 SQLSTATE: HY000
      (ER_BINLOG_PURGE_FATAL_ERR)
    
Message: Fatal error during log purge
      Error: 1378 SQLSTATE: HY000
      (ER_LOG_IN_USE)
    
Message: A purgeable log is in use, will not purge
      Error: 1379 SQLSTATE: HY000
      (ER_LOG_PURGE_UNKNOWN_ERR)
    
Message: Unknown error during log purge
      Error: 1380 SQLSTATE: HY000
      (ER_RELAY_LOG_INIT)
    
Message: Failed initializing relay log position: %s
      Error: 1381 SQLSTATE: HY000
      (ER_NO_BINARY_LOGGING)
    
Message: You are not using binary logging
      Error: 1382 SQLSTATE: HY000
      (ER_RESERVED_SYNTAX)
    
Message: The '%s' syntax is reserved for purposes internal to the MySQL server
      Error: 1383 SQLSTATE: HY000
      (ER_WSAS_FAILED)
    
Message: WSAStartup Failed
      Error: 1384 SQLSTATE: HY000
      (ER_DIFF_GROUPS_PROC)
    
Message: Can't handle procedures with different groups yet
      Error: 1385 SQLSTATE: HY000
      (ER_NO_GROUP_FOR_PROC)
    
Message: Select must have a group with this procedure
      Error: 1386 SQLSTATE: HY000
      (ER_ORDER_WITH_PROC)
    
Message: Can't use ORDER clause with this procedure
      Error: 1387 SQLSTATE: HY000
      (ER_LOGGING_PROHIBIT_CHANGING_OF)
    
Message: Binary logging and replication forbid changing the global server %s
      Error: 1388 SQLSTATE: HY000
      (ER_NO_FILE_MAPPING)
    
Message: Can't map file: %s, errno: %d
      Error: 1389 SQLSTATE: HY000
      (ER_WRONG_MAGIC)
    
Message: Wrong magic in %s
      Error: 1390 SQLSTATE: HY000
      (ER_PS_MANY_PARAM)
    
Message: Prepared statement contains too many placeholders
      Error: 1391 SQLSTATE: HY000
      (ER_KEY_PART_0)
    
Message: Key part '%s' length cannot be 0
      Error: 1392 SQLSTATE: HY000
      (ER_VIEW_CHECKSUM)
    
Message: View text checksum failed
      Error: 1393 SQLSTATE: HY000
      (ER_VIEW_MULTIUPDATE)
    
Message: Can not modify more than one base table through a join view '%s.%s'
      Error: 1394 SQLSTATE: HY000
      (ER_VIEW_NO_INSERT_FIELD_LIST)
    
Message: Can not insert into join view '%s.%s' without fields list
      Error: 1395 SQLSTATE: HY000
      (ER_VIEW_DELETE_MERGE_VIEW)
    
Message: Can not delete from join view '%s.%s'
      Error: 1396 SQLSTATE: HY000
      (ER_CANNOT_USER)
    
Message: Operation %s failed for %s
      Error: 1397 SQLSTATE: XAE04
      (ER_XAER_NOTA)
    
Message: XAER_NOTA: Unknown XID
      Error: 1398 SQLSTATE: XAE05
      (ER_XAER_INVAL)
    
Message: XAER_INVAL: Invalid arguments (or unsupported command)
      Error: 1399 SQLSTATE: XAE07
      (ER_XAER_RMFAIL)
    
Message: XAER_RMFAIL: The command cannot be executed when global transaction is in the %s state
      Error: 1400 SQLSTATE: XAE09
      (ER_XAER_OUTSIDE)
    
Message: XAER_OUTSIDE: Some work is done outside global transaction
      Error: 1401 SQLSTATE: XAE03
      (ER_XAER_RMERR)
    
Message: XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency
      Error: 1402 SQLSTATE: XA100
      (ER_XA_RBROLLBACK)
    
Message: XA_RBROLLBACK: Transaction branch was rolled back
      Error: 1403 SQLSTATE: 42000
      (ER_NONEXISTING_PROC_GRANT)
    
Message: There is no such grant defined for user '%s' on host '%s' on routine '%s'
      Error: 1404 SQLSTATE: HY000
      (ER_PROC_AUTO_GRANT_FAIL)
    
Message: Failed to grant EXECUTE and ALTER ROUTINE privileges
      Error: 1405 SQLSTATE: HY000
      (ER_PROC_AUTO_REVOKE_FAIL)
    
Message: Failed to revoke all privileges to dropped routine
      Error: 1406 SQLSTATE: 22001
      (ER_DATA_TOO_LONG)
    
Message: Data too long for column '%s' at row %ld
      Error: 1407 SQLSTATE: 42000
      (ER_SP_BAD_SQLSTATE)
    
Message: Bad SQLSTATE: '%s'
      Error: 1408 SQLSTATE: HY000
      (ER_STARTUP)
    
Message: %s: ready for connections. Version: '%s' socket: '%s' port: %d %s
      Error: 1409 SQLSTATE: HY000
      (ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR)
    
Message: Can't load value from file with fixed size rows to variable
      Error: 1410 SQLSTATE: 42000
      (ER_CANT_CREATE_USER_WITH_GRANT)
    
Message: You are not allowed to create a user with GRANT
      Error: 1411 SQLSTATE: HY000
      (ER_WRONG_VALUE_FOR_TYPE)
    
Message: Incorrect %s value: '%s' for function %s
      Error: 1412 SQLSTATE: HY000
      (ER_TABLE_DEF_CHANGED)
    
Message: Table definition has changed, please retry transaction
      Error: 1413 SQLSTATE: 42000
      (ER_SP_DUP_HANDLER)
    
Message: Duplicate handler declared in the same block
      Error: 1414 SQLSTATE: 42000
      (ER_SP_NOT_VAR_ARG)
    
Message: OUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE trigger
      Error: 1415 SQLSTATE: 0A000
      (ER_SP_NO_RETSET)
    
Message: Not allowed to return a result set from a %s
      Error: 1416 SQLSTATE: 22003
      (ER_CANT_CREATE_GEOMETRY_OBJECT)
    
Message: Cannot get geometry object from data you send to the GEOMETRY field
      Error: 1417 SQLSTATE: HY000
      (ER_FAILED_ROUTINE_BREAK_BINLOG)
    
Message: A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes
      Error: 1418 SQLSTATE: HY000
      (ER_BINLOG_UNSAFE_ROUTINE)
    
Message: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
      Error: 1419 SQLSTATE: HY000
      (ER_BINLOG_CREATE_ROUTINE_NEED_SUPER)
    
Message: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
      Error: 1420 SQLSTATE: HY000
      (ER_EXEC_STMT_WITH_OPEN_CURSOR)
    
Message: You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it.
      Error: 1421 SQLSTATE: HY000
      (ER_STMT_HAS_NO_OPEN_CURSOR)
    
Message: The statement (%lu) has no open cursor.
      Error: 1422 SQLSTATE: HY000
      (ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG)
    
Message: Explicit or implicit commit is not allowed in stored function or trigger.
      Error: 1423 SQLSTATE: HY000
      (ER_NO_DEFAULT_FOR_VIEW_FIELD)
    
Message: Field of view '%s.%s' underlying table doesn't have a default value
      Error: 1424 SQLSTATE: HY000
      (ER_SP_NO_RECURSION)
    
Message: Recursive stored functions and triggers are not allowed.
      Error: 1425 SQLSTATE: 42000
      (ER_TOO_BIG_SCALE)
    
Message: Too big scale %d specified for column '%s'. Maximum is %d.
      Error: 1426 SQLSTATE: 42000
      (ER_TOO_BIG_PRECISION)
    
Message: Too big precision %d specified for column '%s'. Maximum is %d.
      Error: 1427 SQLSTATE: 42000
      (ER_M_BIGGER_THAN_D)
    
Message: For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%s').
      Error: 1428 SQLSTATE: HY000
      (ER_WRONG_LOCK_OF_SYSTEM_TABLE)
    
Message: You can't combine write-locking of system tables with other tables or lock types
      Error: 1429 SQLSTATE: HY000
      (ER_CONNECT_TO_FOREIGN_DATA_SOURCE)
    
Message: Unable to connect to foreign data source: %s
      Error: 1430 SQLSTATE: HY000
      (ER_QUERY_ON_FOREIGN_DATA_SOURCE)
    
Message: There was a problem processing the query on the foreign data source. Data source error: %s
      Error: 1431 SQLSTATE: HY000
      (ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST)
    
Message: The foreign data source you are trying to reference does not exist. Data source error: %s
      Error: 1432 SQLSTATE: HY000
      (ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE)
    
Message: Can't create federated table. The data source connection string '%s' is not in the correct format
      Error: 1433 SQLSTATE: HY000
      (ER_FOREIGN_DATA_STRING_INVALID)
    
Message: The data source connection string '%s' is not in the correct format
      Error: 1434 SQLSTATE: HY000
      (ER_CANT_CREATE_FEDERATED_TABLE)
    
Message: Can't create federated table. Foreign data src error: %s
      Error: 1435 SQLSTATE: HY000
      (ER_TRG_IN_WRONG_SCHEMA)
    
Message: Trigger in wrong schema
      Error: 1436 SQLSTATE: HY000
      (ER_STACK_OVERRUN_NEED_MORE)
    
Message: Thread stack overrun: %ld bytes used of a %ld byte stack, and %ld bytes needed. Use 'mysqld -O thread_stack=#' to specify a bigger stack.
      Error: 1437 SQLSTATE: 42000
      (ER_TOO_LONG_BODY)
    
Message: Routine body for '%s' is too long
      Error: 1438 SQLSTATE: HY000
      (ER_WARN_CANT_DROP_DEFAULT_KEYCACHE)
    
Message: Cannot drop default keycache
      Error: 1439 SQLSTATE: 42000
      (ER_TOO_BIG_DISPLAYWIDTH)
    
Message: Display width out of range for column '%s' (max = %d)
      Error: 1440 SQLSTATE: XAE08
      (ER_XAER_DUPID)
    
Message: XAER_DUPID: The XID already exists
      Error: 1441 SQLSTATE: 22008
      (ER_DATETIME_FUNCTION_OVERFLOW)
    
Message: Datetime function: %s field overflow
      Error: 1442 SQLSTATE: HY000
      (ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG)
    
Message: Can't update table '%s' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
      Error: 1443 SQLSTATE: HY000
      (ER_VIEW_PREVENT_UPDATE)
    
Message: The definition of table '%s' prevents operation %s on table '%s'.
      Error: 1444 SQLSTATE: HY000
      (ER_PS_NO_RECURSION)
    
Message: The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner
      Error: 1445 SQLSTATE: HY000
      (ER_SP_CANT_SET_AUTOCOMMIT)
    
Message: Not allowed to set autocommit from a stored function or trigger
      Error: 1446 SQLSTATE: HY000
      (ER_MALFORMED_DEFINER)
    
Message: Definer is not fully qualified
      Error: 1447 SQLSTATE: HY000
      (ER_VIEW_FRM_NO_USER)
    
Message: View '%s'.'%s' has no definer information (old table format). Current user is used as definer. Please recreate the view!
      Error: 1448 SQLSTATE: HY000
      (ER_VIEW_OTHER_USER)
    
Message: You need the SUPER privilege for creation view with '%s'@'%s' definer
      Error: 1449 SQLSTATE: HY000
      (ER_NO_SUCH_USER)
    
Message: There is no '%s'@'%s' registered
      Error: 1450 SQLSTATE: HY000
      (ER_FORBID_SCHEMA_CHANGE)
    
Message: Changing schema from '%s' to '%s' is not allowed.
      Error: 1451 SQLSTATE: 23000
      (ER_ROW_IS_REFERENCED_2)
    
Message: Cannot delete or update a parent row: a foreign key constraint fails (%s)
      Error: 1452 SQLSTATE: 23000
      (ER_NO_REFERENCED_ROW_2)
    
Message: Cannot add or update a child row: a foreign key constraint fails (%s)
      Error: 1453 SQLSTATE: 42000
      (ER_SP_BAD_VAR_SHADOW)
    
Message: Variable '%s' must be quoted with `...`, or renamed
      Error: 1454 SQLSTATE: HY000
      (ER_TRG_NO_DEFINER)
    
Message: No definer attribute for trigger '%s'.'%s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger.
      Error: 1455 SQLSTATE: HY000
      (ER_OLD_FILE_FORMAT)
    
Message: '%s' has an old format, you should re-create the '%s' object(s)
      Error: 1456 SQLSTATE: HY000
      (ER_SP_RECURSION_LIMIT)
    
Message: Recursive limit %d (as set by the max_sp_recursion_depth variable) was exceeded for routine %s
      Error: 1457 SQLSTATE: HY000
      (ER_SP_PROC_TABLE_CORRUPT)
    
Message: Failed to load routine %s. The table mysql.proc is missing, corrupt, or contains bad data (internal code %d)
      Error: 1458 SQLSTATE: HY000
      (ER_FOREIGN_SERVER_EXISTS)
    
Message: The foreign server, %s, you are trying to create already exists.
      Error: 1459 SQLSTATE: 42000
      (ER_SP_WRONG_NAME)
    
Message: Incorrect routine name '%s'
      Error: 1460 SQLSTATE: HY000
      (ER_TABLE_NEEDS_UPGRADE)
    
Message: Table upgrade required. Please do "REPAIR TABLE `%s`" to fix it!
      Error: 1461 SQLSTATE: 42000
      (ER_SP_NO_AGGREGATE)
    
Message: AGGREGATE is not supported for stored functions
      Error: 1462 SQLSTATE: 42000
      (ER_MAX_PREPARED_STMT_COUNT_REACHED)
    
Message: Can't create more than max_prepared_stmt_count statements (current value: %lu)
      Error: 1463 SQLSTATE: HY000
      (ER_VIEW_RECURSIVE)
    
Message: `%s`.`%s` contains view recursion
      Error: 1464 SQLSTATE: 42000
      (ER_NON_GROUPING_FIELD_USED)
    
Message: non-grouping field '%s' is used in %s clause
      Error: 1465 SQLSTATE: HY000
      (ER_TABLE_CANT_HANDLE_SPKEYS)
    
Message: The used table type doesn't support SPATIAL indexes
      Error: 1466 SQLSTATE: HY000
      (ER_ILLEGAL_HA_CREATE_OPTION)
    
Message: Table storage engine '%s' does not support the create option '%s'
      Error: 1467 SQLSTATE: HY000
      (ER_PARTITION_REQUIRES_VALUES_ERROR)
    
Message: %s PARTITIONING requires definition of VALUES %s for each partition
      Error: 1468 SQLSTATE: HY000
      (ER_PARTITION_WRONG_VALUES_ERROR)
    
Message: Only %s PARTITIONING can use VALUES %s in partition definition
      Error: 1469 SQLSTATE: HY000
      (ER_PARTITION_MAXVALUE_ERROR)
    
Message: MAXVALUE can only be used in last partition definition
      Error: 1470 SQLSTATE: HY000
      (ER_PARTITION_SUBPARTITION_ERROR)
    
Message: Subpartitions can only be hash partitions and by key
      Error: 1471 SQLSTATE: HY000
      (ER_PARTITION_SUBPART_MIX_ERROR)
    
Message: Must define subpartitions on all partitions if on one partition
      Error: 1472 SQLSTATE: HY000
      (ER_PARTITION_WRONG_NO_PART_ERROR)
    
Message: Wrong number of partitions defined, mismatch with previous setting
      Error: 1473 SQLSTATE: HY000
      (ER_PARTITION_WRONG_NO_SUBPART_ERROR)
    
Message: Wrong number of subpartitions defined, mismatch with previous setting
      Error: 1474 SQLSTATE: HY000
      (ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR)
    
Message: Constant/Random expression in (sub)partitioning function is not allowed
      Error: 1475 SQLSTATE: HY000
      (ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR)
    
Message: Expression in RANGE/LIST VALUES must be constant
      Error: 1476 SQLSTATE: HY000
      (ER_FIELD_NOT_FOUND_PART_ERROR)
    
Message: Field in list of fields for partition function not found in table
      Error: 1477 SQLSTATE: HY000
      (ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR)
    
Message: List of fields is only allowed in KEY partitions
      Error: 1478 SQLSTATE: HY000
      (ER_INCONSISTENT_PARTITION_INFO_ERROR)
    
Message: The partition info in the frm file is not consistent with what can be written into the frm file
      Error: 1479 SQLSTATE: HY000
      (ER_PARTITION_FUNC_NOT_ALLOWED_ERROR)
    
Message: The %s function returns the wrong type
      Error: 1480 SQLSTATE: HY000
      (ER_PARTITIONS_MUST_BE_DEFINED_ERROR)
    
Message: For %s partitions each partition must be defined
      Error: 1481 SQLSTATE: HY000
      (ER_RANGE_NOT_INCREASING_ERROR)
    
Message: VALUES LESS THAN value must be strictly increasing for each partition
      Error: 1482 SQLSTATE: HY000
      (ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR)
    
Message: VALUES value must be of same type as partition function
      Error: 1483 SQLSTATE: HY000
      (ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR)
    
Message: Multiple definition of same constant in list partitioning
      Error: 1484 SQLSTATE: HY000
      (ER_PARTITION_ENTRY_ERROR)
    
Message: Partitioning can not be used stand-alone in query
      Error: 1485 SQLSTATE: HY000
      (ER_MIX_HANDLER_ERROR)
    
Message: The mix of handlers in the partitions is not allowed in this version of MySQL
      Error: 1486 SQLSTATE: HY000
      (ER_PARTITION_NOT_DEFINED_ERROR)
    
Message: For the partitioned engine it is necessary to define all %s
      Error: 1487 SQLSTATE: HY000
      (ER_TOO_MANY_PARTITIONS_ERROR)
    
Message: Too many partitions (including subpartitions) were defined
      Error: 1488 SQLSTATE: HY000
      (ER_SUBPARTITION_ERROR)
    
Message: It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning
      Error: 1489 SQLSTATE: HY000
      (ER_CANT_CREATE_HANDLER_FILE)
    
Message: Failed to create specific handler file
      Error: 1490 SQLSTATE: HY000
      (ER_BLOB_FIELD_IN_PART_FUNC_ERROR)
    
Message: A BLOB field is not allowed in partition function
      Error: 1491 SQLSTATE: HY000
      (ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF)
    
Message: A %s must include all columns in the table's partitioning function
      Error: 1492 SQLSTATE: HY000
      (ER_NO_PARTS_ERROR)
    
Message: Number of %s = 0 is not an allowed value
      Error: 1493 SQLSTATE: HY000
      (ER_PARTITION_MGMT_ON_NONPARTITIONED)
    
Message: Partition management on a not partitioned table is not possible
      Error: 1494 SQLSTATE: HY000
      (ER_FOREIGN_KEY_ON_PARTITIONED)
    
Message: Foreign key condition is not yet supported in conjunction with partitioning
      Error: 1495 SQLSTATE: HY000
      (ER_DROP_PARTITION_NON_EXISTENT)
    
Message: Error in list of partitions to %s
      Error: 1496 SQLSTATE: HY000
      (ER_DROP_LAST_PARTITION)
    
Message: Cannot remove all partitions, use DROP TABLE instead
      Error: 1497 SQLSTATE: HY000
      (ER_COALESCE_ONLY_ON_HASH_PARTITION)
    
Message: COALESCE PARTITION can only be used on HASH/KEY partitions
      Error: 1498 SQLSTATE: HY000
      (ER_REORG_HASH_ONLY_ON_SAME_NO)
    
Message: REORGANISE PARTITION can only be used to reorganise partitions not to change their numbers
      Error: 1499 SQLSTATE: HY000
      (ER_REORG_NO_PARAM_ERROR)
    
Message: REORGANISE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs
      Error: 1500 SQLSTATE: HY000
      (ER_ONLY_ON_RANGE_LIST_PARTITION)
    
Message: %s PARTITION can only be used on RANGE/LIST partitions
      Error: 1501 SQLSTATE: HY000
      (ER_ADD_PARTITION_SUBPART_ERROR)
    
Message: Trying to Add partition(s) with wrong number of subpartitions
      Error: 1502 SQLSTATE: HY000
      (ER_ADD_PARTITION_NO_NEW_PARTITION)
    
Message: At least one partition must be added
      Error: 1503 SQLSTATE: HY000
      (ER_COALESCE_PARTITION_NO_PARTITION)
    
Message: At least one partition must be coalesced
      Error: 1504 SQLSTATE: HY000
      (ER_REORG_PARTITION_NOT_EXIST)
    
Message: More partitions to reorganise than there are partitions
      Error: 1505 SQLSTATE: HY000
      (ER_SAME_NAME_PARTITION)
    
Message: Duplicate partition name %s
      Error: 1506 SQLSTATE: HY000
      (ER_NO_BINLOG_ERROR)
    
Message: It is not allowed to shut off binlog on this command
      Error: 1507 SQLSTATE: HY000
      (ER_CONSECUTIVE_REORG_PARTITIONS)
    
Message: When reorganising a set of partitions they must be in consecutive order
      Error: 1508 SQLSTATE: HY000
      (ER_REORG_OUTSIDE_RANGE)
    
Message: Reorganize of range partitions cannot change total ranges except for last partition where it can extend the range
      Error: 1509 SQLSTATE: HY000
      (ER_PARTITION_FUNCTION_FAILURE)
    
Message: Partition function not supported in this version for this handler
      Error: 1510 SQLSTATE: HY000
      (ER_PART_STATE_ERROR)
    
Message: Partition state cannot be defined from CREATE/ALTER TABLE
      Error: 1511 SQLSTATE: HY000
      (ER_LIMITED_PART_RANGE)
    
Message: The %s handler only supports 32 bit integers in VALUES
      Error: 1512 SQLSTATE: HY000
      (ER_PLUGIN_IS_NOT_LOADED)
    
Message: Plugin '%s' is not loaded
      Error: 1513 SQLSTATE: HY000
      (ER_WRONG_VALUE)
    
Message: Incorrect %s value: '%s'
      Error: 1514 SQLSTATE: HY000
      (ER_NO_PARTITION_FOR_GIVEN_VALUE)
    
Message: Table has no partition for value %s
      Error: 1515 SQLSTATE: HY000
      (ER_FILEGROUP_OPTION_ONLY_ONCE)
    
Message: It is not allowed to specify %s more than once
      Error: 1516 SQLSTATE: HY000
      (ER_CREATE_FILEGROUP_FAILED)
    
Message: Failed to create %s
      Error: 1517 SQLSTATE: HY000
      (ER_DROP_FILEGROUP_FAILED)
    
Message: Failed to drop %s
      Error: 1518 SQLSTATE: HY000
      (ER_TABLESPACE_AUTO_EXTEND_ERROR)
    
Message: The handler doesn't support autoextend of tablespaces
      Error: 1519 SQLSTATE: HY000
      (ER_WRONG_SIZE_NUMBER)
    
Message: A size parameter was incorrectly specified, either number or on the form 10M
      Error: 1520 SQLSTATE: HY000
      (ER_SIZE_OVERFLOW_ERROR)
    
Message: The size number was correct but we don't allow the digit part to be more than 2 billion
      Error: 1521 SQLSTATE: HY000
      (ER_ALTER_FILEGROUP_FAILED)
    
Message: Failed to alter: %s
      Error: 1522 SQLSTATE: HY000
      (ER_BINLOG_ROW_LOGGING_FAILED)
    
Message: Writing one row to the row-based binary log failed
      Error: 1523 SQLSTATE: HY000
      (ER_BINLOG_ROW_WRONG_TABLE_DEF)
    
Message: Table definition on master and slave does not match
      Error: 1524 SQLSTATE: HY000
      (ER_BINLOG_ROW_RBR_TO_SBR)
    
Message: Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events
      Error: 1525 SQLSTATE: HY000
      (ER_FOREIGN_SERVER_DOESNT_EXIST)
    
Message: The foreign server name you are trying to reference does not exist. Data source error: %s
      Error: 1526 SQLSTATE: HY000
      (ER_EVENT_ALREADY_EXISTS)
    
Message: Event '%s' already exists
      Error: 1527 SQLSTATE: HY000
      (ER_EVENT_STORE_FAILED)
    
Message: Failed to store event %s. Error code %d from storage engine.
      Error: 1528 SQLSTATE: HY000
      (ER_EVENT_DOES_NOT_EXIST)
    
Message: Unknown event '%s'
      Error: 1529 SQLSTATE: HY000
      (ER_EVENT_CANT_ALTER)
    
Message: Failed to alter event '%s'
      Error: 1530 SQLSTATE: HY000
      (ER_EVENT_DROP_FAILED)
    
Message: Failed to drop %s
      Error: 1531 SQLSTATE: HY000
      (ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG)
    
Message: INTERVAL is either not positive or too big
      Error: 1532 SQLSTATE: HY000
      (ER_EVENT_ENDS_BEFORE_STARTS)
    
Message: ENDS is either invalid or before STARTS
      Error: 1533 SQLSTATE: HY000
      (ER_EVENT_EXEC_TIME_IN_THE_PAST)
    
Message: Event execution time is in the past. Event has been disabled
      Error: 1534 SQLSTATE: HY000
      (ER_EVENT_OPEN_TABLE_FAILED)
    
Message: Failed to open mysql.event
      Error: 1535 SQLSTATE: HY000
      (ER_EVENT_NEITHER_M_EXPR_NOR_M_AT)
    
Message: No datetime expression provided
      Error: 1536 SQLSTATE: HY000
      (ER_COL_COUNT_DOESNT_MATCH_CORRUPTED)
    
Message: Column count of mysql.%s is wrong. Expected %d, found %d. The table is probably corrupted
      Error: 1537 SQLSTATE: HY000
      (ER_CANNOT_LOAD_FROM_TABLE)
    
Message: Cannot load from mysql.%s. The table is probably corrupted
      Error: 1538 SQLSTATE: HY000
      (ER_EVENT_CANNOT_DELETE)
    
Message: Failed to delete the event from mysql.event
      Error: 1539 SQLSTATE: HY000
      (ER_EVENT_COMPILE_ERROR)
    
Message: Error during compilation of event's body
      Error: 1540 SQLSTATE: HY000
      (ER_EVENT_SAME_NAME)
    
Message: Same old and new event name
      Error: 1541 SQLSTATE: HY000
      (ER_EVENT_DATA_TOO_LONG)
    
Message: Data for column '%s' too long
      Error: 1542 SQLSTATE: HY000
      (ER_DROP_INDEX_FK)
    
Message: Cannot drop index '%s': needed in a foreign key constraint
      Error: 1543 SQLSTATE: HY000
      (ER_WARN_DEPRECATED_SYNTAX)
    
Message: The syntax '%s' is deprecated and will be removed in MySQL %s. Please use %s instead
      Error: 1544 SQLSTATE: HY000
      (ER_CANT_WRITE_LOCK_LOG_TABLE)
    
Message: You can't write-lock a log table. Only read access is possible
      Error: 1545 SQLSTATE: HY000
      (ER_CANT_READ_LOCK_LOG_TABLE)
    
Message: You can't use usual read lock with log tables. Try READ LOCAL instead
      Error: 1546 SQLSTATE: 23000
      (ER_FOREIGN_DUPLICATE_KEY)
    
Message: Upholding foreign key constraints for table '%s', entry '%s', key %d would lead to a duplicate entry
      Error: 1547 SQLSTATE: HY000
      (ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE)
    
Message: Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use scripts/mysql_fix_privilege_tables
      Error: 1548 SQLSTATE: HY000
      (ER_REMOVED_SPACES)
    
Message: Leading spaces are removed from name '%s'
      Error: 1549 SQLSTATE: HY000
      (ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR)
    
Message: Cannot switch out of the row-based binary log format when the session has open temporary tables
      Error: 1550 SQLSTATE: HY000
      (ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT)
    
Message: Cannot change the binary logging format inside a stored function or trigger
      Error: 1551 SQLSTATE: HY000
      (ER_NDB_CANT_SWITCH_BINLOG_FORMAT)
    
Message: The NDB cluster engine does not support changing the binlog format on the fly yet
      Error: 1552 SQLSTATE: HY000
      (ER_PARTITION_NO_TEMPORARY)
    
Message: Cannot create temporary table with partitions
      Error: 1553 SQLSTATE: HY000
      (ER_PARTITION_CONST_DOMAIN_ERROR)
    
Message: Partition constant is out of partition function domain
      Error: 1554 SQLSTATE: HY000
      (ER_PARTITION_FUNCTION_IS_NOT_ALLOWED)
    
Message: This partition function is not allowed
      Error: 1555 SQLSTATE: HY000
      (ER_DDL_LOG_ERROR)
    
Message: Error in DDL log
      Error: 1556 SQLSTATE: HY000
      (ER_NULL_IN_VALUES_LESS_THAN)
    
Message: Not allowed to use NULL value in VALUES LESS THAN
      Error: 1557 SQLSTATE: HY000
      (ER_WRONG_PARTITION_NAME)
    
Message: Incorrect partition name
      Error: 1558 SQLSTATE: 25001
      (ER_CANT_CHANGE_TX_ISOLATION)
    
Message: Transaction isolation level can't be changed while a transaction is in progress
      Error: 1559 SQLSTATE: HY000
      (ER_DUP_ENTRY_AUTOINCREMENT_CASE)
    
Message: ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '%s' for key '%s'
      Error: 1560 SQLSTATE: HY000
      (ER_EVENT_MODIFY_QUEUE_ERROR)
    
Message: Internal scheduler error %d
      Error: 1561 SQLSTATE: HY000
      (ER_EVENT_SET_VAR_ERROR)
    
Message: Error during starting/stopping of the scheduler. Error code %u
      Error: 1562 SQLSTATE: HY000
      (ER_PARTITION_MERGE_ERROR)
    
Message: Engine cannot be used in partitioned tables
      Error: 1563 SQLSTATE: HY000
      (ER_CANT_ACTIVATE_LOG)
    
Message: Cannot activate '%s' log
      Error: 1564 SQLSTATE: HY000
      (ER_RBR_NOT_AVAILABLE)
    
Message: The server was not built with row-based replication
      Error: 1565 SQLSTATE: HY000
      (ER_BASE64_DECODE_ERROR)
    
Message: Decoding of base64 string failed
      Error: 1566 SQLSTATE: HY000
      (ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA)
    
Message: Triggers can not be created on system tables
      Error: 1567 SQLSTATE: HY000
      (ER_EVENT_RECURSION_FORBIDDEN)
    
Message: Recursion of EVENT DDL statements is forbidden when body is present
      Error: 1568 SQLSTATE: HY000
      (ER_EVENTS_DB_ERROR)
    
Message: Cannot proceed because system tables used by Event Scheduler were found damaged at server start
      Error: 1569 SQLSTATE: HY000
      (ER_ONLY_INTEGERS_ALLOWED)
    
Message: Only integers allowed as number here
      Error: 1570 SQLSTATE: HY000
      (ER_AUTOINC_READ_FAILED)
    
Message: Failed to read auto-increment value from storage engine
      Error: 1571 SQLSTATE: HY000
      (ER_USERNAME)
    
Message: user name
      Error: 1572 SQLSTATE: HY000
      (ER_HOSTNAME)
    
Message: host name
      Error: 1573 SQLSTATE: HY000
      (ER_WRONG_STRING_LENGTH)
    
Message: String '%s' is too long for %s (should be no longer than %d)
      Error: 1574 SQLSTATE: HY000
      (ER_UNSUPORTED_LOG_ENGINE)
    
Message: This storage engine cannot be used for log tables"
      Error: 1575 SQLSTATE: HY000
      (ER_BAD_LOG_STATEMENT)
    
Message: You cannot '%s' a log table if logging is enabled
      Error: 1576 SQLSTATE: HY000
      (ER_NON_INSERTABLE_TABLE)
    
Message: The target table %s of the %s is not insertable-into
      Error: 1577 SQLSTATE: HY000
      (ER_CANT_RENAME_LOG_TABLE)
    
Message: Cannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'
      Error: 1578 SQLSTATE: 42000
      (ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT)
    
Message: Incorrect parameter count in the call to native function '%s'
      Error: 1579 SQLSTATE: 42000
      (ER_WRONG_PARAMETERS_TO_NATIVE_FCT)
    
Message: Incorrect parameters in the call to native function '%s'
      Error: 1580 SQLSTATE: 42000
      (ER_WRONG_PARAMETERS_TO_STORED_FCT)
    
Message: Incorrect parameters in the call to stored function '%s'
      Error: 1581 SQLSTATE: HY000
      (ER_NATIVE_FCT_NAME_COLLISION)
    
Message: This function '%s' has the same name as a native function
      Error: 1582 SQLSTATE: 23000
      (ER_DUP_ENTRY_WITH_KEY_NAME)
    
Message: Duplicate entry '%s' for key '%s'
      Error: 1583 SQLSTATE: HY000
      (ER_BINLOG_PURGE_EMFILE)
    
Message: Too many files opened, please execute the command again
      Error: 1584 SQLSTATE: HY000
      (ER_EVENT_CANNOT_CREATE_IN_THE_PAST)
    
Message: Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. Event has not been created
      Error: 1585 SQLSTATE: HY000
      (ER_EVENT_CANNOT_ALTER_IN_THE_PAST)
    
Message: Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. Event has not been altered
      Error: 1586 SQLSTATE: HY000
      (ER_SLAVE_INCIDENT)
    
Message: The incident %s occured on the master. Message: %s
      Error: 1587 SQLSTATE: HY000
      (ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT)
    
Message: Table has no partition for some existing values
Client error information comes from the following source files:
          The Error values and the symbols in parentheses correspond to
          definitions in the include/errmsg.h MySQL
          source file.
        
          The Message values correspond to the error messages that are
          listed in the libmysql/errmsg.c file.
          %d and %s represent
          numbers and strings, respectively, that are substituted into
          the messages when they are displayed.
        
Because updates are frequent, it is possible that those files will contain additional error information not listed here.
      Error: 2000
      (CR_UNKNOWN_ERROR)
    
Message: Unknown MySQL error
      Error: 2001
      (CR_SOCKET_CREATE_ERROR)
    
Message: Can't create UNIX socket (%d)
      Error: 2002
      (CR_CONNECTION_ERROR)
    
Message: Can't connect to local MySQL server through socket '%s' (%d)
      Error: 2003
      (CR_CONN_HOST_ERROR)
    
Message: Can't connect to MySQL server on '%s' (%d)
      Error: 2004
      (CR_IPSOCK_ERROR)
    
Message: Can't create TCP/IP socket (%d)
      Error: 2005
      (CR_UNKNOWN_HOST)
    
Message: Unknown MySQL server host '%s' (%d)
      Error: 2006
      (CR_SERVER_GONE_ERROR)
    
Message: MySQL server has gone away
      Error: 2007
      (CR_VERSION_ERROR)
    
Message: Protocol mismatch; server version = %d, client version = %d
      Error: 2008
      (CR_OUT_OF_MEMORY)
    
Message: MySQL client ran out of memory
      Error: 2009
      (CR_WRONG_HOST_INFO)
    
Message: Wrong host info
      Error: 2010
      (CR_LOCALHOST_CONNECTION)
    
Message: Localhost via UNIX socket
      Error: 2011
      (CR_TCP_CONNECTION)
    
Message: %s via TCP/IP
      Error: 2012
      (CR_SERVER_HANDSHAKE_ERR)
    
Message: Error in server handshake
      Error: 2013 (CR_SERVER_LOST)
    
Message: Lost connection to MySQL server during query
      Error: 2014
      (CR_COMMANDS_OUT_OF_SYNC)
    
Message: Commands out of sync; you can't run this command now
      Error: 2015
      (CR_NAMEDPIPE_CONNECTION)
    
Message: Named pipe: %s
      Error: 2016
      (CR_NAMEDPIPEWAIT_ERROR)
    
Message: Can't wait for named pipe to host: %s pipe: %s (%lu)
      Error: 2017
      (CR_NAMEDPIPEOPEN_ERROR)
    
Message: Can't open named pipe to host: %s pipe: %s (%lu)
      Error: 2018
      (CR_NAMEDPIPESETSTATE_ERROR)
    
Message: Can't set state of named pipe to host: %s pipe: %s (%lu)
      Error: 2019
      (CR_CANT_READ_CHARSET)
    
Message: Can't initialize character set %s (path: %s)
      Error: 2020
      (CR_NET_PACKET_TOO_LARGE)
    
Message: Got packet bigger than 'max_allowed_packet' bytes
      Error: 2021
      (CR_EMBEDDED_CONNECTION)
    
Message: Embedded server
      Error: 2022
      (CR_PROBE_SLAVE_STATUS)
    
Message: Error on SHOW SLAVE STATUS:
      Error: 2023
      (CR_PROBE_SLAVE_HOSTS)
    
Message: Error on SHOW SLAVE HOSTS:
      Error: 2024
      (CR_PROBE_SLAVE_CONNECT)
    
Message: Error connecting to slave:
      Error: 2025
      (CR_PROBE_MASTER_CONNECT)
    
Message: Error connecting to master:
      Error: 2026
      (CR_SSL_CONNECTION_ERROR)
    
Message: SSL connection error
      Error: 2027
      (CR_MALFORMED_PACKET)
    
Message: Malformed packet
      Error: 2028
      (CR_WRONG_LICENSE)
    
Message: This client library is licensed only for use with MySQL servers having '%s' license
      Error: 2029
      (CR_NULL_POINTER)
    
Message: Invalid use of null pointer
      Error: 2030
      (CR_NO_PREPARE_STMT)
    
Message: Statement not prepared
      Error: 2031
      (CR_PARAMS_NOT_BOUND)
    
Message: No data supplied for parameters in prepared statement
      Error: 2032
      (CR_DATA_TRUNCATED)
    
Message: Data truncated
      Error: 2033
      (CR_NO_PARAMETERS_EXISTS)
    
Message: No parameters exist in the statement
      Error: 2034
      (CR_INVALID_PARAMETER_NO)
    
Message: Invalid parameter number
      Error: 2035
      (CR_INVALID_BUFFER_USE)
    
Message: Can't send long data for non-string/non-binary data types (parameter: %d)
      Error: 2036
      (CR_UNSUPPORTED_PARAM_TYPE)
    
Message: Using unsupported buffer type: %d (parameter: %d)
      Error: 2037
      (CR_SHARED_MEMORY_CONNECTION)
    
Message: Shared memory: %s
      Error: 2038
      (CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR)
    
Message: Can't open shared memory; client could not create request event (%lu)
      Error: 2039
      (CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR)
    
Message: Can't open shared memory; no answer event received from server (%lu)
      Error: 2040
      (CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR)
    
Message: Can't open shared memory; server could not allocate file mapping (%lu)
      Error: 2041
      (CR_SHARED_MEMORY_CONNECT_MAP_ERROR)
    
Message: Can't open shared memory; server could not get pointer to file mapping (%lu)
      Error: 2042
      (CR_SHARED_MEMORY_FILE_MAP_ERROR)
    
Message: Can't open shared memory; client could not allocate file mapping (%lu)
      Error: 2043
      (CR_SHARED_MEMORY_MAP_ERROR)
    
Message: Can't open shared memory; client could not get pointer to file mapping (%lu)
      Error: 2044
      (CR_SHARED_MEMORY_EVENT_ERROR)
    
Message: Can't open shared memory; client could not create %s event (%lu)
      Error: 2045
      (CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR)
    
Message: Can't open shared memory; no answer from server (%lu)
      Error: 2046
      (CR_SHARED_MEMORY_CONNECT_SET_ERROR)
    
Message: Can't open shared memory; cannot send request event to server (%lu)
      Error: 2047
      (CR_CONN_UNKNOW_PROTOCOL)
    
Message: Wrong or unknown protocol
      Error: 2048
      (CR_INVALID_CONN_HANDLE)
    
Message: Invalid connection handle
      Error: 2049 (CR_SECURE_AUTH)
    
Message: Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)
      Error: 2050
      (CR_FETCH_CANCELED)
    
Message: Row retrieval was canceled by mysql_stmt_close() call
      Error: 2051 (CR_NO_DATA)
    
Message: Attempt to read column without prior row fetch
      Error: 2052
      (CR_NO_STMT_METADATA)
    
Message: Prepared statement contains no metadata
      Error: 2053
      (CR_NO_RESULT_SET)
    
Message: Attempt to read a row while there is no result set associated with the statement
      Error: 2054
      (CR_NOT_IMPLEMENTED)
    
Message: This feature is not implemented yet
      Error: 2055
      (CR_SERVER_LOST_EXTENDED)
    
Message: Lost connection to MySQL server at '%s', system error: %d
      Error: 2056 (CR_STMT_CLOSED)
    
Message: Statement closed indirectly because of a preceeding %s() call