在Ubuntu 22.04上部署MySQL 8.0与Ollama大模型的完全指南

云信安装大师
90
AI 质量分
11 5 月, 2025
4 分钟阅读
0 阅读

在Ubuntu 22.04上部署MySQL 8.0与Ollama大模型的完全指南

引言

本文将带你在Ubuntu 22.04系统上完成MySQL 8.0数据库和Ollama大语言模型的完整部署过程。MySQL作为流行的关系型数据库,而Ollama则是本地运行大语言模型的优秀工具,两者的结合可以为开发者提供强大的数据存储和AI能力。

准备工作

在开始之前,请确保:

  1. 已安装Ubuntu 22.04系统(服务器或桌面版均可)
  2. 拥有sudo权限的用户账户
  3. 至少8GB内存(运行Ollama推荐配置)
  4. 稳定的网络连接

第一部分:部署MySQL 8.0数据库

步骤1:更新系统软件包

首先更新你的系统软件包列表:

代码片段
sudo apt update && sudo apt upgrade -y

步骤2:安装MySQL服务器

Ubuntu官方仓库已经包含MySQL 8.0,可以直接安装:

代码片段
sudo apt install mysql-server -y

安装完成后,MySQL服务会自动启动。你可以检查服务状态:

代码片段
sudo systemctl status mysql

应该看到”active (running)”的状态。

步骤3:运行安全配置脚本

MySQL提供了一个安全配置脚本,帮助我们设置root密码并移除不安全配置:

代码片段
sudo mysql_secure_installation

按照提示操作:
1. 选择密码验证策略(建议选择强密码)
2. 设置root用户密码
3. 移除匿名用户
4. 禁止root远程登录(生产环境建议)
5. 移除测试数据库
6. 重新加载权限表

步骤4:创建专用数据库用户(可选)

不建议直接使用root用户进行应用开发,我们可以创建一个专用用户:

代码片段
sudo mysql -u root -p

在MySQL提示符下执行:

代码片段
CREATE USER 'devuser'@'localhost' IDENTIFIED BY 'YourSecurePassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'devuser'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

MySQL常用管理命令

  • 启动/停止/重启服务
代码片段
sudo systemctl start|stop|restart mysql
  • 查看版本
代码片段
mysql --version
  • 登录MySQL
代码片段
mysql -u devuser -p

第二部分:部署Ollama大语言模型

步骤1:安装依赖项

Ollama需要一些基本依赖:

代码片段
sudo apt install -y curl wget git build-essential cmake python3-pip libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl golang-go pkg-config docker.io docker-compose 

步骤2:安装Ollama

官方提供了便捷的安装脚本:

代码片段
curl -fsSL https://ollama.com/install.sh | sh

这会自动:
1. 添加Ollama仓库到你的系统
2. 安装最新版本的Ollama服务端和客户端工具

步骤3:启动Ollama服务并验证

启动服务并检查状态:

代码片段
sudo systemctl start ollama && sudo systemctl enable ollama && sudo systemctl status ollama

验证安装是否成功:

代码片段
ollama --version

步骤4:下载并运行模型

Ollama支持多种模型,我们以Llama2为例:

代码片段
ollama pull llama2:7b-chat   # Llama2的7B参数聊天版本(约4GB)
ollama run llama2:7b-chat    # 运行模型进行交互测试

第一次运行会自动下载模型文件(根据网络情况可能需要较长时间)。

MySQL与Ollama集成示例

我们可以创建一个简单的Python脚本来演示如何将两者结合使用:

Python脚本示例 (aidbintegration.py)

首先安装必要的Python包:

代码片段
pip install mysql-connector-python requests openai numpy pandas tqdm transformers torch sentencepiece protobuf==3.20.* flask flask-cors gunicorn gevent 

然后创建以下脚本:

代码片段
#!/usr/bin/env python3

import mysql.connector as mysql 
import subprocess 
import json 

# MySQL配置 
db_config = {
    'host': 'localhost',
    'user': 'devuser',
    'password': 'YourSecurePassword123!',
    'database': 'ai_demo'
}

# Ollama API端点 (本地)
OLLAMA_URL = "http://localhost:11434/api/generate"

