在Ubuntu 22.04 LTS上部署MySQL 8.0与LangChain的完整实战指南

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

在Ubuntu 22.04 LTS上部署MySQL 8.0与LangChain的完整实战指南

引言

在AI应用开发中,数据库与AI框架的结合变得越来越重要。本文将带你从零开始,在Ubuntu 22.04 LTS系统上部署MySQL 8.0数据库,并集成LangChain框架,为你的AI应用提供一个可靠的数据存储和检索解决方案。

准备工作

环境要求

  • Ubuntu 22.04 LTS系统
  • sudo权限的用户账户
  • 稳定的网络连接
  • 至少2GB可用内存(推荐4GB以上)

前置知识

  • 基本的Linux命令行操作
  • Python基础语法
  • SQL基础概念

第一部分:安装和配置MySQL 8.0

步骤1:更新系统包索引

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

这条命令会更新可用的软件包列表并升级已安装的软件包。

步骤2:安装MySQL服务器

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

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

代码片段
sudo systemctl status mysql

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

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

MySQL提供了一个安全配置脚本,可以帮助我们设置root密码、移除匿名用户等安全措施:

代码片段
sudo mysql_secure_installation

按照提示完成以下配置:
1. 设置root密码(建议设置强密码)
2. 移除匿名用户(选择Y)
3. 禁止root远程登录(选择Y)
4. 移除测试数据库(选择Y)
5. 重新加载权限表(选择Y)

步骤4:调整MySQL认证方式(可选)

MySQL 8.0默认使用caching_sha2_password认证插件,但某些旧客户端可能不支持。如果需要使用传统认证方式:

代码片段
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;

步骤5:创建专用数据库和用户

为LangChain应用创建专用数据库和用户是个好习惯:

代码片段
CREATE DATABASE langchain_db;
CREATE USER 'langchain_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON langchain_db.* TO 'langchain_user'@'localhost';
FLUSH PRIVILEGES;

第二部分:安装Python环境和LangChain

步骤1:安装Python和pip

Ubuntu 22.04默认安装了Python3,但我们需要确保pip也已安装:

代码片段
sudo apt install python3-pip python3-venv -y

步骤2:创建Python虚拟环境

创建一个独立的Python环境可以避免包冲突:

代码片段
mkdir ~/langchain_project && cd ~/langchain_project
python3 -m venv venv
source venv/bin/activate

激活虚拟环境后,你的命令行提示符前应该会显示(venv)

步骤3:安装LangChain和相关依赖

代码片段
pip install langchain openai mysql-connector-python python-dotenv tiktoken

这里安装了:
langchain: LangChain核心库
openai: OpenAI API客户端(如果你计划使用OpenAI模型)
mysql-connector-python: MySQL Python连接器
python-dotenv: 用于管理环境变量
tiktoken: OpenAI的分词器

第三部分:配置LangChain连接MySQL

步骤1:创建项目结构

代码片段
~/langchain_project/
├── .env            # 存储敏感信息
├── config.py       # 配置文件 
└── main.py         # 主程序文件

步骤2:创建.env文件存储敏感信息

代码片段
echo "MYSQL_USER=langchain_user" > .env 
echo "MYSQL_PASSWORD=strong_password" >> .env 
echo "MYSQL_HOST=localhost" >> .env 
echo "MYSQL_DATABASE=langchain_db" >> .env 
echo "OPENAI_API_KEY=your_openai_key" >> .env 

重要:确保将.env添加到.gitignore中,避免将敏感信息提交到版本控制。

步骤3:创建config.py配置文件

代码片段
import os
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

class Config:
    MYSQL_USER = os.getenv('MYSQL_USER')
    MYSQL_PASSWORD = os.getenv('MYSQL_PASSWORD')
    MYSQL_HOST = os.getenv('MYSQL_HOST')
    MYSQL_DATABASE = os.getenv('MYSQL_DATABASE')
    OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')

    @property 
    def mysql_uri(self):
        return f"mysql+mysqlconnector://{self.MYSQL_USER}:{self.MYSQL_PASSWORD}@{self.MYSQL_HOST}/{self.MYSQL_DATABASE}"

config = Config()

这个配置类会从.env文件中读取所有环境变量,并提供一个方便的mysql_uri属性来获取完整的连接字符串。

第四部分:实战示例 – LangChain与MySQL集成

让我们创建一个完整的示例,展示如何使用LangChain从MySQL数据库中检索信息并进行问答。

main.py示例代码:

