本文為快速部署參考,詳細原理與優化配置請參考完整版(文章 172793)。
#!/bin/bash
# 以 root 執行,自動化安裝 MySQL 5.7 二進制包
VERSION="5.7.3-m13"
BASE_DIR="/usr/local/mysqlService"
PKG="mysql-${VERSION}-linux-glibc2.5-x86_64.tar.gz"
URL="https://dev.mysql.com/get/Downloads/MySQL-5.7/${PKG}"
# 1. 依賴
yum install -y numactl libaio
# 2. 用戶
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
# 3. 目錄
mkdir -p ${BASE_DIR}
cd ${BASE_DIR}
# 4. 下載解壓
wget -c ${URL}
tar -zxvf ${PKG}
mv mysql-${VERSION} mysql
# 5. 權限
chown -R mysql:mysql ${BASE_DIR}/mysql
# 6. 初始化(無密碼模式,首次登入務必改密)
${BASE_DIR}/mysql/bin/mysqld --initialize-insecure --user=mysql \
--basedir=${BASE_DIR}/mysql --datadir=${BASE_DIR}/mysql/data
# 6.1 權限分離
chown -R root:root ${BASE_DIR}/mysql
chown -R mysql:mysql ${BASE_DIR}/mysql/data
# 7. 啟動腳本
cp ${BASE_DIR}/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
# 8. 配置文件
cat > /etc/my.cnf < /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 10. 啟動
service mysqld start
# 11. 安全初始化提醒
echo "MySQL 啟動完成。請執行:"
echo "${BASE_DIR}/mysql/bin/mysql -u root -p"
echo "首次登入無密碼,請立即執行:"
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongPassw0rd!';"
echo "CREATE USER 'root'@'%' IDENTIFIED BY 'StrongPassw0rd!';"
echo "GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;"
| 步驟 | 命令/操作 | 驗證方式 |
|---|---|---|
| 解壓 | tar -zxvf ... | ls -l ${BASE_DIR}/mysql/bin/mysqld |
| 初始化 | mysqld --initialize-insecure ... | data 目錄生成 ibdata1、*.ibd、mysql 系統庫 |
| 權限分離 | chown root:root 程式; chown mysql:mysql data | ls -l ${BASE_DIR}/mysql/ |
| 配置生效 | vim /etc/my.cnf | mysqld --help --verbose | grep -A1 '^basedir' |
| 服務註冊 | chkconfig --add mysqld | chkconfig --list mysqld |
| 啟動 | service mysqld start | ps -ef | grep mysqld; netstat -nutlp | grep 3306 |
| 登入測試 | mysql -u root -p | SHOW DATABASES; |
libnuma.so.1 not found → yum install numactllibaio.so.1 not found → yum install libaioCan't create test file → datadir 權限或 SELinuxUnknown variable 'innodb_buffer_pool_size=1G' → 版本不支援或單位寫法(5.7 支援 G)Access denied for user 'root'@'localhost' → 未執行安全初始化或密碼錯誤生產環境建議:使用 Ansible/Shell 腳本固化部署流程,配合 my.cnf 模板化,實現冪等、可審計的自動化交付。