Ubuntu操作系统下使用mysql、mongodb、redis

文章目录

前言

一、mysql:稳定可靠的关系型数据库

[1. 安装 mysql](#1. 安装 mysql)

[2. 安全配置(必做)](#2. 安全配置(必做))

[3. 基础操作](#3. 基础操作)

[(1)登录 mysql](#(1)登录 mysql)

(2)核心命令示例

[4. 远程访问配置(可选)](#4. 远程访问配置(可选))

二、mongodb:灵活高效的文档型数据库

[1. 安装 mongodb(社区版)](#1. 安装 mongodb(社区版))

[2. 基础操作(使用 mongo 命令行)](#2. 基础操作(使用 mongo 命令行))

(1)登录与切换数据库

(2)核心命令示例

[3. 安全配置(添加密码)](#3. 安全配置(添加密码))

三、redis:高性能的内存型缓存数据库

[1. 安装 redis](#1. 安装 redis)

[2. 配置优化(基础)](#2. 配置优化(基础))

[3. 基础操作(使用 redis-cli 命令行)](#3. 基础操作(使用 redis-cli 命令行))

[(1)登录 redis](#(1)登录 redis)

(2)核心命令示例(支持多种数据结构)

[4. 常见场景示例:缓存 mysql 数据](#4. 常见场景示例:缓存 mysql 数据)

四、三大数据库对比与适用场景

五、常见问题排查

[mysql 远程连接失败:](#mysql 远程连接失败:)

[mongodb 启动失败:](#mongodb 启动失败:)

[redis 无法远程访问:](#redis 无法远程访问:)

总结


前言

在后端开发与数据存储场景中,mysql(关系型数据库)、mongodb(文档型非关系数据库)、redis(内存型缓存数据库)是最常用的三大工具(三大数据库之前的文章有详讲)。本文将以 ubuntu 22.04 lts(之前的文章有讲解如何安装) 系统为例,详细讲解三者的安装配置、基础操作及常见问题解决,适合新手快速入门。


一、mysql:稳定可靠的关系型数据库

mysql 凭借成熟的事务支持、结构化查询能力,广泛用于电商、政务等需要强数据一致性的场景。

1. 安装 mysql

ubuntu 官方源已包含 mysql,直接通过 apt 安装即可:

bash 复制代码
# 更新软件源
sudo apt update

# 安装 mysql 服务器(自动创建系统服务)(-y 作用是在安装过程中需要输入yes时,会自动输入)
sudo apt install -y mysql-server

# 验证安装:查看服务状态(active (running) 表示正常)
sudo systemctl status mysql

2. 安全配置(必做)

默认安装后 mysql 安全性较低,需通过官方脚本优化:

bash 复制代码
sudo mysql_secure_installation

按照提示完成以下操作:

设置 root 密码(推荐使用强密码:字母 + 数字 + 特殊符号);

移除匿名用户(防止未授权访问);

禁止 root 远程登录(默认仅允许本地访问,如需远程可后续配置);

删除 test 数据库(避免测试数据泄露);

刷新权限表(使配置生效)。

3. 基础操作

(1)登录 mysql

本地登录(root 用户默认使用 auth_socket 认证,需通过 sudo 登录):

bash 复制代码
sudo mysql -u root -p
# 输入步骤 2 中设置的 root 密码,回车后进入 mysql 命令行
(2)核心命令示例
sql 复制代码
-- 1. 创建数据库(例如创建名为 test_db 的数据库)
create database if not exists test_db default charset utf8mb4;

-- 2. 创建用户并授权(例如创建 user1,允许本地访问 test_db)
create user if not exists 'user1'@'localhost' identified by 'user1@2025';
grant all privileges on test_db.* to 'user1'@'localhost';
flush privileges; -- 刷新权限

-- 3. 使用数据库
use test_db;

-- 4. 创建表(例如创建用户表 user_info)
create table if not exists user_info (
    id int primary key auto_increment,
    username varchar(50) not null unique,
    age int,
    create_time datetime default current_timestamp
);

-- 5. 插入数据
insert into user_info (username, age) values ('zhangsan', 25), ('lisi', 30);

-- 6. 查询数据
select * from user_info;

-- 7. 退出 mysql 命令行
exit;

4. 远程访问配置(可选)

若需在其他设备访问 ubuntu 上的 mysql,需修改两处配置:

  1. 修改 mysql 配置文件

    bash 复制代码
    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

    bind-address = 127.0.0.1 改为 bind-address = 0.0.0.0(允许所有 ip 访问),保存后重启服务:

    bash 复制代码
    sudo systemctl restart mysql
  2. 授权远程用户

    登录 mysql 后,授权用户允许远程访问(例如允许 user1 从任意 ip 访问):

    sql 复制代码
    grant all privileges on test_db.* to 'user1'@'%' identified by 'user1@2025';
    flush privileges;
  3. 开放 ubuntu 防火墙端口

    bash 复制代码
    sudo ufw allow 3306/tcp --permanent # 3306 是 mysql 默认端口
    sudo ufw reload

二、mongodb:灵活高效的文档型数据库

mongodb 以 json 格式的文档存储数据,无需预先定义表结构,适合社交、日志等数据结构多变的场景。

1. 安装 mongodb(社区版)

ubuntu 官方源的 mongodb 版本较旧,推荐使用官方源安装:

bash 复制代码
# 1. 导入 mongodb 公钥
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -

# 2. 添加 mongodb 官方源(ubuntu 22.04 对应 jammy)
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

# 3. 更新源并安装
sudo apt update
sudo apt install -y mongodb-org

# 4. 启动服务并设置开机自启
sudo systemctl start mongod
sudo systemctl enable mongod

# 5. 验证安装(出现 "ok" : 1 表示正常)
mongo --eval "db.runCommand({ connectionStatus: 1 })"

2. 基础操作(使用 mongo 命令行)

mongodb 无需提前创建数据库(首次插入数据时自动创建),核心操作如下:

(1)登录与切换数据库
bash 复制代码
# 本地登录(默认无密码,直接进入命令行)
mongo

# 切换到目标数据库(例如切换到 test_db,不存在则自动创建)
use test_db
(2)核心命令示例
javascript 复制代码
// 1. 插入文档(集合 collection 类似 mysql 的表,自动创建)
db.user_info.insertmany([
  { username: "wangwu", age: 28, hobbies: ["reading", "hiking"] },
  { username: "zhaoliu", age: 32, address: { city: "beijing", street: "main st" } }
]);

// 2. 查询文档(查询所有数据)
db.user_info.find();

// 条件查询(查询 age > 30 的数据,格式化输出)
db.user_info.find({ age: { $gt: 30 } }).pretty();

// 3. 更新文档(将 wangwu 的 age 改为 29)
db.user_info.updateone(
  { username: "wangwu" },
  { $set: { age: 29 } }
);

// 4. 删除文档(删除 username 为 zhaoliu 的数据)
db.user_info.deleteone({ username: "zhaoliu" });

// 5. 查看集合列表
show collections;

// 6. 退出命令行
exit;

3. 安全配置(添加密码)

默认 mongodb 无认证,需手动启用:

  1. 创建管理员用户

    bash 复制代码
    mongo
    use admin # 切换到系统数据库
    # 创建 root 管理员
    db.createuser({
      user: "root",
      pwd: "mongoroot@2025",
      roles: [{ role: "root", db: "admin" }]
    });
    exit;
  2. 启用认证

    bash 复制代码
    sudo nano /etc/mongod.conf

    security 模块下添加 authorization: enabled

    复制代码
    security:
      authorization: enabled

    保存后重启服务:

    bash 复制代码
    sudo systemctl restart mongod
  3. 带密码登录

    bash 复制代码
    # 方式 1:登录时指定密码
    mongo -u root -p mongoroot@2025 --authenticationdatabase admin
    
    # 方式 2:先登录再认证
    mongo
    use admin
    db.auth("root", "mongoroot@2025"); # 返回 1 表示认证成功

三、redis:高性能的内存型缓存数据库

redis 基于内存存储,读写速度极快,常用于会话存储、计数器、缓存热点数据等场景,支持字符串、哈希、列表等多种数据结构。

1. 安装 redis

ubuntu 官方源的 redis 版本较新,直接安装:

bash 复制代码
# 1. 安装 redis
sudo apt update
sudo apt install -y redis-server

# 2. 启动服务并设置开机自启
sudo systemctl start redis-server
sudo systemctl enable redis-server

# 3. 验证安装(出现 pong 表示正常)
redis-cli ping

2. 配置优化(基础)

默认配置文件路径为 /etc/redis/redis.conf,推荐修改以下配置:

bash 复制代码
sudo nano /etc/redis/redis.conf
  1. 设置密码 :找到 # requirepass foobared,改为 requirepass redispass@2025(替换为你的密码);
  2. 允许远程访问 :找到 bind 127.0.0.1 ::1,改为 bind 0.0.0.0(如需远程访问);
  3. 启用持久化 :默认已启用 rdb 持久化(save 900 1 表示 900 秒内有 1 次修改则保存到磁盘),无需额外配置。

修改后重启服务:

bash 复制代码
sudo systemctl restart redis-server

3. 基础操作(使用 redis-cli 命令行)

(1)登录 redis
bash 复制代码
# 本地登录(无密码时直接 redis-cli)
redis-cli -a redispass@2025

# 或先登录再认证
redis-cli
auth redispass@2025 # 返回 ok 表示认证成功
(2)核心命令示例(支持多种数据结构)
bash 复制代码
# 1. 字符串(string):存储键值对
set username "zhangsan" # 设置键 username 的值为 zhangsan
get username # 获取键 username 的值(返回 "zhangsan")
expire username 300 # 设置键 username 300 秒后过期

# 2. 哈希(hash):存储对象
hset user:1 name "lisi" age 30 # 创建用户 1 的信息
hgetall user:1 # 获取用户 1 的所有字段(返回 name、age 及对应值)
hget user:1 age # 获取用户 1 的 age 字段(返回 "30")

# 3. 列表(list):有序集合,支持两端操作
lpush fruits "apple" "banana" # 从左侧插入元素
lrange fruits 0 -1 # 获取所有元素(返回 ["banana", "apple"])
rpop fruits # 从右侧删除元素(返回 "apple")

# 4. 查看所有键
keys *

# 5. 退出命令行
exit

4. 常见场景示例:缓存 mysql 数据

假设 mysql 中有 user_info 表,可通过 redis 缓存热点用户数据,减少 mysql 压力:

bash 复制代码
# 1. 从 mysql 查询用户数据(假设用户 id=1 的数据)
# 2. 将数据存入 redis 哈希
redis-cli -a redispass@2025 hset user:1 username "zhangsan" age 25
# 3. 设置 10 分钟过期(600 秒)
redis-cli -a redispass@2025 expire user:1 600
# 4. 后续查询直接从 redis 获取,过期后再从 mysql 更新

四、三大数据库对比与适用场景

特性 mysql mongodb redis
数据库类型 关系型 文档型非关系型 内存型缓存 / 数据库
数据存储格式 结构化表(行 / 列) json 文档 键值对(多数据结构)
事务支持 完全支持(acid) 部分支持(4.0+ 事务) 支持单命令事务
读写性能 中(磁盘 io) 高(内存 + 磁盘) 极高(纯内存)
适用场景 订单、用户信息等结构化数据 日志、社交动态等非结构化数据 缓存、计数器、会话存储

五、常见问题排查

mysql 远程连接失败

  • 检查 mysqld.cnfbind-address 是否为 0.0.0.0
  • 检查用户授权是否允许远程 ip(% 表示所有 ip);
  • 检查 ubuntu 防火墙是否开放 3306 端口(sudo ufw status 查看)。

mongodb 启动失败

  • 查看日志:sudo journalctl -u mongod,常见原因是权限不足(需确保 /var/lib/mongodb 目录属主为 mongodb);
  • 若修改配置后失败,检查配置文件语法(yaml 格式严格,缩进需为 2 空格)。

redis 无法远程访问

  • 检查 redis.confbind 配置和密码;
  • 开放 6379 端口:sudo ufw allow 6379/tcp --permanent && sudo ufw reload

总结

本文覆盖了 ubuntu 系统下 mysql、mongodb、redis 的核心使用流程。实际开发中,三者常配合使用(例如 redis 缓存 + mysql 存储核心数据 + mongodb 存储非结构化日志),建议根据业务场景选择合适的工具,并深入学习其高级特性(如 mysql 索引优化、mongodb 聚合查询、redis 集群)。一步一个脚印!!!!


相关推荐
宠友信息11 分钟前
Redis 内容社区源码架构优化与即时通讯数据一致性处理
spring boot·后端·websocket·mysql·uni-app
灯澜忆梦1 小时前
【MySQL1】| DDL 数据定义语言
数据库·sql·mysql
七夜zippoe3 小时前
OpenClaw 数据加密:敏感信息保护的完整方案
数据库·mysql·php·openclaw·敏感保护
万亿少女的梦1683 小时前
基于Node.js和Express的旅游信息管理平台设计与开发
mysql·node.js·express·系统设计·旅游信息管理
万亿少女的梦16814 小时前
基于Python的高考志愿填报辅助系统设计与实现
java·spring boot·python·mysql·vue
万亿少女的梦16814 小时前
基于SpringBoot与Vue的历史博物馆展品展示与游客管理系统设计
spring boot·mysql·vue·系统设计·博物馆管理系统
醉熏的石头17 小时前
Ubuntu 中的编程语言(中)
linux·ubuntu·scala
灯澜忆梦17 小时前
MySQL 完整学习路线
学习·mysql
ClouGence17 小时前
保障公共安全,一线治安机构实时数据应用与实践
数据库·mysql·postgresql
Minxinbb17 小时前
TDSQL for MySQL 服务器重启操作
数据库·mysql·dba