Install and configure Apache, MySQL & PHP on OS X Lion 10.7 and 10.6

How to install and configure Apache, MySQL and PHP on Mac OS X 10.7 Lion and OS X 10.6 Snow Leopard.

Apache and PHP already come preloaded in OS X 10.7 Lion and 10.6 Snow Leopard, the versions on 10.7 Lion are PHP 5.3.6 and Apache 2.2.20, these 2 pieces of Open Source software are part of the “AMP” stack with MySQL the missing third component.

A – Apache      M – MySQL      P  - PHP

Their are other options for Mac users to install an AMP stack using prebuilt point and click downloads including the following, MAMP, DAMPXAMPP and BitNami – these installations use separate binaries outside of the regular OS X software so no conflict occurs and it makes it easier to delete the stacks without affecting the core OS.

However you need to configure with different port numbers and sometimes can be a bit of a hassle in configuration.

This tutorial bypasses the 3rd party AMP stacks and uses the native installed components with the exception of MySQL which is a separate install, unless you have OS X Server, which then MySQL comes preloaded in 10.6 but not 10.7 which has dumped MySQL in favour of PostgreSQL instead – you can still install MySQL on 10.7 Server with the instructions below.

To get Apache, MySQL and PHP running natively on OSX is quite easy and straightforward  - this guide should have you up and running in no time.

This guide uses the command line to achieve some text editing of various configuration files, however If you aren’t comfortable in the Terminal you can do this in a graphical mode, download a free text editor utility call TextWrangler, launch it, when you come to edit one of the configuration files, open file, you have to click on “show hidden items” at the bottom of the open dialog box to see all of the system files. But you will still need to use the terminal for some of the commands which don’t involve editing files.

PHP

You can verify your version of PHP  by launching the Terminal application, as found in the Utilities folder: /Applications/Utilities/Terminal

To find the PHP version, type at the prompt:

username@[~]: php -v

And the version is displayed:


PHP 5.3.6 with Suhosin-Patch (cli) (built: Jun 16 2011 22:26:57)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies

To find the Apache version, type at the prompt:

username@[~]: httpd -v

And the version is displayed:

Server version: Apache/2.2.19 (Unix)
Server built: Jun 16 2011 22:09:54

So far so good, however by default PHP is not enabled and has to have its module loaded you need to make a simple edit in the Apache configuration file “httpd.conf” file. This is filed in /etc/apache2/httpd.conf, get there in the terminal by typing:

username@[~] cd /etc/apache2/

Then in the terminal you need to use a text editor either “vi” or nano” will do, this file also has stricter permissions so the “sudo” command needs to be used to edit the file, you will need to be an admin user to have permission to change the file, type:

username@[/etc/apache2]: sudo nano httpd.conf

and then your password.

Once in nano click “control+w” to get a search dialog, type “php” and this will bring you to the php module line:

#LoadModule php5_module libexec/apache2/libphp5.so

Uncomment out the hash # to leave it like:

LoadModule php5_module libexec/apache2/libphp5.so
enable php module in nano

enable php module in nano

Finally type “control + x” to exit and when prompted save the change by typing “y”

MySQL

So now onto the 2nd piece of the puzzle, MySQL. You need to  download it  from http://dev.mysql.com/downloads/mysql/, chose Mac OS X ver. 10.6 (x86, 64-bit), DMG Archive for an Intel Mac the .dmg file is a point and click installation nice and easy, you can download the tar.gz also for a command line install. The easiest format is the .dmg file as it allows for an installation visually using the GUI.

When downloading you don’t have to sign up, look for » No thanks, just take me to the downloads!  - go straight to the download mirrors and download the software from a mirror which is closest to you.

After download open the .dmg and install first the mysql5.5.xxx.pkg followed by MySQLstartupitem.pkg and then the MySQLPrefPane. The first is the MySQL software, the 2nd item allows MySQL to start when the Mac is booted and the third is a System Preference that allows start/stop operation and a preference to enable it to start on boot.

mysql-install-osx-dmg

Installation of MySQL

Once the installs are done you can start the mysql server right from the System Preferences which has a new preference in the “Other” category called “MySQL” click start and now it is running.

mysql-system-preference-osx

mysql-system-preference-osx

To find the MySQL version from the terminal, type at the prompt:

username@[~]: /usr/local/mysql/bin/mysql -v
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 118
Server version: 5.5.14 MySQL Community Server (GPL)
Reading history-file /Users/username/.mysql_history
Type 'help;' or '\h' for help. Type '\c' to clear at the current input statement.

This also puts you in to an interactive dialogue with mySQL, type \q to exit.

If you got the error:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' 

then mysql was not started, go back to the System Preference and start the database.

