Install Mysql On Mac Catalina

Second part in a multi-part blog series for Mac developers

This User Tip only contains instructions for configuring the Apache server, PHP module, and Perl module. I have another User Tip for installing and configuring MySQL and email servers. Note: This user tip is specific to macOS 10.15 “Catalina”. Pay attention to your OS version. There have been significant changes since earlier versions of macOS. Note: This post assumes you followed installing Apache, PHP, and MySQL on Mac OS X Mojave and have since upgraded to macOS Catalina. If you did not follow the original post, you should follow installing Apache, PHP, and MySQL on macOS Catalina. When Mac OS X upgrades it overwrites previous configuration files.

Part 2: macOS 11.0 Big Sur Web Development Environment

In Part 1 of this 3-part series, we covered configuring Apache on macOS to work better with your local user account, as well as the installation process for installing multiple versions of PHP.

  • How to install XAMPP on Mac: Download the correct version of XAMPP; Run the installer with the default options; Launch XAMPP; Start the services; In this tutorial, I'll be using my Mac running macOS 10.14 ('Mojave'), but the steps are the same for the other versions of Mac OSX and macOS 10.x (update: I've tested this on Catalina and it works.
  • Download and install the latest MySQL generally available release DMG for macOS. While MySQL 8 is the latest version, many of my projects still use MySQL 5.7. So I still prefer installing the older version.

In this Part 2, we will cover installing MySQL, Virtual Hosts, APC caching, YAML, and Xdebug. After finishing this tutorial, be sure to check out how to enable SSL in Part 3 of the series.

11/13/2020 Updated to reflect the release of macOS 11.0 Big Sur
12/02/2019 Updated to reflect the latest release of PHP 7.4 and the removal of PHP 7.1 from Official tap
12/02/2019 Updated to reflect the latest release of PHP 7.4 and the removal of PHP 7.1 from Official tap
10/08/2019 Updated to reflect the release of macOS 10.5 Catalina
01/10/2019 Updated to add back PHP 5.6 and PHP 7.0 from and external deprecated keg
12/12/2018 Updated to reflect the latest release of PHP 7.3 and the removal of PHP 7.0 from Brew.

This guide is intended for experienced web developers. If you are a beginner developer, you will be better served using MAMP or MAMP Pro.

Although not required for development of Grav, there are times you definitely need an installation of MySQL. In the original guide, we used the Oracle MySQL installation package. However, we now have switched to MariaDB which is a drop-in replacement for MySQL and is easily installed and updated with Brew. Detailed information on the HomeBrew installation process can be found on the mariadb.org site but the essentials are as follows:

Install MariaDB with Brew:

After a successful installation, you can start the server ane ensure it autostarts in the future with:

You should get some positive feedback on that action:

You must change MySQL server password and secure your installation. The simplest way to do this is to use the provided script:

Just answer the questions and fill them in as is appropriate for your environment. You can just press return when prompted for the current root password.

Download TablePlus and install it. (it's awesome and there's a free version!). You should be create a new MySQL connection, give it a Name, a color, and check Use socket option after you enter a User of root and your newly created password.

If you need to stop the server, you can use the simple command:

A very handy development option is to have multiple virtual hosts set up for you various projects. This means that you can set up names such as grav.mydomain.com which point to your Grav setup, or project-x.mydomain.com for a project-specific URL.

Install Mysql On Mac Catalina

Apache generally performs name-based matching, so you don't need to configure multiple IP addresses. Detailed information can be found on the apache.org site.

Apache already comes preconfigured to support this behavior but it is not enabled. First you will need to uncomment the following lines in your /usr/local/etc/httpd/httpd.conf file:

and:

Then you can edit this referenced file and configure it to your needs:

This file has some instructions already but the important thing to remember is that these rules are matched in order. When you set up virtual hosts, you will lose your older document root, so you will need to add back support for that first as a virtual host.

Don't forget to change your_user for your actual username on your Mac. For example: DocumentRoot '/Users/bernard/Sites'

As you set up your .test virtual hosts, you may receive a warning such as Warning: DocumentRoot [/Users/your_user/Sites/grav-admin] does not exist when restarting Apache. This just lets you know that the source directory listed for your virtual hosts is not present on the drive. It's an issue that can be resolved by editing this file with the corrected DocumentRoot.

We used to recommend using .dev domain name, but since Chrome 63 forces all .dev domains to use SSL, this guide has been updated to use .test

