PDA

View Full Version : حرفه ای: یه مشکل عجیب با دیتابیس ! invalid settings



idocsidocs
دوشنبه 11 اردیبهشت 1391, 17:22 عصر
من توی همه دیتابیسهام یه جدول به اسم content_tb دارم.

الان داشتم یه برنامه می نوشتم که متوجه شدم ظاهرا دیتابیس مشکل داره. وقتی توی دیتابیس روی لینک این جدول کلیک کردم، phpmyadmin ارور زیر رو نمایش داد:

Cannot connect: invalid settings.
phpMyAdmin tried to connect to the MySQL server, and the server rejected the connection. You should check the host, username and password in your configuration and make sure that they correspond to the information given by the administrator of the MySQL server.

من وقتی از طریق صفحات جانبی وب سایت، محتویات این جدول رو می خونم، محتویات به خوبی نمایش داده می شن ولی وقتی از صفحه اصلی سایت به دیتابیس متصل می شم، ساختار سایت به هم می ریزه و خطای عدم امکان دسترسی به دیتابیس نمایش داده می شه.

این مشکل به چه دلیل ایجاد شده؟

فقط همین جدول چنین مشکلی داره و سایر جدولها ه خوبی کار می کنن. بنظرتون مشکل کار چیه؟

MMSHFE
دوشنبه 11 اردیبهشت 1391, 17:25 عصر
اگه میشه یک export از دیتابیس بگذارین تا از نزدیک بشه بررسی کرد.

idocsidocs
دوشنبه 11 اردیبهشت 1391, 17:54 عصر
جدولها زیاد هستن.

الان سه تا از جدولها مشکل دارن، یکی از جدولها رو اکسپورت کردم:


SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `way`
--

-- --------------------------------------------------------

--
-- Table structure for table `foodlist_tb`
--