代码片段
from langchain.document_loaders import SQLDatabaseLoader 
from langchain.indexes import VectorstoreIndexCreator 
from langchain.chains import RetrievalQA 
from langchain.chat_models import ChatOpenAI 
from config import config 

# Step1: Create sample data in MySQL (you can skip if already have data)
def create_sample_data():
    import mysql.connector

    conn = mysql.connector.connect(
        host=config.MYSQL_HOST,
        user=config.MYSQL_USER,
        password=config.MYSQL_PASSWORD,
        database=config.MYSQL_DATABASE 
    )

    cursor = conn.cursor()

    # Create table if not exists 
    cursor.execute("""
        CREATE TABLE IF NOT EXISTS products (
            id INT AUTO_INCREMENT PRIMARY KEY,
            name VARCHAR(100) NOT NULL,
            description TEXT NOT NULL,
            price DECIMAL(10,2) NOT NULL,
            category VARCHAR(50) NOT NULL,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
        )
    """)

    # Insert sample data (only if table is empty)
    cursor.execute("SELECT COUNT(*) FROM products")
    if cursor.fetchone()[0] == 0:
        sample_data = [
            ("Laptop", "High-performance laptop with SSD storage", "999.99", "Electronics"),
            ("Smartphone", "Latest model with OLED display", "799.99", "Electronics"),
            ("Headphones", "Noise-cancelling wireless headphones", "199.99", "Electronics"),
            ("Coffee Maker", "Programmable coffee maker with timer", "49.99", "Kitchen"),
            ("Blender", "High-speed blender for smoothies and soups", "89.99", "Kitchen")
        ]

        cursor.executemany("""
            INSERT INTO products (name, description, price, category)
            VALUES (%s, %s, %s, %s)
        """, sample_data)

        conn.commit()

    cursor.close()
    conn.close()

# Step2: Load data from MySQL using LangChain SQLDatabaseLoader  
def setup_langchain():
    loader = SQLDatabaseLoader.from_uri(
        config.mysql_uri,
        include_tables=['products'],
        sql_query="SELECT name, description FROM products"
    )

    index = VectorstoreIndexCreator().from_loaders([loader])

    return RetrievalQA.from_llm(
        llm=ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo"),
        retriever=index.vectorstore.as_retriever(),
        return_source_documents=True  
    )

if __name__ == "__main__":
    create_sample_data()

    qa_system = setup_langchain()

    while True:
        query = input("\nAsk a question about our products (or type 'quit' to exit): ")

        if query.lower() == 'quit':
            break

        result = qa_system({"query": query})

        print("\nAnswer:", result["result"])

        if result["source_documents"]:
            print("\nSources:")
            for doc in result["source_documents"]:
                print("- ", doc.page_content[:100] + "...") 

print("Goodbye!")

代码解释

  1. createsampledata()函数:

    • 连接到MySQL并创建一个products表(如果不存在)
    • 插入一些示例产品数据(仅当表为空时)
  2. setup_langchain()函数:

    • 使用SQLDatabaseLoader从products表中加载数据(name和description字段)
    • 创建向量存储索引以便进行语义搜索
    • 设置一个RetrievalQA链,使用gpt-3.5-turbo模型进行问答
  3. 主程序流程:

    • 首先确保有样本数据
    • 初始化问答系统
    • 进入交互式循环,用户可以提问关于产品的问题

运行示例

激活虚拟环境并运行程序:

代码片段
source venv/bin/activate  
python main.py  

尝试提问如:
“What electronics do you have?”
“What’s the most expensive product?”
“Do you have any kitchen appliances under $50?”

常见问题解决

1.MySQL连接问题:

代码片段
sudo service mysql restart  <br>
   

2.Python依赖冲突:

代码片段
pip uninstall pymysql mysqlclient  
pip install --force-reinstall mysql-connector-python  <br>
   

3.内存不足错误:

代码片段
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile   <br>
   

4.OpenAI API错误:确保你的API密钥正确且在.env文件中

总结

通过本教程,你学会了:

✅ Ubuntu上部署MySQL8的最佳实践
✅ Python虚拟环境的设置与管理
✅ LangChain与MySQL的集成方法
✅构建基于数据库的问答系统

下一步可以尝试:

🔹扩展数据模型以适应你的业务需求
🔹添加更多表并实现跨表查询
🔹优化向量索引性能

希望这篇指南能帮助你在Ubuntu上顺利搭建AI+数据库的应用!

原创 高质量