In the example virtualhost we setup above, we defined a ServerName of grav-admin.test. This by default will not resolve to your local machine, but it's often very useful to be able to setup various virtual hosts for development purposes. You can do this by manually adding entries to /etc/hosts ever time, or you can install and configure Dnsmasq to automatically handle wildcard *.test names and forward all of them to localhost (127.0.0.1).

First we install it with brew:

Then we setup *.test hosts:

Start it and ensure it auto-starts on reboot in the future:

And lastly, add it to the resolvers:

Now you can test it out by pinging some bogus .test name:

Voila! we have successfully setup wildcard forwarding of all *.test DNS names to localhost.

Caching in PHP is a big part of the performance equation. There are two types of caching typically available, and both have a big impact on speed and performance.

The first type of cache is called an opcode cache, and this is what takes your PHP script and compiles it for faster execution. This alone can typically result in a 3X speed increase!.

The second type of cache is a user cache, and this is a entry that PECL adds to the top of your php.ini. So edit this file and remove the top line:

Once that line is removed, we can add a new file with a proper entry to the recently bulit apcu.so library:

In this file paste the following:

Restart Apache with the brew services stop httpd; brew services start httpd command to pick up your changes.

APCu for other PHP versions

Catalina

For PHP 7.0 and above you can use the latest 5.x release of APCu, so the process is the same for all. First let's switch to PHP 7.0 and install the APCu library:

Restart Apache with the brew services stop httpd; brew services start httpd command to pick up your changes.

The uninstall -r enables PECL to only remove registration, it does not actually uninstall anything.

Again if you are OK with the ACPu defaults, you can leave things as-is, but you can choose to repeat the Optional APCu Configuration steps to create an APCu configuration file fore each PHP version.

For PHP 7.1, just repeat these steps but use 7.1 instead of 7.0:

For PHP 7.2:

For PHP 7.3:

For PHP 7.4:

With recent versions of Grav, we now make use of the native PECL YAML library that allow YAML processing to be done by highly efficient libYAML C library rather than by they Symfony PHP library. This can result in a 5X improvement in YAML processing times! Luckily this is a simple process to install for any PHP version:

Switch to PHP 5.6 mode, then run the following brew commands to install libyaml:

Then you can install YAML via PECL.

For PHP 5.6 we have to install the latest 1.3.x version of YAML, as this is the last version to provide PHP 5.6 support:

Answer any question by simply pressing Return to accept the default values

Restart Apache with the brew services stop httpd; brew services start httpd command to pick up your changes.

YAML for other PHP versions

For PHP 7.0 and above you can use the latest 2.x release of YAML, so the process is the same for all. First let's switch to PHP 7.0 and install the YAML library:

Restart Apache with the brew services stop httpd; brew services start httpd command to pick up your changes.

The uninstall -r enables PECL to only remove registration, it does not actually uninstall anything.

For PHP 7.1, just repeat these steps but use 7.1 instead of 7.0:

and for PHP 7.2:

Catalina

and for PHP 7.3:

and again for PHP 7.4:

[Optional] YAML Configuration

If you are feeling adventurous, or you like to keep things uniform, you can follow the same procedure as APCu and remove the default extension-'yaml.so' entry in each PHP's php.ini and instead, create a conf.d/ext-yaml.ini file:

One of the most important aspects of any kind of development is the ability to debug and fix your code. PHP comes with limited support to dump variables or log to a file, but for more complex situations you need something more powerful.

Xdebug provides is a debugging and profiling extension for PHP that provides an HTML-friendly output for the var_dump() method that improves the readability of the default version. It also provides other useful dumping methods as well as displaying stack traces. One of the best features however, is the ability to remote debug your code. This means you can set breakpoints, and step through your PHP code inspecting as you go. Full documentation on Xdebug contains extensive information about all the functionality available.

Xdebug for various PHP versions

There are some compatibility issues we need to take into account, as certain versions of PHP can only run certain versions of Xdebug:

PHP VersionCompatible Xdebug version
PHP 5.6Xdebug 2.5
PHP 7.0Xdebug 2.7
PHP 7.1Xdebug 2.9
PHP 7.2+Xdebug 3.0

To install specific versions of Xdebug we need to switch to the PHP version we want to install it on, then run these commands:

For PHP 5.6
For PHP 7.0
For PHP 7.1
For PHP 7.2+

change sphp 7.2 to the version you want to install xdebug for (from 7.2 to 8.0)

Xdebug Configuration

Like the other PECL-installed modules, this will create a simple entry in the php.ini file, but you really need to configure Xdebug for it to be useful. So let's just go ahead and create our configuration file as we'll need it shortly anyway.

