| 方式 | 優點 | 缺點 | 推薦場景 |
| 包管理器 (yum/apt) | 簡單、自動依賴、易升級 | 版本滯後、定制困難 | 測試/非核心業務 |
| 二進制包 (Generic Linux) | 版本可控、無編譯依賴、部署快、易多實例 | 需手動管理依賴 (libaio 等) | 生產標準首選 |
| 源碼編譯 (CMake) | 極致定制、精簡模塊 | 耗時、依賴複雜、升級難 | 特殊功能裁剪需求 |
三、二進制包標準化部署流程 (以 MySQL 5.5.32 為例)
3.1 環境準備
yum install -y ncurses-devel gcc gcc-c++ libaio
groupadd mysql
useradd -r -s /sbin/nologin -g mysql mysql
mkdir -p /application
3.2 解壓與目錄規範
tar zxf mysql-5.5.32-linux2.6-x86_64.tar.gz
mv mysql-5.5.32 /application/mysql-5.5.32
ln -s /application/mysql-5.5.32 /application/mysql
3.3 初始化數據目錄
mkdir -p /application/mysql/data
chown -R mysql.mysql /application/mysql/
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql
3.4 配置文件模板化 (/etc/my.cnf)
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir = /application/mysql
datadir = /application/mysql/data
pid-file = /application/mysql/data/mysql.pid
log-error = /application/mysql/data/mysql.err
character-set-server = utf8
collation-server = utf8_general_ci
skip-name-resolve
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
innodb_buffer_pool_size = 1G # 物理內存 60-70%
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
sync_binlog = 500
max_connections = 2000
open_files_limit = 65535
3.5 系統服務註冊
cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
3.6 啟動與驗證
/etc/init.d/mysqld start
netstat -lntup | grep 3306
mysql -uroot -p -e "SELECT VERSION();"
四、安裝後安全加固 (必做項)
# 1. 登入
mysql -uroot -p
# 2. 刪除匿名用戶、遠程 root、test 庫
DELETE FROM mysql.user WHERE User = '';
DELETE FROM mysql.user WHERE Host = 'localhost.localdomain';
DELETE FROM mysql.user WHERE Host = '::1';
DROP DATABASE test;
# 3. 創建專用管理員 (非 root)
GRANT ALL PRIVILEGES ON *.* TO 'dba_admin'@'10.0.0.%' IDENTIFIED BY 'StrongPass!23' WITH GRANT OPTION;
# 4. 修改 root 密碼並限制本地登入
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('AnotherStrongPass!23');
FLUSH PRIVILEGES;
五、字符集最佳實踐:全鏈路 UTF-8 (utf8mb4)
5.1 系統層
cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
5.2 數據庫層
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
[client]
default-character-set = utf8mb4
5.3 應用層連接參數
jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf8mb4&zeroDateTimeBehavior=convertToNull
5.4 存量庫表遷移 UTF-8 → utf8mb4 實戰
mysqldump --default-character-set=utf8 -d db > schema.sql (導結構)
- 編輯
schema.sql:utf8 → utf8mb4
mysqldump --default-character-set=utf8 --quick --no-create-info --extended-insert db > data.sql (導數據)
- 編輯
data.sql:SET NAMES utf8 → SET NAMES utf8mb4
- 建新庫
CREATE DATABASE new_db CHARSET utf8mb4;
- 導入結構
mysql new_db < schema.sql
- 導入數據
mysql new_db < data.sql
六、存儲引擎選型:InnoDB 一統江湖
- MySQL 5.5.5+ 默認 InnoDB,支持事務、行鎖、外鍵、崩潰恢復
- MyISAM 僅適合唯讀/歸檔表,不支持事務
- 修改引擎:
ALTER TABLE tbl ENGINE=InnoDB;
- 建表指定:
CREATE TABLE t (...) ENGINE=InnoDB CHARSET=utf8mb4;
七、常用運維命令速查
| 場景 | 命令 |
| 啟動/停止/重啟 | systemctl start|stop|restart mysqld |
| 查看端口/進程 | ss -lntup | grep 3306 / ps -ef | grep mysqld |
| 登入 | mysql -uroot -p |
| 查看版本/用戶 | SELECT VERSION(); SELECT USER(); |
| 查看用戶權限 | SELECT User, Host FROM mysql.user; |
| 刷新權限 | FLUSH PRIVILEGES; |
| 執行 Shell 命令 | system ls -l /tmp; (MySQL 客戶端內) |
八、Root 密碼找回三種模式
8.1 單實例標準模式
systemctl stop mysqld
mysqld_safe --skip-grant-tables --user=mysql &
mysql -uroot
UPDATE mysql.user SET authentication_string=PASSWORD('NewPass') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
mysqladmin -uroot -p'NewPass' shutdown
systemctl start mysqld
8.2 多實例模式 (指定 socket)
killall mysqld
mysqld_safe --defaults-file=/data/3306/my.cnf --skip-grant-tables --user=mysql &
mysql -uroot -S /data/3306/mysql.sock
UPDATE mysql.user SET authentication_string=PASSWORD('NewPass') WHERE User='root';
FLUSH PRIVILEGES;
mysqladmin -uroot -p'NewPass' -S /data/3306/mysql.sock shutdown
# 以正常配置啟動對應實例
九、多實例部署架構
優勢
- 資源隔離:CPU/內存/IO 互不干擾 (配合 cgroups 更佳)
- 業務隔離:核心交易、報表、日志獨立實例
- 故障域隔離:單實例故障不影響其他業務
部署關鍵點
- 不同
port (3306, 3307...)、socket、datadir、pid-file、log-error
- 共用同一
basedir (二進制包),節省磁盤、便於升級
- 各實例獨立
my.cnf、獨立 systemd 服務單元
十、MMM (Master-Master Replication Manager) 高可用架構
10.1 架構角色
- Writer (虛擬 IP):唯一寫入入口,由 Monitor 管理漂移
- Reader (虛擬 IP 池):讀負載均衡,多個 Slave 共享
- Master/Backup:雙主互為主備,異步複制
- Slave:掛載在 Master/Backup 下,讀擴展
- Monitor:心跳檢測、角色切換、VIP 漂移、Agent 指揮
10.2 部署拓撲示例
192.168.137.10 master (Writer VIP 192.168.137.100)
192.168.137.20 backup (Reader VIP 192.168.137.120)
192.168.137.30 slave (Reader VIP 192.168.137.130)
192.168.137.40 monitor (管理節點)
10.3 核心配置 (/etc/mysql-mmm/mmm_common.conf)
active_master_role writer
cluster_interface eth0
pid_path /var/run/mysql-mmm/mmm_agentd.pid
bin_path /usr/libexec/mysql-mmm/
replication_user repl
replication_password repl
agent_user mmm_agent
agent_password mmm_agent
ip 192.168.137.10
mode master
peer backup
ip 192.168.137.20
mode master
peer master
ip 192.168.137.30
mode slave
hosts master, backup
ips 192.168.137.100
mode exclusive
hosts backup, slave
ips 192.168.137.120, 192.168.137.130, 192.168.137.140
mode balanced
10.4 Monitor 配置 (/etc/mysql-mmm/mmm_mon.conf)
include mmm_common.conf
ip 127.0.0.1
pid_path /var/run/mysql-mmm/mmm_mond.pid
bin_path /usr/libexec/mysql-mmm
status_path /var/lib/mysql-mmm/mmm_mond.status
ping_ips 192.168.137.10,192.168.137.20,192.168.137.30
auto_set_online 0
debug 0
monitor_user mmm_monitor
monitor_password mmm_monitor
10.5 常用運維命令 (mmm_control)
| 命令 | 作用 |
mmm_control show | 查看集群角色狀態 |
mmm_control checks all | 檢查所有節點心跳/複制/延遲 |
mmm_control set_offline master | 手動下線 master |
mmm_control set_online master | 手動上線 master |
mmm_control move_role writer backup | 強制將 Writer VIP 切換到 backup |
10.6 故障切換演練
- 正常狀態:Master 持有 Writer VIP,Slave 複制 Master
- 執行
mmm_control move_role writer backup
- Monitor 指揮 Backup 關閉
read_only,掛載 Writer VIP
- Monitor 指揮 Slave 執行
CHANGE MASTER TO MASTER_HOST='backup' 切換複制源
- 新狀態:Backup 成為 Writer,Slave 複制 Backup
非搶佔模式:故障恢復後,原 Master 不會自動搶回 Writer,需人工干預,避免頻繁切換。
10.7 MMM 局限與演進
- 異步複制下,切換可能丟失數據 (主從延遲導致)
- 不適合強一致性業務 (金融核心交易)
- 演進方向:半同步複制 + MMM 或遷移至 MGR (MySQL Group Replication) / InnoDB Cluster / Orchestrator + ProxySQL
十一、總結與檢查清單
- ✅ 二進制包標準化部署,目錄規範、配置模板化
- ✅ 安全加固:刪匿名用戶、禁遠程 root、專用管理員、強密碼
- ✅ 字符集全鏈路 utf8mb4,存量遷移有腳本
- ✅ InnoDB 核心參數調優 (
buffer_pool, flush_log, sync_binlog)
- ✅ 多實例隔離部署,共用 basedir,獨立 datadir/port/socket
- ✅ Root 密碼找回流程文檔化,單/多實例皆驗證
- ✅ MMM 高可用架構理解、部署、切換演練、局限認知
- ✅ 監控告警:
mmm_control checks 納入巡檢,VIP 可達性監控
這套體系是從 0 到 1 建設 MySQL 生產環境的完整實戰指南,建議收藏、內部評審、落地執行。
- 上一篇文章: MySQL 常見錯誤案例:InnoDB 數據文件大小不匹配導致啟動失敗
- 下一篇文章: MySQL sys Schema 官方手冊深度解讀:性能診斷利器的安裝、對象詳解與實戰用法
Copyright ©
程式碼之家 All Rights Reserved