首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 生產級安裝部署全實戰:二進制安裝、多實例、安全加固、密碼找回與 MMM 高可用架構

     編輯:MySQL 綜合教學

一、MySQL 核心特性速覽

  • 開源關係型數據庫,C/S 架構或嵌入式
  • InnoDB 表空間最大 64TB,突破單文件限制
  • 社區版、Percona Server、MariaDB 三大主流分支

二、生產環境安裝方式選型

三、二進制包標準化部署流程 (以 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 實戰

  1. mysqldump --default-character-set=utf8 -d db > schema.sql (導結構)
  2. 編輯 schema.sql:utf8 → utf8mb4
  3. mysqldump --default-character-set=utf8 --quick --no-create-info --extended-insert db > data.sql (導數據)
  4. 編輯 data.sql:SET NAMES utf8 → SET NAMES utf8mb4
  5. 建新庫 CREATE DATABASE new_db CHARSET utf8mb4;
  6. 導入結構 mysql new_db < schema.sql
  7. 導入數據 mysql new_db < data.sql

六、存儲引擎選型:InnoDB 一統江湖

  • MySQL 5.5.5+ 默認 InnoDB,支持事務、行鎖、外鍵、崩潰恢復
  • MyISAM 僅適合唯讀/歸檔表,不支持事務
  • 修改引擎:ALTER TABLE tbl ENGINE=InnoDB;
  • 建表指定:CREATE TABLE t (...) ENGINE=InnoDB CHARSET=utf8mb4;

七、常用運維命令速查

方式優點缺點推薦場景
包管理器 (yum/apt)簡單、自動依賴、易升級版本滯後、定制困難測試/非核心業務
二進制包 (Generic Linux)版本可控、無編譯依賴、部署快、易多實例需手動管理依賴 (libaio 等)生產標準首選
源碼編譯 (CMake)極致定制、精簡模塊耗時、依賴複雜、升級難特殊功能裁剪需求

八、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)

場景命令
啟動/停止/重啟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 客戶端內)
命令作用
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 故障切換演練

  1. 正常狀態:Master 持有 Writer VIP,Slave 複制 Master
  2. 執行 mmm_control move_role writer backup
  3. Monitor 指揮 Backup 關閉 read_only,掛載 Writer VIP
  4. Monitor 指揮 Slave 執行 CHANGE MASTER TO MASTER_HOST='backup' 切換複制源
  5. 新狀態:Backup 成為 Writer,Slave 複制 Backup

非搶佔模式:故障恢復後,原 Master 不會自動搶回 Writer,需人工干預,避免頻繁切換。

10.7 MMM 局限與演進

  • 異步複制下,切換可能丟失數據 (主從延遲導致)
  • 不適合強一致性業務 (金融核心交易)
  • 演進方向:半同步複制 + MMM 或遷移至 MGR (MySQL Group Replication) / InnoDB Cluster / Orchestrator + ProxySQL

十一、總結與檢查清單

  1. ✅ 二進制包標準化部署,目錄規範、配置模板化
  2. ✅ 安全加固:刪匿名用戶、禁遠程 root、專用管理員、強密碼
  3. ✅ 字符集全鏈路 utf8mb4,存量遷移有腳本
  4. ✅ InnoDB 核心參數調優 (buffer_pool, flush_log, sync_binlog)
  5. ✅ 多實例隔離部署,共用 basedir,獨立 datadir/port/socket
  6. ✅ Root 密碼找回流程文檔化,單/多實例皆驗證
  7. ✅ MMM 高可用架構理解、部署、切換演練、局限認知
  8. ✅ 監控告警:mmm_control checks 納入巡檢,VIP 可達性監控

這套體系是從 0 到 1 建設 MySQL 生產環境的完整實戰指南,建議收藏、內部評審、落地執行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved