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

MySQL 自動化安裝部署方案:自建 RPM 包 + 模板化 my.cnf + 數據目錄模板 + Shell 一鍵腳本,支援百台並發部署

     編輯:MySQL 綜合教學

手動編譯安裝 MySQL 在百台級集群不可行。本文提供「自建 RPM + 模板化配置 + 數據目錄預備 + Shell 自動化」四位一體的標準化交付方案,實現從裸機到就緒可用的全自動部署。

一、自建企業級 RPM 包(基於源碼定制)

  1. 獲取源碼:wget https://downloads.mysql.com/archives/get/file/mysql-5.6.16.tar.gz
  2. 創建 mysql.spec 關鍵段:
Name: mysql
Version: 5.6.16
Release: guahao
License: GPL
Group: Applications/Databases
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: cmake
Packager: dba@company.com
Prefix: /opt/mysql
Summary: MySQL 5.6.16 Enterprise Build

%description
Custom MySQL build with InnoDB, Partition, Performance Schema, SSL, UTF8MB4.

%define MYSQL_USER mysql
%define MYSQL_GROUP mysql
%define __os_install_post %{nil}

%build
cd $OLDPWD/..
export CFLAGS="-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
export CXX=g++
export CXXFLAGS="-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"

cmake . \
  -DSYSCONFDIR:PATH=%{prefix} \
  -DCMAKE_INSTALL_PREFIX:PATH=%{prefix} \
  -DCMAKE_BUILD_TYPE:STRING=Release \
  -DENABLE_PROFILING:BOOL=ON \
  -DWITH_DEBUG:BOOL=OFF \
  -DWITH_VALGRIND:BOOL=OFF \
  -DENABLE_DEBUG_SYNC:BOOL=OFF \
  -DWITH_EXTRA_CHARSETS:STRING=all \
  -DWITH_SSL:STRING=bundled \
  -DWITH_UNIT_TESTS:BOOL=OFF \
  -DWITH_ZLIB:STRING=bundled \
  -DWITH_PARTITION_STORAGE_ENGINE:BOOL=ON \
  -DWITH_INNOBASE_STORAGE_ENGINE:BOOL=ON \
  -DWITH_ARCHIVE_STORAGE_ENGINE:BOOL=ON \
  -DWITH_BLACKHOLE_STORAGE_ENGINE:BOOL=ON \
  -DWITH_PERFSCHEMA_STORAGE_ENGINE:BOOL=ON \
  -DDEFAULT_CHARSET=utf8 \
  -DDEFAULT_COLLATION=utf8_general_ci \
  -DENABLED_LOCAL_INFILE:BOOL=ON \
  -DWITH_EMBEDDED_SERVER=0 \
  -DINSTALL_LAYOUT:STRING=STANDALONE \
  -DCOMMUNITY_BUILD:BOOL=ON \
  -DMYSQL_SERVER_SUFFIX='-ent'

make -j$(grep -c processor /proc/cpuinfo)

%install
cd $OLDPWD/..
make DESTDIR=$RPM_BUILD_ROOT install

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP})
%attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) %{prefix}/*

%post
ln -sf %{prefix}/lib %{prefix}/lib64

%changelog
  1. 構建:rpmbuild -bb ./mysql.spec → 產出 mysql-5.6.16-guahao.x86_64.rpm。
  2. 上傳至內部 Yum 源 / FTP 服務器統一分發。

二、模板化 my.cnf(關鍵參數佔位符)

[mysqld_safe]
pid-file=/opt/mysql/run/mysqld.pid

[mysql]
prompt=\\u@\\d \\r:\\m:\\s>
default-character-set=gbk
no-auto-rehash

[client]
socket=/opt/mysql/run/mysql.sock

[mysqld]
basedir=/opt/mysql
datadir=/data/mysql/data
tmpdir=/data/mysql/tmp
log-error=/data/mysql/log/alert.log
slow_query_log_file=/data/mysql/log/slow.log
general_log_file=/data/mysql/log/general.log
socket=/opt/mysql/run/mysql.sock

# InnoDB 核心參數(按實例內存 60-70% 設定 buffer_pool)
innodb_buffer_pool_size=10G
innodb_buffer_pool_instances=4
innodb_log_file_size=1G
innodb_log_files_in_group=4
innodb_flush_log_at_trx_commit=1
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
transaction-isolation=READ-COMMITTED

# Replication
log-bin=/data/mysql/log/mysql-bin
server_id=__SERVER_ID__          # 部署腳本動態替換
binlog_format=ROW
sync_binlog=1000
expire_logs_days=7
gtid_mode=ON
enforce_gtid_consistency=ON

# 安全與連接
skip-name-resolve
max_connections=4500
max_allowed_packet=128M
open_files_limit=65536

# 其他參數略...

關鍵點:server_id=__SERVER_ID__ 留作佔位符,部署時用時間戳/IP 尾數生成全局唯一 ID。

三、數據目錄模板(預置系統表、權限、插件)

  1. 在基準機安裝一個「乾淨」實例,執行 mysql_secure_installation、創建監控帳號、安裝審計插件。
  2. 打包:tar -czf /tmp/mysql_datadir_template.tar.gz -C /data/mysql data log tmp
  3. 新機器部署時解壓即得完整權限體系,無需跑 mysql_install_db。

四、一鍵部署 Shell 腳本 mysql_install.sh

#!/bin/bash
set -euo pipefail

# 1. 系統依賴
yum install -y cmake gcc gcc-c++ bison ncurses-devel zlib-devel openssl-devel

# 2. 用戶
id mysql &>/dev/null || groupadd mysql
id mysql &>/dev/null || useradd -g mysql -s /sbin/nologin -d /opt/mysql mysql

# 3. 從內部 FTP 拉取製品
ftp -n < /opt/mysql/my.cnf
chown -R mysql:mysql /opt/mysql

# 6. 部署數據目錄
tar -xzf mysql_datadir_template.tar.gz -C /data
chown -R mysql:mysql /data/mysql

# 7. 註冊服務並啟動
cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig mysqld on
service mysqld start

# 8. 驗證
sleep 5
/opt/mysql/bin/mysql -uroot -p'initpass' -e "SELECT VERSION(); SHOW VARIABLES LIKE 'server_id';"
echo "MySQL deployed successfully on $(hostname) with server_id=${UNIQUE_ID}"

五、擴展:Ansible/Rundeck/Jenkins 集成

  • 將上述腳本封裝為 Ansible Role,server_id 通過 inventory 變量下發。
  • Jenkins Pipeline 參數化構建:輸入目標 IP 列表、實例端口、內存規模,自動渲染 innodb_buffer_pool_size 等參數。
  • 部署後自動執行 pt-query-digest --test、mysqlslap 煙測,納入交付驗收標準。

標準化交付鏈路:源碼 → RPM → 模板 → 腳本 → 平台,讓 MySQL 部署從「手工藝」進化為「工業化產品」。

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