You can install MySQL by compiling the source code with the options that best suit your needs, or by downloading and installing a prebuilt binary. In general, you'll want to use the package management system (such as the BSD ports system) appropriate to your operating system. You can also find both binary and source code at the MySQL web site, http://www.mysql.com.
Before installing using either approach, you need to prepare your operating system for MySQL. Specifically, you should create a mysql user and group under which MySQL will run.
Compiling MySQL requires the following steps:
Run configure
Configure comes with a host of options you can specify using the syntax configure --option[=value]. For example, configure --prefix=/usr/local/mysql tells the installer to use /usr/local/mysql as its installation directory.
Run make
This step performs the actual compilation.
Run makeinstall
This step takes the compiled binaries and installs all components of MySQL in their proper locations.
Under Unix, make sure directory owners are all in order.
chown -R root {INSTALL_DIR} chgrp -R mysql {INSTALL_DIR} chown -R mysql {DATA_DIR}
MySQL has three different kinds of configuration, both for the server process at server startup and for the client processes when a user executes them. In order of preference, these configuration options include:
Command-line options
Configuration file options
Environment variable options
In other words, if you have the password option specified on the command line, in your configuration file, and in an environment variable, the command-line option wins. Table 1-1 shows a list of configuration options. Each option applies to one or more MySQL tools, depending on the context.
Option |
Description |
---|---|
basedir=directory |
Specifies the root directory of your MySQL install. |
batch |
Executes in batch mode, meaning no command-line prompts or other information is sent to stdout. This is the default mode when used with a pipe. |
character-sets-dir=directory |
Specifies where your character set files are stored. |
compress |
Tells the client and server to use compression in the network protocol. |
datadir=directory |
Specifies the location of MySQL's data files. |
debug=filename |
Specifies a file to send debug information to. |
force |
Indicates that you want processing to continue for client utilities even when an error is encountered. |
host=hostname |
Identifies the host to which a client should connect by default. |
language=language |
Specifies the language to use for localization. |
log=filename |
Specifies the file to which connections and queries should be logged. |
log-isam=filename |
Specifies the file to which isam changes should be logged. |
password=password |
Specifies a default password for clients to use to connect. |
port=port_# |
Specifies the port number to which the server should listen and to which clients should connect. |
silent |
Silently exit if a connection failure occurs. |
skip-new-routines |
Tells the MySQL server to avoid new, potential buggy routines. |
skip-grant-tables |
Tells the server to ignore all grant tables, effectively giving all users full access to the database server. |
skip-locking |
Potentially provides better system performance by avoiding system locking. It should not be used in conjunction with isamchk or myisamchk. |
sleep=seconds |
Sleep between commands. |
socket=name |
Socket file to use for local connections. |
user=username |
Specifies the user name to use for client connections. |
variable-name =value |
Sets the specified variable name to a particular value. |
verbose |
Tells MySQL to talk more about what is happening. |
wait |
Tells the client to wait after a connection failure and then retry the connection. |
A MySQL configuration file has the following format:
# Example MySQL configuration file # # These options go to all clients [client] password = my_password port = 3306 socket = /var/lib/mysql/mysql.sock # These options are specifically targeted at the mysqld server [mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock skip-locking set-variable = max_allowed_packet=1M
MySQL supports multiple configuration files. As a general rule, it checks files in the following order of preference:
User configuration file (Unix only).
Configuration file specified through the --defaults-extra-file=filename option.
A configuration file in the MySQL data directory.
The system configuration file.
In all cases except the command-line and user configuration options, the name of the configuration file on Unix is my.cnf and on Windows is my.ini. A Unix user can override system configuration information by building their own configuration file in ~/.my.cnf. The system configuration file on a Unix system is /etc/my.cnf. Windows, on the other hand, has two system configuration locations, in order of preference:
C:\my.cnf
C:\WINNT\System32\my.cnf
You can alternately specify a file on the command line using the --defaults-file=filename option. This option causes all options specified in other files to be ignored, even if they are not overridden in the file you specify.
In general, you will want MySQL to begin running when the operating system comes up. How you do this depends on your operating system.
Mac OS X automatically executes all scripts under the /Library/StartupItems directory when the system boots up. If that directory does not yet exist, you will need to create it. For MySQL, you should create the directory /Library/StartupItems/MySQL and place the startup shell script MySQL and the configuration file StartupParameters.plist in that directory.
Once those files are set up, you need to edit the host configuration file /etc/hostconfig and add the line:
MYSQLSERVER=-YES-
The shell script to start, stop, and restart MySQL looks like this:
#!/bin/sh . /etc/rc.common StartService( ) { if [ "${MYSQLSERVER:=-NO-}" = "-YES-" ]; then ConsoleMessage "Starting MySQL" cd /usr/local/mysql bin/mysqld_safe --user=mysql & fi } StopService( ) { ConsoleMessage "Stopping MySQL" /usr/local/mysql/bin/mysqladmin shutdown } RestartService( ) { if [ "${MYSQLSERVER:=-NO-}" = "-YES-" ]; then ConsoleMessage "Restarting MySQL" StopService StartService else StopService fi } RunService "$1"
The configuration file looks like this:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist SYSTEM "file://localhost/System/Library/ DTDs/PropertyList.dtd"> <plist version="0.9"> <dict> <key>Description</key> <string>MySQL Database Server</string> <key>Provides</key> <array> <string>MySQL</string> </array> <key>Requires</key> <array> <string>Network</string> </array> <key>OrderPreference</key> <string>Late</string> </dict </plist>
Once installed, you should run the mysql_install_db tool to set up your databases.
Setting up other variants of Unix is as simple as copying the script mysql.server from the source's support-files directory to your version of Unix's startup directory and making sure it is executable by root. Under FreeBSD, for example, place this script in /usr/local/etc/rc.d.
Once installed, you should run the mysql_install_db tool to set up your databases.
To startup an application at system startup on the Windows platform, you need to install it as a Windows service. You can do this by hand using the command:
C:\> c:\mysql\bin\mysqld-nt --install
A more convenient way to do accomplish this task is through the winmysqladmin.exe utility that comes with the Windows installation of MySQL.
After starting the server, and before doing anything else, set a password for the root user:
mysqladmin -u root password a_good_password