Google

Getting Started With MySQL
Installation

I've sucessfully installed MySQL on Linux, FreeBSD, NetBSD, OpenBSD, SCO OpenServer and Solaris.

FreeBSD, OpenBSD, NetBSD and most Linux distributions come with MySQL and give you the option of installing it when you install the rest of the system. If you want or need to install it afterward, follow the instructions below.

RPM-based Linux

To install MySQL on an RPM-based Linux distribution like RedHat, Mandrake or TurboLinux, acquire the mysql, mysql-server and mysql-devel RPMS from RPMFind or possibly from the CD's that came with your distribution and install them using rpm -i.

Debian Linux

If you have configured apt as illustrated in the APT-HOWTO, run apt-get install mysql-server and apt-get install libmysqlclientclient6-dev. If your distribution came with MySQL, you may be promted to enter a CD. If not, it will be downloaded from the internet. When the commands complete, MySQL will be installed. MySQL packages don't appear to be available for older Debian releases, so for those releases, I've always compiled it from source. Alternatively, you can download a binary distribution in tar.gz format from the MySQL site.

Slackware Linux

The mysql package is available from ftp.slackware.com. You can install it using installpkg.

FreeBSD

If you have an internet connection, run pkg_add -r mysql. When the command completes, MySQL will be installed. You can also install MySQL from the Ports CD(s) that came with your distribution using /stand/sysinstall.

OpenBSD

The mysql-client and mysql-server packages are available from ftp.openbsd.org or on CD's that came with your distribution. You can install them using pkg_add.

NetBSD

The mysql-client and mysql-server packages are available from ftp.netbsd.org or on CD's that came with your distribution. You can install them using pkg_add.

SCO OpenServer

For SCO OpenServer, MySQL packages are available from the Skunkware ftp server. SCO OpenServer packages are often called VOL's because they come as a set of files named VOL.000.000, VOL.000.001, etc. These VOLS can be installed using the Software Manager (custom).

Solaris

The Solaris Companion CD provides MySQL. It's downloadable in package form from many web sites including the MySQL site. You can use pkgtool to install the package.

Compiling From Source

If you want to compile MySQL from source, it should compile cleanly on all of the platforms mentioned above. The source code is available from the MySQL site. With older versions of MySQL, I've run out of memory while compiling on machines with less than 64 meg. I don't believe that this is still a problem though. I usually give the configure script the --prefix=/usr/local/mysql parameter so that MySQL will be installed entirely under /usr/local/mysql. I then add /usr/local/mysql/bin to my PATH environment variable and /usr/local/mysql/lib/mysql to my LD_LIBRARY_PATH environment variable.

Starting the Database at Boot Time

The package distributions of MySQL install a script which starts the database at boot time. If you compiled from source, you'll need to install a script like the following to start the database at boot time.

#!/bin/sh

case "$1" in
        start)
                if ( test ! -d "/usr/local/mysql/var/mysql" ); then
                        /usr/local/mysql/bin/mysql_install_db
                fi
                chown -R mysql.mysql /usr/local/mysql/var
                chmod 0755 /usr/local/mysql/var
                /usr/local/mysql/bin/safe_mysqld
                ;;
        stop)
                kill `ps -efa | grep mysql | grep -v grep | awk '{print $2}'`
                ;;
        *)
                echo $"Usage: $0 {start|stop}"
                exit 1
esac

exit 0

Install this script and run it with the "start" option to start up the database. Running it with the "stop" option shuts the database down. To access a database, it must be running.

Creating a Database

After installation, MySQL is ready to use but to do any useful work, you'll have to create a database.

The installation process creates a database named mysql containing privileges and other housekeeping information and a root user which has no password.

The following command gives the root user the password newpassword.

mysqladmin -uroot password newpassword

Though you can create tables in the mysql database, it's not a good idea. You should create a new database. The following command creates a database called testdb.

mysqladmin -uroot -pnewpassword create testdb

To create a user, log into the mysql database using the following command.

mysql -uroot -pnewpassword mysql

The following queries create a user called testuser with password testpassword and allows it to log in from the local machine or any remote host.

insert into user (Host,User,Password) values ('localhost','testuser',password('testpassword'));
insert into user (Host,User,Password) values ('%','testuser',password('testpassword'));

Once the user is created, it must be given database-specific priveleges. The following query gives testuser all privileges on the testdb database.

