# Prisma 简介
Prisma 是一个开源的 Node.js ORM(对象关系映射)工具,它使得开发者能够使用 TypeScript 或 JavaScript 来安全、可靠地查询数据库。Prisma 简化了数据库访问层,使开发者能够将更多的精力集中在业务逻辑上,而不是编写和维护复杂的 SQL 查询。
# Prisma 的主要特点
- 类型安全:Prisma 使用 TypeScript 作为主要的开发语言,提供了强大的类型检查,确保数据库查询和模型定义在类型上是一致的。
- 自动迁移:Prisma 可以自动处理数据库迁移,根据模型定义来更新数据库结构。
- 清晰的错误提示:当查询出错时,Prisma 会提供清晰的错误提示,帮助开发者快速定位问题。
- 关系管理:Prisma 支持复杂的关系模型,如一对一、一对多、多对多等,并提供了方便的关系查询 API。
# Prisma 的使用方法
# 1. 安装 Prisma CLI
首先,你需要在项目中安装 Prisma CLI。你可以使用 npm 或 yarn 来安装:
npm install -g prisma
# 或者
yarn global add prisma
2
3
# 2. 初始化 Prisma
在你的项目根目录下运行以下命令来初始化 Prisma:
npx prisma init
这将在你的项目中创建一个名为 prisma 的目录,其中包含 Prisma 的配置文件 schema.prisma。
# 3. 定义数据模型
在 schema.prisma 文件中,你可以定义你的数据模型。例如:
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
在上面的例子中,我们定义了两个模型:User 和 Post。User 和 Post 之间有一个一对多的关系。
# 4. 生成 Prisma 客户端
运行以下命令来根据数据模型定义生成 Prisma 客户端:
npx prisma generate
这将生成一个名为 @prisma/client 的 npm 包,你可以在你的代码中引入并使用它。
# 5. 执行数据库迁移
当你修改了数据模型并重新生成了 Prisma 客户端后,你需要执行数据库迁移来更新数据库结构:
npx prisma migrate dev
# 6. 查询数据库
在你的代码中,你可以引入 Prisma 客户端并使用它来查询数据库。例如:
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
const allUsers = await prisma.user.findMany();
console.log(allUsers);
}
main()
.catch((e) => {
throw e;
})
.finally(async () => {
await prisma.$disconnect();
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 常见问题解决方案
- 数据库连接问题:确保你的数据库 URL 是正确的,并且数据库服务是运行中的。同时,检查防火墙和网络设置,确保你的应用可以连接到数据库。
- 迁移冲突:如果你在尝试执行迁移时遇到了冲突,可能是因为你的数据模型定义与当前的数据库结构不一致。你可以尝试使用
prisma migrate resolve命令来解决冲突。 - 类型错误:如果你在查询数据库时遇到了类型错误,可能是因为你的查询语句与数据模型定义不匹配。检查你的查询语句和数据模型定义,确保它们是一致的。
# Prisma 数据模型字段解释
在定义 Prisma 数据模型时,每个字段都代表数据库表中的一个列,用于存储特定类型的数据。字段的定义包括字段名、数据类型、约束等。下面是一些在 Prisma 数据模型中常见的字段定义及其代表的意义:
字段名 (Field Name): 字段名是数据库表中列的名称。它应该清晰地描述该列存储的数据类型。例如,
name、email、age等。数据类型 (Data Type): 数据类型指定了字段中可以存储的数据种类。Prisma 支持多种数据类型,如:
String:文本字符串。Int:整数。BigInt:大整数。Float:浮点数。Decimal:定点数,用于精确的小数运算。DateTime:日期和时间。Boolean:布尔值(true 或 false)。Enum:枚举类型,用于预定义的值集合。Json:JSON 数据。- 关系字段(如
User[]或Post?):表示与其他模型的关联。
约束 (Constraints): 约束是对字段数据的限制条件。Prisma 支持多种约束,包括:
@id:标识字段为主键。@unique:确保字段中的每个值都是唯一的。@default(...):为字段设置默认值。@map(...):为字段指定数据库中的列名。@createdAt和@updatedAt:自动处理记录的创建和更新时间戳。- 关系约束(如
@relation(...)):定义与其他模型的关系的细节。
可选性 (Optionality): 字段可以是可选的(字段名后加问号,如
name?),也可以是必填的。可选字段意味着在创建或更新记录时可以不提供该字段的值。关系字段 (Relational Fields): 关系字段表示当前模型与其他模型之间的关系。例如,一个
User模型可能有一个posts字段,它是一个Post[]类型,表示用户发布的所有帖子。这种关系字段在 Prisma 中通过数组类型或可选的单个类型来表示。字段属性 (Field Attributes): 某些字段类型可能具有额外的属性,如
@db.VarChar(255)用于指定String字段的最大长度。
下面是一个简单的 Prisma 数据模型示例,展示了字段定义及其意义:
model User {
id Int @id @default(autoincrement()) // 主键,自增整数
email String @unique // 唯一字符串,用于存储用户的电子邮件地址
name String? // 可选的字符串,用于存储用户的名字
age Int? // 可选的整数,用于存储用户的年龄
createdAt DateTime @default(now()) // 自动设置为当前时间的创建时间戳
posts Post[] // 与Post模型的一对多关系,存储用户发布的帖子列表
}
model Post {
id Int @id @default(autoincrement()) // 主键,自增整数
title String // 必填字符串,用于存储帖子的标题
content String? // 可选的字符串,用于存储帖子的内容
published Boolean @default(false) // 布尔值,表示帖子是否已发布
authorId Int // 外键,引用User模型的id字段
author User @relation(fields: [authorId], references: [id]) // 与User模型的关系的引用
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
在上面的例子中,User 模型有 id、email、name、age、createdAt 和 posts 字段,而 Post 模型有 id、title、content、published、authorId 和 author 字段。每个字段都有其特定的类型和约束,以满足应用的需求。
# Prisma CLI 常用命令
以下是一些常用的 Prisma CLI 命令及其详解。
# 1. prisma init
功能:初始化一个新的 Prisma 项目。
用法:npx prisma init
这个命令将创建一个新的 prisma 目录,并在其中生成 schema.prisma 文件,这是定义数据库模型的地方。
# 2. prisma generate
功能:根据 schema.prisma 文件生成 Prisma 客户端代码。
用法:npx prisma generate
此命令将生成 TypeScript 或 JavaScript 的 Prisma 客户端,该客户端包含了用于查询和操作数据库的所有必要类型和函数。
# 3. prisma migrate
功能:管理数据库迁移。
子命令:
prisma migrate dev:基于schema.prisma和当前数据库状态生成并应用迁移。prisma migrate reset:重置数据库到初始状态。prisma migrate save --name=MyMigration:保存一个迁移文件,但不应用它。prisma migrate up:应用最新的迁移。prisma migrate down:回滚到上一个迁移。prisma migrate list:列出所有的迁移。
# 4. prisma studio
功能:启动 Prisma Studio,一个基于浏览器的数据库可视化工具。
用法:npx prisma studio
Prisma Studio 允许开发者在浏览器中直接查询和修改数据库,而无需编写任何代码。
# 5. prisma db pull
功能:从现有数据库反向生成 Prisma schema。
用法:npx prisma db pull
这个命令会读取数据库的结构,并尝试生成一个与之匹配的 schema.prisma 文件。
# 6. prisma format
功能:格式化 schema.prisma 文件。
用法:npx prisma format
这个命令可以帮助你按照 Prisma 的最佳实践来格式化你的 schema 文件。
# 7. prisma validate
功能:验证 schema.prisma 文件的语法和一致性。
用法:npx prisma validate
这个命令会在你尝试生成或迁移之前检查你的 schema 文件是否有任何错误。
# 8. prisma db push
注意
该命令可能会导致数据丢失,使用前要谨慎。
功能:将 Prisma schema 应用到数据库。
用法:npx prisma db push
这个命令会读取 schema.prisma 文件,并尝试将定义的结构应用到数据库中。注意,这可能会导致数据丢失,所以在使用之前要谨慎。
# 其他命令和选项
Prisma CLI 还提供了其他命令和选项,如配置数据库连接、查看帮助文档等。你可以通过运行 npx prisma --help 或访问 Prisma 的官方文档来获取完整的命令列表和更多详细信息。
总的来说,Prisma CLI 提供了一套强大的命令行工具,帮助开发者更高效地管理数据库和 Prisma schema。通过熟悉这些命令,你可以更加顺畅地使用 Prisma 进行数据库开发。
# MinIO(Node.js 客户端)
# 一、安装 MinIO Node.js 客户端
首先,你需要在你的 Node.js 项目中安装 MinIO 的客户端库。在你的项目目录下打开终端,然后运行以下命令:
npm install --save minio
这将会安装 minio 库到你的 node_modules 文件夹中,并将其添加到你的 package.json 文件的依赖列表中。
# 二、创建 MinIO 客户端
在你的 Node.js 代码中,你需要创建一个 MinIO 客户端实例,以便与 MinIO 服务器进行通信。这通常涉及到提供 MinIO 服务器的地址、端口、访问密钥和秘密密钥等信息。以下是一个简单的示例:
const Minio = require('minio');
let minioClient = new Minio.Client({
endPoint: 'your-minio-endpoint', // 替换为你的 MinIO 服务器的地址
port: 9000, // 替换为你的 MinIO 服务器的端口
useSSL: false, // 如果你的 MinIO 服务器使用 HTTPS,则设置为 true
accessKey: 'your-access-key', // 替换为你的访问密钥
secretKey: 'your-secret-key', // 替换为你的秘密密钥
});
2
3
4
5
6
7
8
9
# 三、使用 MinIO 客户端进行操作
一旦你有了 MinIO 客户端实例,你就可以使用它来执行各种对象存储操作,如创建桶、上传文件、下载文件、删除文件等。以下是一些示例:
1. 创建桶
minioClient.makeBucket('my-bucket', 'us-east-1', function(err, res) {
if (err) {
return console.log(err)
}
console.log(res)
});
2
3
4
5
6
2. 上传文件
const fs = require('fs');
const filePath = '/path/to/your/file';
minioClient.fPutObject('my-bucket', 'my-object', fs.createReadStream(filePath), { contentType: 'application/octet-stream', metadata: { 'x-amz-meta-mykey': 'myvalue' } }, function(err, etag) {
if (err) return console.log(err)
console.log(etag)
});
2
3
4
5
6
7
3. 下载文件
minioClient.getObject('my-bucket', 'my-object', function(err, dataStream) {
if (err) return console.log(err)
dataStream.pipe(fs.createWriteStream('/path/to/destination/file'));
});
2
3
4
4. 删除文件
minioClient.removeObject('my-bucket', 'my-object', function(err) {
if (err) return console.log(err)
console.log('Removed successfully')
});
2
3
4
这些只是 MinIO Node.js 客户端的基本用法。MinIO 提供了丰富的 API,可以满足各种复杂的对象存储需求。你可以查阅 MinIO 的官方文档以获取更详细的信息和示例。
注意:在使用 MinIO Node.js 客户端时,请确保你的 MinIO 服务器已经正确配置并正在运行,且你的访问密钥和秘密密钥是正确的。此外,对于生产环境,建议使用 HTTPS 来保护你的通信安全。
# log4js 详解
log4js 是一个强大的 Node.js 日志库,它基于 Java 的 log4j 库,为 Node.js 应用提供灵活的日志记录功能。log4js 允许开发者定义不同级别的日志,例如:debug、info、warn、error 等,并且可以将日志输出到不同的目的地,如控制台、文件、数据库等。
# 1. 安装 log4js
使用 npm 可以轻松安装 log4js:
npm install log4js
# 2. 基本配置和使用
在 Node.js 项目中,你通常需要创建一个配置文件来定义 log4js 的行为。以下是一个基本的配置示例:
const log4js = require('log4js')
const logLayout = {
type: 'pattern',
pattern: '[%[%p%]] %d{yyyy-MM-dd hh:mm:ss} %h %[%f{2}:%l%] %m%n'
}
log4js.configure({
appenders: {
console: { type: 'console', layout: logLayout },
file: {
type: 'dateFile',
filename: 'logs/app',
encoding: 'utf-8',
pattern: 'yyyy-MM-dd.log',
layout: {
type: 'pattern',
pattern: '[%p] %d{yyyy-MM-dd hh:mm:ss} %h %f{2}:%l %m%n'
},
alwaysIncludePattern: true,
numBackups: 90,
keepFileExt: true // 保留扩展名
}
},
categories: {
default: {
appenders: ['console', 'file'],
level: 'debug',
enableCallStack: true
}
}
})
module.exports = log4js
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
在上面的代码中,我们首先引入了 log4js 库,然后配置了两个 appender:一个用于输出到控制台,另一个用于输出到文件。
# 3. 配置选项
log4js 提供了丰富的配置选项,允许你精细控制日志的行为。例如,你可以为每个 appender 设置不同的布局(layout),控制日志的格式;你还可以设置日志的滚动策略,当日志文件达到一定大小或时间时,自动滚动创建新的日志文件。
# 常见问题解决方案
- 日志级别不生效:如果你将日志级别设置为 'info',那么所有级别为 'info'、'warn' 和 'error' 的日志都会被输出,而级别为 'debug' 的日志则不会。确保你设置的日志级别满足你的需求。
- 日志文件没有生成:可能是因为文件路径不正确或没有足够的写入权限。检查你的文件路径是否正确,并确保 Node.js 进程有权限在该路径下创建和写入文件。
- 控制台日志重复输出:可能是因为你在配置中启用了多个控制台 appender。检查你的配置,确保只启用了一个控制台 appender。
以上就是对 log4js 的详细解释、使用方法以及常见问题的解决方案。log4js 是一个非常强大且灵活的日志库,通过合理的配置和使用,可以极大地提升 Node.js 应用的日志管理能力。
# ioredis
ioredis 是一个全功能的 Redis 客户端,用于 Node.js 环境。它支持 Redis 的所有命令,提供连接池、自动重连、Pub/Sub、Lua 脚本、事务、管道等功能,并且它是基于纯 JavaScript 实现的,无需任何依赖。
ioredis 的主要特点包括:
- 高性能:基于纯 JavaScript 实现,利用 Node.js 的非阻塞 I/O 特性,实现了高效的并发处理。
- 连接池:支持连接池功能,可以复用连接,减少创建和销毁连接的开销。
- 自动重连:当与 Redis 服务器的连接断开时,会自动尝试重新连接。
- Pub/Sub:支持 Redis 的发布/订阅模式,方便实现实时通信功能。
- Lua 脚本:支持执行 Redis 的 Lua 脚本,实现复杂的业务逻辑。
- 事务:支持 Redis 的事务功能,确保一系列命令的原子性执行。
# 基本使用
安装 ioredis:
npm install ioredis
在 Node.js 中使用 ioredis:
const Redis = require('ioredis');
// 创建一个 Redis 客户端实例
const redis = new Redis({
port: 6379, // Redis 端口
host: '127.0.0.1', // Redis 主机地址
password: 'yourpassword', // 密码(如果 Redis 服务器设置了密码的话)
db: 0, // 使用的数据库索引
});
// 使用客户端实例执行命令
redis.set('foo', 'bar', function (err, result) {
if (err) {
console.error('Error setting value in Redis:', err);
return;
}
console.log('Value set in Redis:', result);
});
// 获取值
redis.get('foo', function (err, result) {
if (err) {
console.error('Error getting value from Redis:', err);
return;
}
console.log('Value from Redis:', result);
});
// 当不再需要客户端时,关闭连接
redis.quit();
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 常用 API
ioredis 提供了丰富的 API 来操作 Redis 数据。以下是一些常用的 API 和它们的用法:
- set(key, value, [options], callback):设置 key 的值为 value。
- get(key, callback):获取 key 的值。
- hset(key, field, value, [options], callback):将哈希表 key 中的字段 field 的值设为 value。
- hget(key, field, callback):获取存储在哈希表 key 中的字段 field 的值。
- lpush(key, ...values, [options], callback):将一个或多个值 value 插入到列表 key 的表头。
- rpop(key, callback):移除并获取列表 key 的表尾元素。
- sadd(key, ...members, [options], callback):向集合 key 添加一个或多个 member 元素,如果 member 已经存在于集合中,则忽略。
- smembers(key, callback):返回集合 key 中的所有成员。
- zadd(key, score, member, [[score2, member2], ...], [options], callback):将一个或多个 member 元素及其 score 值加入到有序集合 key 中。
- zrange(key, start, stop, [WITHSCORES], callback):返回有序集合 key 中,指定区间内的成员。其中成员的位置按 score 值递增(从小到大)来排序,具有相同 score 值的成员按字典序排列。
除了上述基本的 CRUD 操作外,ioredis 还支持发布/订阅、事务、Lua 脚本执行等高级功能。
# 更多 API
连接与断开
- connect():手动连接到 Redis 服务器。
- disconnect():断开与 Redis 服务器的连接。
- end() 或 quit():关闭连接并结束 Redis 客户端。
键操作
- del(key, [key...], callback):删除一个或多个 key。
- exists(key, callback):检查 key 是否存在。
- expire(key, seconds, callback):为 key 设置过期时间(以秒为单位)。
- ttl(key, callback):获取 key 的剩余过期时间。
- type(key, callback):返回 key 的类型。
列表操作
- rpush(key, ...values, [options], callback):将一个或多个值插入到列表 key 的表尾。
- lrange(key, start, stop, callback):获取列表 key 中指定范围内的元素。
- lindex(key, index, callback):获取列表 key 中指定索引的元素。
- lrem(key, count, value, callback):移除列表 key 中等于 value 的元素。count 的值决定了移除的个数和方向。
集合操作
- srem(key, ...members, callback):移除集合 key 中的一个或多个 member 元素。
- sismember(key, member, callback):判断 member 元素是否是集合 key 的成员。
- scard(key, callback):返回集合 key 的元素个数。
有序集合操作
- zrem(key, ...members, callback):移除有序集合 key 中的一个或多个成员。
- zrevrange(key, start, stop, [WITHSCORES], callback):返回有序集合 key 中,指定区间内的成员,成员的位置按 score 值递减(从大到小)来排序。
- zscore(key, member, callback):返回有序集合中指定成员的分数值。
发布/订阅
- subscribe(channel, [channel...], callback):订阅一个或多个频道。
- unsubscribe(channel, [channel...], callback):退订一个或多个频道。
- psubscribe(pattern, [pattern...], callback):订阅一个或多个符合给定模式的频道。
- punsubscribe(pattern, [pattern...], callback):退订一个或多个符合给定模式的频道。
事务
- multi([options]):标记一个事务块的开始。
- exec(callback):执行所有事务块内的命令。
- discard():取消事务,放弃执行事务块内的所有命令。
Lua 脚本
- eval(script, numKeys, key1, key2, ..., arg1, arg2, ..., callback):执行 Lua 脚本。
- evalsha(sha1, numKeys, key1, key2, ..., arg1, arg2, ..., callback):执行 Lua 脚本的 SHA1 校验和。
其他
- ping([callback]):发送一个 PING 命令到服务器。
- dbsize([callback]):返回当前数据库的 key 数量。
- flushdb([options], callback):删除当前数据库中的所有 key。
- flushall([options], callback):删除所有数据库中的所有 key。
完整的 API 列表和详细文档可以在 ioredis 的官方文档中找到。随着 ioredis 的版本更新,可能会有新的 API 被添加或旧的 API 被修改,建议经常查阅官方文档以获取最新的信息。
# Docker 容器常用操作
要重启 Docker 镜像,首先需要明确的是,Docker 镜像本身并不运行,而是基于镜像创建并启动的容器在运行。因此,重启 Docker 镜像实际上是指重启运行该镜像的容器。
# 1. 查看正在运行的容器
使用 docker ps 命令可以查看当前正在运行的容器及其相关信息,包括容器 ID 和名称:
docker ps
如果容器当前不在运行状态,可以使用 docker ps -a 来列出所有容器,包括停止的容器。
# 2. 重启容器
使用 docker restart 命令加上容器的 ID 或名称来重启容器:
docker restart <container_id_or_name>
这个命令会停止指定的容器(如果它正在运行)并立即重新启动它。重启过程会保持容器使用的任何数据卷和网络设置不变,这意味着容器内的数据和配置将被保留。
# 3. (可选)如果镜像有更新
如果你想要基于更新后的镜像来重启容器,那么你需要先停止并删除旧的容器,然后基于新的镜像创建并启动新的容器:
# 停止并删除正在运行的容器
docker stop <container_id_or_name>
docker rm <container_id_or_name>
# 基于新的镜像创建并启动容器
docker run -d <options> <new_image_name_or_id>
2
3
4
5
6
请注意,如果你需要经常重启容器,可能需要检查应用程序或容器配置是否有问题,因为频繁重启通常不是最佳实践。如果想要重启的是 Docker 服务本身(而非容器),则需要使用系统服务管理工具(如 Linux 上的 systemctl)。
# 使用 Dockerfile 部署 Node.js 项目
为了在 Docker 中部署 Node.js 项目,你需要创建一个 Dockerfile,它是一个文本文件,定义了构建 Docker 镜像的步骤。以下是一个基本的 Dockerfile 示例:
# 使用官方Node.js基础镜像
FROM node:16
# 设置工作目录
WORKDIR /usr/src/app
# 复制package.json文件和package-lock.json文件(如果存在)
COPY package*.json ./
# 安装项目依赖
RUN npm install
# 复制项目文件到工作目录
COPY . .
# 暴露容器端口
EXPOSE 8080
# 运行Node.js应用
CMD ["node", "app.js"]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
确保你的 Node.js 项目中有 package.json 文件,并且应用的入口文件是 app.js。
接下来,构建 Docker 镜像:
docker build -t node-app .
然后,运行容器:
docker run -p 8080:8080 -d node-app
这里,-t node-app 给镜像命名为 node-app,-p 8080:8080 将容器的 8080 端口映射到主机的 8080 端口,-d 表示后台运行。确保你的 Node.js 应用监听的端口与 EXPOSE 指令中指定的端口相匹配。
# Dockerfile 构建与运行完整流程
编写 Dockerfile:在项目的根目录下创建一个名为
Dockerfile的文件(注意没有扩展名),定义构建镜像所需的步骤和配置。例如:# 使用官方Node.js镜像作为基础镜像 FROM node:latest # 设置工作目录为/app WORKDIR /app # 将当前目录内容复制到容器的/app内 COPY . /app # 安装依赖 RUN npm install # 对外暴露的端口号 EXPOSE 3000 # 定义容器启动后执行的命令 CMD [ "npm", "start" ]1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17构建镜像:打开终端,导航到包含 Dockerfile 的目录,并运行以下命令来构建镜像:
docker build -t my-nodejs-app:v1 .1查看构建的镜像:
docker images1运行容器:
docker run -d -p 8080:3000 my-nodejs-app:v11这条命令会在后台启动一个容器,并将主机的 8080 端口映射到容器的 3000 端口。
查看运行的容器:
docker ps1(可选)连接到容器:如果需要,你可以使用
docker exec命令连接到正在运行的容器内部:docker exec -it <container_id_or_name> /bin/bash1
# 安装 MySQL 客户端(CentOS)
mysql: command not found 这个错误表明你的系统中没有安装 MySQL 客户端,或者 MySQL 客户端没有正确添加到系统的 PATH 环境变量中。在 CentOS 上,你可以按照以下步骤来安装 MySQL 客户端:
安装 MySQL 服务端和客户端:
通常,当你安装 MySQL 服务端时,客户端也会一起安装。你可以使用
yum来安装 MySQL 社区版:sudo yum install -y mysql-server mysql1在某些情况下,你可能需要启用 MySQL 的 yum 仓库。对于 MySQL 8.0,你可以使用以下命令:
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo yum install -y mysql-community-server1
2检查 MySQL 服务状态:
sudo systemctl status mysqld1如果服务没有运行,你可以启动它:
sudo systemctl start mysqld1验证 MySQL 客户端安装:
mysql --version1如果命令能够正确显示 MySQL 的版本信息,那么说明 MySQL 客户端已经成功安装。
设置开机自启(可选):
sudo systemctl enable mysqld1安全安装:
MySQL 安装完成后,通常建议运行
mysql_secure_installation脚本来加强安全性,包括设置 root 密码、删除匿名用户、禁止 root 用户远程登录等:sudo mysql_secure_installation1
如果你已经按照上述步骤操作,但仍然遇到 mysql: command not found 的错误,那么请检查你的 PATH 环境变量,确保包含了 MySQL 客户端的安装路径。你可以通过 echo $PATH 命令查看当前的 PATH 设置。