使用Python mysql.connector连接DigitalOcean MySQL遇2005错误求助
解决mysql.connector连接DigitalOcean远程MySQL的Unknown Host错误
问题详情
使用Python的mysql.connector库连接DigitalOcean上的远程MySQL服务器时,触发DatabaseError,错误信息:
mysql.connector.errors.DatabaseError: 2005 (HY000): Unknown MySQL server host 'B.6dpp-api-db-do-user-12472806-0.b.db.ondigitalocean.com' (8)
已核对主机地址和认证信息准确性,但问题依旧。
相关代码
Flask后端代码
from flask import Flask, request, jsonify import mysql.connector from flask_cors import CORS app = Flask(__name__) CORS(app) # Define a route to handle the form submission @app.route('/personal_details', methods=['POST']) def submit_personal_details(): data = request.get_json() full_name = data.get('full_name') email = data.get('email') contact_number = data.get('contact_number') db = mysql.connector.connect( host = "", port = 25060, user = "hannah", password = "", database = "Users" ) cursor = db.cursor() # Corrected SQL query with placeholders query = "INSERT INTO Users (name, email, contact) VALUES (%s, %s, %s)" values = (full_name, email, contact_number) cursor.execute(query, values) db.commit() cursor.close() db.close() return jsonify({'message': 'Successfully registered!'}) if __name__ == '__main__': app.run(debug=True)
Vue.js前端代码
<template> <div :class="$style.personalDetails"> <div :class="$style.personalDetailsChild" /> <div :class="$style.personalDetailsItem" /> <div :class="$style.personalDetailsInner" /> <div :class="$style.elevation05Parent"> <div :class="$style.elevation05" /> <b :class="$style.personalDetails1"> <p :class="$style.yourPrivacyIs">Personal Details</p> </b> <!-- Form for personal details --> <form @submit.prevent="submitPersonalDetails"> <b :class="$style.fullName">Full Name</b> <v-text-field :class="$style.inputBgVtextfield" v-model="formData.full_name" label="Full Name" required /> <b :class="$style.email">Email</b> <v-text-field :class="$style.inputBgVtextfield1" v-model="formData.email" label="Email" required /> <b :class="$style.contact">Contact</b> <div :class="$style.frameParent"> <v-select :class="$style.frameVselect" v-model="formData.country_code" :items="['+60', '+61', '+62']" label="Code" color="#ffd600" required /> <v-text-field :class="$style.inputBgVtextfield2" v-model="formData.phone_number" label="Phone Number" required /> </div> <v-btn :class="$style.primaryButtonVbtn" color="#ffd600" variant="flat" type="submit" width="217" @click="submitPersonalDetails" > NEXT </v-btn> </form> <!-- End of form --> </div> <div :class="$style.yourPrivacyIsContainer"> <p :class="$style.yourPrivacyIs">Your privacy is important to us.</p> <p :class="$style.yourPrivacyIs"> We only need your phone number or email to send your redemption code. </p> </div> <img :class="$style.infoIcon" alt="" src="/info@2x.png" /> <v-btn :class="$style.iconArrowLeft" color="#fff" size="x-large" variant="plain" prepend-icon="mdi-arrow-left" width="19.6" @click="onIconArrowLeftClick" /> <v-btn :class="$style.homeVbtn" color="#000" variant="plain" width="41" href="/customer-home-page" @click="onHomeClick" > Home </v-btn> </div> </template> <script> import { defineComponent } from "vue"; export default defineComponent({ name: "PERSONALDETAILS", data() { return { formData: { full_name: "", email: "", country_code: "+60", phone_number: "", }, }; }, methods: { onIconArrowLeftClick() { this.$router.push("/"); }, onHomeClick() { this.$router.push("/"); }, submitPersonalDetails() { this.formData.contact_number = this.formData.country_code + this.formData.phone_number; // Send the form data to Flask API fetch('/personal_details', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(this.formData), }) .then(response => response.json()) .then(data => { console.log(data); }) .catch(error => { console.error(error); }); }, }, }); </script>
解决建议
- 修正主机地址拼写:错误信息中的主机名开头多了
B.前缀,核对DigitalOcean控制面板里的数据库主机地址,去掉多余的B.后重试。 - 测试DNS解析:在运行Flask应用的服务器上执行
nslookup 6dpp-api-db-do-user-12472806-0.b.db.ondigitalocean.com,确认域名能否正常解析到IP。如果解析失败,检查服务器DNS配置,或直接使用数据库的IP地址代替域名。 - 验证防火墙规则:在DigitalOcean数据库控制面板的「Connections」页面,确认Flask应用所在服务器的公网IP已加入IP白名单,允许访问25060端口。
- 检查网络连通性:在应用服务器上执行
nc -zv 6dpp-api-db-do-user-12472806-0.b.db.ondigitalocean.com 25060,测试端口是否能连通。若不通,排查服务器出站防火墙是否允许访问25060端口。 - 补全连接参数:后端代码中
host和password字段为空,务必填入正确的主机地址和数据库密码,这是连接成功的基础。
内容的提问来源于stack exchange,提问作者Hannah Joshua
相关产品推荐
相关产品推荐

