針對大規模同質化環境,將 MySQL 編譯為 RPM 包並配合腳本自動化部署,能實現「一鍵交付、配置一致、版本可控」。本文記錄完整流程:原始碼編譯 RPM、資料模板打包、配置檔模板化、Shell 自動安裝腳本、遠程批量分發。
yum install -y vsftpd rpm-build cmake gcc g++ bison ncurses-devel zlib-devel
service vsftpd start # 提供檔案下載點
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.21.tar.gzrpm 子目錄。mysql.spec(關鍵片段):Name: mysql-rpm
Version: 5.6.21
Release: renfengjun
Prefix: /u01/mysql
%build
cmake . -DCMAKE_INSTALL_PREFIX=%{prefix} -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci ...
make -j $(nproc)
%install
make DESTDIR=$RPM_BUILD_ROOT install
%pre
groupadd mysql; useradd -g mysql mysql
mkdir -p /u01/mysql/{data,run,log}
chown -R mysql:mysql /u01/mysql
%post
ln -s %{prefix}/lib %{prefix}/lib64
cp %{prefix}/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
rpmbuild -bb ./mysql.spec/usr/src/redhat/RPMS/x86_64/mysql-rpm-5.6.21-renfengjun.x86_64.rpmsystemctl stop mysql
cd /u01/mysql/data
tar cf data.tar ibdata1 mysql/ dexdb/ performance_schema/ test/
關鍵:必須包含 ibdata1(系統表空間),否則 InnoDB 元資料遺失。
my.cnfserver_id 由安裝腳本以時間戳動態生成:echo 'server_id='$(date +%Y%m%d%M%S) >> my.cnf。gbk(依業務調整)。auto_install_mysql.sh#!/bin/bash
yum install -y cmake gcc g++ bison ncurses-devel zlib
ftp -n <> my.cnf
cp my.cnf /u01/mysql/
使用 dcli(Python 寫的並行 SSH 工具,類 pssh):
# 初始化 SSH 信任
dcli -l root -c 192.168.0.36 -k
# 分發腳本
dcli -l root -c 192.168.0.36 -f ./auto_install_mysql.sh
# 遠程執行
dcli -l root -c 192.168.0.36 /root/auto_install_mysql.sh
service mysql start
mysql -e "show databases; use dexdb; select * from t;"
輸出顯示 dexdb 與測試資料 renfengjun 存在,部署成功。
yum update 熱升級。innodb_buffer_pool_size 等。此套流程已在生產環境驗證,可作為 MySQL 標準化交付基線。