本文記錄在 CentOS 6.5 64位系統上,從零構建 JDK 1.7 + Tomcat 8 + MySQL 5.x 生產環境的完整步驟,包含環境變量配置、服務管理、安全加固、性能調優等實戰經驗。
# 系統版本確認
cat /etc/redhat-release
# CentOS release 6.5 (Final)
# 關閉防火牆(生產建議配置 iptables 規則而非關閉)
service iptables stop
chkconfig iptables off
# 關閉 SELinux
vim /etc/selinux/config
# SELINUX=disabled
# 重啟生效
mkdir -p /usr/local/java
cd /usr/local/java
# 上傳 jdk-7u60-linux-x64.tar.gz 到此目錄
# 或 wget 下載(需 Oracle 登錄)
tar zxvf jdk-7u60-linux-x64.tar.gz
# 獲得目錄:jdk1.7.0_60
vim /etc/profile
# 文件末尾追加:
export JAVA_HOME=/usr/local/java/jdk1.7.0_60
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
# 立即生效
source /etc/profile
# 驗證
java -version
# java version "1.7.0_60"
若 /etc/profile 不生效,編輯 ~/.bashrc 加入相同配置,執行 source ~/.bashrc。
cd /usr/local
tar zxvf apache-tomcat-8.0.33.tar.gz
mv apache-tomcat-8.0.33 tomcat
vim /usr/local/tomcat/bin/catalina.sh
# 在第 85 行左右(註釋區域後)添加:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxPermSize=128m -XX:MaxNewSize=256m -Djava.awt.headless=true"
參數解析:
-server:Server 模式,長時間運行性能優化-Xms800m -Xmx800m:堆初始/最大 800MB,避免動態擴縮容震蕩-XX:PermSize=64M -XX:MaxPermSize=128m:永久代(元空間)大小,防止類加載導致 OOM-Djava.awt.headless=true:無形界面模式,解決圖表生成報錯
vim /usr/local/tomcat/conf/server.xml
# 修改 HTTP 連接器:
# 關閉 AJP(不需 Apache 前置時)
cd /usr/local/tomcat/bin
./startup.sh
# 查看日誌
tail -f ../logs/catalina.out
# 出現 "Server startup in xxx ms" 即成功
# 測試訪問
curl https://localhost:8080
echo "/usr/local/tomcat/bin/startup.sh" >> /etc/rc.local
chmod +x /etc/rc.local
# 檢查現有安裝
rpm -qa | grep mysql
# 普通卸載
rpm -e mysql
# 強制卸載(有依賴時)
rpm -e --nodeps mysql
# 再次檢查確認清理乾淨
rpm -qa | grep mysql
# 查看可用版本
yum list | grep mysql
# 安裝服務端、客戶端、開發庫
yum install -y mysql-server mysql mysql-devel
# 驗證版本
rpm -qi mysql-server
service mysqld start
# 首次啟動會自動初始化數據目錄、創建系統表、生成隨機 root 密碼(5.7+)或無密碼(5.6-)
chkconfig mysqld on
chkconfig --list | grep mysqld
# mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# 5.6 及以下版本(無初始密碼)
mysqladmin -u root password 'YourStrongPassword123!'
# 5.7+ 版本(有臨時密碼,需先登錄修改)
# grep 'temporary password' /var/log/mysqld.log
# mysql -u root -p'臨時密碼'
# ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
# 安全加固腳本(推薦執行)
mysql_secure_installation
# 會引導:修改密碼、移除匿名用戶、禁止遠程 root、移除 test 庫、重載權限
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'YourStrongPassword123!' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 生產建議:創建專用業務用戶、限制 IP、最小權限原則
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
ls -l /var/lib/mysql/
# ibdata1 - 共享表空間(InnoDB 數據+索引)
# ib_logfile0/1 - Redo Log(崩溃恢復)
# mysql/ - 系統庫
# test/ - 測試庫
# your_db/ - 業務庫(創建後出現)
# 關鍵日誌:
/var/log/mysqld.log # 錯誤日誌、啟動信息
/var/log/mysqld-slow.log # 慢查詢日誌(需配置開啟)
netstat -anp | grep 3306
# tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1234/mysqld
# InnoDB 核心
innodb_buffer_pool_size=2G # 物理記憶體 60-70%,核心參數
innodb_log_file_size=256M # Redo Log 大小
innodb_log_buffer_size=16M # Log Buffer
innodb_flush_log_at_trx_commit=1 # ACID 保證,2 可提升性能
innodb_file_per_table=ON # 獨立表空間,便於管理
# 連接與緩存
max_connections=1000 # 最大連接數
thread_cache_size=100 # 線程緩存
table_open_cache=2000 # 表緩存
query_cache_type=0 # 5.7+ 建議關閉查詢緩存
query_cache_size=0
# 字符集統一
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
AccessLogValve 記錄訪問日誌ErrorReportValve 隱藏版本信息
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
# /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
vm.swappiness = 10
| 問題 | 排查方向 |
|---|---|
| Tomcat 啟動慢 | 熵源不足 → 配置 -Djava.security.egd=file:/dev/./urandom |
| MySQL 連接拒絕 | bind-address、防火牆、skip-networking、權限表 |
| 中文亂碼 | 字符集不一致:DB/表/列/連接/應用全鏈路 utf8mb4 |
| OOM 頻發 | 堆大小、PermSize/Metaspace、代碼洩漏、GC 策略 |
| 磁盤空間暴增 | Binlog 未清理、慢查詢日誌、ibdata1 不收縮 |
遵循本文流程,可在 30 分鐘內搭建穩定可用的 Java Web 生產基礎環境。生產上線前,務必完成:安全加固、備份策略、監控告警、壓力測試、回滾預案五大項。