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

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

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

引言

MySQL是最流行的开源关系型数据库之一,而LangChain是一个用于构建大语言模型应用的框架。本文将带你完成在Ubuntu 22.04系统上安装配置MySQL 8.0,并通过Python的LangChain库实现数据库连接和操作的全过程。

准备工作

在开始之前,请确保:
– 已安装Ubuntu 22.04操作系统
– 具有sudo权限的用户账户
– 稳定的网络连接
– Python 3.8或更高版本已安装

第一部分:安装MySQL 8.0

1.1 更新系统包列表

首先更新你的系统包列表以确保获取最新的软件版本:

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

1.2 安装MySQL服务器

Ubuntu的默认仓库包含MySQL服务器包,直接安装:

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

1.3 安全配置MySQL

安装完成后运行安全脚本:

代码片段
sudo mysql_secure_installation

按照提示操作:
1. 设置验证密码插件(建议选择Y)
2. 设置root密码(务必记住这个密码)
3. 移除匿名用户(Y)
4. 禁止root远程登录(Y)
5. 移除测试数据库(Y)
6. 重新加载权限表(Y)

1.4 MySQL服务管理

检查MySQL服务状态:

代码片段
sudo systemctl status mysql

常用管理命令:

代码片段
# 启动服务
sudo systemctl start mysql

# 停止服务
sudo systemctl stop mysql

# 重启服务
sudo systemctl restart mysql

# 设置开机启动
sudo systemctl enable mysql

1.5 MySQL客户端连接测试

使用root用户登录MySQL:

代码片段
mysql -u root -p

输入之前设置的root密码,成功登录后会看到MySQL提示符。

第二部分:配置MySQL用于LangChain应用

2.1 创建专用数据库和用户

为了安全考虑,我们为LangChain应用创建专用用户和数据库:

代码片段
-- MySQL命令行中执行以下SQL语句:
CREATE DATABASE langchain_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'langchain_user'@'localhost' IDENTIFIED BY 'YourSecurePassword123!';

GRANT ALL PRIVILEGES ON langchain_db.* TO 'langchain_user'@'localhost';

FLUSH PRIVILEGES;

注意:请将’YourSecurePassword123!’替换为你自己的强密码。

2.2 Python环境准备

为项目创建虚拟环境并激活:

代码片段
python3 -m venv langchain_env
source langchain_env/bin/activate

2.3 Python依赖安装

安装必要的Python包:

代码片段
pip install langchain langchain-community pymysql python-dotenv sqlalchemy openai tiktoken

第三部分:使用LangChain连接和操作MySQL

3.1 Python代码示例:基本连接与查询

创建一个mysql_langchain.py文件:

代码片段
from langchain_community.utilities import SQLDatabase
from dotenv import load_dotenv
import os

# Load environment variables from .env file if present (recommended for production)
load_dotenv()

# Database connection configuration (replace with your actual credentials)
db_config = {
    "host": "localhost",
    "port": "3306",
    "database": "langchain_db",
    "user": "langchain_user",
    "password": os.getenv("DB_PASSWORD", "YourSecurePassword123!"), # Better to use environment variables for production!
    "charset": "utf8mb4"
}

# Create database URI for SQLAlchemy (required by LangChain)
db_uri = f"mysql+pymysql://{db_config['user']}:{db_config['password']}@{db_config['host']}:{db_config['port']}/{db_config['database']}?charset={db_config['charset']}"

# Initialize the SQLDatabase instance from LangChain
try:
    db = SQLDatabase.from_uri(db_uri)
    print("✅ Successfully connected to MySQL database!")
except Exception as e:
    print(f"❌ Connection failed: {e}")
    exit(1)

