Installing MySQL on Mac OS X
This page is intended to document the installatin of MySQL 4.0.x on Mac OS X 10.3 (Panther). The steps for installation are documented in serveral places on the Internet with the best being Apple's devloper site at: http://developer.apple.com/internet/
However, as we all know, things never go exactly as planned and there are always a few minor differences between what someone has documented and what actually works. :-) So I'm writing up this tip to help me if I have have to install and configure MySQL again.
Getting the Software
The MySQL server software can be downloaded from http://www.mysql.com. For the binary installer, select the Installer package from the download page. This will download a disk image you can mount and run the install from.
In addition to the server software, MySQL AB (the developer) has been working on graphical administration tool for MySQL. They have Linux and Windows versions and just recently, someone has offered Mac OS X builds. As of this writing, you can get the Mac version of MySQL Control Center from http://www.pogma.com/fink/MySQLControlCenter-0.9.4.dmg. Be aware that this link could change.
Binary Installation
The disk image includes a readme with details about the install and where files will be installed. Mount the disk image and run the installer. By default everything is installed in the /usr/local/mysql
directory. Once you have everthing installed, you need to perform some configuration steps to get everything working.
MySQL Configuration
Setting up a MySQL User
The first step in setting up the software is to setup a special OS X user for the MySQL server to run as. With Panther, a user and a group for MySQL has already been created. So you don't need to do anything.
In previous versions of OS X you had to create this user manually. For the sake of completeness are the set of commands to create a MySQL user and group from the command line.
sudo bash niutil -create / /groups/mysql niutil -createprop / /groups/mysql gid 401 niutil -create / /users/mysql niutil -createprop / /users/mysql gid 401 niutil -createprop / /users/mysql uid 401 exitYou can also create the account using the NetInfo Manager utility. The user and group ID do not have to be the same. For more details see the article on Apple's Internet Developer web site: http://developer.apple.com/internet/macosx/osdb.html
Next, you can set the password for the mysql account. To do this, become super user and run the passwd
command on the mysql account.
sudo bash passwd mysql exit
Set the Permissions for the MySQL Data Directory
By default, the data directory for MySQL is: /usr/local/mysql/data
. However, the installer assigns ownership to the root
user and the wheel
group. So you must login again as root
and reassign the ownership of this directory. Here are the commands:
sudo bash chgrp -R mysql /usr/local/mysql/data chown -R mysql /usr/local/mysql/data exit
Starting the Server
Whew! That's a lot of stuff to be in a position just to start a server.
Start the server using the sudo
command. You can either run the command from a prompt or put it in a shell script. This command will start the server in the background as the mysql
user.
sudo -u mysql -b /usr/local/mysql/bin/safe_mysqld
Setting the Root Password
Now that the server is up, you need to setup some security for the MySQL server. By default, MySQL sets up 2 users, root
with no password and a blank user account which allows you to access MySQL without any password. The first order of business is to set the root
password. To do this type:
mysqladmin -u root password 'password here'
The command line assumes that mysqladmin
is in your path which is probably not the case. You can precede the command with the PATH like this: /usr/local/mysql/bin/mysqladmin
. Or, add the /usr/local/mysql/bin
directory to your PATH environment variable. I would recommend doing the latter to save yourself some typing.
Testing to Make Sure Everything is Working
Now log into MySQL as root
. Enter the following command:
mysql -u root -p Enter Password:
Enter the password you set in the previous step. This puts you at a mysql>
prompt:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 to server version: 4.0.17-standard Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
Note: Each MySQL command must be end with a semi-colon (;). Do not forget this as you enter in commands.
Next, make sure everything is working. To get a listing of all the databases in MySQL type the following:
mysql> show databases; +----------+ | Database | +----------+ | mysql | | test | +----------+ 2 rows in set (0.00 sec) mysql>
You should see two databases as shown above.
Next, delete the blank user account so only the root
user, and any other users you add, can access MySQL. To do this type the following command at the MySQL prompt:
mysql> use mysql; Database changed mysql> delete from user where User=''; Query OK, 2 rows affected (0.34 sec) mysql> exit Bye
Once blank account is deleted, you must reload the server for the change to take effect. Type the following at a shell prompt to reload the server:
mysqladmin -u root -p reload Enter password:
Now when an unauthenticated user tries to access MySQL, the following response is returned:
$ mysql ERROR 1045: Access denied for user: 'user@localhost' (Using password: NO)
That is pretty much it. You should be ready to use your MySQL server and databases at this point.
Stopping the Server
One final point to cover is stopping the server. To do this enter the following command at a shell prompt:
mysqladmin -u root -p shutdown Enter password: $ 040215 21:18:37 mysqld ended
This stops the server and closes the databases.