You will now need to remove the zend_extension='xdebug.so' entry that PECL adds to the top of your php.ini. So edit this file and remove the top line. In this example we will use 5.6 but it's the same procedure for each version of PHP.

Once that line is removed, we can add a new file with a proper entry to the recently bulit xdebug.so library:

For Xdebug versions prior to 3.0 (ie, PHP 5.6 through PHP 7.1) you can paste the following into the file:

However, Xdebug version 3.0 (ie, PHP 7.2+) has a simplified syntax and should look like this:

Restart Apache with the brew services stop httpd; brew services start httpd command to pick up your changes. You should check the http://localhost/info.php to ensure that Xdebug information is displayed:

if Xdebug still shows up in php -v the most likely cause is you didn't remove the zend_extension='xdebug.so' entry at the top of php.ini

Restart Apache with the brew services stop httpd; brew services start httpd command to pick up your changes.

Xdebug Switcher Script

W00fz created a great tool for quickly enabling/disabling xdebug. Install this with brew:

Using it is simple, you can get the current state with:

And then turn it on or off with:

CLI Enabled Xdebug

There are times when you want to debug from the CLI, and you can do this by setting an environment variable. My preferred approach is to use a simple script that works with all versions of Xdebug. First create a file in your user's bin/ folder (create the folder if it doesn't already exist), and call it xdebug.conf then save this:

Then ensure it's executable:

Then when you need to debug, simply run it whenever you need it:

You should now be all set with a Rockin' PHP development environment! To find out how to enable SSL on Apache, check out Part 3 in the series.

NOTE: The brew installation actually creates configuration files in /usr/local/etc/php/5.6/conf.d, /usr/local/etc/php/7.0/conf.d, /usr/local/etc/php/7.1/conf.d, /usr/local/etc/php/7.2/conf.d, /usr/local/etc/php/7.3/conf.d, and /usr/local/etc/php/7.4/conf.d respectively. If you want to uninstall a PHP extension, simply rename the .ini file to .ini.bak and restart apache. Alternatively, you can simply use brew to uninstall it, and reinstall it again when you need it.

Please enable JavaScript to view the comments powered by Disqus.

Question or issue on macOS:

I’m trying to setup up MySQL on mac os 10.6 using Homebrew by brew install mysql 5.1.52.

Everything goes well and I am also successful with the mysql_install_db.
However when I try to connect to the server using:

I get:

I’ve tried to access mysqladmin or mysql using -u root -proot as well,
but it doesn’t work with or without password.

This is a brand new installation on a brand new machine and as far as I know the new installation must be accessible without a root password. I also tried:

but I also get

How to solve this problem?

Solution no. 1:

I think one can end up in this position with older versions of mysql already installed. I had the same problem and none of the above solutions worked for me. I fixed it thus:

Used brew’s remove & cleanup commands, unloaded the launchctl script, then deleted the mysql directory in /usr/local/var, deleted my existing /etc/my.cnf (leave that one up to you, should it apply) and launchctl plist

Updated the string for the plist. Note also your alternate security script directory will be based on which version of MySQL you are installing.

Step-by-step:

I then started from scratch:

  1. installed mysql with brew install mysql
  2. ran the commands brew suggested: (see note: below)

  3. Start mysql with mysql.server start command, to be able to log on it

  4. Used the alternate security script:

  5. Followed the launchctl section from the brew package script output such as,

Note: the --force bit on brew cleanup will also cleanup outdated kegs, think it’s a new-ish homebrew feature.

Note the second: a commenter says step 2 is not required. I don’t want to test it, so YMMV!

Solution no. 2:

Here are detailed instructions combining getting rid of all MySQL from your Mac then installing it The Brew Way as Sedorner wrote above:

