There are many open source packages that require the "AMP" stack comprising Apache, MySQL and PHP (hence "WAMP" for Windows-Apache-MySQL-PHP and "MAMP" for macOS-Apache-MySQL-PHP). Since macOS 10.12 Sierra already includes Apache 2.4 and PHP 5.6, here's how to add MySQL 5.7.

Install MySQL

To start, download MySQL Community edition for OS X as a .DMG archive.

Double click the archive, and then double click the .PKG installer. I accepted all defaults... and finally got to this screen: It's vital to a get a screenshot or copy the default password!

MySQL Installer Temporary Password

Once installed, go ahead and start up MySQL. Start the System Preferences > MySQL Preferences Pane and hit Start MySQL Server. You can choose if you want to automatically start MySQL with your mac.

System Preferences MySQL Server Startup

Change MySQL Root Password

Next, login to the MySQL database and change the default root password. From the Terminal prompt start the MySQL client mysql. You will be prompted to enter the temporary password - enter what you captured during the installation previously:

export PATH=$PATH:/usr/local/mysql/bin
mysql -uroot -p

If the password is correct, you'll get to the MySQL prompt e.g.:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 82
Server version: 5.7.18 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

Before you can do anything else, you are forced to change the temporary password. Run these commands to change the password to pass (or anything else you want):

ALTER USER 'root'@'localhost' IDENTIFIED BY 'pass';
FLUSH PRIVILEGES;
QUIT;

I'm not concerned with security, so from now on, I simply log in with mysql -uroot -ppass. There is no space in the argument -ppass.

Create a Database

The application I was installing provided a SQL script to create tables, but first I had to create a database. The MySQL documentation describes this, but it's really simple. Running the mysql client again:

CREATE DATABASE mydatabase;
QUIT;

From now on, to start the MySQL client on the mydatabase database, the console command is mysql -uroot -ppass mydatabase.

Now, I can run the SQL commands provided by the application, which creates tables, indexes and seed data. Assuming the script is called batch-file.sql, this is how to "run" it:

mysql -uroot -ppass mydatabase < batch-file.sql > mysql.out

Review mysql.out to validate that all commands completed successfully and without errors.

Enable MySQL in PHP.INI

If you have not already started Apache with PHP, read my previous post to enable Apache and PHP.

Next, to enable a PHP library (driver) for MySQL. The MySQL PHP API documentation describes the three drivers to choose from - mysqli, PDO_MySQL or mysql (deprecated in PHP 5.5).

To do so, edit php.ini in /private/etc. You have to be administrator and the file is read-only by default.

;extension=php_mysql.dll
extension=php_mysqli.dll
;extension=php_pdo_mysql.dll

There are other settings, but for me, the defaults are sufficient.

Once you re-start Apache (apachectl -k restart), you should check the MySQL driver settings. My previous post used a simple phpinfo.php file to do this:

phpinfo mysqli settings

Edit Bash Profile

Finally, if you're expecting to use the MySQL command line tools like mysql or mysqladmin often, you should edit your .bash_profile to permanently add MySQL to your PATH (as shown above), or create aliases to these commands as described in the MySQL installation guide:

alias mysql=/usr/local/mysql/bin/mysql
alias mysqladmin=/usr/local/mysql/bin/mysqladmin
Conclusion

Once of the reasons I use a mac is that it's based on a UNIX core, and it's easy to get many open source packages running. Along with my previous post on enabling the "built-in" Apache and PHP, this post describes getting MySQL up and running.

Related Posts

Newer Post Older Post