资讯动态

Linux MariaDB 数据库部署与 SQL 基础实战指南

发布时间:2026/9/30 6:58:36 来源:尧图企业网站定制
装完mariadb-server就mysql -u root空密码裸奔进去建库把默认的 test 库、匿名用户、可远端登录的 root 全留着——内网一扫描一个准还有人看到mysqld_safe和mysqld两个进程就以为中了木马。本文从关系库的基本概念讲起走完「装包起服 →mysql_secure_installation加固 →/etc/my.cnf分层配置 → 本地/远端/免密登录 → 库级 SQL 操作」最后把mysqld_safe与mysqld的父子关系讲透。文中命令名与选项均标注英文原意完整清单见文末《附命令英文全称速查表》。本文概要项目内容文章主题MariaDB 关系数据库基础概念 → 部署与加固 → mysql 客户端连接 → 库级 SQL 操作 → 进程机制所属类别Linux 系统管理 → 数据库 → MariaDB知识关键字mariadb-server·mariadb·mysql_secure_installation·/etc/my.cnf·/etc/my.cnf.d·mysqld_safe·mysqld·[client]·SHOW DATABASES·USE·CREATE DATABASE·DROP DATABASE·GRANT·DQL·DML·DDL·DCL概念图给出「RDBMS → 多库 → 多表」这条层级。概要表里的关键字按主线落在概念与存储结构在第一章部署与加固在第二章客户端与连接在第三章库级 SQL 在第四章进程机制在第五章。本文的机器与地址约定服务端zhb-s210.1.8.102客户端zhb-m210.1.8.12数据库对外端口3306/TCP。一、数据库与 MariaDB 基础1.1 数据库是什么数据库是一个按照一定数据结构来组织、存储数据的仓库并通过数据库提供的多种方法来管理其中的数据。数据结构数据的组织形式或数据之间的联系。按早期理论数据库模型有层次式文件系统、DNS、网状网络通信、关系型图书馆管理系统三种今天互联网企业实际在用的主要是关系型与非关系型两类。1.2 关系型 vs 非关系型类别数据模型典型产品说明关系型二维表Oracle、MySQL、PostgreSQL、MariaDB把复杂的数据结构归结为简单的二维表靠表的分类、合并、连接、选取等运算管理数据非关系型NoSQL键值 / 文档 / 列族等Redis持久化缓存、MongoDB、Memcached纯内存本意是NotOnlySQL不是「NO SQL」作为关系库的有效补充而非否定1.3 MariaDB 是什么MariaDB 是MySQL 的一个分支由开源社区维护、采用 GPL 授权。做这个分支的原因之一是甲骨文Oracle收购 MySQL 后有闭源的潜在风险社区于是用分支来规避。MariaDB完全兼容 MySQL包括 API 与命令行可直接作为 MySQL 的替代品。DB-Engines 的排名里MariaDB 长期稳居关系库第一梯队2026 年 1 月位列第 131.4 存储结构一个 MariaDB 实例可以包含多个database库每个库下包含多张table表。关系库的表用二维表格存储数据类似 Excel 工作表表中的一行是一个元组也叫一条记录每一列是一个字段属性建表时为每个字段分配数据类型、定义数据长度和其他属性行与列的交叉位置就是一个属性值。二、部署 MariaDB五步做完2.1 部署五步总览步骤做什么用哪条命令1装服务端 客户端yum install -y mariadb-server mariadb2启用并启动服务systemctl enable --now mariadb3放行防火墙3306/TCPfirewall-cmd --permanent --add-servicemysql4安全加固mysql_secure_installation5验证连接mysql -u root命令的写法与参数细节见本章 2.2加固与配置见第二章其余小节。2.2 安装与启动# 装服务端[rootzhb-s2 ~]# yum install -y mariadb-server# 装客户端[rootzhb-s2 ~]# yum install -y mariadb# 启用并启动服务[rootzhb-s2 ~]# systemctl enable --now mariadb# 放行防火墙mysql 服务对应 3306/TCP[rootzhb-s2 ~]# firewall-cmd --permanent --add-servicemysql[rootzhb-s2 ~]# firewall-cmd --reload⚠️注意装完必须先跑mysql_secure_installation再对外放通 3306。默认安装带着 test 库、匿名用户和空密码 root直接暴露在网络上等同于把库交出去。2.3 安全加固mysql_secure_installationMariaDB 默认具有test 库和一些不安全的配置用mysql_secure_installation交互式修改[rootzhb-s2 ~]# mysql_secure_installation它逐项提示你完成这些事交互项作用Set root password为 root 账户设置密码空密码是最大隐患Remove anonymous users删除匿名用户账户Disallow root login remotely禁止 root 从本机之外访问数据库Remove test database删除用于演示的test数据库Reload privilege tables重载权限表使改动立即生效提示新版 MariaDB10.4已把该脚本改名为mariadb-secure-installationmysql_secure_installation作为软链接仍可用并默认启用 unix_socket 认证、通常无需再给 root 设密码上表是 CentOS 7MariaDB 5.5的传统流程。2.4 配置文件分层默认情况下 MariaDB 侦听系统中所有网络地址上的3306/TCP端口。CentOS 7 里 MariaDB 的配置采用**「主配置文件 细分配置文件」**的分层结构核心集中在/etc/my.cnf与/etc/my.cnf.d/文件层级作用/etc/my.cnf全局主配置服务启动时优先读取的入口用!includedir /etc/my.cnf.d/加载细分配置优先级取决于读取顺序不是文件「等级」/etc/my.cnf.d/server.cnf服务端只对 mysqld 进程生效参数放进[mysqld]、[mysqld_safe]段/etc/my.cnf.d/client.cnf客户端通用客户端参数放进[client]段所有客户端工具都读/etc/my.cnf.d/mysql-clients.cnf客户端偏向mysql命令行的专属优化优先级低于client.cnf提示MariaDB 按顺序扫描选项文件后读到的覆盖先读到的!includedir /etc/my.cnf.d/会按文件名字母序加载目录内的.cnf其生效位置取决于该指令在/etc/my.cnf里的位置——CentOS 默认把它放在文件末尾所以my.cnf.d里的同名项会覆盖主文件别默认「主文件一定说了算」。server.cnf里常见的服务端配置项配置项作用port 3306监听端口bind-address 0.0.0.0监听地址全部网卡datadir /var/lib/mysql数据目录innodb_buffer_pool_sizeInnoDB 缓存大小skip-networking 1禁用网络连接客户端只能用套接字文件通信默认0即侦听网络default-storage-engine InnoDB默认存储引擎log_error/slow_query_log错误日志 / 慢查询日志三、mysql 客户端与连接3.1 mysql 用法速查表写法作用说明英文原意mysql -u root本地套接字登录user指定登录用户mysql -u zhb -p带密码登录password回车后再输密码更安全mysql -u zhb -p123密码直接跟在-p后明文出现在命令里仅测试用mysql -h zhb-s2 -u zhb -p连远端主机host目标主机名或 IPmysql -P 3306 -h zhb-s2指定端口Port大写默认 3306mysql -e show databases;非交互执行一条 SQLexecute执行后即退出3.2 连接本地数据库mysql命令通过本地特殊的**套接字文件socket**与数据库通信。这种方式更安全因为 MariaDB 不必侦听网络客户端的连接代价是使用该库的服务都得跑在数据库服务器本机会挤占服务器性能。[rootzhb-s2 ~]# mysql -u rootWelcome to the MariaDB monitor. Commands end with;or\g. Your MariaDB connectionidis2Server version:5.5.68-MariaDB MariaDB Server... MariaDB[(none)]3.3 连接远端数据库客户端用 TCP/IP 连 MariaDB 时服务端需侦听 3306/TCP。先在服务端本机创建一个连接用户并授权MariaDB[(none)]createuserzhb identifiedby123;MariaDB[(none)]grantallprivilegeson*.*tozhb;MariaDB[(none)]flushprivileges;再到客户端测试连接[rootzhb-m2 ~]# mysql -u zhb -p123 -h zhb-s2⚠️注意CREATE USER/GRANT本身即时生效FLUSH PRIVILEGES用于直接改动权限表如INSERT/UPDATE权限表或恢复备份后重新加载权限按教程顺手敲一次也无副作用。另外all privileges on *.*等于超级权限生产环境应按库、按表最小授权。3.4 非交互方式连接mysql命令可用-e选项以非交互方式执行 SQL适合写进脚本[rootzhb-s2 ~]# mysql -u root -p -e show databases;--------------------|Database|--------------------|information_schema||mysql||performance_schema|--------------------3.5 客户端配置免密登录与提示符/etc/my.cnf.d/client.cnf的[client]段可写入默认登录参数省去每次敲-u/-p/-h[rootzhb-m2 ~]# vim /etc/my.cnf.d/client.cnf [client] userzhb password123 hostzhb-s2 port3306 databasemysql配好后直接敲mysql即可登录[rootzhb-m2 ~]# mysqlMariaDB[(mysql)]再改提示符让[当前库]一目了然[client] prompt\\u\\h [\\d] [rootzhb-m2 ~]# mysql -u zhb -p -h 10.1.8.102 mysqlzhb10.1.8.102[mysql]⚠️注意在client.cnf里明文写password会随配置文件泄露权限仅限实验环境生产环境用mysql_config_editor存加密凭据或改用密码提示。四、SQL 与库级操作4.1 SQL 语句分类速查表SQLStructuredQueryLanguage结构化查询语言是关系数据库最重要的操作语言1986 年由美国国家标准局颁布。按功能分为五类分类缩写代表语句数据查询语言DQLDataQueryLanguageSELECT、WHERE、ORDER BY、GROUP BY、HAVING数据操作语言DMLDataManipulationLanguageINSERT、UPDATE、DELETE数据定义语言DDLDataDefinitionLanguageCREATE、DROP建 / 删表、加索引等事务处理语言TPLTransactionProcessingLanguageBEGIN TRANSACTION、COMMIT、ROLLBACK数据控制语言DCLDataControlLanguageGRANT、REVOKE确定用户/用户组对对象的访问4.2 库级操作速查表写法作用SHOW DATABASES;列出所有数据库USE 库名;切换当前库后续操作默认作用于该库CREATE DATABASE 库名;创建数据库DROP DATABASE 库名;删除数据库连表带数据一起删除MariaDB[(none)]SHOWDATABASES;--------------------|Database|--------------------|information_schema||mysql||performance_schema|--------------------3rowsinset(0.019sec)MariaDB[(none)]USEmysql;Databasechanged MariaDB[mysql]CREATEDATABASEwebapp;Query OK,1rowaffected(0.010sec)MariaDB[mysql]DROPDATABASEwebapp;Query OK,0rowsaffected(0.006sec)⚠️注意SQL 语句不区分大小写但数据库名称区分大小写Linux 上。惯例是库名全小写、SQL 关键字全大写以区分语句与目标。⚠️注意DROP DATABASE会删掉库中所有表并不可逆只有对该库有DROP权限的用户才能执行它不会改动用户权限——用同名重建库旧库的用户权限依然有效。4.3 系统库说明库存什么mysql系统库保存数据库用户及其访问权限等信息information_schema保存数据库 / 数据表的元数据信息performance_schema保存数据库服务器性能信息五、MariaDB 进程机制5.1 mysqld_safe 与 mysqldMariaDB 启动后同时出现mysqld_safe和mysqld两个进程是完全正常的这是 MariaDB以及 MySQL的标准运行机制进程角色主要职责mysqld_safe监控守护程序父安全启动mysqld、启动前环境检查配置加载、权限验证实时监控mysqld崩溃自动重启统一管理日志输出启动参数兼容转换mysqld核心进程子处理客户端连接SQL 查询、数据写入管理内存与磁盘数据表、索引、事务执行 SQL、维护一致性锁机制、事务处理、复制等两者是父进程 - 子进程关系mysqld_safe由root运行需要更高权限做环境准备mysqld由mysql普通用户运行安全原则。验证# 看进程的父子关系[rootzhb-s2 ~]# ps -ef | grep -E mysqld_safe|mysqldroot12341010:00 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe--datadir/var/lib/mysql... mysql14561234010:00 ? 00:00:05 /usr/libexec/mysqld--basedir/usr...# 或用 pstree 看进程树更直观[rootzhb-s2 ~]# pstree | grep mysqld5.2 systemd 场景差异如果启动后只有mysqld、没有mysqld_safe通常是因为使用了systemd管理现代 Linuxsystemctl start mariadb会直接拉起mysqld由 systemd 替代mysqld_safe做守护手动以后台方式启动mysqld如mysqld --daemonize此时没有守护进程崩溃后不会自动重启。提示所以「只见mysqld」不等于出问题要结合启动方式判断两种进程同时存在反而是默认的正常形态。附命令英文全称速查表命令 / 缩写英文全称 / 原意作用SQLStructuredQueryLanguage结构化查询语言DBMSDatabaseManagementSystem数据库管理系统RDBMSRelationalDBMS关系数据库管理系统NoSQLNotOnlySQL非关系型数据库DQLDataQueryLanguage数据查询语言SELECTDMLDataManipulationLanguage数据操作语言INSERT/UPDATE/DELETEDDLDataDefinitionLanguage数据定义语言CREATE/DROPTPLTransactionProcessingLanguage事务处理语言COMMIT/ROLLBACKDCLDataControlLanguage数据控制语言GRANT/REVOKEmariadb/mysqldMariaDB/MySQLdaemon数据库服务端核心进程mysqld_safemysqldsafewrapper守护包装脚本崩溃自动重启mysqlMySQLclient命令行客户端mysql_secure_installationmysqlsecureinstallation安全初始化脚本/etc/my.cnfmycon****figurationMariaDB 主配置文件InnoDBInnovationDBMySQL 官方命名的存储引擎默认事务型存储引擎socketsocket本地套接字文件供本机进程通信 参考资料官方文档 · 中英双语官方手册与规范MariaDB 官方文档总入口Server / Client / SQL用 YUM 安装 MariaDBRHEL / CentOS用选项文件配置 MariaDBmy.cnf 与 my.cnf.d 的读取顺序与优先级MariaDB SQL 语句参考DDL / DML / DCLmysql_secure_installation 说明中文版MySQL / MariaDB 兼容教程菜鸟教程中文覆盖 SQL 基础语句其余手册在服务器上直接查man8mysqld# 服务端核心进程man1mysql# 命令行客户端man5my.cnf# 主配置文件读取顺序man1mysqld_safe# 守护包装脚本总结MariaDB 的部署就是「装包 → 起服 → 放行 3306 →mysql_secure_installation加固」四板斧配置集中在/etc/my.cnf与/etc/my.cnf.d/server.cnf管服务端、client.cnf管客户端主文件优先级最高连接有本地套接字与远端 TCP 两条路免密与提示符都写在[client]段库级 SQL 记住SHOW / USE / CREATE / DROP四条DROP DATABASE不可逆要慎用看到mysqld_safemysqld两个进程别慌那是标准形态。觉得有用可以收藏连接或权限相关的问题欢迎在评论区贴出报错一起看。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