In the past, we maintained a script for automating the installation of MySQL on macOS. Over the years, it has become difficult to ensure that the script works on all of the versions of macOS still in use, and support from MySQL for macOS is slow. As a result, we now recommend installing and maintaining MySQL using Homebrew. This allows for easy upgrades, and still includes the ability to have MySQL start on boot. Homebrew is a third party package manager, similar to yum or apt if you’re familiar with Linux package managers. It provides an easy way to install third party software and a way to keep that software up to date.
Before we begin, there are a few prerequisites:
- Xcode must be installed. It can be installed from the App Store here.
- MySQL should not already be installed on your system. If you have installed or attempted to install it before, you will need to make sure MySQL is completely removed along with all of its files and directories.
Let’s get started – the first thing you need to do is open up a terminal window and make sure you’ve accepted the Xcode license agreement by issuing this command:
sudo xcodebuild -license
You will have to press space a bunch of times to scroll to the bottom of the agreement and then type ‘agree’ if you agree to the terms.
Next, we’re going to install Homebrew (this command is all one line):
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
The installer will give you a list of things it’s going to do, just press enter and Homebrew will be installed.
Now that you have Homebrew installed, you can type check to see if there are any recommendations for your setup:
brew doctor Your system is ready to brew.
For example, you may have an outdated version of Xcode, in which case you may want to upgrade that:
$ brew doctor Please note that these warnings are just used to help the Homebrew maintainers with debugging if you file an issue. If everything you use Homebrew for is working fine: please don't worry and just ignore them. Thanks! Warning: Your Xcode (8.0) is outdated. Please update to Xcode 8.1 (or delete it). Xcode can be updated from the App Store.
Moving on, it’s time to install MySQL. As of the writing of this post, the latest version of MySQL available through Homebrew is MySQL
5.7.20 8.0.12. To install it:
brew install mysql
Once the installation completes, we’ll want to take care of a few more things. First, let’s tell it to start automatically whenever we reboot the system:
brew services start mysql
By default, MySQL is installed without a root password. This is considered insecure, so let’s get one set:
- Validate Password Plugin – you can have MySQL enforce strong passwords by enabling this, but it is optional
- Remove anonymous users – we recommend doing this
- Disallow root login remotely – we recommend doing this as well – if you need to access your databases remotely, this should be done with a specific user with rights to that database
- Remove test database and access to it – we recommend this
- Reload privilege tables now – choose yes
Once we’ve finished this up, MySQL is running on our system. Now we can test it:
mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.7.20 Homebrew 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>
You can now manage MySQL databases and users via the command line, or we recommend Sequel Pro for a graphical interface.
To update Homebrew and MySQL in the future, use the following commands:
brew update brew upgrade
If you run into any issues, feel free to open a support ticket and we’ll be happy to help troubleshoot.
Update Aug 28, 2018: Homebrew is now installing MySQL 8 by default. When this article was originally written, MySQL 5.7 was the default. While backwards compatibility is usually maintained, some changes in new versions of MySQL can cause badly written PHP scripts to perform differently. Review the notable changes in MySQL 8 here.