MariaDB 是 MySQL 的一个分支,mysql-server包和mariadb-server包无法同时存在。几乎所有主流编程语言都支持连接MySQL数据库。
MySQL、SQLite、PostgreSQL、SQL Server 、Oracle、达梦均属于关系型数据库(RDBMS),按照固定的结构存储数据(建表),数据可能依赖内存缓存加速,但最终都存储在硬盘里。遵循国际标准组织制定的 SQL 语法规范(如 SELECT、INSERT、JOIN等)。这保证了基础语法的高度一致性。
非关系型数据库(NoSQL):没有传统关系型数据库的固定表结构模式。
Redis 是内存数据结构服务器,采用键值模型存储多种数据类型(字符串、列表等),支持持久化与复杂操作;
Memcached 是纯内存键值缓存,仅支持字符串且无持久化;
MongoDB 是磁盘型文档数据库,以 BSON 格式存储结构化数据,支持类 SQL 查询。
三者均脱离 SQL 范式,但数据存储位置与结构灵活性存在显著差异:Redis/Memcached 数据主要驻留内存(其中 Memcached 无持久化),而 MongoDB 数据持久化于磁盘;Memcached 仅支持简单键值,Redis 支持多种数据结构。
1.PHP连接数据库
安装并连接到数据库
1.yum install -y mariadb mariadb-server
2.rpm -qc mariadb-server
查看配置文件目录
3.systemctl enable mariadb --now
4.netstat -tunalp | grep mariadb
链接数据库
-h,--host,用于指定 MySQL 服务所在的主机名或 IP 地址,默认localhost
-p,小写p为交互式输入密码
-P,大写P指定端口,默认3306
-u,用户,直接登录是数据库的root用户,使用show grants;可以看到其拥有所有库所有表的最大权限。且可以把自己的权限复制给他人。
- 退出 exit
- select user(); 查看当前是哪个用户登录了数据库
当直接在命令行输入mysql,等价于:
mysql -u$(whoami) -hlocalhost -P3306 -p
#小写p会提示输入密码
先连接到数据库,执行指定命令,然后自动退出并返回到 Linux命令行(适合用于脚本)
mysql -u用户名 -p密码 -e "SHOW DATABASES;"
注:短格式的选项和参数可以无空格
5.检查php能否连接数据库
yum install php-mysqlnd -y
php -m | grep mysql
列出支持的功能模块mysqli
mysqlnd
pdo_mysql
步骤
涉及数据库知识在下一标题中整理
1.创建用户
CREATE USER 'admin'@'localhost' IDENTIFIED BY '123456';
作用:创建一个用户名为 admin、密码为 123456 的 MySQL 用户。
'admin'@'localhost':用户 admin 只能从本地(localhost)连接数据库。
密码需用双引号包裹(MySQL 8.0+ 也可用单引号)。
IDENTIFIED BY
表示身份验证凭证
2.授予权限
GRANT ALL ON *.* TO 'admin'@'localhost';
作用:授予用户 admin 所有数据库的所有权限(*.* 表示“所有库.所有表”)。
ALL是 ALL PRIVILEGES的简写
3.创建数据库(建库)
MariaDB [(none)]> create database game;
可用show database;
查看已有的库进行确认
4.创建数据表(建表)
MariaDB [(none)]> create table game.user(name char(10), password char(6));
在 game仓库里,建造了一个名为 user的表。这个表的结构被设计为可以存放两种货物:
name char(10):用户名,定义为最多10个字符的字符串。
password char(6):密码,定义为最多6个字符的字符串。
5.验证表是否创建成功
MariaDB [(none)]> use game;
-- 进入(选择)game数据库
MariaDB [game]> show tables;
-- 查看当前数据库中的所有表
6.使用php脚本验证是否能够连接并写入数据库,需要关闭SELinux
<?php
// 数据库配置(根据实际配置修改)
$db_host = 'localhost';
$db_user = 'admin';
$db_pass = '123456';
$db_name = 'game';
// 创建数据库连接
$conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
// 检测连接
if ($conn->connect_error) {
die("数据库连接失败: " . $conn->connect_error);
}
// 设置字符集防止中文乱码[2,6](@ref)
$conn->set_charset("utf8");
// 准备测试数据(符合char(10)和char(6)字段限制)
$test_name = "test_user"; // 用户名(10字符以内)
$test_pass = "123abc"; // 密码(6字符以内)
// 使用预处理语句防止SQL注入[1](@ref)
$stmt = $conn->prepare("INSERT INTO user (name, password) VALUES (?, ?)");
$stmt->bind_param("ss", $test_name, $test_pass);
// 执行插入操作
if ($stmt->execute()) {
echo "数据写入成功!插入记录:";
echo "用户名:$test_name,密码:$test_pass";
} else {
echo "数据写入失败: " . $stmt->error;
}
// 关闭连接
$stmt->close();
$conn->close();
?>
补充:HCIP例题
86.在LNMP架构中,firewalld 需要在每个节点中都开启并配置。在 Nginx 服务器中,需要放通其对应的业务端口,同时需要放通访问数据库的端口。在数据库服务器中,需要放通对应的业务接口即可。
【错】
防火墙并非强制开启,应根据节点角色和网络位置决定。例如,数据库节点通常部署在内网隔离区,若已通过安全组或物理防火墙隔离,则无需开启本地防火墙。
Nginx作为反向代理,不直接连接数据库,而是将动态请求转发至PHP-FPM(如127.0.0.1:9000),由PHP应用连接数据库
补充:单引号和反引号
反引号 (`)
引用标识符(表名、列名等),类似SQL Server 中的 []
1.标识符是 MySQL 的保留关键字:如 SELECT * FROM `order`; 因为 order是一个关键字
2.标识符包含特殊字符或空格:如 SELECT `user-name` FROM `user data`;
3.标识符以数字开头:如 CREATE TABLE `2025data` ...
单引号 (')
定义字符串常量
SELECT * FROM users WHERE name = 'Alice';
2.用户管理
修改密码
1.设置管理员密码
mysqladmin -u root -p password
在命令行中执行无需连接数据库
password是固定关键字,表示要执行的操作是“修改密码”
交互式,先输入旧密码再重复输入两次新密码
2.Alter修改用户密码
ALTER可操作表、库、索引、视图、用户等十多种对象,对这些已经建立的对象进行修改
ALTER [对象类型] [对象名称] [操作指令];
alter user root@localhost identified by "123456";
3.执行mysql_secure_installation
MySQL/MariaDB 官方提供的安全初始化脚本
Enter current password for root (enter for none): ← 初次安装直接回车
Set root password? [Y/n] Y 设置 root 密码
New password: ********
Re-enter new password: ********
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 刷新权限表使上述修改立即生效
All done!
4.SET命令,在 MySQL 8.0 及更高版本中,SET PASSWORD
语法已被弃用,推荐使用Alter
MySQL 5.6 :SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
MySQL 8.0 :SET PASSWORD FOR 'root'@'localhost' = '新密码';
创建账号/GRANT授权
CREATE USER 'webadmin'@'localhost' IDENTIFIED BY '654321';
主机名
'localhost'
只能从数据库服务器本机连接。
'192.168.1.100'
只能从指定的 IP 地址 (192.168.1.100) 连接,应用部署在独立的服务器上时使用。
'192.168.1.%'
可以从指定的 IP 段 (192.168.1.0/24) 连接。%是通配符,允许一个网段内的多个应用服务器连接。
'%'
可以从任何主机连接,非常不安全,通常仅用于测试环境或特殊需求。
在 MySQL 中,'user'@'localhost'和 'user'@'%'被认为是两个完全不同的用户,他们可以有各自的密码和权限。
GRANT SELECT, INSERT, UPDATE, DELETE ON buydb.* TO 'webadmin'@'localhost';
GRANT设置权限
SELECT(查询), INSERT(插入), UPDATE(更新), DELETE(删除)。还可以使用 ALL PRIVILEGES授予所有权限。
权限作用范围ON buydb.*
buydb是数据库名。
.*表示该数据库下的所有表。也可以指定单张表,如 ON buydb.shop。
FLUSH PRIVILEGES;
FLUSH是一个多功能命令,用于清除或重新加载各种内部缓存。
PRIVILEGES具体指代的是 MySQL 中存储在系统表里的用户权限信息。
使用 GRANT、REVOKE、CREATE USER、ALTER USER这类标准的权限管理语句后,MySQL 会自动刷新权限,使更改立即生效,无需手动执行 FLUSH PRIVILEGES;