Remove MySQL completely per The Tech Lab
  • ps -ax | grep mysql
  • stop and kill any MySQL processes
  • sudo rm /usr/local/mysql
  • sudo rm -rf /usr/local/var/mysql
  • sudo rm -rf /usr/local/mysql*
  • sudo rm ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
  • sudo rm -rf /Library/StartupItems/MySQLCOM
  • sudo rm -rf /Library/PreferencePanes/My*
  • launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
  • edit /etc/hostconfig and remove the line MYSQLCOM=-YES-
  • rm -rf ~/Library/PreferencePanes/My*
  • sudo rm -rf /Library/Receipts/mysql*
  • sudo rm -rf /Library/Receipts/MySQL*
  • sudo rm -rf /private/var/db/receipts/*mysql*
  • sudo rm -rf /tmp/mysql*
  • try to run mysql, it shouldn’t work
Brew install MySQL per user Sedorner from this StackOverflow answer
  • brew doctor and fix any errors

  • brew remove mysql

  • brew cleanup

  • brew update

  • brew install mysql

  • unset TMPDIR

  • mysql.server start

  • run the commands Brew suggests, add MySQL to launchctl so it automatically launches at startup

mysql should now work and be running all the time as expected

Godspeed.

Solution no. 3:

Had the same problem. Seems like there is something wrong with the set up instructions or the initial tables that are being created. This is how I got mysqld running on my machine.

If the mysqld server is already running on your Mac, stop it first with:

launchctl unload -w ~/Library/LaunchAgents/com.mysql.mysqld.plist

Start the mysqld server with the following command which lets anyone log in with full permissions.

mysqld_safe --skip-grant-tables

Then run mysql -u root which should now let you log in successfully without a password. The following command should reset all the root passwords.

UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root'; FLUSH PRIVILEGES;

Now if you kill the running copy of mysqld_safe and start it up again without the skip-grant-tables option, you should be able to log in with mysql -u root -p and the new password you just set.

Solution no. 4:

If brew installed MySQL 5.7, the process is a bit different than for previous versions.
In order to reset the root password, proceed as follows:

A temporary password will be printed to the console and it can only be used for updating the root password:

Solution no. 5:

Okay I had the same issue and solved it. For some reason the mysql_secure_installation script doesn’t work out of the box when using Homebrew to install mysql, so I did it manually. On the CLI enter:

That should get you into mysql. Now do the following (taken from mysql_secure_installation):

Now exit and get back into mysql with: mysql -u root -p

Solution no. 6:

I had the same problem just now. If you brew info mysql and follow the steps it looks like the root password should be new-password if I remember correctly. I was seeing the same thing you are seeing. This article helped me the most.

It turned out I didn’t have any accounts created for me. When I logged in after running mysqld_safe and did select * from user; no rows were returned. I opened the MySQLWorkbench with the mysqld_safe running and added a root account with all the privs I expected. This are working well for me now.

Solution no. 7:

If mysql is already installed

Stop mysql completely.

  1. mysql.server stop <– may need editing based on your version
  2. ps -ef | grep mysql <– lists processes with mysql in their name
  3. kill [PID] <– kill the processes by PID

Remove files. Instructions above are good. I’ll add:

Can I Install Mysql On Mac

  1. sudo find /. -name '*mysql*'
  2. Using your judgement, rm -rf these files. Note that many programs have drivers for mysql which you do not want to remove. For example, don’t delete stuff in a PHP install’s directory. Do remove stuff in its own mysql directory.

Install

Hopefully you have homebrew. If not, download it.

I like to run brew as root, but I don’t think you have to. Edit 2018: you can’t run brew as root anymore

  1. sudo brew update
  2. sudo brew install cmake <– dependency for mysql, useful
  3. sudo brew install openssl <– dependency for mysql, useful
  4. sudo brew info mysql <– skim through this… it gives you some idea of what’s coming next
  5. sudo brew install mysql --with-embedded; say done <– Installs mysql with the embedded server. Tells you when it finishes (my install took 10 minutes)

Afterwards

  1. sudo chown -R mysql /usr/local/var/mysql/ <– mysql wouldn’t work for me until I ran this command
  2. sudo mysql.server start <– once again, the exact syntax may vary
  3. Create users in mysql (http://dev.mysql.com/doc/refman/5.7/en/create-user.html). Remember to add a password for the root user.

Solution no. 8:

brew info mysql

mysql.service start

or mysql -u root

I’m looking for a solution for some time but I can not solve my problem. I tried several solutions in stackoverflow.com but no this helping me.

Solution no. 9:

TL;DR

MySQL server might not be running after installation with Brew. Try brew services start mysql or just mysql.server start if you don’t want MySQL to run as a background service.

Full Story:

Brew Install Mysql Mac Catalina

I just installed MySQL (stable) 5.7.17 on a new MacBook Pro running Sierra and also got an error when running mysql_secure_installation:

Say what?

According to the installation info from Brew, mysql_secure_installation should prompt me to… secure the installation. I figured the MySQL server might not be running and rightly so. Running brew services start mysql and then mysql_secure_installation worked like a charm.

Install Mysql Workbench Mac Catalina

Solution no. 10:

Install Mysql 5.6 Mac Catalina

Here is an update for MySQL 5.7

Install Mysql On Mac Catalina Operating System

Hope this helps!