MySQL और MariaDB: इंस्टॉलेशन और आपका पहला डेटाबेस
VDS पर डेटाबेस सर्वर इंस्टॉल करना, सुरक्षित शुरुआती सेटअप, डेटाबेस और यूज़र बनाना, कनेक्शन जाँचना, और शुरुआत की आम गलतियाँ।
23 अगस्त 2026 को अपडेट किया गया
MySQL और उसकी संगत शाखा MariaDB वही हैं जिन पर ज़्यादातर PHP साइटें चलती हैं। उनके कमांड और क्लाइंट एक जैसे हैं; फ़र्क़ बारीक ट्यूनिंग से शुरू होता है।
इंस्टॉलेशन
apt update && apt install -y mariadb-server # Debian, Ubuntu
dnf install -y mariadb-server # AlmaLinux, CentOS Stream
systemctl enable --now mariadb
अगर आपको ख़ास तौर पर Oracle का MySQL चाहिए, तो उसके आधिकारिक रिपॉज़िटरी से mysql-server इंस्टॉल करें। सर्विस का नाम mysql होगा।
बुनियादी सुराख़ तुरंत बंद करें:
mariadb-secure-installation
स्क्रिप्ट आपसे root पासवर्ड सेट करने, अनाम यूज़र हटाने, रिमोट root लॉगिन बंद करने और टेस्ट डेटाबेस ड्रॉप करने के लिए कहेगी। हर सवाल का जवाब “yes” दें।
डेटाबेस और यूज़र
अपनी एप्लिकेशन को root के तौर पर न चलाएँ — हर प्रोजेक्ट के लिए अलग यूज़र बनाएँ:
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'shop'@'localhost' IDENTIFIED BY 'long-random-password';
GRANT ALL PRIVILEGES ON shop.* TO 'shop'@'localhost';
FLUSH PRIVILEGES;
utf8mb4 एन्कोडिंग ज़रूरी है: MySQL में पुरानी utf8 हर अक्षर के लिए सिर्फ़ तीन बाइट स्टोर करती है और इमोजी तथा कुछ अक्षरों पर टूट जाती है।
जाँचें:
mariadb -u shop -p shop -e "SELECT 1;"
अनुमतियों के बारे में ज़्यादा जानने के लिए users and grants देखें।
शुरुआती सेटअप
सेटिंग्स /etc/mysql/mariadb.conf.d/50-server.cnf या /etc/my.cnf.d/ में रहती हैं। यहाँ वह न्यूनतम है जो आपको तुरंत ठीक करना चाहिए:
[mysqld]
bind-address = 127.0.0.1
innodb_buffer_pool_size = 1G
max_connections = 100
bind-address = 127.0.0.1 डेटाबेस को सिर्फ़ लोकल तक सीमित रखता है। अगर आपकी एप्लिकेशन उसी मशीन पर है, तो ऐसा ही होना चाहिए। अगर आपको डेटाबेस बाहर से चाहिए, तो कुछ भी बदलने से पहले remote access पढ़ें।
बफ़र पूल का साइज़ टियर के हिसाब से चुना जाता है — memory tuning देखें।
एडिट करने के बाद: systemctl restart mariadb।
आम एरर
| लक्षण | कारण | क्या करें |
|---|---|---|
Access denied for user | ग़लत पासवर्ड या यूज़र एंट्री किसी दूसरे होस्ट से बंधी है | SELECT user, host FROM mysql.user; जाँचें |
Can't connect through socket | सर्विस चल नहीं रही | systemctl status mariadb देखें, journalctl -u mariadb जाँचें |
Too many connections | एप्लिकेशन कनेक्शन बंद नहीं करती | एप्लिकेशन की तरफ़ पूल लगाएँ, फिर max_connections |
| टेक्स्ट गड़बड़ दिखना | डेटाबेस और कनेक्शन की एन्कोडिंग अलग-अलग | सब कुछ utf8mb4 पर लाएँ |
| रीबूट के बाद डेटाबेस शुरू नहीं होता | सर्विस बूट पर शुरू होने के लिए सेट नहीं है | systemctl enable mariadb |
मशीन का कोई ऑटोमैटिक बैकअप नहीं होता। अपनी पहली काम करने वाली टेबल के तुरंत बाद डंप सेट करें — database backups। NVMe डिस्क तेज़ है, लेकिन सिर्फ़ एक है।