MySQL 安裝是資料庫生命週期的起點。選對安裝方式(包管理器 vs 官方包 vs 容器)、驗證安裝完整性、初始化安全配置、設定開機自啟,能避免 90% 後續運維坑。本文系統講解 Linux(RPM/APT/YUM/DNF)、Windows、Docker 四大路徑,並給出驗證清單與安全初始化 SOP。
# 1. 配置官方 YUM 源(獲取最新版) rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm # 2. 安裝 Server + Client + Shell dnf install -y mysql-community-server mysql-community-client mysql-shell # 3. 啟動並設定開機自啟 systemctl enable --now mysqld # 4. 獲取臨時 root 密碼(8.0+ 預設生成隨機密碼存於日誌) grep 'temporary password' /var/log/mysqld.log
# 1. 配置官方 APT 源 wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb dpkg -i mysql-apt-config_0.8.24-1_all.deb # 選擇 mysql-8.0 apt update # 2. 安裝(安裝過程會提示設置 root 密碼) apt install -y mysql-server mysql-client mysql-shell # 3. 服務自動啟動並設定開機自啟 systemctl status mysql
# 下載 RPM 包組 rpm -ivh mysql-community-common-*.rpm rpm -ivh mysql-community-client-*.rpm rpm -ivh mysql-community-server-*.rpm rpm -ivh mysql-community-libs-*.rpm rpm -ivh mysql-community-icu-data-files-*.rpm # 初始化數據目錄(8.0+ 不再自動初始化,需手動) mysqld --initialize --user=mysql # 臨時密碼在 stderr 輸出,記錄下來 systemctl enable --now mysqld
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin" .\mysql.exe -u root -p # 輸入安裝時設定的密碼
docker run -d \ --name mysql8 \ -e MYSQL_ROOT_PASSWORD=StrongRandomPassword123! \ -e MYSQL_DATABASE=myapp \ -e MYSQL_USER=app_user \ -e MYSQL_PASSWORD=AppUserPass456@ \ -p 3306:3306 \ -v mysql_data:/var/lib/mysql \ -v ./my.cnf:/etc/mysql/conf.d/my.cnf \ mysql:8.0 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_0900_ai_ci \ --innodb-buffer-pool-size=1G
-v mysql_data:/var/lib/mysql(Named Volume)。-v ./my.cnf:/etc/mysql/conf.d/my.cnf。mysqladmin --version / mysql -Vsystemctl status mysqld / sc query MySQL80mysql -u root -p -e "SELECT VERSION(), CURRENT_USER();"mysql -u root -p -e "
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE t (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20));
INSERT INTO t (name) VALUES ('test');
SELECT * FROM t;
DROP DATABASE test_db;
"
# 1. 使用臨時密碼登入(RPM/手動安裝)
mysql -u root -p'TempPass!'
# 2. 修改密碼(8.0+ 語法)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword123!';
# 3. 移除匿名用戶、測試庫、遠程 root 登入
DELETE FROM mysql.user WHERE User='';
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');
FLUSH PRIVILEGES;
mysql_secure_installation(互動式完成上述所有)。systemctl enable mysqld / systemctl enable mysql(已在安裝步驟包含)。chkconfig mysqld on 或在 /etc/rc.local 添加 /etc/init.d/mysqld start。| 問題 | 原因 | 解決 |
|---|---|---|
Can't connect to local MySQL server through socket | 服務未啟動 / socket 路徑不匹配 | systemctl start mysqld、核對 my.cnf socket 路徑 |
Access denied for user 'root'@'localhost' | 密碼錯誤 / 權限表損壞 | 用 --skip-grant-tables 重置密碼、或重新初始化數據目錄 |
Plugin caching_sha2_password could not be loaded | 舊客戶端不支援 8.0 預設插件 | 客戶端升級、或用戶改用 mysql_native_password |
| Windows 安裝卡在 "Starting Service" | 端口被佔用 / 防火牆 / 權限不足 | 管理員運行、檢查 3306 端口、關閉防毒軟體嘗試 |
vm.swappiness=1。noatime 掛載、ext4/xfs、預留 20%+ 餘量。mysql_secure_installation、建立應用專用帳號、最小權限授權。my.cnf、啟用慢查詢、錯誤日誌、Binlog (ROW 格式)。MySQL 安裝不是「下一步、下一步、完成」,而是「規劃、部署、驗證、加固、監控、文檔」的完整工程鏈。將上述 SOP 內化為團隊標準、自動化為 Ansible/Terraform/Helm Chart,讓每一次部署都可重現、可審計、可信賴。