I'm using Homebrew to stop the service
brew services stop mysql
If you're using Homebrew, it should be located at /usr/local/Cellar/mysql/[your-version]
Go to the directory and make a backup for homebrew.mxcl.mysql.plist and open homebrew.mxcl.mysql.plist - either using nano or Sublime Text, doesn't matter.
Following are the default setting. All you need to do is to update the /usr/local/var/mysql to the new path. Save the file.
<?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>--bind-address=127.0.0.1</string>
<string>--datadir=/usr/local/var/mysql</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/usr/local/var/mysql</string>
</dict>
</plist>Make sure to copy all files under /usr/local/var/mysql to new directory. You may use the following command to copy the files recursively.
cp -R /usr/local/var/mysql /your/new/path
Once you are done with above steps, do start the service.
brew services start mysql
Try to connect to the database, create a new database - see either the new database created in old directory /usr/local/var/mysql or you new path.
To everyone who is still strugging on this matter, I experimented & moved
datadirectory to an external HDD disk and here is how.Environment
Problem
Internal disk is too small to host the MySQL databases. Had to move
datato an external HDD.Failed Attempts
I tried GUI panel (Mac Settings > MySQL > Configuration Tab > Data Directory). Once you hit
start the serverbutton it went green then quickly turned red.It turns out that any time you edited (sudo) the /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist, it got reflected on the GUI and vice-versa. But it doesn't improve the situation and can't view the log file of failed launch. I can't determine if there was a wrong config caused problem that didn't get updated on lauch or simply the error on the permission of folders.
What was Really Wrong with Mac OS
Mac OS by default doesn't set file/folder owner on external disks for maximum compatibility. However it can cause a problem since our MySQL setup requires
datafolder to be of permissionuser:_mysqlandgroup:_mysql. Each time i execute:sudo chown -R _mysql:_mysql folder_nameit doesn't yield error, but also doesn't work at all.You can verify if your external disk supports owner by (Disk Utility > your-disk-name > look for "Owners")
It turns out you need to enable it in the GUI.
(Finder > Right Click on disk > Get Info > scroll down > Uncheck "ignore ownership on this device"), you may click the lock icon to allow changes, and also review who can "Read and Write" the disk.
Now do the
sudo chown -R _mysql:_mysql folder_nameagain and it works.Move Data
Move the
datadirectory into the HDD disk, I used following:sudo mv /usr/local/mysql/data /Volumes/your-disk-name/your-locationIt worked. Upon double check the original
datafolder and moved one, the ownership_mysql:_mysqlkept.Launch MySQL
I tried GUI again, fill in the changed three variables accordingly: the
--datadir,--log-errorand--pid-file.It doesnt work. The indicator turned green then went red.
So instead, I directly launched it via terminal.
Notice I have correspondingly changed any
mysql/datalocation to the newly moved location for three options, the--datadir,--log-errorand--pid-fileand leave others untouched.This time it works without error. I connected it via
mysql -u root -p.When I go back to check on the GUI panel after several minutes, the indicator is green, too.
:)