After installation, in order to use mysql commands without typing the full path to the commands you need to add the mysql directory to your shell path, this is done in your “.bash_profile” file in your home directory, if you don’t have that file just create it using vi or nano:

username@[~]: cd ; nano .bash_profile

and then add:

export PATH="/usr/local/mysql/bin:$PATH"

The first command brings you to your home directory and opens the .bash_profile file or creates a new one if it doesn’t exist, then add in the line above which adds the mysql binary path to commands that you can run. Exit the file with type “control + x” and when prompted save the change by typing “y”. Last thing to do here is to reload the shell for the above to work straight away.

username@[~]:  source ~/.bash_profile

Then test the path by just this time issuing the mysql command without the full path:

username@[~]: mysql -v

You will get the version number again, just type “\q” to exit.

The next step is to set up a root password for mysql there are 2 ways to do this one is a regular way and the other provides additional security and disables all other access:

Regular Way

If you have set the path correctly as above:

$ mysqladmin -u root password 'yourpasswordhere'

!use the single quotes

Then when logging in to mysql:

$ mysql -u root -pyourpasswordhere

!NB the no space between -p and the password

Securer Way

username@[~]: sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):

Go ahead and just hit enter if this is a new installation and no password currently exists, follow the prompts to set up a new root password – this is a root password just for mysql separate from the root password of OS X you should set this.

You also get asked about:

  • Removing anonymous users?
  • Disallow root login remotely?
  • Remove test database and access to it?
  • Reload privilege tables now?

If this is a new installation you can just answer yes to  the questions.

Once the root user and password is set, you have to interact with mysql with the username and password, so access via command line is (note that there is no space between -p and the password):

username@[~]: mysql -u root -p[password]

So thats the two components installed with MySQL having a System Preference option to Start/Stop the database.

Apache

You can start/stop the Web Server Apache in the System Preferences under Sharing and checking the WebSharing box.

web-sharing-turned-on

web-sharing-turned-on

This can also be accomplished in the terminal using:

sudo apachectl start
sudo apachectl stop

Or restart the web server gracefully using the following:

sudo apachectl graceful

Once you start your server the there are 2 x document root folders for sharing, one is a top level and the other is user account specific:


http://localhost/

and


http://localhost/~username/

You should see a “It Works!” or  a OSX welcome page depending on which document root you are at, in the finder these locations are found at your Sites folder in your home folder for local user:
/Users/username/Sites/

or at the higher level

/Library/WebServer/Documents/

At the user level in Lion 10.7 you may need to create the personal web sharing folder first, do this through System Preferences > Sharing > Web Sharing and click “Create Personal Website Folder” if it is created this will say ” Open Personal WebSite Folder”

The final thing to verify is that PHP is loaded and ready to go by creating a new text file, has to be plain text (use TextEdit) and typing in:

 <?php phpinfo(); ?>

Save the file as phpinfo.php and save it to the Sites folder in your home directory. Now point your browser to:


http://localhost/~username/phpinfo.php

You should see the full PHP configuration page. If you just see the code restart the web server to make sure the php module is loaded.

php-module-configuration

php-module-configuration

That’s it you are ready to develop and share!

The only difference between 10.6 and 10.7 are some incremental version numbers on Apache and MySQL otherwise the process is the same for both operating systems.

To get up and running with mysql and use phpMyAdmin to manage the mysql database, there is a guide here.

Then look at installing WordPress, Drupal and Joomla!!!

 

To see what you need to do in OSX 10.8 Mountain Lion I have a pre-release guide here.