# Create a simple table and insert some data for demonstration purposes (optional)
def setup_demo_data():
    try:
        # Execute raw SQL to create a table if it doesn't exist
        db.run("""
            CREATE TABLE IF NOT EXISTS documents (
                id INT AUTO_INCREMENT PRIMARY KEY,
                title VARCHAR(255) NOT NULL,
                content TEXT,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                embedding TEXT COMMENT 'For storing vector embeddings'
            )
        """)

        # Insert some sample data if the table is empty (optional)
        result = db.run("SELECT COUNT(*) FROM documents")
        if int(result) ==  0:
            db.run("""
                INSERT INTO documents (title, content) VALUES 
                ('Getting Started with LangChain', 'This is a guide for beginners...'),
                ('Advanced MySQL Techniques', 'Learn about indexing and optimization...'),
                ('AI and Databases', 'How AI is transforming database management...')
            """)
            print("📊 Added demo data to the documents table")

        return True

    except Exception as e:
        print(f"Error setting up demo data: {e}")
        return False

if setup_demo_data():
    # Example query using LangChain's SQLDatabase functionality

    # Get table info (schema)
    print("\n📋 Table information:")
    print(db.get_table_info())

    # Run a simple query through LangChain interface (returns raw results)
    query = "SELECT id, title FROM documents LIMIT  3"

    print(f"\n🔍 Executing query: {query}")

    try:
        result = db.run(query)
        print("\n📄 Query results:")
        print(result)

        # More advanced example: get structured results as dictionaries/JSON

        from sqlalchemy import text

        with db._engine.connect() as connection:
            stmt = text(query)
            structured_result = connection.execute(stmt).fetchall()

            print("\n💡 Structured results:")
            for row in structured_result:
                print(dict(row))

    except Exception as e:
        print(f"Query execution error: {e}")

3.2 LangChain SQL Agent示例(结合OpenAI)

要使用更高级的自然语言查询功能,可以结合OpenAI的LLM:

代码片段
from langchain_community.chat_models import ChatOpenAI  
from langchain_experimental.sql import SQLDatabaseChain  

def setup_sql_agent():
    try:
        llm = ChatOpenAI(
            temperature=0, 
            model="gpt-3.5-turbo",
            openai_api_key=os.getenv("OPENAI_API_KEY") # Set this in your .env file!
        )

        db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)

        return db_chain

    except Exception as e:
        print(f"Error setting up SQL agent: {e}")
        return None

if __name__ == "__main__":
    chain = setup_sql_agent()

    if chain:
        questions = [
            "How many documents are there in the database?",
            "List all document titles in the database",  
            "What's the average length of document titles?"
        ]

        for question in questions:
            print(f"\n🤖 Question: {question}")

            try:
                response = chain.run(question)  
                print(f"🧠 Answer: {response}")

            except Exception as e:  
                print(f"Error processing question: {e}")

注意:要运行此代码,你需要:
1. OpenAI API密钥(放在.env文件中)
2.pip install openai

第四部分:最佳实践与故障排除

4.1安全建议

1.永远不要在代码中硬编码数据库凭据
2.使用环境变量或安全的密钥管理服务
3.限制数据库用户权限到最小必要范围
4.定期备份你的数据库

示例.env文件内容:

代码片段
DB_PASSWORD=YourActualSecurePasswordHere  
OPENAI_API_KEY=your-openai-api-key-here  

4.2常见问题解决

问题1:无法连接到MySQL

✅检查项:
– MySQL服务是否正在运行(systemctl status mysql)
-防火墙是否阻止了3306端口(sudo ufw allow 3306)
-用户是否有正确的权限(SHOW GRANTS FOR 'langchain_user'@'localhost';)

问题2:Python依赖冲突

✅解决方案:

代码片段
pip install --upgrade --force-reinstall pymysql sqlalchemy  

问题3:编码问题

✅确保你的数据库、表和连接都使用utf8mb4字符集以支持完整Unicode。

总结

本文详细介绍了在Ubuntu22.04上部署MySQL8并与LangChain集成的完整流程。关键步骤包括:

1.MySQL服务器的安装和安全配置
2.LangChain环境的准备和依赖安装
3.Python中通过LangChain连接和操作MySQL的两种方式
4.LangChainSQLAgent的高级用法演示

通过这种集成,你可以构建能够理解和操作关系型数据的智能应用程序。

原创 高质量