CREATE TABLE IF NOT EXISTS `foodlist_tb` (
`num` int(20) unsigned NOT NULL AUTO_INCREMENT,
`f_title` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
`f_desc` longtext COLLATE utf8_unicode_ci NOT NULL,
`f_image` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
`f_price` int(9) NOT NULL,
`f_sum` int(9) NOT NULL,
`f_recycle` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`gr_id` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`f_fav` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`reg_time` int(20) NOT NULL,
PRIMARY KEY (`num`),
KEY `gr_id` (`gr_id`),
KEY `f_recycle` (`f_recycle`),
KEY `f_fav` (`f_fav`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

idocsidocs
دوشنبه 11 اردیبهشت 1391, 18:08 عصر
مهندس دیتابیس سکته کرد !

الان دیگه دسترسی به همه جدولها از بین رفته ! هر چی روی جدولها و دیتابیس ها کلیک می کنم، دسترسی به تعداد بیشتری از اونها از بین می ره !

آخرین ارورها:
The server is not responding
Too many connections

Connection for controluser as defined in your configuration failed.

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 18:15 عصر
این مشکل معمولا به خاطر لود بالای سرور هست. صبر کنید و دوباره تلاش کنید

idocsidocs
دوشنبه 11 اردیبهشت 1391, 18:40 عصر
روی لوکال هاست تست می کنم. توی لوکال هاست هیچ محدودیتی نیست. این دفعه اوله که چنین مشکلی پیش می یاد.

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 18:49 عصر
MYSQL service رو Restart کنید.

متغیر سیستمی max_connections روی چند تنظیم شده؟

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 18:56 عصر
این دوتا دستور رو توی بخش SQL وارد کن و خروجی رو بزار تا آنالیز کنیم.

SHOW VARIABLES LIKE '%max_connections%';
SHOW FULL PROCESSLIST;

idocsidocs
دوشنبه 11 اردیبهشت 1391, 19:09 عصر
MYSQL service رو Restart کنید.
کلا یبار سیستم رو ریستارت کردم ولی فایده نداشت.


متغیر سیستمی max_connections روی چند تنظیم شده؟
max_connections روی 151 ست شده. این گزینه یعنی چی و چه موقع محدودیت این گزینه سر می رسه؟

چطور می تونم این گزینه رو تغییر بدم؟

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 19:13 عصر
به این شکل

SET GLOBAL max_connections = 200;

idocsidocs
دوشنبه 11 اردیبهشت 1391, 19:20 عصر
SET GLOBAL max_connections = 200;


151 با 200 چه فرقی می کنه؟ کلا توی این دستور هر واحد یعنی چی؟

دستوری که داده بودید رو اجرا کردم و mysql رو ریستارت کردم ولی الان دیگه حتی نمی شه به بخش variables دسترسی پیدا کرد.

راه دیگه ای بنظرتون نمی رسه؟

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 19:27 عصر
این دستور تعداد کانکشنهای همزمان رو مشخص می کنه
یعنی وقتی روی ۲۰۰ باشه همزمان می شه ۲۰۰ تا اتصال به پایگاه داده داشت.

این دستور رو اجرا کن خروجیش رو بزار
SHOW FULL PROCESSLIST
یا این
SHOW FULL PROCESSLIST\G

idocsidocs
دوشنبه 11 اردیبهشت 1391, 19:44 عصر
خروجی کدی که دادید


pma localhost:1169 NULL Sleep 0 NULL

root localhost:1170 NULL Query 0 NULL SHOW FULL PROCESSLIST



یوزر pma هم جز یوزرهای پیش فرض سیستم هست؟

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 19:52 عصر
pma همون php my admin هست.

تک تک شروع به kill کردنشون کن و بعد تست کن

idocsidocs
دوشنبه 11 اردیبهشت 1391, 20:07 عصر
هیچ کدوم رو از بین نبرد



KILL 3614

#1094 - Unknown thread id: 3614

اگر هیچ کدوم از این دستورها فایده نداشت و xampp رو دوباره نسب کرد، مشکل برطرف می شه؟

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 22:12 عصر
احتمالا میتونه مشکل رو برطرف کنه ولی شما یک پروسس دارید روی سیستم که connection ها رو اشغال میکنه

idocsidocs
دوشنبه 11 اردیبهشت 1391, 23:30 عصر
هرکاری کردم مشکل برطرف نشد، ویندوز رو عوض کردم و ظاهرا الان خوب کار می کنه.

اگر دیتابیس قبلی رو دوباره ایمپورت کنم، ممکنه که مشکل خاصی پیش بیاد؟

Hamid.RDN
سه شنبه 12 اردیبهشت 1391, 00:58 صبح
اول یه سیستم Restore point ایجاد کن بعد import کن. امیدوارم دیگه مشکلی نباشه

idocsidocs
سه شنبه 12 اردیبهشت 1391, 01:15 صبح
راستش ویندوز رو هم عوض کردم و این مشکل برطرف نشد !

بنظرتون راهی داره که این مشکل رو برطرف کرد؟

Hamid.RDN
سه شنبه 12 اردیبهشت 1391, 01:30 صبح
ایراد رو در اسکریپت خودتون جستجو کنید

idocsidocs
سه شنبه 12 اردیبهشت 1391, 01:49 صبح
نه الان کدها رو نگاه کردم و مشکل از کدها بود.

یه تابع ایجاد می شد و موجود بودن تصویر رو چک می کرد و اگر تصویر وجود نداشت، این ایرور نمایش داده می شد.

راهی نیست که این مشکل برطرف بشه و اگر فایل وجود نداشت چنین موضوعی پیش نیاد؟

Hamid.RDN
سه شنبه 12 اردیبهشت 1391, 09:22 صبح
با تابع file_exists میتونی چک کنکی که آیا فایل وجود داره یا نه

نمونه

<?php
if(file_exists('FilePATH'))
{
}
?>

idocsidocs
سه شنبه 12 اردیبهشت 1391, 12:15 عصر
من برای حل این مشکل اول خروجی حلقه رو توی یه آرایه ذخیره کردم و بعد با free_result حافظه تخصیص داده شده رو خالی کردم.

ولی باز هم همین مشکل ایجاد شد.

مجبور شدم این شرط چک کردن اندازه تصویر رو حذف کنم تا مشکل برطرف بشه.

چک کردن فایل چه ارتباطی به دیتابیس داره که ارور می ده؟

MMSHFE
سه شنبه 12 اردیبهشت 1391, 12:23 عصر
باید کد چک کردن فایل رو ببینیم تا بشه قضاوت کنیم.

Hamid.RDN
سه شنبه 12 اردیبهشت 1391, 12:46 عصر
درسته بدون کد نمیشه نظر داد

idocsidocs
سه شنبه 12 اردیبهشت 1391, 14:40 عصر
تابعی که استفاده می کنم. اگر آدرس صفحه اول سایت رو به این تابع بدم، mysql ارور می ده !

دلیل این مشکل چیه؟




function imgexists($str)
{
if (!@GetImageSize($str) )
{
return false;
}
return true;
}

MMSHFE
سه شنبه 12 اردیبهشت 1391, 14:55 عصر
این مورد رو تست کنید. مطمئن نیستم ولی فکر میکنم نامربوط نباشه. اول تابع رو اینطوری تغییر بدین:


function imgexists($str) {
if (file_exists($str) && !@GetImageSize($str)) {
return false;
}
return true;
}

حالا وقتی میخواین فراخوانیش کنید، اینطوری صدا بزنید:


$path = getcwd();
if(imgexists('image.jpg')) {
// statements
}
chdir($path);

چون موقع صدازدن یک تابع اگه اون تابع توی یک فایل ضمیمه شده باشه، مسیر کاری جاری تغییر پیدا میکنه، میگم شاید این مسئله باعث بروز مشکل بشه.

idocsidocs
سه شنبه 12 اردیبهشت 1391, 15:37 عصر
آدرس مطلق می دم به تابع، توی این مورد هم باید از getcwd استفاده کرد؟

MMSHFE
سه شنبه 12 اردیبهشت 1391, 16:22 عصر
فرقی نمیکنه. ببینید، فرض کنید شما تابع imgexists رو از فایل functions.php که ضمیمه کردین اجرا کنه و فایل functions.php توی پوشه includes هست. خوب وقتی فایل index.php رو اجرا میکنید و این فایل، اون تابع رو صدا میزنه. با این کار، مسیر اجرایی به includes تغییر میکنه (و دیگه مسیر اجرایی شما root نیست). بنابراین وقتی مثلاً میخواین فایل logo.jpg رو نشون بدین، توی پوشه includes دنبالش میگرده. برای رفع این مشکل همونطوری که گفتم باید قبل از فراخوانی تابع، مسیر جاری رو بدست بیارین و بعد از فراخوانی، مسیر اجرایی رو به وضعیت قبلش برگردونید. البته الآن دقیقاً مطمئن نیستم مشکل کد شما این باشه ولی درهرحال قضیه ای که گفتم رو نباید فراموش کنید (بعنوان یک نکته در کدنویسی).
موفق باشید.

idocsidocs
سه شنبه 12 اردیبهشت 1391, 16:27 عصر
حالا چرا دیتابیس ارور می ده؟

با توجه به این نکته که من این تابع رو توی حلقه گذاشتم، فرض کنیم فایل وجود نداشته باشه، تا وقتی که زمان از 60 ثانیه نگذشته نباید مشکلی از طرف دیتابیس ایجاد بشه درصورتیکه ارور نمایش داده شده می گه تعداد زیادی کانکشن ایجاد شده ! دلیل این ارور چیه؟

Hamid.RDN
سه شنبه 12 اردیبهشت 1391, 16:34 عصر
دوست عزیز جواب شما حلقه هست.
حلقه هست که باعث میشه تعداد زیادی درخواست به بانک اطلاعاتی ارسال بشه و کارکرد اون رو مختل کنه.

MMSHFE
سه شنبه 12 اردیبهشت 1391, 17:06 عصر
باز هم باید برای اظهارنظر قطعی و جامع کد کامل رو ببینیم. با در اختیار داشتن فقط یک تابع نمیتونیم بگیم مشکل از کجاست. موفق باشید.

idocsidocs
سه شنبه 12 اردیبهشت 1391, 18:26 عصر
حلقه هست که باعث میشه تعداد زیادی درخواست به بانک اطلاعاتی ارسال بشه و کارکرد اون رو مختل کنه.
فکر کنم جواب نهایی همین باشه

مرسی دوستان