مقدمة
تبدأ العديد من مواقع الويب والتطبيقات بخادم الويب وقاعدة البيانات الداعمة لها على جهاز واحد. مع مرور الوقت، قد يصبح إعداد كهذا مُرهقًا ويصعب توسيع نطاقه. الحل الشائع هو فصل هذه الوظائف عن طريق تشغيل قاعدة بيانات عن بُعد والسماح للخادم وقاعدة البيانات بالنمو بوتيرتهما الخاصة على أجهزتهما الخاصة.
من أكثر المشاكل شيوعًا التي يواجهها المستخدمون عند محاولة إعداد قاعدة بيانات MySQL عن بُعد هو أن مثيل MySQL مُهيأ للاستماع فقط للاتصالات المحلية. هذا هو الإعداد الافتراضي لـ MySQL، ولكنه لا يعمل مع إعداد قاعدة بيانات عن بُعد، إذ يجب أن يكون MySQL قادرًا على الاستماع على عنوان IP خارجي يُمكن الوصول إليه من الخادم. لتفعيل هذه الميزة، افتح ملف mysqld.cnf:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfانتقل إلى السطر الذي يبدأ بأمر bind-address. سيبدو كما يلي:
. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
. . .افتراضيًا، يتم تعيين هذه القيمة على 127.0.0.1، مما يعني أن الخادم سيستمع فقط للاتصالات المحلية. ستحتاج إلى تغيير هذا التوجيه للإشارة إلى عنوان IP خارجي. لاستكشاف الأخطاء وإصلاحها، يمكنك تعيين هذا التوجيه إلى عنوان IP بديل، إما * أو :: أو 0.0.0.0:
. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0.0.0.0
. . .بعد تغيير هذا السطر، احفظ وأغلق الملف (CTRL + X، Y، ثم ENTER إذا قمت بتحريره باستخدام nano).
ثم أعد تشغيل خدمة MySQL لتطبيق التغييرات التي أجريتها على mysqld.cnf:
sudo systemctl restart mysqlإذا كان لديك حساب مستخدم MySQL تنوي استخدامه للاتصال بقاعدة البيانات من جهاز المضيف البعيد، فعليك إعادة تكوين هذا الحساب للاتصال من الخادم البعيد بدلاً من المضيف المحلي. للقيام بذلك، افتح عميل MySQL كمستخدم جذر MySQL أو باستخدام حساب ذي امتيازات أخرى:
sudo mysqlإذا قمت بتمكين مصادقة كلمة المرور للجذر، فيجب عليك استخدام الأمر التالي للوصول إلى غلاف MySQL بدلاً من ذلك:
mysql -u root -pلتغيير مُضيف المستخدم، يمكنك استخدام أمر إعادة تسمية مستخدم MySQL. شغّل الأمر التالي، مع الحرص على استبدال sammy باسم حساب مستخدم MySQL الخاص بك وremote_server_ip بعنوان IP الخاص بخادمك البعيد:
RENAME USER 'sammy'@'localhost' TO 'sammy'@'remote_server_ip';بدلاً من ذلك، يمكنك إنشاء حساب مستخدم جديد سيتصل فقط من المضيف البعيد باستخدام الأمر التالي:
CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED BY 'password';ثم امنح المستخدم الجديد الصلاحيات المناسبة لاحتياجاتك الخاصة. يمنح المثال التالي المستخدم صلاحيات عامة لإنشاء وتعديل وحذف قواعد البيانات والجداول والمستخدمين، بالإضافة إلى إمكانية إدراج وتحديث وحذف البيانات من أي جدول على الخادم. كما يسمح للمستخدم بالاستعلام عن البيانات باستخدام الأمر SELECT، وإنشاء مفاتيح خارجية باستخدام الكلمة المفتاحية REFERENCES، وإجراء عمليات FLUSH باستخدام امتياز RELOAD. مع ذلك، يجب منح المستخدمين الصلاحيات التي يحتاجونها فقط، حتى تتمكن من تعديل صلاحيات المستخدم حسب الحاجة.
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'remote_server_ip' WITH GRANT OPTION;بعد ذلك، يُنصح بتشغيل أمر FLUSH PRIVILEGES. سيؤدي هذا إلى تحرير أي مساحة ذاكرة محجوزة من قِبل الخادم نتيجةً لأوامر CREATE USER وGRANT السابقة.
FLUSH PRIVILEGES;وبعد ذلك يمكنك الخروج من عميل MySQL:
exitأخيرًا، بافتراض أنك قمت بتكوين جدار حماية على خادم قاعدة البيانات لديك، فستحتاج أيضًا إلى فتح المنفذ 3306 - منفذ MySQL الافتراضي - للسماح بحركة مرور MySQL.
إذا كنت ترغب في الوصول إلى خادم قاعدة البيانات من جهاز محدد فقط، يمكنك منح هذا الجهاز إذنًا حصريًا للاتصال بقاعدة البيانات البعيدة باستخدام الأمر التالي. تأكد من استبدال remote_IP_address بعنوان IP الفعلي للجهاز الذي تريد الاتصال به:
sudo ufw allow from remote_IP_address to any port 3306إذا احتجت للوصول إلى قاعدة البيانات من أجهزة أخرى مستقبلًا، يمكنك استخدام هذا الأمر لمنحها حق الوصول مؤقتًا. تذكر فقط تضمين عنوان IP الخاص بك.
بدلاً من ذلك، يمكنك السماح بالاتصالات بقاعدة بيانات MySQL الخاصة بك من أي عنوان IP باستخدام الأمر التالي:
sudo ufw allow 3306بعد ذلك، حاول الوصول إلى قاعدة البيانات الخاصة بك عن بعد من جهاز آخر:
mysql -u user -h database_server_ip -pإذا تمكنت من الوصول إلى قاعدة بياناتك، فهذا يؤكد أن تعليمة bind-address في ملف التكوين كانت سبب المشكلة. يُرجى ملاحظة أن تعيين bind-address إلى 0.0.0.0 غير آمن، إذ يسمح بالاتصال بخادمك من أي عنوان IP. من ناحية أخرى، إذا كنت لا تزال غير قادر على الوصول إلى قاعدة البيانات عن بُعد، فقد تكون هناك مشكلة أخرى تُسبب المشكلة.









