MySQL實現(xiàn)自動化部署腳本的詳細教程
一、前言:自動化運維的價值
在當(dāng)前的DevOps環(huán)境中,自動化部署已成為提升運維效率的核心手段。本教程將手把手教你編寫一個智能化的MySQL部署腳本,實現(xiàn)以下功能:
- 環(huán)境依賴自動檢測
- 多平臺自動適配(CentOS/Ubuntu)
- 安全加固配置
- 自定義參數(shù)配置
- 安裝日志追蹤
- 完整性校驗
二、環(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+
三、自動化腳本開發(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ù)庫名 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}錯誤:未找到 $1 命令${NC}" exit 1 fi } # 環(huán)境檢測 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ù)庫:$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 驗證安裝結(jié)果
# 連接測試 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 多版本適配實現(xiàn)
- 通過MySQL官方倉庫動態(tài)切換版本
- 自動識別CentOS/Ubuntu軟件源差異
- 處理MySQL 5.7與8.0的安裝差異
5.2 安全增強措施
- 強制使用強密碼策略
- 移除匿名用戶
- 禁用遠程root登錄
- 刪除測試數(shù)據(jù)庫
- 自動應(yīng)用安全補丁
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)罩?
六、擴展優(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 備份自動化集成
# 每日凌晨全量備份 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
- 驗證軟件源配置:
cat /etc/apt/sources.list.d/mysql*.list
7.2 連接問題處理
# 檢查防火墻規(guī)則 iptables -L -n | grep 3306 # 驗證用戶權(quán)限 SHOW GRANTS FOR 'webapp_user'@'%';
八、總結(jié)
通過本教程實現(xiàn)的自動化部署腳本具有以下優(yōu)勢:
- 安裝時間從30分鐘縮短至3分鐘
- 配置一致性達100%
- 支持主流Linux發(fā)行版
- 內(nèi)置企業(yè)級安全基線
建議根據(jù)實際業(yè)務(wù)需求調(diào)整以下參數(shù):
- innodb_buffer_pool_size(建議設(shè)置為物理內(nèi)存的70%)
- max_connections(根據(jù)并發(fā)需求調(diào)整)
- 字符集配置
- 日志保留策略
后續(xù)可結(jié)合Ansible/Terraform實現(xiàn)更復(fù)雜的部署場景,滿足大規(guī)模集群部署需求。
到此這篇關(guān)于MySQL實現(xiàn)自動化部署腳本的詳細教程的文章就介紹到這了,更多相關(guān)MySQL自動化部署腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL安全配置向?qū)ysql_secure_installation詳解
這篇文章主要介紹了MySQL安全配置向?qū)ysql_secure_installation各項配置的含義,并依據(jù)經(jīng)驗給予一了一些建議,需要的朋友可以參考下2014-03-03mysql學(xué)習(xí)之引擎、Explain和權(quán)限的深入講解
這篇文章主要給大家介紹了關(guān)于mysql學(xué)習(xí)之引擎、Explain和權(quán)限的相關(guān)資料,文中通過示例代碼將引擎、Explain和權(quán)限介紹的非常詳細,對大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06MySQL root賬號遠程新建數(shù)據(jù)庫報錯1044問題及解決方法
這篇文章主要介紹了MySQL root賬號遠程新建數(shù)據(jù)庫報錯1044問題及解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09MySQL查詢語句過程和EXPLAIN語句基本概念及其優(yōu)化
在MySQL中我們經(jīng)常會使用到一些查詢語句,如果使用合適的索引會大大簡化和加速查找,下面小編來和大家一起學(xué)習(xí)一下知識2019-05-05