insert into db values ('%','testdb','testuser','Y','Y','Y','Y','Y','Y','Y','Y','Y');

Older versions of MySQL have fewer columns in the db table, if the query above fails, try this one instead.

insert into db values ('%','testdb','testuser','Y','Y','Y','Y','Y','Y');

Exit the mysql client and run the following command to activate these changes.

mysqladmin -uroot -pnewpassword reload

To delete a user, log into the mysql database using the following command.

mysql -uroot -pnewpassword mysql

Delete the appropriate rows from the user and db tables. The following queries remove the testuser user and all database-specific permissions that testuser had.

DELETE FROM user WHERE user='testuser';
DELETE FROM db WHERE user='testuser';

Exit the mysql client and run the following command to activate these changes.

mysqladmin -uroot -pnewpassword reload

If you want to drop the database, you can do so with the following command.

mysqladmin -uroot -pnewpassword drop testdb

This should be enough to get you started. To set up more complex configurations, consult the MySQL online documentation.

Accessing a Database

Accessing a MySQL database using the mysql client tool is simple. For example, to access a database called testdb on the local machine as the testuser user with password testpassword, use the following command.

mysql -utestuser -ptestpassword testdb

If you want to access a database on a remote machine, say on testhost, use the -h option as follows.

mysql -htesthost -utestuser -ptestpassword testdb

Once you're connected to the database, the mysql client prompts you to enter a query. Queries may be split across multiple lines. To run a query, end it with a semicolon or type \g on the next line. To exit, type \q.

A sample mysql session follows.

[user@localhost user]$ mysql -utestuser -ptestpassword testdb
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 3.23.41

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create table testtable (
    -> col1 char(40),
    -> col2 integer 
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| testtable        |
+------------------+
1 row in set (0.00 sec)

mysql> describe testtable;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| col1  | char(40) | YES  |     | NULL    |       |
| col2  | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into testtable values ('hello',50);
Query OK, 1 row affected (0.00 sec)

mysql> insert into testtable values ('hi',60);
Query OK, 1 row affected (0.00 sec)

mysql> insert into testtable values ('bye',70);
Query OK, 1 row affected (0.00 sec)

mysql> select * from testtable;
+-------+------+
| col1  | col2 |
+-------+------+
| hello |   50 |
| hi    |   60 |
| bye   |   70 |
+-------+------+
3 rows in set (0.00 sec)

mysql> update testtable set col2=0 where col1='hi';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from testtable;
+-------+------+
| col1  | col2 |
+-------+------+
| hello |   50 |
| hi    |    0 |
| bye   |   70 |
+-------+------+
3 rows in set (0.00 sec)

mysql> delete from testtable where col2=50;
Query OK, 1 row affected (0.00 sec)

mysql> select * from testtable;
+------+------+
| col1 | col2 |
+------+------+
| hi   |    0 |
| bye  |   70 |
+------+------+
2 rows in set (0.00 sec)

mysql> drop table testtable;
Query OK, 0 rows affected (0.00 sec)

mysql> \q
Bye

Accessing a Database With SQL Relay

Accessing MySQL from SQL Relay requires an instance entry in your sqlrelay.conf file for the database that you want to access. Here is an example sqlrelay.conf which defines an SQL Relay instance called mysqltest. This instance connects to the testdb database on the local machine as the user testuser with password testpassword.

<!DOCTYPE instances SYSTEM "sqlrelay.dtd">
<instances>

        <instance id="mysqltest" port="9000" socket="/tmp/mysqltest.socket" dbase="mysql" connections="3" maxconnections="5" maxqueuelength="0" growby="1" ttl="60" endofsession="commit" sessiontimeout="600" runasuser="nobody" runasgroup="nobody" cursors="5" authtier="listener" handoff="pass">
                <users>
                        <user user="mysqltest" password="mysqltest"/>
                </users>
                <connections>
                        <connection connectionid="mysqltest" string="user=testuser;password=testpassword;db=testdb" metric="1"/>
                </connections>
        </instance>

</instances>

If you want to connect to a database on a remote machine, say on testhost, you would need to add host=testhost; to the string attribute of the connection tag.

Now you can start up this instance with the following command.

sqlr-start -id mysqltest

To connect to the instance and run queries, use the following command.

sqlrsh -id mysqltest

The following command shuts down the SQL Relay instance.

sqlr-stop mysqltest