☰
Linux实战|NFS网络文件共享 + iSCSI块存储 + MariaDB数据库完整实操笔记
2026/9/30 7:23:55 网站建设 项目流程

Linux实战|NFS网络文件共享 + iSCSI块存储 + MariaDB数据库完整实操笔记

引言

本篇适合CentOS7运维入门同学。读完本篇博客你将掌握:

  1. NFS网络文件系统:理解NFS的C/S架构、RPC调用机制;部署NFS服务端、客户端挂载,掌握rw、no_root_squash等核心导出选项;
  2. iSCSI IP‑SAN块存储:分清文件存储与块存储;target服务端配置、initiator客户端发现登录磁盘,fstab持久挂载注意事项;
  3. MariaDB数据库基础:MariaDB部署加固、配置文件分层结构;SQL基础CRUD增删改查;数据库用户、权限管理;mysqldump逻辑备份、物理备份恢复;

NFS是文件级共享,iSCSI是块级裸磁盘;MariaDB是互联网主流关系型数据库。全部来自课堂实操,多台虚拟机就可以完成整套实验。

前置说明

✅环境:CentOS7虚拟机,root权限;建议准备2‑3台虚拟机,区分服务端、客户端、数据库主从节点; ✅前置知识:熟悉firewalld防火墙、vim编辑器、systemd服务管理;掌握基础Linux磁盘挂载知识; ✅新手友好:零基础可以跟着实操;晦涩概念搭配通俗比喻讲解。

💡代码块中#后面是注释,不要复制输入终端。 ⚠️存储、数据库属于高危操作,实验只用测试虚拟机,不要在业务服务器随意做删除、覆盖操作!


一、NFS网络文件系统

比喻:NFS就像局域网里面的网络共享文件夹。服务端把本地目录共享出去,客户端把共享目录挂载到自己本地,读写起来和本地目录几乎一模一样。 NFS依赖RPC(远程过程调用):客户端通过RPC告诉服务端执行文件读写操作。

1.1 NFS简单优缺点

✅优点

  • 对Linux/Unix生态兼容性极好,配置简单;
  • 透明访问,挂载完成后普通命令直接操作,不需要特殊客户端工具;
  • 支持权限UID/GID映射。

❌缺点

  • NFSv3安全能力弱,没有原生加密;适合内网,不建议公网直接暴露;
  • 强依赖网络,网络抖动会直接影响业务读写性能。

重要区分:NFS属于文件存储,客户端看到的是文件夹;iSCSI是块存储,客户端拿到的是一块裸硬盘。

1.2 NFS服务端部署

# 安装nfs服务软件包yuminstall-ynfs-utils# 创建共享目录,示例用于web业务,apache用户uid=48mkdir-p/shares/webappchown48/shares/webapp# 启动开机自启nfs‑serversystemctlenablenfs-server--now# 防火墙放行nfs相关服务firewall-cmd--permanent--add-service=nfs --add-service=rpc-bind --add-service=mountd firewall-cmd--reload

核心配置文件/etc/exports