def setup_database():
    """初始化数据库"""
    conn = None 
    try:
        # root连接用于创建数据库(如果没有)
        root_conn = mysql.connect(
            host='localhost',
            user='root',
            password='YourRootPasswordHere'
        )
        cursor = root_conn.cursor()

        # Create database if not exists 
        cursor.execute("CREATE DATABASE IF NOT EXISTS ai_demo")

        # Create table for AI responses 
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS ai_demo.responses (
                id INT AUTO_INCREMENT PRIMARY KEY,
                prompt TEXT NOT NULL,
                response TEXT NOT NULL,
                model VARCHAR(50) NOT NULL,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                INDEX idx_model (model),
                INDEX idx_created (created_at)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
        """)

        print("✅ Database setup completed successfully")

    except Exception as e:
        print(f"❌ Database setup failed: {str(e)}")
    finally:
        if root_conn and root_conn.is_connected():
            root_conn.close()

def query_local_ollama(prompt, model="llama2"):
    """通过子进程调用本地Ollama"""
    try:
        result = subprocess.run(
            ["ollama", "run", model, prompt],
            capture_output=True,
            text=True,
            check=True,
            timeout=300   # timeout after5 minutes 
        )

        return result.stdout.strip()

    except subprocess.TimeoutExpired:
        return "Error: Model response timed out"
    except Exception as e:
        return f"Error: {str(e)}"

def store_interaction(prompt, response, model):
    """存储交互记录到MySQL"""
    conn = None 
    try:
        conn = mysql.connect(**db_config)
        cursor = conn.cursor()

        query = """
            INSERT INTO responses (prompt, response, model) 
            VALUES (%s, %s, %s)
        """

        cursor.execute(query, (prompt, response, model))
        conn.commit()

        print("📝 Interaction stored in database")

    except Exception as e:
        print(f"❌ Failed to store interaction: {str(e)}")
    finally:
        if conn and conn.is_connected():
            conn.close()

if __name__ == "__main__":
    print("🚀 Starting MySQL + Ollama integration demo...\n")

    # Step1: Setup database 
    setup_database()

    # Step2: Get user prompt 
    prompt = input("\n🤖 Enter your prompt for the AI model: ")

    # Step3: Query local Ollama instance 
    print("\n⚙️ Processing your request with local Llama2 model...")  

    response = query_local_ollama(prompt)

    print(f"\n💡 AI Response:\n{response}\n")

    # Step4: Store the interaction in MySQL  
    store_interaction(prompt, response, "llama2:7b-chat")  

    print("\n🎉 Demo completed successfully!")

这个脚本实现了:
1. MySQL数据库初始化(创建专门的数据表)
2. Ollam大模型本地调用功能封装(通过子进程方式)
3. AI交互记录存储到MySQL数据库的功能

Ollam高级用法

GPU加速设置

如果你有NVIDIA显卡,可以启用CUDA加速:

  1. 确认CUDA可用性

    代码片段
    nvidia-smi  
    
  2. 安装CUDA驱动(如果尚未安装):

    代码片段
    sudo apt install nvidia-cuda-toolkit  
    
  3. 运行时指定GPU

    代码片段
    OLLAMA_NO_CUDA=0 ollama run llama2:7b-chat  
    

Docker方式运行

如果你想使用容器化部署方式:

  1. 拉取官方镜像

    代码片段
    docker pull ollam/ollam  
    
  2. 运行容器(映射11434端口):

    代码片段
    docker run -d --gpus=all -v ollam_data:/root/.ollam -p11434:11434 --name ollam ollam/ollam  
    

MySQL优化建议

对于AI应用场景下的MySQL优化:

1.调整InnoDB缓冲池大小(编辑/etc/mysql/my.cnf):

代码片段
[mysqld]
innodb_buffer_pool_size=4G     # For8GB RAM system   
innodb_log_file_size=512M     
innodb_flush_log_at_trx_commit=2   
innodb_flush_method=O_DIRECT   

然后重启MySQL服务。

2.为AI响应表添加全文索引

代码片段
ALTER TABLE responses ADD FULLTEXT ft_prompt_response (prompt, response);   

这样可以使用MATCH() AGAINST()语法进行高效的自然语言搜索。

Troubleshooting常见问题

问题1: Ollam模型下载失败

解决方案:尝试手动下载并导入模型文件

代码片段
wget https://example.com/path/to/model.bin -P ~/.ollam/models/
ollam import ~/.ollam/models/model.bin my-model-name   

问题2: MySQL连接被拒绝

检查是否启用了远程访问限制,临时解决方案(仅开发环境):

代码片段
sudo sed -i '/bind-address/s/^/#/' /etc/mysql/mysql.conf.d/mysqld.cnf   
sudo systemctl restart mysql   

Conclusion总结

本文详细介绍了在Ubuntu22 .04上部署最新版MySQL8 .0和开源大语言模型框架Ollam的全过程。通过Python示例展示了如何将传统关系型数据库与现代AI能力相结合。关键要点包括:

✅ MySQL的安全配置最佳实践
✅ Ollam多模式部署方案(原生/Docker)
✅ GPU加速技巧
✅ Python集成代码模板

这种技术组合特别适合需要私有化部署AI能力的场景,既保障了数据安全又能利用前沿的大语言模型能力。

原创 高质量