Related posts:

  1. Import a mysql database into OS X 10.6 via Terminal
  2. Fastest Way to install WordPress on OSX Lion 10.7 and 10.6
  3. Installing phpMyAdmin on Mac OSX 10.7 Lion & 10.6 Snow Leopard
  4. How to Change the MySQL root Password in Linux or OSX via Command Line
  5. Optimising MySQL on OS X 10.7 Lion with mysqltuner.pl
  • Prateek

    Awesome, thanks :)

  • http://twitter.com/cbird1057 Chris Bird

    This is excellent. Much easier than other methods I’ve used it the past.
    The only mystery was:Then when logging in to mysql:
    $ mysql -u root -pyourpasswordhereI’m just not sure if this sets the password, confirms it, or is optional. I had to backtrack to get the PHPMyAdmin password to “take”, and by leaving this step out, things worked OK.Thanks a ton for this very useful step-by-step. 

  • Kurt Bigler

    The suggestion to use .bash_profile caused me some problems.  My previous .profile was in fact set up by the MacPorts package installer.  Creating .bash_profile for this caused the $PATH changes required for MacPorts to stop working.

    My impression is that using .profile is more general and using .bash_profile is perhaps ill-advised at least without a comment to the effect that if you are creating it new, it will cause any existing .profile to stop working.

    In my case, just because I worked on the MacPorts install months ago and dropped it, and also somehow lost the file in which I kept all my notes, I got really confused when I just re-approached the MacPorts install.  I assumed I must not have run the MacPorts install (or not correctly) because I checked my $PATH and saw that /opt/local/bin was not in it.

    Note that the MacPorts package installer modifies .profile automatically to add the /opt entries to $PATH, perhaps unless .bash_profile already exists in which case it may use that instead or as well–I don’t know all the details.  So running the MacPorts installer followed by your instructions was a bad combination.

    Other than that all your pages here were incredibly helpful.

  • Fgoellner

    Set up and works so far. But with php I cannot connect to my mysql db. The error message says: Warning: mysql_select_db(): Access denied for user ”@’localhost’ (using
    password: NO) in
    /Users/user/Sites/site/xy.php on line 36

    Warning: mysql_select_db(): A link to the server could not be
    established in /path/again …
    The db’s name is correct, it’s neither working with “root” nor with a newly dedicated user.

  • http://www.facebook.com/SDKlapperich Sean Klapperich

    It’s certainly worth mentioning that if you’re used to using “short tags” in PHP (i.e. <? instead of <?php) that you will need to turn it on via the "short_open_tag" setting, as it is not on by default. This led to some head scratching on my part, after attempting to run an already existing script, which obviously resulted in said script not being parsed.

  • http://profile.yahoo.com/C6U5QZVIJ4IGV7YQI7VZY5XLCA Triatmoko

    Why mySQl server doesnt show up on my system preferences?
    I have install successfully without any error message.
    thanks 

  • Husnayen Nanna

    thank you. you are the coolest………………………………

  • P A

    Thank you very much. I’m new to PHP and MYSQL and this was a great help.

  • Afiscruggs

    Thanks so much. This helped immensely

  • http://crimm.me Crimm

    I wanted to tell you thank you for this. This was a wonderful walk through!

  • Pingback: Setting Up A PHP/MySQL Web Server On A Mac | Montana Flynn

  • dedawn

    Duuuuude! You rock! It’s so nice to get a walk through that doesn’t miss a step – so hard to do! Thanks :)

  • Clare

    Really great, clear, just worked. My first ever Tutorial as a mac user – a good sign, cheers :)

  • Ralf Engel

    i was hoping to get further with your site, but got stuck rite away on ”
    Utilities folder: /Applications/Utilities/Terminal”, now, where is that? and what is that? It sure isn’t on my computer… I got php 5.3 installed, but not working, apache server isntalled and working

  • Senior Olokon

    Very great tutorial

  • Juli Gupta

    great tutorial..had it working in minutes

  • Sag

    Thanks, great tutorial.

  • andrew

    Sweet! Easier than MAMP! haha

  • http://twitter.com/SergioTechMac SergioTech&Mac

    Simple and fantastic. It’s working fine in Mac Mini Server running Mac OS X Lion Server. I have my Blog back on track. Thank you!

  • Ketzaldev

    Very good tuto, thanks dude

  • Jhig85

    Very good tutorial and thanks. I just had a quick question. When I put files into my sites folder they work from the localhost, but when I create a folder in there and go “localhost/~username/folder/ ” I get a 403 forbidden message saying I don’t have permission to access this server. Do you know what the issue is?

  • Sergej Div.

    1+ Work

  • Pingback: Quick start PHP/MySQL guide for experienced programmers | it's time to make that cool website

  • Tapos P

    great one!

  • Riquez

    Web Sharing checkbox in system prefs is OFF in my Lion, has no effect & Apache is always running regardless.

  • xAirbusDriver

    I had all this set up at least a year ago on my previous Mac and Snow Leopard. When it died I ended up with a new Core i7 iMac and it had Lion installed. Oh well… LOL! I was never able to get the MySQL/Apache/PHP setup working again, even downloaded MAMP! The only thing left that seemed to work was a bookmark to MySQL Admin. But it claims my password for ‘root’ is incorrect.

    Thanks to this page and your great instructions, everything seems to be working smoothly! Except for MySQL Admin still not accepting my password (Error #2002). Web Sharing is “Allowed” in the Firewall list. Also “mysqld” But I’m not sure that’s even a problem even though the 2002 error can result from being blocked by a firewall.

    I’m about ready to uninstall or simply download and reinstall MySQL Admin unless anyone has another suggestion. Looks like everything is in user/local/…

  • Pingback: MacMini server deel 14: Wordpress « AJvK.nl