连接Mysql出现的问题。

在Ubuntu上使用apt install mysql-server安装MySQL后,默认情况下root用户可能使用auth_socket插件进行身份验证,这允许通过本地命令行无密码登录,但应用程序无法通过此方式连接。以下是逐步解决方案:

步骤 1:修改MySQL root用户的认证方式

  1. 登录MySQL(无需密码):
    sudo mysql -u root
    
  2. 查看root用户的认证方式
    SELECT user, plugin, host FROM mysql.user WHERE user = 'root';
    

    plugin列显示auth_socket,需更改为密码认证。

  3. 更改认证方式并设置密码
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
    FLUSH PRIVILEGES;
    

    替换你的密码为安全密码。

  4. 退出MySQL
    exit
    

步骤 2:在Flask配置中添加密码

修改数据库配置,添加password字段:

DB_CONFIG = {
    'host': 'localhost',
    'user': 'root',
    'password': '你的密码',  # 添加此处
    'database': 'TreeHole',
    'charset': 'utf8mb4',
    'cursorclass': DictCursor
}

步骤 3:确保数据库和权限正确

  1. 确认数据库存在
    sudo mysql -u root -p -e "SHOW DATABASES;"
    

    输入密码后,检查TreeHole是否存在。若不存在,需创建:

    CREATE DATABASE TreeHole;
    
  2. 授予权限(通常root已有权限,可选步骤)
    GRANT ALL PRIVILEGES ON TreeHole.* TO 'root'@'localhost';
    FLUSH PRIVILEGES;
    

步骤 4:重启MySQL服务

sudo systemctl restart mysql

验证连接

使用配置的密码通过命令行测试连接:

mysql -u root -p你的密码 -D TreeHole

成功进入则表示配置正确。此时Flask应用应能正常连接。

其他可能问题

数据库不存在:确认TreeHole数据库已创建。 • 防火墙/SELinux限制:本地连接通常无此问题,但可检查相关设置。 • PyMySQL版本问题:确保使用最新版本pymysql,更新命令:

  pip install --upgrade pymysql

完成以上步骤后,你的Flask应用应能成功连接到MySQL数据库。

Written on March 3, 2025