目录
- MySQL安装(RPM/YUM/源码)
- MySQL基础操作(SQL/约束/数据类型)
- MySQL高级特性(索引/视图/存储引擎/锁/事务)
- MySQL备份恢复与主从复制
- MySQL高可用(MHA/读写分离)
- Redis(安装/指令/集群/持久化)
- Nginx(安装/虚拟主机/模块/优化)
- LNMP/Tomcat/动静分离
- 高可用组件(Keepalived/LVS/HAProxy)
1. MySQL安装(RPM/YUM/源码)
1.1 RPM包安装MySQL 5.7.37
rpm -e mariadb-libs --nodeps
rpm -ivh mysql-community-common-5.7.37-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.37-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.37-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.37-1.el7.x86_64.rpm
systemctl start mysqld
cat /var/log/mysqld.log | grep password
mysql -uroot -p
1.2 YUM安装MySQL
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum -y install mysql-community-server
systemctl start mysqld
cat /var/log/mysqld.log | grep password
1.3 源码安装MySQL 5.7.37
1.3.1 依赖安装
yum install -y cmake make gcc gcc-c++ openssl openssl-devel ncurses ncurses-devel bison bison-devel
1.3.2 编译安装
tar -zxf mysql-boost-5.7.37.tar.gz -C /usr/src/
cd /usr/src/mysql-5.7.37/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/usr/local/mysql/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=ON \
-DWITH_MYISAM_STORAGE_ENGINE=ON \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=ON \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock \
-DWITH_INNODB_MEMCACHED=ON \
-DWITH_BOOST=boost/boost_1_59_0
make && make install
1.3.3 初始化配置
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
mkdir -p /usr/local/mysql/{data,etc,tmp,logs}
chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/etc/my.cnf --initialize --user=mysql
echo 'export MYSQL_HOME=/usr/local/mysql' >> /etc/profile
echo 'export PATH=$MYSQL_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
systemctl daemon-reload
systemctl start mysql
2. MySQL基础操作(SQL/约束/数据类型)
2.1 DDL语句(创建/修改/删除)
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT DEFAULT 0,
gender CHAR(1) CHECK (gender IN ('M','F'))
);
ALTER TABLE student ADD score INT;
ALTER TABLE student MODIFY score DECIMAL(5,2);
ALTER TABLE student DROP COLUMN age;
DROP TABLE IF EXISTS student;
2.2 DML语句(增/删/改)
INSERT INTO student (name, gender, score) VALUES
('佩奇', 'F', 80),
('乔治', 'M', 60);
UPDATE student SET score = 85 WHERE name = '乔治';
DELETE FROM student WHERE score < 60;
2.3 约束条件
| 约束类型 | 语法示例 | 说明 |
|---|
| 主键 | id INT PRIMARY KEY | 非空+唯一,表中唯一标识 |
| 非空 | name VARCHAR(50) NOT NULL | 字段值不能为空 |
| 唯一 | phone VARCHAR(11) UNIQUE | 字段值唯一(可空) |
| 默认值 | age INT DEFAULT 18 | 未赋值时使用默认值 |
| 自增 | id INT AUTO_INCREMENT | 自动递增(仅INT类型) |
| 外键 | CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES class(id) | 关联另一张表的主键 |
2.4 数据类型
2.4.1 数值类型
| 类型 | 占用字节 | 范围(有符号) | 用途 |
|---|
| TINYINT | 1 | -128~127 | 状态标记(0/1) |
| INT | 4 | -2^31~2^31-1 | 常规整数(ID/年龄) |
| FLOAT(M,D) | 4 | 单精度浮点 | 小数(精度要求低) |
| DECIMAL(M,D) | 可变 | 高精度小数 | 金额/百分比 |
2.4.2 字符串类型
| 类型 | 最大长度 | 特点 |
|---|
| CHAR(M) | 255 | 固定长度,查询快 |
| VARCHAR(M) | 65535 | 可变长度,省空间 |
| TEXT | 65535 | 长文本(文章/备注) |
2.4.3 日期类型
| 类型 | 格式 | 用途 |
|---|
| DATE | YYYY-MM-DD | 日期(生日/订单日期) |
| DATETIME | YYYY-MM-DD HH:MM:SS | 日期+时间(创建时间) |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 时间戳(自动更新) |
3. MySQL高级特性(索引/视图/存储引擎/锁/事务)
3.1 索引
3.1.1 创建索引
CREATE INDEX idx_name ON student(name);
CREATE INDEX idx_name_age ON student(name, age);
CREATE UNIQUE INDEX idx_phone ON student(phone);
CREATE FULLTEXT INDEX idx_content ON article(content);
3.1.2 索引管理
SHOW INDEX FROM student\G;
DROP INDEX idx_name ON student;
ALTER TABLE student DROP INDEX idx_age;
ALTER TABLE student ADD INDEX idx_age(age);
3.1.3 索引设计原则
- 高频查询字段优先建索引
- 避免过度索引(增删改性能下降)
- 联合索引遵循“最左匹配原则”
- 小表/低基数字段(如性别)不建索引
3.2 视图
CREATE VIEW v_student_class AS
SELECT s.name, c.name AS class_name
FROM student s
JOIN class c ON s.class_id = c.id;
SELECT * FROM v_student_class WHERE class_name = '月亮班';
ALTER VIEW v_student_class AS
SELECT s.name, c.name AS class_name, s.score
FROM student s
JOIN class c ON s.class_id = c.id;
DROP VIEW IF EXISTS v_student_class;
3.3 存储引擎
3.3.1 常用引擎对比
| 特性 | InnoDB | MyISAM |
|---|
| 事务支持 | ✅ | ❌ |
| 行级锁 | ✅ | ❌(表锁) |
| 外键 | ✅ | ❌ |
| 全文索引 | ❌(5.6+支持) | ✅ |
| 缓存 | 数据+索引 | 仅索引 |
| 崩溃恢复 | ✅ | ❌ |
3.3.2 修改存储引擎
CREATE TABLE test (id INT) ENGINE=MyISAM;
ALTER TABLE test ENGINE=InnoDB;
SHOW TABLE STATUS LIKE 'test'\G;
3.4 锁与事务
3.4.1 事务ACID特性
- 原子性(A):要么全执行,要么全回滚
- 一致性(C):事务前后数据完整性不变
- 隔离性(I):事务之间相互隔离
- 持久性(D):事务提交后数据永久保存
3.4.2 事务操作
START TRANSACTION;
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
COMMIT;
SAVEPOINT sp1;
ROLLBACK TO sp1;
3.4.3 事务隔离级别
SELECT @@tx_isolation;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|
| 读未提交 | ✅ | ✅ | ✅ |
| 读提交 | ❌ | ✅ | ✅ |
| 可重复读 | ❌ | ❌ | ✅ |
| 串行化 | ❌ | ❌ | ❌ |
4. MySQL备份恢复与主从复制
4.1 备份类型
| 类型 | 特点 | 工具 |
|---|
| 全量备份 | 备份所有数据,恢复快 | mysqldump/物理拷贝 |
| 增量备份 | 备份新增数据,备份快 | binlog |
| 差异备份 | 备份全量后新增数据 | mysqldump + binlog |
4.2 备份命令
mysqldump -uroot -p --all-databases > all_dbs.sql
mysqldump -uroot -p school > school.sql
mysqldump -uroot -p school student > student.sql
mysqldump -uroot -p -d school student > student_struct.sql
4.3 恢复命令
mysql -uroot -p < all_dbs.sql
mysql -uroot -p school < school.sql
mysqlbinlog --start-position=107 --stop-position=453 /var/lib/mysql/mysql-bin.000001 | mysql -uroot -p
4.4 主从复制(一主一从)
4.4.1 主库配置
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = school
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
SHOW MASTER STATUS\G;
4.4.2 从库配置
[mysqld]
server-id = 2
relay-log = relay-log-bin
relay-log-purge = 0
CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
START SLAVE;
SHOW SLAVE STATUS\G;
5. MySQL高可用(MHA/读写分离)
5.1 MHA(主从自动切换)
5.1.1 安装MHA
yum -y install perl-DBD-mysql perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
5.1.2 配置MHA
[server default]
user = root
password = 123456
ssh_user = root
repl_user = slave
repl_password = 123456
ping_interval = 1
manager_workdir = /var/log/mha
manager_log = /var/log/mha/manager.log
[server1]
hostname = 192.168.1.10
port = 3306
[server2]
hostname = 192.168.1.20
port = 3306
candidate_master = 1
[server3]
hostname = 192.168.1.30
port = 3306
no_master = 1
5.1.3 启动MHA
masterha_check_ssh --conf=/etc/mha/mha.cnf
masterha_check_repl --conf=/etc/mha/mha.cnf
masterha_manager --conf=/etc/mha/mha.cnf
5.2 读写分离(MyCAT)
5.2.1 安装MyCAT
tar -zxf jdk-8u131-linux-x64.tar.gz -C /usr/local/
echo 'export JAVA_HOME=/usr/local/jdk1.8.0_131' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
tar -zxf MyCAT-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /usr/local/
echo 'export MYCAT_HOME=/usr/local/mycat' >> /etc/profile
echo 'export PATH=$MYCAT_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
5.2.2 配置MyCAT
<schema name="school" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<dataNode name="dn1" dataHost="dthost" database="school"></dataNode>
<dataHost name="dthost" maxCon="500" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="master" url="192.168.1.10:3306" user="mycat" password="123456"></writeHost>
<writeHost host="slave" url="192.168.1.20:3306" user="mycat" password="123456"></writeHost>
</dataHost>
<user name="root">
<property name="password">123456</property>
<property name="schemas">school</property>
</user>
<user name="readuser">
<property name="password">123456</property>
<property name="schemas">school</property>
<property name="readOnly">true</property>
</user>
5.2.3 启动MyCAT
mycat start
mysql -uroot -p123456 -h 127.0.0.1 -P 8066
6. Redis(安装/指令/集群/持久化)
6.1 安装Redis
yum install -y gcc tcl
tar -zxf redis-6.2.6.tar.gz -C /usr/src/
cd /usr/src/redis-6.2.6/
make && make install
redis-server &
redis-server /etc/redis.conf &
redis-cli
6.2 常用指令
| 指令 | 功能 | 示例 |
|---|
| SET | 设置键值对 | SET name "佩奇" |
| GET | 获取值 | GET name |
| MSET | 批量设置 | MSET age 6 gender F |
| MGET | 批量获取 | MGET name age |
| DEL | 删除键 | DEL age |
| KEYS | 匹配键 | KEYS * |
| EXPIRE | 设置过期时间 | EXPIRE name 60 |
| TTL | 查看过期时间 | TTL name |
| FLUSHDB | 清空当前库 | FLUSHDB |
| FLUSHALL | 清空所有库 | FLUSHALL |
6.3 集群部署
6.3.1 主从复制
redis-cli SLAVEOF 192.168.1.10 6379
redis-cli SLAVEOF NO ONE
6.3.2 哨兵模式(Sentinel)
port 26379
sentinel monitor mymaster 192.168.1.10 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000
redis-sentinel sentinel.conf &
6.3.3 集群模式(Cluster)
redis-cli --cluster create 192.168.1.10:6379 192.168.1.20:6379 192.168.1.30:6379 192.168.1.40:6379 192.168.1.50:6379 192.168.1.60:6379 --cluster-replicas 1
redis-cli -c -h 192.168.1.10 -p 6379
6.4 持久化
6.4.1 RDB(快照)
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis
6.4.2 AOF(追加日志)
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
7. Nginx(安装/虚拟主机/模块/优化)
7.1 安装Nginx
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
tar -zxf nginx-1.20.2.tar.gz -C /usr/src/
cd /usr/src/nginx-1.20.2/
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -s reload
/usr/local/nginx/sbin/nginx -s stop
7.2 虚拟主机
7.2.1 基于域名
server {
listen 80
server_name www.kgc.com
root /usr/local/nginx/html/kgc
index index.html index.htm
}
server {
listen 80
server_name www.taobao.com
root /usr/local/nginx/html/taobao
index index.html index.htm
}
7.2.2 基于端口
server {
listen 80
server_name www.kgc.com
root /usr/local/nginx/html/kgc80
index index.html index.htm
}
server {
listen 8080
server_name www.kgc.com
root /usr/local/nginx/html/kgc8080
index index.html index.htm
}
7.2.3 基于IP
server {
listen 192.168.1.10:80
server_name www.kgc.com
root /usr/local/nginx/html/ip10
index index.html index.htm
}
server {
listen 192.168.1.20:80
server_name www.kgc.com
root /usr/local/nginx/html/ip20
index index.html index.htm
}
7.3 核心模块
7.3.1 状态监控(stub_status)
location /status {
stub_status on
allow 192.168.1.0/24
deny all
}
7.3.2 HTTPS(ssl_module)
openssl genrsa -out /usr/local/nginx/conf/server.key 2048
openssl req -new -key /usr/local/nginx/conf/server.key -out /usr/local/nginx/conf/server.csr
openssl x509 -req -days 365 -in /usr/local/nginx/conf/server.csr -signkey /usr/local/nginx/conf/server.key -out /usr/local/nginx/conf/server.crt
server {
listen 443 ssl
server_name www.kgc.com
ssl_certificate /usr/local/nginx/conf/server.crt
ssl_certificate_key /usr/local/nginx/conf/server.key
ssl_session_timeout 5m
ssl_protocols TLSv1 TLSv1.1 TLSv1.2
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4
ssl_prefer_server_ciphers on
root /usr/local/nginx/html/kgc
index index.html index.htm
}
7.3.3 负载均衡(upstream)
upstream tomcat_servers {
server 192.168.1.10:8080 weight=1
server 192.168.1.20:8080 weight=1
}
server {
listen 80
server_name www.kgc.com
location / {
proxy_pass http://tomcat_servers
proxy_set_header Host $host
proxy_set_header X-Real-IP $remote_addr
}
}
7.4 性能优化
worker_processes auto
worker_cpu_affinity auto
worker_rlimit_nofile 65535
events {
use epoll
worker_connections 65535
}
http {
include mime.types
default_type application/octet-stream
sendfile on
tcp_nopush on
keepalive_timeout 65
gzip on
gzip_min_length 1k
gzip_buffers 4 32k
gzip_comp_level 6
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript
}
8. LNMP/Tomcat/动静分离
8.1 LNMP部署
8.1.1 安装PHP
yum install -y gd libxml2-devel libjpeg-devel libpng-devel
tar -zxf php-7.4.33.tar.gz -C /usr/src/
cd /usr/src/php-7.4.33/
./configure --prefix=/usr/local/php --with-mysqli --with-pdo-mysql --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-openssl --enable-fpm --enable-mbstring --enable-zip --enable-exif --disable-ipv6
make && make install
cp php.ini-production /usr/local/php/lib/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
systemctl start php-fpm
systemctl enable php-fpm
8.1.2 整合Nginx与PHP
server {
listen 80
server_name www.kgc.com
root /usr/local/nginx/html
index index.html index.php
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000
fastcgi_index index.php
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name
include fastcgi_params
}
}
8.2 Tomcat部署
tar -zxf jdk-8u131-linux-x64.tar.gz -C /usr/local/
echo 'export JAVA_HOME=/usr/local/jdk1.8.0_131' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
tar -zxf apache-tomcat-8.5.82.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-8.5.82 /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh
/usr/local/tomcat/bin/shutdown.sh
8.3 动静分离
upstream php_servers {
server 192.168.1.20:80
}
upstream tomcat_servers {
server 192.168.1.30:8080
}
server {
listen 80
server_name www.kgc.com
root /usr/local/nginx/html
index index.html index.php index.jsp
location ~ \.(html|css|js|png|jpg|gif)$ {
expires 30d
}
location ~ \.php$ {
proxy_pass http://php_servers
proxy_set_header Host $host
proxy_set_header X-Real-IP $remote_addr
}
location ~ \.jsp$ {
proxy_pass http://tomcat_servers
proxy_set_header Host $host
proxy_set_header X-Real-IP $remote_addr
}
}
9. 高可用组件(Keepalived/LVS/HAProxy)
9.1 Keepalived
9.1.1 主从模式
global_defs {
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
}
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
}
systemctl start keepalived
systemctl enable keepalived
9.1.2 双主模式
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 52
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.101
}
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.101
}
}
9.2 LVS
9.2.1 DR模式
modprobe ip_vs
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ip addr add 192.168.1.100/24 dev ens33:0
ipvsadm -C
ipvsadm -A -t 192.168.1.100:80 -s rr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.20:80 -g
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.30:80 -g
ipvsadm -save > /etc/sysconfig/ipvsadm
ip addr add 192.168.1.100/32 dev lo:0
route add -host 192.168.1.100 dev lo:0
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
9.2.2 NAT模式
echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -C
ipvsadm -A -t 192.168.1.100:80 -s rr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.2.20:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.2.30:80 -m
9.3 HAProxy
9.3.1 安装HAProxy
yum install -y gcc pcre-devel zlib-devel
tar -zxf haproxy-2.4.20.tar.gz -C /usr/src/
cd /usr/src/haproxy-2.4.20/
make TARGET=linux-glibc PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
9.3.2 配置HAProxy
global
log 127.0.0.1 local0
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
maxconn 2000
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin
server web1 192.168.1.20:80 check inter 2000 fall 3
server web2 192.168.1.30:80 check inter 2000 fall 3
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
总结
- MySQL:支持多方式安装(RPM/YUM/源码),核心关注索引、事务、主从复制和高可用(MHA/读写分离);
- Nginx:高性能Web服务器,支持虚拟主机、负载均衡、动静分离,需结合PHP/Tomcat实现动态请求处理;
- 高可用:Keepalived实现VIP漂移,LVS/HAProxy实现负载均衡,三者结合可构建高可用集群架构;
- Redis:内存数据库,支持主从/哨兵/集群模式,持久化(RDB/AOF)保证数据不丢失;
- LNMP/Tomcat:LNMP处理PHP动态请求,Tomcat处理JSP动态请求,Nginx负责静态资源和请求转发。