ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux 实战|MariaDB 增删改查・权限管理・备份恢复|Nginx 虚拟主机与 SSL 证书实操笔记

Linux 实战|MariaDB 增删改查・权限管理・备份恢复|Nginx 虚拟主机与 SSL 证书实操笔记 Linux 实战MariaDB 增删改查・权限管理・备份恢复Nginx 虚拟主机与 SSL 证书实操笔记引言本篇适合 CentOS7 运维入门的零基础同学。读完这篇博客你将学会MariaDB 数据库基础 CRUD 增删改查练习多表关联查询、聚合统计函数MariaDB 数据库账号创建、精细化权限管理掌握全局 / 库 / 表 / 列四级授权粒度数据库逻辑备份 mysqldump、物理备份两种方式故障场景密码丢失、root 账号损坏恢复思路Nginx 基础部署配置三种虚拟主机域名、端口、IPOpenSSL 生成自签名证书Nginx 配置 HTTPS、实现 HTTP 自动 301 重定向跳转。全部内容来自课堂实操准备 CentOS7 虚拟机即可跟着敲命令练习。前置说明✅环境CentOS7 虚拟机root 权限练习数据库建议单机即可Nginx 虚拟主机无需多台机器✅前置知识掌握 vim 编辑器、systemd 服务管理、firewalld 防火墙基础✅新手友好零基础可以跟着实操难懂概念会搭配通俗比喻。代码块中#后面是注释不要复制输入到终端执行。⚠️数据库操作高危UPDATE、DELETE不加 WHERE 条件会清空整张表实验务必在测试虚拟机操作一、MariaDB 数据库基础 CRUD 操作比喻MariaDB 就像电子化 Excel 表格数据库相当于工作簿表就是工作表行代表一条记录列代表字段。CRUD 就是增加 (Create)、查询 (Read)、修改 (Update)、删除 (Delete)。1.1 实验环境准备导入测试数据集课堂提供inventory库存测试库用来练习 SQL 语句。# 下载测试SQL备份文件curl-oinventory.dump-shttp://192.168.49.200/class/course-materials/softwares/stage01/inventory.middle.sql# 创建inventory数据库mysql-uroot-p123-ecreate database inventory;# 导入测试数据mysql-uroot-p123inventoryinventory.dump进入数据库交互终端mysql-uroot-p1231.2 查询操作 SELECTRead 读取切换数据库、查看表列表USEinventory;-- 切换到inventory数据库SHOWTABLES;-- 查看库里面所有数据表DESCRIBE 查看表结构DESCRIBEproduct;输出字段简单解释Field列名字Type字段数据类型Null是否允许为空Key主键 / 索引标记PRI代表主键主键用来唯一标识一行记录Default字段默认值Extra额外属性auto_increment代表自动自增。查询表数据-- 查询product表全部字段全部行*代表所有列SELECT*FROMproduct;-- 只查询指定的几列商品名字、价格、库存SELECTname,price,stockFROMproduct;WHERE 条件过滤只查询符合条件的数据常用条件运算符运算符说明等于不等于/大于、小于/大于等于、小于等于BETWEEN a AND b在 a~b 范围之内包含两端IN(值1,值2)匹配列表里面任意一个值LIKE模糊匹配%匹配任意字符_匹配单个字符AND逻辑与多个条件同时满足OR逻辑或满足任意一个条件-- 查询价格大于100的商品SELECT*FROMproductWHEREprice100;-- id在1‑3之间的记录SELECT*FROMproductWHEREidBETWEEN1AND3;-- id等于1或者3SELECT*FROMproductWHEREidIN(1,3);-- 名字包含Server字符串SELECT*FROMproductWHEREnameLIKE%Server%;-- 名字包含RD并且价格大于1000SELECT*FROMproductWHEREnamelike%RD%ANDprice1000;-- 名字包含RD或者价格大于500SELECT*FROMproductWHEREnamelike%RD%ORprice500;-- ORDER BY排序默认升序DESC降序SELECT*FROMproductORDERBYprice;SELECT*FROMproductORDERBYpriceDESC;聚合统计函数做数据计算avg()求平均值max()最大值min()最小值sum()求和count()统计行数SELECTavg(price)FROMproduct;-- 商品平均价格SELECTmax(price)FROMproduct;-- 最高价格SELECTmin(price)FROMproduct;-- 最低价格SELECTsum(stock)FROMproduct;-- 全部商品库存总和SELECTcount(name)FROMproduct;-- 统计一共有多少个商品-- GROUP BY 根据字段分组统计按商品分类统计库存总和SELECTid_category,sum(stock)FROMproductGROUPBYid_category;多表联合查询业务数据分散在多张表里需要关联多张表获取完整信息。-- 查询分类名称为Servers的商品名字和价格SELECTproduct.name,product.priceFROMproduct,categoryWHEREproduct.id_categorycategory.idANDcategory.nameServers;-- 查询厂商是Lenovo的产品名字、价格SELECTproduct.name,product.priceFROMproduct,manufacturerWHEREproduct.id_manufacturermanufacturer.idANDmanufacturer.nameLenovo;1.3 新增、修改、删除数据⚠️高危提醒UPDATE、DELETE不加 WHERE 条件会作用于整张表全部数据被修改 / 清空生产操作建议先 SELECT 验证条件再执行。CREATE 插入新记录-- 创建测试表staffCREATETABLEstaff(idINT(11)NOTNULL,nameVARCHAR(100)NOTNULL,ageINT(11)DEFAULT10,id_departmentINT(11));-- 插入数据INSERTINTOstaff(id,name,age,id_department)VALUES(1,user1,28,10);INSERTINTOstaff(id,name,age)VALUES(2,user2,20);INSERTINTOstaff(id,name)VALUES(3,user3);UPDATE 修改已有数据-- 修改id3这条记录的ageUPDATEstaffSETage30WHEREid3;-- ❗危险没有WHERE整张表所有记录age全部变成30不要执行-- UPDATE staff SET age30;DELETE 删除记录-- 只删除id3这一行DELETEFROMstaffWHEREid3;-- ❗危险不加WHERE清空整张表-- DELETE FROM staff;-- 删除整个数据表DROPTABLEstaff;二、MariaDB 用户与精细化权限管理重点MariaDB 数据库账号独立于 Linux 系统账号同样名字不代表同一个用户。账号完整格式用户名允许访问的来源主机。2.1 创建数据库用户-- 用户laoma可以从任意地址%连接密码123CREATEUSERuser%IDENTIFIEDBY123;-- 只能本机localhost登录CREATEUSERlocaluserlocalhostIDENTIFIEDBY123456;新创建用户默认几乎没有任何权限需要单独授权才能操作数据库。2.2 GRANT 授权四级授权粒度授权语法GRANT权限列表ON授权范围TO用户名主机[IDENTIFIEDBY密码];FLUSHPRIVILEGES;-- 授权后刷新权限生效四种授权作用范围范围写法作用全局*.*实例下所有数据库所有表适合管理员数据库级库名.*指定数据库全部表业务开发常用表级库名.表名仅仅针对某一张表列级库.表(列1,列2)只允许操作表里面指定的列适合敏感数据管控示例数据库级授权-- 给laoma授予inventory库全部增删改查权限GRANTSELECT,INSERT,UPDATE,DELETEONinventory.*TOuser%;FLUSHPRIVILEGES;示例表级授权-- 只允许操作inventory库的product表查询 GRANT SELECT ON inventory.product TOuser%;FLUSH PRIVILEGES;示例列级授权只可以查询 id、name看不到价格敏感字段GRANT SELECT(id,name)ON inventory.product TOuser%;FLUSH PRIVILEGES;2.3 查看、回收、删除用户-- 查看用户拥有的权限 SHOW GRANTS FOR user%;-- 回收权限语法和grant对应 REVOKE SELECT,INSERT,UPDATE,DELETE ON inventory.* FROM user%;FLUSH PRIVILEGES;-- 删除数据库账号 DROPUSERuser%;2.4 常见故障root 密码丢失、权限误删除核心思路修改配置skip‑grant‑tables1跳过权限校验启动数据库登录后修复密码 / 权限改回配置重启服务。重置 root 密码步骤修改配置文件/etc/my.cnf.d/server.cnf[mysqld]下增加skip‑grant‑tables1systemctl restart mariadb重启数据库mysql -u root无密码登录修改 root 账号密码把配置里面skip‑grant‑tables1注释删除再次重启数据库实操注意该方式仅限测试虚拟机生产环境做好密码保管。三、数据库备份与恢复两类备份逻辑备份导出 SQL 文本物理备份直接复制数据库原始数据目录。3.1 逻辑备份 mysqldump最常用mysqldump 把数据导出成可执行 SQL 文本兼容性好跨版本迁移方便缺点大库备份速度偏慢。# 1.备份单个库不包含create database语句恢复前需要手动建库mysqldump-uroot-p123inventory/backup/inventory.sql# 2.--databases 参数导出包含建库语句恢复直接导入不用手动建库mysqldump-uroot-p123--databasesinventory/backup/inventory-full.sql# 3.备份服务器全部数据库mysqldump-uroot-p123--all-databases/backup/all.sql逻辑备份恢复# 使用带--databases导出的备份直接导入mysql-uroot-p123/backup/inventory-full.sql# 如果备份没有带建库语句要先创建数据库再导入mysql-uroot-p123-ecreate database inventory;mysql-uroot-p123inventory/backup/inventory.sql3.2 物理备份复制原始数据目录直接复制/var/lib/mysql整个数据目录速度快但是软硬件环境差异大时兼容性差。⚠️必须停止 mariadb 服务避免复制过程数据变化导致损坏# 备份操作systemctl stop mariadbcp-a/var/lib/mysql /backup/mysql-bak# 恢复操作systemctl stop mariadbrm-rf/var/lib/mysqlcp-a/backup/mysql-bak /var/lib/mysqlchown-Rmysql:mysql /var/lib/mysql systemctl start mariadb四、Nginx Web 服务器基础部署与虚拟主机比喻Nginx 就像商店前台接待员接收浏览器发来的 HTTP 请求返回网页资源。虚拟主机就是一台服务器同时跑多个网站。4.1 Nginx 安装启动# 安装nginxyuminstall-ynginx# 设置开机自启并且立刻启动systemctlenablenginx--now# 防火墙放行http服务80端口firewall-cmd --add-servicehttp--permanentfirewall-cmd--reload# 准备测试首页echoHello Nginx Test Page/usr/share/nginx/html/index.html# curl测试访问curlhttp://127.0.0.1Nginx 核心文件位置主配置文件/etc/nginx/nginx.conf额外虚拟主机配置目录/etc/nginx/conf.d/*.conf默认网站根目录/usr/share/nginx/html访问日志/var/log/nginx/access.log错误日志/var/log/nginx/error.log。配置检查命令修改配置后一定要执行提前发现语法错误nginx-t# 配置平滑重载不中断现有连接nginx-sreload4.2 Nginx 配置基础层级结构配置文件分为四层全局块全局进程参数user、worker_processes、pid 路径events 块网络连接并发连接数http 块HTTP 服务总入口可以包含多个server虚拟主机server 块虚拟主机每一个 server 代表一个网站内部可以写多个location匹配 URL 路径。http { # http全局配置 include /etc/nginx/mime.types; default_type application/octet-stream; # server就是一台虚拟主机一个http{}里面可以写多个server server { listen 80; # 监听端口 server_name www.user.cloud; # 访问域名 root /usr/share/nginx/html; # 网站网页存放目录 index index.html index.htm; # 默认访问首页文件 location / { try_files $uri $uri/ 404; } } }4.3 三种虚拟主机实现方式虚拟主机一台 Nginx 服务器对外提供多个独立网站分为域名、端口、IP 三种模式。方式 1基于域名的虚拟主机生产最常用同一个 80 端口根据访问的域名区分不同网站。新建配置/etc/nginx/conf.d/vhost-name.confserver { listen 80; server_name web1.user.cloud; root /usr/share/nginx/web1; index index.html; } server { listen 80; server_name web2.luser.cloud; root /usr/share/nginx/web2; index index.html; }# 创建两个站点目录和首页mkdir/usr/share/nginx/web{1,2}echothis is web1 site/usr/share/nginx/web1/index.htmlechothis is web2 site/usr/share/nginx/web2/index.html# 检查配置重载生效nginx-tnginx-sreload本地测试修改 hosts 做域名解析# /etc/hosts增加127.0.0.1 web1.user.cloud127.0.0.1 web2.user.cloudcurlhttp://web1.user.cloudcurlhttp://web2.user.cloud方式 2基于端口的虚拟主机同一个域名不同端口区分网站。/etc/nginx/conf.d/vhost-port.confserver{listen8081;server_name www.user.cloud;root /usr/share/nginx/8081;index index.html;}server{listen8082;server_name www.user.cloud;root /usr/share/nginx/8082;index index.html;}mkdir/usr/share/nginx/808{1,2}echosite port 8081/usr/share/nginx/8081/index.htmlechosite port 8082/usr/share/nginx/8082/index.html nginx-tnginx-sreload# 访问测试curlhttp://www.user.cloud:8081curlhttp://www.user.cloud:8082方式 3基于 IP 的虚拟主机实际工作很少用一台机器配置多个网卡 IPNginx 根据客户端访问的 IP 地址返回不同网站。受限于硬件网卡业务极少采用了解概念即可。新手常见坑合集❌执行UPDATE / DELETE之后整张表数据全部被改动✅操作前先用SELECT验证 WHERE 条件禁止不带 WHERE 执行 update/delete。❌创建数据库账号授权完依旧无法访问数据库✅确认账号格式userhost来源主机配置正确授权之后必须执行FLUSH PRIVILEGES;。❌mysqldump 备份导入报错提示数据库不存在✅区分是否使用--databases参数不带该参数的备份导入前需要手动 create database。❌物理备份启动 mariadb 失败✅复制数据目录之后一定要修改属主为 mysql:mysql权限不对数据库无法启动。❌Nginx 修改配置直接重启服务业务中断✅优先使用nginx -t检查语法nginx -s reload平滑重载不断开现有用户连接。❌虚拟主机配置完成访问域名打开的永远是同一个页面✅排查server_name 域名书写hosts 解析是否正确配置是否已经 reload 生效。❌端口虚拟主机浏览器访问打不开页面✅防火墙确认放行对应端口selinux 状态检查。❌mysql 登录报 Access denied密码明明正确✅注意账号的 访问主机laoma%和laomalocalhost是两个完全不同账号。总结MariaDB 基础 SQLSELECT 查询WHERE 条件过滤聚合函数avg/max/min/sum/countGROUP BY 分组多表联合查询INSERT/UPDATE/DELETE 注意 WHERE 条件防止误删全表。权限管理账号格式用户名来源主机四级授权全局*.*、库级、表级、列级GRANT授权、REVOKE回收授权后FLUSH PRIVILEGES忘记 root 密码通过skip‑grant‑tables绕过权限修复。备份恢复mysqldump 逻辑备份适合迁移物理备份直接复制/var/lib/mysql目录必须停止数据库服务操作。Nginx 虚拟主机配置层级全局‑events‑http‑server‑location三种虚拟主机域名虚拟主机生产最常用端口虚拟主机、IP 虚拟主机修改配置务必nginx‑t校验‑s reload平滑重载。思考题 互动数据库账号laoma%和laomalocalhost是同一个账号吗二者区别是什么mysqldump 使用--databases和不使用这个参数备份恢复流程有什么不一样Nginx 三种虚拟主机分别是什么生产环境最推荐哪一种为什么 UPDATE、DELETE 语句强烈建议带上 WHERE 条件不加会发生什么后果欢迎评论区分享踩坑建议虚拟机完整复现 SQL 练习、Nginx 虚拟主机实验加深理解
返回列表