MySQL實(shí)現(xiàn)自動(dòng)化部署腳本的詳細(xì)教程
一、前言:自動(dòng)化運(yùn)維的價(jià)值
在當(dāng)前的DevOps環(huán)境中,自動(dòng)化部署已成為提升運(yùn)維效率的核心手段。本教程將手把手教你編寫一個(gè)智能化的MySQL部署腳本,實(shí)現(xiàn)以下功能:
- 環(huán)境依賴自動(dòng)檢測(cè)
- 多平臺(tái)自動(dòng)適配(CentOS/Ubuntu)
- 安全加固配置
- 自定義參數(shù)配置
- 安裝日志追蹤
- 完整性校驗(yàn)
二、環(huán)境準(zhǔn)備
2.1 硬件需求
- 1GHz以上處理器
- 512MB內(nèi)存(推薦1G+)
- 5GB可用磁盤空間
2.2 系統(tǒng)要求
- CentOS 7+/RHEL 7+
- Ubuntu 18.04+
- Bash 4.2+
三、自動(dòng)化腳本開發(fā)
3.1 完整腳本代碼(mysql_auto_install.sh)
#!/bin/bash
# 配置區(qū)(用戶可修改)
MYSQL_VERSION="8.0" # 支持5.7/8.0
ROOT_PASSWORD="Sec@Pass123!" # 自定義root密碼
APP_DB_NAME="webapp_db" # 創(chuàng)建數(shù)據(jù)庫(kù)名
APP_DB_USER="webapp_user" # 應(yīng)用用戶名
APP_DB_PASS="App@Pass123!" # 應(yīng)用用戶密碼
LISTEN_ADDR="0.0.0.0" # 監(jiān)聽地址
# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
# 異常處理
trap 'echo -e "${RED}\n腳本被中斷!正在清理...${NC}"; exit 1' INT TERM
check_command() {
if ! command -v $1 &> /dev/null; then
echo -e "${RED}錯(cuò)誤:未找到 $1 命令${NC}"
exit 1
fi
}
# 環(huán)境檢測(cè)
os_check() {
if [ -f /etc/redhat-release ]; then
OS="centos"
elif [ -f /etc/lsb-release ]; then
OS="ubuntu"
else
echo -e "${RED}不支持的操作系統(tǒng)${NC}"
exit 1
fi
}
install_mysql() {
case $OS in
centos)
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
dnf config-manager --disable mysql*
dnf config-manager --enable mysql${MYSQL_VERSION//./}-community
dnf install -y mysql-community-server
;;
ubuntu)
wget -O /tmp/mysql.deb https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
DEBIAN_FRONTEND=noninteractive dpkg -i /tmp/mysql.deb
apt-get update
apt-get install -y mysql-server
;;
esac
}
configure_mysql() {
cat > /etc/mysql/conf.d/custom.cnf <<EOF
[mysqld]
bind-address = $LISTEN_ADDR
default_authentication_plugin=mysql_native_password
transaction_isolation = READ-COMMITTED
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
max_connections = 2000
innodb_buffer_pool_size = 1G
EOF
systemctl restart mysqld
systemctl enable mysqld
}
secure_installation() {
if [ "$MYSQL_VERSION" == "8.0" ]; then
temp_pass=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
mysql -uroot -p"$temp_pass" --connect-expired-password -e \
"ALTER USER 'root'@'localhost' IDENTIFIED BY '$ROOT_PASSWORD'; FLUSH PRIVILEGES;"
else
mysql_secure_installation <<EOF
y
$ROOT_PASSWORD
$ROOT_PASSWORD
y
y
y
y
EOF
fi
mysql -uroot -p"$ROOT_PASSWORD" -e \
"CREATE DATABASE $APP_DB_NAME;
CREATE USER '$APP_DB_USER'@'%' IDENTIFIED BY '$APP_DB_PASS';
GRANT ALL PRIVILEGES ON $APP_DB_NAME.* TO '$APP_DB_USER'@'%';
FLUSH PRIVILEGES;"
}
# 主執(zhí)行流程
main() {
check_command wget
os_check
install_mysql
configure_mysql
secure_installation
echo -e "${GREEN}安裝完成!"
echo -e "Root密碼:$ROOT_PASSWORD"
echo -e "應(yīng)用數(shù)據(jù)庫(kù):$APP_DB_NAME"
echo -e "應(yīng)用用戶:$APP_DB_USER / $APP_DB_PASS${NC}"
}
main
四、腳本使用說明
4.1 執(zhí)行權(quán)限設(shè)置
chmod +x mysql_auto_install.sh
4.2 執(zhí)行安裝腳本
sudo ./mysql_auto_install.sh
4.3 驗(yàn)證安裝結(jié)果
# 連接測(cè)試 mysql -u root -p"Sec@Pass123!" -e "SHOW DATABASES;" # 查看用戶權(quán)限 mysql -u root -p"Sec@Pass123!" -e "SELECT user,host FROM mysql.user;"
五、關(guān)鍵技術(shù)解析
5.1 多版本適配實(shí)現(xiàn)
- 通過MySQL官方倉(cāng)庫(kù)動(dòng)態(tài)切換版本
- 自動(dòng)識(shí)別CentOS/Ubuntu軟件源差異
- 處理MySQL 5.7與8.0的安裝差異
5.2 安全增強(qiáng)措施
- 強(qiáng)制使用強(qiáng)密碼策略
- 移除匿名用戶
- 禁用遠(yuǎn)程root登錄
- 刪除測(cè)試數(shù)據(jù)庫(kù)
- 自動(dòng)應(yīng)用安全補(bǔ)丁
5.3 性能優(yōu)化配置
[mysqld] innodb_buffer_pool_size = 1G # 緩存池大小 max_connections = 2000 # 最大連接數(shù) thread_cache_size = 100 # 線程緩存 query_cache_type = 1 # 查詢緩存 slow_query_log = 1 # 開啟慢查詢?nèi)罩?
六、擴(kuò)展優(yōu)化建議
6.1 增加監(jiān)控模塊
# 添加mysqld_exporter監(jiān)控 wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz tar xvf mysqld_exporter-*.tar.gz cp mysqld_exporter /usr/local/bin/
6.2 備份自動(dòng)化集成
# 每日凌晨全量備份 0 2 * * * /usr/bin/mysqldump -uroot -pPASSWORD --all-databases | gzip > /backup/mysql_$(date +\%F).sql.gz
七、常見問題排查
7.1 安裝失敗排查步驟
- 檢查網(wǎng)絡(luò)連接:
ping repo.mysql.com - 查看日志文件:
journalctl -xe - 驗(yàn)證軟件源配置:
cat /etc/apt/sources.list.d/mysql*.list
7.2 連接問題處理
# 檢查防火墻規(guī)則 iptables -L -n | grep 3306 # 驗(yàn)證用戶權(quán)限 SHOW GRANTS FOR 'webapp_user'@'%';
八、總結(jié)
通過本教程實(shí)現(xiàn)的自動(dòng)化部署腳本具有以下優(yōu)勢(shì):
- 安裝時(shí)間從30分鐘縮短至3分鐘
- 配置一致性達(dá)100%
- 支持主流Linux發(fā)行版
- 內(nèi)置企業(yè)級(jí)安全基線
建議根據(jù)實(shí)際業(yè)務(wù)需求調(diào)整以下參數(shù):
- innodb_buffer_pool_size(建議設(shè)置為物理內(nèi)存的70%)
- max_connections(根據(jù)并發(fā)需求調(diào)整)
- 字符集配置
- 日志保留策略
后續(xù)可結(jié)合Ansible/Terraform實(shí)現(xiàn)更復(fù)雜的部署場(chǎng)景,滿足大規(guī)模集群部署需求。
到此這篇關(guān)于MySQL實(shí)現(xiàn)自動(dòng)化部署腳本的詳細(xì)教程的文章就介紹到這了,更多相關(guān)MySQL自動(dòng)化部署腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql實(shí)用技巧之比較兩個(gè)表是否有不同數(shù)據(jù)的方法分析
這篇文章主要介紹了mysql實(shí)用技巧之比較兩個(gè)表是否有不同數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了mysql數(shù)據(jù)表比較的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-12-12
mysql8.0.11安裝配置方法圖文教程 MySQL8.0新密碼認(rèn)證方式
這篇文章主要為大家詳細(xì)介紹了mysql8.0.11安裝配置方法圖文教程,以及MySQL8.0新密碼認(rèn)證方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
Docker搭建Mysql8的主從復(fù)制實(shí)例代碼
Docker是一種流行的容器化平臺(tái),可以用來輕松部署、擴(kuò)展和管理各種應(yīng)用程序,使用?Docker?部署?MySQL?8?的主從復(fù)制可以讓你實(shí)現(xiàn)數(shù)據(jù)的備份和讀寫分離,提高數(shù)據(jù)庫(kù)的可用性和性能,這篇文章主要介紹了Docker搭建Mysql8的主從復(fù)制,需要的朋友可以參考下2026-05-05
一文分享30個(gè)MySQL中的查詢優(yōu)化實(shí)用技巧
查詢優(yōu)化的核心本質(zhì)是在消耗MySQL最少系統(tǒng)資源的前提下,實(shí)現(xiàn)最快的查詢響應(yīng)速度,本文分享了一些經(jīng)過實(shí)戰(zhàn)驗(yàn)證的核心優(yōu)化技巧,兼顧實(shí)用性和可操作性,希望對(duì)大家有所幫助2026-03-03
Mysql數(shù)據(jù)庫(kù)性能優(yōu)化二
這篇文章主要介紹了Mysql數(shù)據(jù)庫(kù)性能優(yōu)化二 的相關(guān)資料,需要的朋友可以參考下2016-04-04

