كيف يمكنني تغيير مهلة اتصال MySQL الافتراضي عند الاتصال عبر Python؟

StackOverflow https://stackoverflow.com/questions/14726789

  •  07-03-2022
  •  | 
  •  

سؤال

أنا متصل بقاعدة بيانات MySQL باستخدام Python con = _mysql.connect('localhost', 'dell-pc', '', 'test')يستغرق البرنامج الذي كتبته الكثير من الوقت في التنفيذ الكامل أي حوالي 10 ساعات. في الواقع، أحاول أن أقرأ كلمات مميزة من كوربوس. بعد انتهاء القراءة كان هناك خطأ مهلة.

راجعت المهلة الافتراضية MySQL التي كانت:

+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| connect_timeout            | 10       |
| delayed_insert_timeout     | 300      |
| innodb_lock_wait_timeout   | 50       |
| innodb_rollback_on_timeout | OFF      |
| interactive_timeout        | 28800    |
| lock_wait_timeout          | 31536000 |
| net_read_timeout           | 30       |
| net_write_timeout          | 60       |
| slave_net_timeout          | 3600     |
| wait_timeout               | 28800    |
+----------------------------+----------+

كيف يمكنني تغيير المهلة الافتراضية؟

هل كانت مفيدة؟

المحلول

يفعل:

con.query('SET GLOBAL connect_timeout=28800')
con.query('SET GLOBAL interactive_timeout=28800')
con.query('SET GLOBAL wait_timeout=28800')

المعلمة معنى (مأخوذة من MySQL Workbench في Navigator: مثيل> خيارات "خيارات> علامة تبويب" الشبكات "> قسم" إعدادات المهلة ")

  • ربط مهلة: عدد الثواني ينتظر خادم MySQLD لحزمة الاتصال قبل الاستجابة ب "المصافحة السيئة"
  • interactive_timeout. عدد الثواني التي ينتظر الخادم النشاط في اتصال تفاعلي قبل إغلاقه
  • wait_timeout. عدد الثواني التي ينتظر الخادم النشاط على اتصال قبل إغلاقه

راجع للشغل: 28800 ثانية هي 8 ساعات، لذلك لوقت تنفيذ 10 ساعات يجب أن تكون هذه القيم أعلى في الواقع.

نصائح أخرى

يمكنك تغيير القيمة الافتراضية في ملف تكوين MySQL (الخيار ربط مهلة في mysqld. الجزء) -

[mysqld]
connect_timeout=100

إذا لم يكن هذا الملف غير قابل للوصول لك، فيمكنك تعيين هذه القيمة باستخدام هذا البيان -

SET GLOBAL connect_timeout=100;

أعلم أن هذا سؤال قديم ولكن فقط للسجل يمكن القيام بذلك أيضا عن طريق تمرير خيارات الاتصال المناسبة كوسائط إلى _mysql.connect يتصل. علي سبيل المثال،

con = _mysql.connect(host='localhost', user='dell-pc', passwd='', db='test',
          connect_timeout=1000)

لاحظ استخدام معلمات الكلمات الرئيسية (المضيف، Passwd، إلخ). أنها تحسن من قراءة التعليمات البرمجية الخاصة بك.

للحصول على التفاصيل حول الحجج المختلفة التي يمكنك تمريرها _mysql.connect, ، يرى MySQLDB وثائق API.

يعد Max_Execution_Time أيضا معلمة مهمة لاستفسارات التشغيل الطويلة. Will Will Work for MySQL 5.7 أو الأحدث.

تحقق القيمة الحالية

SELECT @@GLOBAL.MAX_EXECUTION_TIME, @@SESSION.MAX_EXECUTION_TIME;

ثم ضعها وفقا لاحتياجاتك.

SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top