不使用 Homebrew、DMG 安裝包,而是直接部署 MySQL 官方提供的二進制壓縮包,能獲得最高版本控制彈性、多版本共存、可攜式部署能力。本文記錄在 macOS 上手動部署 MySQL 8.0/5.7 的標準化流程。
mysql-VERSION-macos10.14-x86_64.tar.gz 或 arm64 版)。/usr/local/mysql-VERSION,符號連結 /usr/local/mysql 指向當前版本。_mysql(macOS 通常預設存在)。cd /usr/local
sudo tar xzf ~/Downloads/mysql-8.0.36-macos14-x86_64.tar.gz
sudo ln -s mysql-8.0.36-macos14-x86_64 mysql
sudo chown -R _mysql:_mysql mysql-8.0.36-macos14-x86_64
cd /usr/local/mysql
sudo mkdir -p data
sudo bin/mysqld --initialize-insecure --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# --initialize-insecure:產生無密碼 root 帳號(首次登入無需密碼,建議立即修改)
# 生產環境請用 --initialize 產生隨機密碼(輸出至 stderr)
/usr/local/mysql/my.cnf 或 /etc/my.cnf):[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
socket = /tmp/mysql.sock
pid-file = /usr/local/mysql/mysql.pid
log-error = /usr/local/mysql/data/error.log
# 二進制日誌
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 100M
# 字元集
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
# InnoDB 基礎調校
innodb_buffer_pool_size = 1G # 視實體記憶體 50-70%
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
# 連線
max_connections = 200
sudo chown -R root:mysql /usr/local/mysql
sudo chown -R _mysql:mysql /usr/local/mysql/data
sudo bin/mysql_ssl_rsa_setup --uid=_mysql --datadir=/usr/local/mysql/data
建立 /Library/LaunchDaemons/com.mysql.mysqld.plist:
Label com.mysql.mysqld
ProgramArguments
/usr/local/mysql/bin/mysqld
--user=_mysql
--basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data
RunAtLoad
KeepAlive
WorkingDirectory /usr/local/mysql
StandardOutPath /usr/local/mysql/data/mysql.stdout.log
StandardErrorPath /usr/local/mysql/data/mysql.stderr.log
載入服務:
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysqld.plist
sudo launchctl start com.mysql.mysqld
sudo cp /usr/local/mysql/support-files/mysql.server /usr/local/bin/mysql.server
sudo chmod +x /usr/local/bin/mysql.server
# 管理指令
sudo mysql.server start
sudo mysql.server stop
sudo mysql.server restart
sudo mysql.server status
# 無密碼登入 (initialize-insecure)
/usr/local/mysql/bin/mysql -u root -p
# 按 Enter 直接進入
# 立即修改 root 密碼並移除匿名帳號、測試資料庫
ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongNewPassword';
DELETE FROM mysql.user WHERE User='';
DROP DATABASE IF EXISTS test;
FLUSH PRIVILEGES;
/usr/local/mysql/bin 加入 PATH(~/.zprofile 或 ~/.bash_profile)。/usr/local/mysql-5.7、/usr/local/mysql-8.0 等獨立目錄。/usr/local/mysql 符號連結指向當前作用版本。sudo rm /usr/local/mysql && sudo ln -s /usr/local/mysql-5.7 /usr/local/mysql → 重啟服務。data 目錄、my.cnf、socket、port(如 3306/3307)。
# 狀態檢查
/usr/local/mysql/bin/mysqladmin -u root -p status
/usr/local/mysql/bin/mysqladmin -u root -p variables
# 備份
/usr/local/mysql/bin/mysqldump -u root -p --all-databases --single-transaction --routines --triggers > all_dbs_$(date +%F).sql
# 匯入
/usr/local/mysql/bin/mysql -u root -p < backup.sql
# 升級 (原地升級風險高,建議新版本平行部署遷移)
手動部署雖步驟較多,但賦予完全掌控權,適合生產環境標準化部署、多版本測試、教學示範。