There are some differences in between Mac and Linux(CentOS) for my.cnf and some command line interfaces. There are two different approach to install MySQL on MAC: 1) Install by dmg file can download at https://www.mysql.com/downloads/ and 2) installing by brew. I will talk about the installation based on brew here.

Install MySQL by brew

If you face any error when you run below command line, you will need to install brew.

sudo brew install mysql


If you want to allow connection from external servers, you need to modify /usr/local/Cellar/mysql/8.0.19/homebrew.mxcl.mysql.plist and bind-address=0.0.0.0 as following:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>KeepAlive</key>
  <true/>
  <key>Label</key>
  <string>homebrew.mxcl.mysql</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/opt/mysql/bin/mysqld_safe</string>
    <string>--datadir=/usr/local/var/mysql</string>
    <string>--bind-address=0.0.0.0</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>WorkingDirectory</key>
  <string>/usr/local/var/mysql</string>
</dict>
</plist>

MySQL server I used is 8.0.19, so the directory path for homebrew.mxcl.mysql.plist could be different than mine.


If you need to modify my.cnf, you will need to create it by vi /etc/my.cnf

#
# created by Chun Kang 2020-03-09
# based on the guide at https://confluence.atlassian.com/doc/database-setup-for-mysql-128747.html
#

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
bind-address=0.0.0.0
skip-name-resolve

character-set-server=utf8mb4
collation-server=utf8mb4_bin
default-storage-engine=INNODB
max_allowed_packet=256M
innodb_log_file_size=2GB
transaction-isolation=READ-COMMITTED
binlog_format=row
default_time_zone='+09:00'
max_connections=4096

Start MySQL

sudo brew services start mysql

Stop MySQL

sudo brew services stop mysql

Restart MySQL

sudo brew services restart mysql

Set root access permission from all hosts

cd /usr/local/mysql/bin
mysql -u root -p mysql

If you see > prompt, you can change it by below

update set host='%' from user where user='root';
flush;

If everything is okay, you can check it as following

select host, user, grant_priv from user;

+-----------+------------------+------------+
| host      | user             | grant_priv |
+-----------+------------------+------------+
| %         | root             | Y          |
| localhost | mysql.infoschema | N          |
| localhost | mysql.session    | N          |
| localhost | mysql.sys        | N          |
+-----------+------------------+------------+