一、问题及解决方法
升级了最新的macOS Big Sur11.4后MySQL8.0.x版本的在系统偏好面板里就无法启动了,整个8.0.x版本的MySQL都安装试了一遍还是一样的问题,也没有弹出任何错误信息,需要在控制台使用命令启动、停止,命令如下:
sudo /usr/local/mysql/support-files/mysql.server start
sudo /usr/local/mysql/support-files/mysql.server stop
sudo /usr/local/mysql/support-files/mysql.server restart
但那太麻烦了,切换到MySQL5.7.x版本的没问题,但不想用低版本的。于是折腾了半天,终于在stackoverflow.com上找到了解决方法,命令行终端运行一句命令就行了:
sudo launchctl load -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
二、关于Launchctl 命令和.plist文件的拓展知识
1、Launchctl 控制macOS X系统里的启动进程(launch)
在Mac里有一个命令行工具叫做:launchctl,可以用来控制服务的自动启动或者关闭。一般的语法是
sudo launchctl load /path/to/service.plist
sudo launchctl unload /path/to/service.plist
一般plist文件放在这几个地方:
/Library/LaunchDaemons/ 由管理员定义的守护进程任务项
/Library/LaunchAgents/ 由管理员为用户定义的任务项
~/Library/LaunchAgents/
/System/Library/LaunchAgents
你可以写一个plist文件放到~/Library/Launch Agents/下面,文件里描述你的程序路径和启动参数,那么这个用户登录时就会启动这个程序了,而且是杀不了的哦,被杀了之后会自动重新启动
如果需要把它停止的话,运行一下命令
launchctl unload ~/Library/Launch Agents/com.your company.porduct
如果放到/Library/Launch Agents/下面的话,就是一开机就启动哦~
二、执行定时脚本|设置开机启动步骤
(1)编写执行脚本
通常brew在安装软件时brew为我们自动生成。
(2)去对应的目录下建立plist文件
(3)加载服务
说明:Agents文件夹下的plist是需要用户登录后,才会加载的,而Daemons文件夹下得plist是只要开机,可以不用登录就会被加载
加载/卸载服务
cd 进入指定 plist 文件 目录
launchctl load xxx.plist #加载
launchctl unload xxx.plist #取消
launchctl list #查看服务
launchctl load xxx.pist #设置开机启动但不立即启动服务
launchctl load -w xxx.pist #设置开机启动并立即启动服务
可以对服务设置别名方便操作
vim ~/.bash_profile #编辑添加如下脚本
alias mysql.start="launchctl load -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist" alias mysql.stop="launchctl unload -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist" alias mysql.restart="mysql.stop && mysql.start"
2、plist介绍
Plist的全称是Property lists,是一种用来存储串行化后的对象的文件。属性列表文件的文件扩展名为.plist,因此通常被称为plist文件。Plist文件通常用于储存用户设置,也可以用于存储捆绑的信息。
Plist组织数据到命名值和列表值,主要通过几个主要的Core Foundation类型:CFString, CFNumber, CFBoolean, CFDate, CFData, CFArray, 和 CFDictionary。
Plist结构和内容
Property lists从基本的Core Foundation 类型:CFString,CFNumber,CFBoolean,CFDate,CFData构造。要建立一个复杂的数据结构从这些基本类型,你得把它们放在里面CFDictionary或CFArray里面。为了简化对Property lists的编程,任何属性列表类型也可以被引用通过使用类型CFPropertyListRef。
在一个CFDictionary,数据结构是以键-值对的形式,其中每个键是一个字符串,该键的值可以是一个CFString字符串,一个CFNumber,一个CFBoolean,一个CFDate,一个CFData,一个CFArray,或其他CFDictionary。当使用CFDictionary作为属性列表时,所有的键必须是字符串。
在一个CFArray,数据结构是以一个可以通过索引访问的对象的有序集合。在属性列表中,一个CFArray可以包含任何的基本属性列表类型,以及CFDictionary和其他CFArray的对象。
PROPERTY LIST XML 标签
当属性列表将Core Foundation对象集合转换成一个XML的属性列表,使用文件类型标签<plist>来包含所有的属性列表。下表中列出Core Foundation数据类型常用的其他标记:
Core Foundation数据类型等同的XML
Core Foundation类型 | XML标签 |
CFString | <string> |
CFNumber | <real> 或者 <integer> |
CFBoolean | <true /> 或者<false /> |
CFDate | <date> |
CFData | <data> |
CFArray | <array> |
CFDictionary | <dict> |
2022年5月27日更新----添加com.oracle.oss.mysql.mysqld.plist默认配置文件完整内容,有网友误删了该内容,com.oracle.oss.mysql.mysqld.plist完整内容如下:
<?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>Disabled</key>
<false/>
<key>EnvironmentVariables</key>
<dict>
<key>MYSQLD_PARENT_PID</key>
<string>1</string>
</dict>
<key>ExitTimeOut</key>
<integer>600</integer>
<key>GroupName</key>
<string>_mysql</string>
<key>KeepAlive</key>
<dict>
<key>AfterInitialDemand</key>
<true/>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>Label</key>
<string>com.oracle.oss.mysql.mysqld</string>
<key>LaunchOnlyOnce</key>
<false/>
<key>ProcessType</key>
<string>Interactive</string>
<key>Program</key>
<string>/usr/local/mysql/bin/mysqld</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/mysql/bin/mysqld</string>
<string>--basedir=/usr/local/mysql</string>
<string>--datadir=/usr/local/mysql/data</string>
<string>--plugin-dir=/usr/local/mysql/lib/plugin</string>
<string>--early-plugin-load=keyring_file=keyring_file.so</string>
<string>--keyring-file-data=/usr/local/mysql/keyring/keyring</string>
<string>--log-error=/usr/local/mysql/data/mysqld.local.err</string>
<string>--pid-file=/usr/local/mysql/data/mysqld.local.pid</string>
<string>--user=_mysql</string>
<string>--default_authentication_plugin=mysql_native_password</string>
</array>
<key>RunAtLoad</key>
<false/>
<key>SessionCreate</key>
<true/>
<key>UserName</key>
<string>_mysql</string>
<key>WorkingDirectory</key>
<string>/usr/local/mysql</string>
</dict>
</plist>
可在/Library/LaunchDaemons/下新建该文件,并添加以上内容。
参考文献:
1、macos - Mac OS X, MySQL Preference Pane doesn't work - Stack Overflow
2、Mac--Launchctl介绍 - Jed_SH