语法:共享目录 客户端(选项),括号和IP之间不能有空格! 也可以在/etc/exports.d/*.exports写配置,方便管理多套共享。

编辑exports:

vim/etc/exports# 允许10.1.8.0/24网段读写访问/shares/webapp10.1.8.0/24(rw)

常用导出选项说明:

选项作用
rw读写权限;默认是ro只读
ro只读访问
no_root_squash客户端root用户不压缩为nobody,生产谨慎使用,有安全风险
root_squash客户端root映射为nobody普通用户,默认安全行为

配置变更之后生效:

exportfs-r# 重新加载exports配置exportfs-v# 查看当前已经导出的共享以及全部选项

1.3 NFS客户端挂载

# 客户端同样需要nfs‑utils工具yuminstall-ynfs-utils# showmount查看服务端有哪些共享资源showmount-estorage# 创建本地挂载点mkdir/var/www/html# 临时挂载nfs共享目录mount-tnfs storage:/shares/webapp /var/www/html

现象:客户端root去写文件会提示权限拒绝。 原因:默认root_squash,客户端root被映射为nobody;业务程序apache(uid48)可以正常写入。

1.4 /etc/fstab持久挂载NFS

storage:/shares/webapp /var/www/html nfs defaults 0 0

NFS依赖网络,如果服务器开机网络还没就绪就尝试挂载,会开机卡住。可以增加_netdev挂载选项,标记这是网络存储。

storage:/shares/webapp /var/www/html nfs defaults,_netdev00

二、iSCSI IP‑SAN块存储

比喻:iSCSI通过TCP/IP网络,把服务端的一块硬盘“远程递交给客户端”。客户端识别为一块裸的磁盘块设备,就跟本地新加一块硬盘一样,需要自己分区、格式化文件系统再挂载。

术语速记:

  • Target:iSCSI服务端,提供存储资源;
  • Initiator:iSCSI客户端,来使用远程磁盘;
  • IQN:全局唯一名字,用来标识target和initiator;
  • LUN:target向外提供的逻辑磁盘单元。

⚠️重要提醒:多个客户端千万不要同时挂载同一个iSCSI设备使用普通ext4/xfs!普通本地文件系统不支持多机并发读写,会直接损坏数据。多机同时访问要使用集群文件系统如GFS2。

2.1 iSCSI Target服务端配置

# 安装服务端工具 targetd + targetcliyuminstall-ytargetd targetcli systemctlenabletarget--now# 防火墙放行iscsi‑target服务firewall-cmd--permanent--add-service=iscsi-target firewall-cmd--reload

targetcli交互式配置流程:

targetcli#1.创建后端存储backstore,使用物理磁盘/dev/sdb作为存储载体/>/backstores/block create myblock1 /dev/sdb#2.创建target目标,填写IQN名称/>/iscsi create iqn.2026-09.cloud.user.storage:disk1#3.把backstore映射为LUN/>/iscsi/iqn.2026-09.cloud.user.storage:disk1/tpg1/luns create /backstores/block/myblock1#4.配置ACL,只允许指定客户端IQN访问这个target/>/iscsi/iqn.2026-09.cloud.user.storage:disk1/tpg1/acls create iqn.2026-09.cloud.user.client#5.修改监听IP,不要监听0.0.0.0全部地址/>/iscsi/iqn.2026-09.cloud.user.storage:disk1/tpg1/portals delete0.0.0.03260/>/iscsi/iqn.2026-09.cloud.user.storage:disk1/tpg1/portals create10.1.8.103260/>exit# 退出自动保存配置到 /etc/target/saveconfig.json

非交互脚本模式,每一步命令直接在shell执行,必须手动执行saveconfig保存。

2.2 iSCSI Initiator 客户端

# 安装客户端软件包yuminstall-yiscsi-initiator-utils# 客户端IQN配置文件vim/etc/iscsi/initiatorname.iscsiInitiatorName=iqn.2026-09.cloud.user.client

发现target、登录远程存储:

# discovery发现服务端targetiscsiadm-mdiscovery-tst-p10.1.8.10:3260# 登录targetiscsiadm-mnode-Tiqn.2026-09.cloud.user.storage:disk1-l# 查看会话,确认识别到新的磁盘设备iscsiadm-msession-P3lsblk

2.3 格式化 + fstab持久挂载iSCSI磁盘

⚠️iSCSI不要写/dev/sdb这种设备名!重启后磁盘名字顺序会变,必须用UUID;并且加上_netdev网络设备标记。

mkfs.xfs /dev/sdb blkid# 获取UUID

/etc/fstab示例:

UUID="3d49d1dd-8209-43a1-a106-4de328762e00"/data xfs defaults,_netdev00

2.4 注销断开iSCSI磁盘

# 先卸载挂载目录umount/data# 登出targetiscsiadm-mnode-Tiqn.2026-09.cloud.user.storage:disk1-u# 删除本地记录,开机不会自动登录iscsiadm-mnode-Tiqn.2026-09.cloud.user.storage:disk1-odelete

两个服务区别小结

  • NFS:文件存储,服务端做好文件系统,客户端直接读写目录;多台Linux可以同时正常访问;
  • iSCSI:块存储,给客户端裸磁盘,客户端自己做文件系统,普通文件系统禁止多机同时挂载。

三、MariaDB数据库基础

MariaDB是MySQL的开源分支,完全兼容MySQL语法。属于关系型数据库,数据以二维表格形式存放,类似Excel表格。

3.1 MariaDB安装、安全加固

# 安装服务端、客户端工具yuminstall-ymariadb-server mariadb systemctlenable--nowmariadb# 防火墙放行mysql 3306端口firewall-cmd--permanent--add-service=mysql firewall-cmd--reload

安全初始化,设置root密码、删除匿名账号、删除test库:

mysql_secure_installation

进程说明:mysqld_safe是守护监控进程,负责崩溃重启;mysqld真正数据库核心工作进程。

3.2 MariaDB配置分层结构

  • /etc/my.cnf:主配置,会加载/etc/my.cnf.d/*.cnf;
  • /etc/my.cnf.d/server.cnf:服务端mysqld参数,端口、监听地址、数据目录;
  • /etc/my.cnf.d/client.cnf:mysql客户端工具默认参数。

参数小知识点:skip‑networking=1关闭TCP网络,只能本地socket连接;bind‑address控制数据库监听哪个IP。

3.3 登录数据库

# socket本地登录,不需要网络mysql-uroot-p# TCP远程登录,‑h指定数据库服务器IPmysql-uuseer-p123-h10.1.8.11# 非交互执行SQL,适合脚本mysql-uroot-p-e'show databases;'

3.4 SQL基础语法CRUD

SQL语句分类:

  • DDL数据定义:CREATE/DROP创建删除库、表;
  • DML数据操作:INSERT/UPDATE/DELETE增改删;
  • DQL数据查询:SELECT查询;
  • DCL权限控制:GRANT / REVOKE授权回收权限。
库操作
SHOW DATABASES;CREATE DATABASE inventory;USE inventory;-- 切换使用某个数据库 DROP DATABASE inventory;
表操作
SHOW TABLES;DESCRIBE product;-- 查看表结构

查询示例

SELECT * FROM product;SELECT name,price FROM product WHERE price>100;SELECT * FROM product WHEREidBETWEEN1AND3;SELECT * FROM product WHERE name LIKE'%Server%';-- order by排序 SELECT * FROM product ORDER BY price DESC;-- 聚合函数 avg max minsumcount SELECT avg(price)FROM product;SELECT count(*)FROM product;

插入、更新、删除

INSERT INTO staff(id,name,age)VALUES(1,'zhangsan',22);-- ⚠️不加where会更新全表所有记录! UPDATE staff SETage=25WHEREid=1;-- ⚠️不加where会清空整张表! DELETE FROM staff WHEREid=1;

3.5 用户与权限管理

MariaDB数据库账号独立于Linux系统账号;账号格式用户名@访问来源主机。

创建用户:

CREATEUSERuser@'%'IDENTIFIED BY'123456';

授权语法:

GRANT 权限列表 ON 库名.表名 TO'user'@'%';FLUSH PRIVILEGES;-- 刷新权限生效

授权粒度:

  • *.*全局所有库;
  • inventory.*指定数据库全部表;
  • inventory.product指定单张表;
  • 还可以做到列级权限,只允许访问表中部分字段。

查看权限、回收权限、删除用户

SHOW GRANTS FOR user@'%';REVOKE SELECT ON inventory.* FROM user@'%';DROPUSERuser@'%';

✅生产原则:最小权限原则,账号只给业务刚好需要的权限;不要随便用@'%'允许任意IP访问。

3.6 数据库备份恢复

逻辑备份 mysqldump(导出SQL文本)
# 备份单个库,不包含create database语句mysqldump-uroot-pinventory>inventory.sql# ‑‑databases,导出包含建库语句,恢复直接导入即可mysqldump-uroot-p--databasesinventory>inventory‑full.sql# 备份全部数据库mysqldump-uroot-p--all‑databases>all.sql

逻辑恢复:

mysql-uroot-p<inventory‑full.sql
物理备份(直接复制数据目录)

必须停止mariadb服务,复制/var/lib/mysql整个目录。

systemctl stop mariadbcp-a/var/lib/mysql /backup/mysql#恢复的时候,停止服务,拷贝回去,修改属主mysql:mysqlchown-Rmysql:mysql /var/lib/mysql systemctl start mariadb

物理备份速度快,但兼容性差;逻辑备份可移植性好,适合迁移不同版本数据库。


🚨新手常见坑合集

  1. ❌NFS挂载,客户端root写入文件报permission denied

    ✅默认root_squash安全机制,客户端root映射为nobody;业务使用普通uid/gid匹配;需要root写才打开no_root_squash,评估安全风险。

  2. ❌/etc/fstab写iSCSI设备名/dev/sdc,重启系统挂载错乱

    ✅iSCSI设备名字不稳定,必须使用UUID,加上_netdev选项标记网络存储。

  3. ❌多台机器同时挂载同一个iSCSI磁盘使用普通xfs/ext4文件系统

    ✅普通本地文件系统不支持多机并发读写,直接损坏数据;多机共享需要集群文件系统GFS2。

  4. ❌MariaDB授权user@'%',本地登录可以,远程连不上数据库

    ✅检查两点:防火墙放行mysql服务;检查bind‑address配置,不要只监听127.0.0.1。

  5. ❌执行UPDATE / DELETE忘记写WHERE条件,全表数据被修改/清空

    ✅生产操作前先SELECT确认条件;重要环境可以开启事务,确认无误再commit。

总结

  1. NFS网络文件存储:RPC协议;exports配置共享目录;理解root_squash、rw选项;客户端挂载,fstab增加_netdev网络标记;适合内网多Linux同时访问同一个文件目录。
  2. iSCSI块存储:给客户端裸磁盘块设备;target服务端,initiator客户端;使用UUID写fstab,禁止多机普通文件系统同时挂载同一LUN。分清文件存储(NFS)与块存储(iSCSI)。
  3. MariaDB数据库:安装安全加固;分层配置文件;SQL的DDL/DML/DQL/DCL;最小权限原则管理账号;mysqldump逻辑备份、物理目录备份两种方式。

思考题&互动

  1. NFS与iSCSI核心区别?什么场景选择NFS,什么场景选择iSCSI?
  2. iSCSI写入/etc/fstab,为什么推荐UUID,并且加上_netdev参数?
  3. MySQL主从复制中IO线程、SQL线程分别负责干什么?Slave_IO_Running:No一般排查哪些点?

欢迎评论区分享你的踩坑经历,建议虚拟机完整复现NFS、iSCSI、MariaDB主从整套实验,加深理解!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询