LNMP架构
常见架构
| 网站架构 | 搭配 |
|---|---|
| lnmp | linux+nginx+mysql+php |
| lnmt | linux+nginx+mysql+tomcat(java) |
| lnm? | linux+nginx+mysql+??(python、go) |
LNMP部署
- 环境准备
| 主机名 | IP | 服务 |
|---|---|---|
| web01 | 10.0.0.7/172.16.1.7 | 部署mysql、nginx、php |
| db01 | 10.0.0.51/172.16.1.51 | 安装mysql |
web01部署mysql数据库
- 数据库安装
#mariadb-server 安装
yum -y install mariadb-server
#开启服务
systemctl enable mariadb
systemctl start mariadb
#检查服务与端口
ss -lntup | grep mysql
ps -ef | grep mysql
- 数据库安装配置(SQL语句实现)
#仅仅刚安装的时候运行.仅首次运行即可.
mysql_secure_installation
用于设置root密码,清理用户和清理临时库.
Enter current password for root (enter for none):回车
Set root password? [Y/n] Y设置密码
New password: 输入密码
Re-enter new password: 再次输入
Password updated successfully!
Reloading privilege tables..
... Success!
Remove anonymous users? [Y/n] Y 删除数据库中的匿名用户(没有用户名的用户,容易导致安全问题)
Disallow root login remotely? [Y/n] Y 是否禁止root远程登录
Remove test database and access to it? [Y/n] Y 是否删除test测试用的数据库
Reload privilege tables now? [Y/n] Y 是否更新权限信息表
- 登录数据库
mysql -uroot -p1
参数:
-u <用户名>
-p <密码>
数据库基本概念
- 库:database
- 表:table
- 字段:列
- 记录:行
数据库基本操作
- 查
查看有那些数据库?
show databases;
查看数据库中有那些表
show tables from mysql;
查看数据库中有哪些用户
select user,host from mysql.user;
- 演示


- 增
创建库
create database blog;
创建用户
grant all on blog.* to 'blog'@'localhost' identified by 'blog'; (本地登录)
#'blog'@'172.16.1.%' 表明允许172.16.1.0的网段登录,数据库中需要用%表示全部
grant all on blog.* to 'blog'@'172.16.1.%' identified by 'blog'; (远程登录)
- 创建库效果展示

- 创建本地登录用户与远程登录用户效果展示

- 删
drop user 'wp'@'172.16.1.%';
删除用户重新添加用户后,需要执行更新用户权限信息的指令.
grant all on wordpress.* to 'wp'@'172.16.1.%' identified by '1';
更新权限信息
flush privielges;
web01安装PHP
- 安装
#检查是否有PHP
rpm -qa php-fpm
rpm -ql php-fpm
#安装PHP
yum -y install php php-bcmath php-cli php-common php-devel php-embedded php-fpm php-gd php-intl php-mbstring php-mysqlnd php-opcache php-pdo php-process php-xml php-json
#开机自启动
systemctl enable --now php-fpm.service
systemctl status php.fpm.service
- vim /etc/php-fpm.d/www.conf 修改php配置文件的进程用户更改为nginx
更改监听本地与端口为127.0.0.1:9000
#修改后查看
egrep -n '^(user|group|listen) =' /etc/php-fpm.d/www.conf
24:user = nginx
26:group = nginx
38:listen = 127.0.0.1:9000
- 检查语法与重启php服务
php-fpm -t
systemctl reload php-fpm.service

配置nginx源
安装nginx
- Nginx配置站点目录
server {
listen 80;
server_name blog.zmx.cn;
root /app/code/blog;
error_log /var/log/nginx/blog-error.log notice;
access_log /var/log/nginx/blog-access.log main;
location / {
index 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;
}
}
- 检查nginx页面,php页面、数据库是否正常
[root@web01 /app/code/blog]# cat chk_ngx.html
zmx
[root@web01 /app/code/blog]# cat chk_php.php
<?php
phpinfo();
?>
[root@web01 /app/code/blog]# cat chk_db.php
<?php
//数据库地址
$db_host='localhost';
//数据库用户名
$db_user='blog';
$db_pass='blog';
//数据库名字
$db_name="blog";
$link_id=mysqli_connect($db_host,$db_user,$db_pass,$db_name);
if($link_id){
echo "mysql successful by zmx lidao996!\n" ;
}else{
echo "connection failed!\n" ;
}
?>
- 部署业务代码,修改权限
#下载代码
wget https://cn.wordpress.org/latest-zh_CN.zip
#解压到家目录
uzip wordpress-6.8.1-zh_CN.zip
#创建存放代码目录
mkdir -p /app/code/blog/
#移动到存放代码的目录下
mv wordpress/* /app/code/blog/
#修改所有者与所属组为nginx
chown -R nginx.nginx /app/code/blog/
- 访问站点blog.zhangmianxin.cn以及后台blog.zhangmainxin.cn/wp-admin/

博客文章在数据库的位置
select * from blog.wp_posts\G
非常危险,显示所有列
PHP请求处理过程
PHP文件请求过程详解
#默认访问nginx,
server {
listen 80;
server_name blog.zhangmianxin.cn;
root /app/code/blog;
error_log /var/log/nginx/blog-error.log notice;
access_log /var/log/nginx/blog-access.log main;
#如果是以PHP结尾就访问PHP结尾
#将PHP请求交给9000端口
location / {
index index.php ;
}
location ~*\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#SCRIPT_FILENAME $document_root$fastcgi_script_name
#转发的时候加上基本信息告诉php的绝对路径
#交给php处理,php根据文件的绝对路径读取php文件并解析
#会根据PHP解释器去解析
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
数据库迁移
迁移准备流程
- 准备db01环境,安装数据库mariadb
- 将旧的数据库进行备份
- 将备份的数据导入db01新环境
- web代码连接数据库
- 调试测试新环境数据库,没有问题关闭web节点上的数据库
迁移数据
#迁移web01数据库数据到db01上
参数:
mysqldump 数据库迁移指令
--all-databases 或 -A 备份所有库
#两种迁移
#直接写入
mysqldump -uroot -p1 --all-databases >web-db-all.sql
#打包压缩
mysqldump -uroot -p1 --all-databases |gzip >web-db-all.sql.gz
#检查迁移
ll -h web-db-all.sql
vim web-db-all.sql
#传输该数据库文件到db01上
scp web-db-all.sql.gz root@db01:~
~ 发送到家目录
导入数据
- 导入web01数据库数据库到db01数据库中
#压缩包 zcat zless zgrep
zcat web-db-all.sql.gz|mysql -uroot -p
#不是压缩包
mysql -uroot -p <web.db-all.sql
#重新授权,进入数据库进行,重新加载权限信息
flush privileges;
修改数据库的主机
- 找关键信息
find -type f | xargs grep -l 'localhost'
- 修改web01业务代码连接的数据库
- ./wp-config.php
- 更改登录连接 localhost-->172.16.1.5
[root@web01 /app/code/blog]# grep DB_ wp-config.php
define( 'DB_NAME', 'blog' );
define( 'DB_USER', 'blog' );
define( 'DB_PASSWORD', 'blog' );
define( 'DB_HOST', '172.16.1.51' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );

- 最后关闭web节点上的数据库
- 测试远程连接是否成功!
