خطای «connection refused» را میبینید و نمیدانید از کجا شروع کنید
سایت تازهنصبشدهتان خطای اتصال به دیتابیس میدهد. یا وردپرس را تازه بالا آوردهاید و صفحه نصب، نام کاربری و رمز دیتابیس را میخواهد. در هر دو حالت، به یک چیز نیاز دارید: ساخت دیتابیس، ساختن یک کاربر مجزا برای آن، و دانستن چهار مقداری که باید در فایل پیکربندی سایت بنویسید.
این کار را اشتباه انجام دهید، سایت بالا نمیآید. درست انجامش دهید، ده دقیقه وقت میگیرد.
پیش از شروع: چه چیزهایی لازم دارید
به کنترلپنل هاست (cPanel یا DirectAdmin) دسترسی داشته باشید. اگر سایت روی هاست لینوکس است، این ابزارها داخل کنترلپنل هستند. برای سرور اختصاصی، معمولاً باید خودتان MySQL را نصب و مدیریت کنید که مسیرش کمی فرق دارد.
سه چیز را از قبل آماده کنید:
- نام دیتابیس (مثلاً
mysite_db) - نام کاربری (مثلاً
mysite_user) - یک رمز عبور قوی — حداقل ۱۶ کاراکتر با حروف بزرگ، کوچک، عدد و نماد
رمز ضعیف، درِ دیتابیس شما را برای اسکنرهای خودکار باز میکند. این را جدی بگیرید.
ساخت دیتابیس در cPanel
در cPanel، بخش MySQL® Databases را پیدا کنید. این گزینه معمولاً در دسته «Databases» است. صفحه را که باز کنید، دو فرم میبینید: یکی برای ساخت دیتابیس و یکی برای ساخت کاربر.
اول دیتابیس را بسازید. نامی که وارد میکنید، به یک پیشوند اضافه میشود. در cPanel معمولاً نام کاربری هاست شما به ابتدای نام دیتابیس اضافه میشود. مثلاً اگر نام کاربریتان server1 باشد و شما mysite_db را وارد کنید، نام کامل دیتابیس میشود server1_mysite_db.
این نکته مهم است: در فایل پیکربندی سایت، باید نام کامل را بنویسید، نه نامی که خودتان وارد کردهاید. خیلیها اینجا اشتباه میکنند و نام ناقص مینویسند.
ساخت کاربر و تخصیص دسترسی
حالا در همان صفحه، فرم ساخت کاربر را پر کنید. نام کاربری هم پیشوند میخورد. بعد از ساخت، فرم «Add User To Database» را میبینید. کاربر را به دیتابیس اضافه کنید.
اینجا یک سؤال مهم پیش میآید: چه دسترسیای بدهیم؟
جواب کوتاه: ALL PRIVILEGES را انتخاب کنید. تقریباً همه سیستمهای مدیریت محتوا (وردپرس، لاراول، جوملا) به دسترسی کامل روی دیتابیس خودشان نیاز دارند. اگر دسترسی محدود بدهید، سایت در عجیبترین لحظهها خطا میدهد.
اما یک استثنا هست. اگر دیتابیس را برای یک اپلیکیشن سادهی فقطخواندنی میسازید (مثلاً یک داشبورد گزارشگیری که فقط SELECT میزند)، دسترسیها را محدود کنید. در عمل، من برای ۹۹٪ سایتها ALL PRIVILEGES میدهم.
چهار مقداری که در فایل پیکربندی لازم دارید
حالا که دیتابیس و کاربر ساخته شد، به چهار مقدار نیاز دارید. اینها را در یک فایل موقت یادداشت کنید:
- نام دیتابیس کامل — با پیشوند، مثلاً
server1_mysite_db - نام کاربری کامل — با پیشوند، مثلاً
server1_mysite_user - رمز عبور — همانی که هنگام ساخت کاربر وارد کردید
- هاست دیتابیس — معمولاً
localhostاست
مقدار چهارم را خیلیها فراموش میکنند. در هاست اشتراکی، دیتابیس روی همان سروری است که سایت روی آن اجرا میشود، پس localhost درست است. اما اگر دیتابیس روی سرور جداگانهای است (مثلاً در سرور اختصاصی با معماری جدا), باید آدرس IP یا نام host سرور دیتابیس را بنویسید.
اتصال در وردپرس
فایل wp-config.php را در ریشه سایت باز کنید. این بخش را پیدا کنید:
define( 'DB_NAME', 'server1_mysite_db' );
define( 'DB_USER', 'server1_mysite_user' );
define( 'DB_PASSWORD', 'your_strong_password' );
define( 'DB_HOST', 'localhost' );
مقادیر را جایگزین کنید و فایل را ذخیره کنید. تمام.
اتصال در لاراول
فایل .env را ویرایش کنید:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=server1_mysite_db
DB_USERNAME=server1_mysite_user
DB_PASSWORD=your_strong_password
توجه کنید که در لاراول، DB_HOST گاهی 127.0.0.1 نوشته میشود نه localhost. هر دو معمولاً کار میکنند، اما اگر یکی خطا داد، دیگری را امتحان کنید.
اینجا اشتباه میکنند: رمز عبور با کاراکتر خاص
رمز عبوری انتخاب کردهاید که شامل $، # یا ' است. در فایل پیکربندی، این کاراکترها ممکن است تفسیر شوند و رمز را خراب کنند.
نشانهاش چیست؟ خطای «Access denied for user» حتی وقتی مطمئن هستید رمز درست است. یا در وردپرس، خطای «Error establishing a database connection» که با چک کردن دوباره رمز هم حل نمیشود.
راهحل: رمز را عوض کنید و فقط از حروف و اعداد استفاده کنید. یا اگر مجبورید کاراکتر خاص داشته باشید، در PHP باید آن را با \ escape کنید. سادهترین راه، حذف کاراکترهای خاص است. امنیت را با طول رمز جبران کنید، نه با کاراکترهای عجیب.
خطاهای رایج و عیبیابی سریع
سایت هنوز بالا نمیآید؟ به ترتیب اینها را چک کنید:
- نام دیتابیس یا کاربر را با پیشوند کامل نوشتهاید؟ — این شایعترین خطاست.
- کاربر را به دیتابیس اضافه کردهاید؟ — ساخت کاربر و ساخت دیتابیس کافی نیست. باید در فرم «Add User To Database» آنها را به هم وصل کنید.
- هاست دیتابیس درست است؟ — اگر از
localhostبه127.0.0.1تغییر دهید، بعضی مشکلات حل میشود. - پورت درست است؟ — پیشفرض MySQL پورت
3306است. اگر هاست شما پورت دیگری دارد، باید آن را مشخص کنید.
اگر خطای «Unknown database» گرفتید، یعنی نام دیتابیس اشتباه است. اگر «Access denied» گرفتید، یعنی نام کاربری یا رمز اشتباه است. اگر «Connection refused» گرفتید، یعنی آدرس هاست دیتابیس درست نیست.
بعد از اتصال: چند کار ضروری
اتصال برقرار شد؟ دو کار دیگر انجام دهید.
اول، از دیتابیس بکاپ بگیرید. در phpMyAdmin گزینه Export را بزنید و فایل SQL را دانلود کنید. این کار را الان انجام دهید، نه بعد از اینکه سایت پر از محتوا شد.
دوم، اگر سایت وردپرس است، جدولهای پیشفرض را بررسی کنید. وردپرس هنگام نصب، جدولهایی با پیشوند wp_ میسازد. اگر از قبل دیتابیسی با جدولهای مشابه دارید، ممکن است تداخل ایجاد شود.
برای تست سرعت اتصال و اطمینان از سلامت کلی سایت، میتوانید از ابزارهای رایگان وبمستر استفاده کنید. این ابزارها به شما میگویند که سایت از دید کاربران چقدر سریع است.
وقتی دیتابیس روی سرور جداگانه است
در هاست اشتراکی، همهچیز روی یک سرور است و localhost جواب میدهد. اما در معماریهای بزرگتر، دیتابیس روی سرور جداگانهای قرار میگیرد. در این حالت:
- به جای
localhost، آدرس IP سرور دیتابیس را مینویسید. - باید در فایروال سرور دیتابیس، IP سرور وب را برای پورت
3306باز کنید. - اتصال از راه دور به MySQL معمولاً بهصورت پیشفرض غیرفعال است. باید در فایل کانفیگ MySQL،
bind-addressرا تغییر دهید.
این کار تخصصیتر است و اگر با آن آشنا نیستید، اشکالی ندارد. در هاست اشتراکی، همهچیز آماده است و فقط باید نامها را درست وارد کنید.
پرسشهای پرتکرار
چرا با وجود درست بودن رمز، خطای Access denied میگیرم؟
محتملترین دلیل، وجود کاراکتر خاص در رمز است که در فایل پیکربندی تفسیر میشود. رمز را به حروف و اعداد ساده تغییر دهید. دلیل دیگر، اتصال کاربر به دیتابیس اشتباه است. در کنترلپنل چک کنید که کاربر دقیقاً به همان دیتابیسی وصل شده باشد که در فایل پیکربندی نوشتهاید.
فرق بین ساخت دیتابیس و ساخت کاربر چیست؟
دیتابیس جایی است که دادهها ذخیره میشوند. کاربر هویتی است که اجازه دسترسی به دیتابیس را دارد. یک دیتابیس میتواند چند کاربر داشته باشد و یک کاربر میتواند به چند دیتابیس دسترسی داشته باشد. برای هر سایت، بهتر است یک دیتابیس و یک کاربر مجزا بسازید تا اگر یکی از سایتها هک شد، بقیه در امان بمانند.
localhost را بنویسم یا 127.0.0.1؟
در بیشتر موارد هر دو کار میکنند. اگر یکی خطا داد، دیگری را امتحان کنید. در بعضی تنظیمات خاص، localhost از سوکت یونیکس استفاده میکند و 127.0.0.1 از TCP/IP. اگر سرور دیتابیس فقط روی TCP/IP گوش میدهد، 127.0.0.1 جواب میدهد.
بعد از ساخت دیتابیس، سایت را نصب کنم یا اول فایل پیکربندی را ویرایش کنم؟
اول دیتابیس و کاربر را بسازید، بعد فایل پیکربندی را ویرایش کنید، بعد نصب را شروع کنید. اگر نصب را اول شروع کنید، در مرحلهای که از شما اطلاعات دیتابیس میخواهد، باید همهچیز آماده باشد. ترتیب درست، صرفهجویی در وقت است.