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)聽(tīng)地址 # 顏色定義 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
四、腳本使用說(shuō)明
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)
- 通過(guò)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
七、常見(jiàn)問(wèn)題排查
7.1 安裝失敗排查步驟
- 檢查網(wǎng)絡(luò)連接:
ping repo.mysql.com
- 查看日志文件:
journalctl -xe
- 驗(yàn)證軟件源配置:
cat /etc/apt/sources.list.d/mysql*.list
7.2 連接問(wèn)題處理
# 檢查防火墻規(guī)則 iptables -L -n | grep 3306 # 驗(yàn)證用戶權(quán)限 SHOW GRANTS FOR 'webapp_user'@'%';
八、總結(jié)
通過(guò)本教程實(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í)現(xiàn)簡(jiǎn)易版搜索引擎的示例代碼
前段時(shí)間,因?yàn)轫?xiàng)目需求,需要根據(jù)關(guān)鍵詞搜索聊天記錄,所以本文實(shí)現(xiàn)了Mysql實(shí)現(xiàn)簡(jiǎn)易版搜索引擎,具有一定的參考價(jià)值,感興趣的可以了解一下2021-08-08MySQL安全配置向?qū)ysql_secure_installation詳解
這篇文章主要介紹了MySQL安全配置向?qū)ysql_secure_installation各項(xiàng)配置的含義,并依據(jù)經(jīng)驗(yàn)給予一了一些建議,需要的朋友可以參考下2014-03-03mysql學(xué)習(xí)之引擎、Explain和權(quán)限的深入講解
這篇文章主要給大家介紹了關(guān)于mysql學(xué)習(xí)之引擎、Explain和權(quán)限的相關(guān)資料,文中通過(guò)示例代碼將引擎、Explain和權(quán)限介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06MySQL root賬號(hào)遠(yuǎn)程新建數(shù)據(jù)庫(kù)報(bào)錯(cuò)1044問(wèn)題及解決方法
這篇文章主要介紹了MySQL root賬號(hào)遠(yuǎn)程新建數(shù)據(jù)庫(kù)報(bào)錯(cuò)1044問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09mysql 截取指定的兩個(gè)字符串之間的內(nèi)容
今天我同事在用mysql的時(shí)候,需要對(duì)一個(gè)字符串中的指定內(nèi)容進(jìn)行截取2009-07-07MySQL查詢語(yǔ)句過(guò)程和EXPLAIN語(yǔ)句基本概念及其優(yōu)化
在MySQL中我們經(jīng)常會(huì)使用到一些查詢語(yǔ)句,如果使用合適的索引會(huì)大大簡(jiǎn)化和加速查找,下面小編來(lái)和大家一起學(xué)習(xí)一下知識(shí)2019-05-05詳解MYSQL的備份還原(PHP實(shí)現(xiàn))
本篇文章是對(duì)MYSQL的備份還原進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06