آموزش ارائه دسترسی ریموت به MySQL
در این مقاله میخوانید
بسیاری از وبسایتها و اپلیکیشنها با وبسرور و دیتابیسی که مسئول ذخیره دادههای پشتیبان است، شروع به کار میکنند. با گذشت زمان و افزایش مقیاس اپلیکیشن، مدیریت و مقیاسبندی آنها سختتر میشود؛ اما یک راهحل کلی برای انجام این عملیاتها وجود دارد: ارائه دسترسی ریموت به MySQL. این کار میتواند دسترسی کامل به پایگاه داده را از راه دور به شما بدهد تا بتوانید بهسرعت وبسرورها و دیتابیسهای خود را مدیریت و ویرایش کنید. در این مقاله، هرآنچه برای ارائه دسترسی ریموت به MySQL نیاز دارید، توضیح دادهایم؛ پس تا پایان مطلب با ما همراه باشید.
پیکربندی اولیه برای ارائه دسترسی به ریموت MySQL
یکی از مشکلات رایجی که کاربران هنگام راهاندازی دیتابیس MySQL از راه دور با آن مواجه هستند، این است که نمونه MySQL آنها فقط برای گوشدادن به اتصالات محلی (Local) پیکربندی شده است. این حالت جزو تنظیمات پیشفرض 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 . . .
بهطورپیشفرض، این مقدار روی IP محلی یعنی ۱۲۷.۰.۰.۱ تنظیم شده است. این یعنی سرور فقط اتصالات محلی را میپذیرد. شما باید این IP را با آدرس IP دیگری جایگزین کنید. برای تست و دیباگ میتوانید این IP را روی آدرس IP wildcard تنظیم کنید؛ مثل یا *، :: یا 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 . . .
توجه: در نسخههای خاصی از MySQL، ممکن است دستورالعمل bind-address بهطورپیشفرض در فایل mysqld.cnf نباشد. در این حالت، باید این دستورالعمل را در انتهای فایل خود بهصورت دستی اضافه کنید:
. . . [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log bind-address = 0.0.0.0
بعد از تغییر این خط، فایل را ذخیره کنید و ببندید. سپس، سرویس MySQL را مجدداً راهاندازی کنید تا تغییراتی که در mysqld.cnf انجام دادهاید، اعمال شود:
sudo systemctl restart mysql
برای آشنایی کامل با پایگاه داده MySQL و مقایسه آن با دیگر دیتابیسها مقاله زیر را بخوانید.
پیکربندی حساب MySQL برای اتصال به ریموت
اگر حساب کاربری MySQL دارید که میخواهید از آن برای اتصال به دیتابیس میزبان ریموت خود استفاده کنید، باید آن حساب را برای اتصال به سرور ریموت بهجای سرور محلی پیکربندی کنید. برای انجام این کار، کلاینت MySQL را با حساب اصلی MySQL یا حساب کاربری با امتیازهای کامل باز کنید:
sudo mysql
اگر احراز هویت رمزعبور را برای root فعال کردهاید، باید از دستور زیر برای دسترسی به MySQL shell استفاده کنید:
mysql -u root -p
برای تغییر هاست کاربر میتوانید از دستور RENAME USER در 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';
توجه: دستور بالا کاربری ایجاد میکند که با افزونه پیشفرض احراز هویت MySQL (caching_sha2_password) را انجام میدهد. مشکل شناختهشدهای در برخی از نسخههای PHP وجود دارد که میتواند باعث ایجاد مشکل در این افزونه شود. اگر قصد دارید از این پایگاه داده با یکی از برنامههای PHP، مانند phpMyAdmin استفاده کنید، ممکن است بخواهید کاربری ریموت ایجاد کنید که بهجای caching_sha2_password با افزونه قدیمیتر، یعنی mysql_native_password، احراز هویت میکند:
CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
همچنین، میتوانید با دستور ALTER کاربران دیگر را ویرایش کنید:
ALTER USER 'sammy'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
سپس، به کاربر جدید امتیازهای متناسب با نیازهای خود اعطا کنید. دستور زیر به کاربر امتیازهای CREATE و ALTER و DROP دیتابیسها و جدولها و کاربران و نیز امکان INSERT و UPDATE و DELETE دادهها را از هر جدولی در سرور اعطا میکند. همچنین، به کاربر امکان میدهد تا دادهها را با کوئری 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
درنهایت، با فرض اینکه فایروالی را روی سرور پایگاه داده خود پیکربندی کردهاید، باید پورت ۳۳۰۶، یعنی پورت پیشفرض MySQL را باز کنید تا به ترافیک MySQL اجازه دسترسی دهید.
اگر قصد دارید فقط از یک ماشین خاص به سرور پایگاه داده دسترسی داشته باشید، با دستور زیر میتوانید به آن ماشین اجازه انحصاری برای اتصال به پایگاه داده از راه دور بدهید. مطمئن شوید که در دستور یادشده بهجای remote_IP_address، آدرس IP واقعی دستگاهی را جایگزین میکنید که قصد دارید به آن متصل شوید. همچنین، اگر در آینده به دسترسی به دیتابیس از ماشینهای دیگر نیاز دارید، میتوانید با این دستور به آنها اجازه دسترسی موقت بدهید. فقط فراموش نکنید که آدرس IP مرتبط خود را درج کنید:
sudo ufw allow from remote_IP_address to any port 3306
علاوهبراین، با دستور زیر میتوانید ازطریق هر آدرس IP به پایگاه داده MySQL خود اجازه اتصال دهید:
sudo ufw allow 3306
هشدار: این دستور به هرکسی کمک میکند تا به پایگاه داده MySQL شما دسترسی داشته باشد. اگر پایگاه داده شما دادههای حساسی دارد، بهتر است آن را اجرا نکنید. سعی کنید از راه دور از دستگاه دیگری به پایگاه داده خود دسترسی پیدا کنید:
mysql -u user -h database_server_ip -p
توجه: اگر یک قانون فایروال را اضافه کردهاید که فقط از آدرس IP خاصی اجازه اتصال را بدهد، باید تنها با دستگاه مجاز متصل شوید.
اگر مشکلی در اتصال وجود داشت، احتمالاً به دستور bind-address در فایل پیکربندی MySQL مربوط است. لطفاً توجه کنید که تنظیم bind-address روی ۰.۰.۰.۰ ناامن است؛ زیرا امکان اتصال به سرور شما از هر آدرس IP را فراهم میکند. همچنین، اگر هنوزهم امکان دسترسی به MySQL ندارید، ممکن است مشکل از بخشهای دیگر باشد.
جمعبندی
ارائه دسترسی ریموت به MySQL یکی از عملیاتهای پرکاربردی است که همه به آن نیاز دارند. هر سرور قطعاً به دسترسی ریموت برای متصلشدن به دیتابیس نیاز دارد. ارائه دسترسی ریموت به کاربران کاملاً تنظیمشدنی است. برای ورود میتوانید رمزعبور انتخاب کنید و به هر کاربر تنها دسترسی عملیاتهای موردنیاز مانند Update و Delete بدهید. در این مقاله، نحوه ارائه دسترسی ریموت بههمراه پیکربندی و تست اجرای صحیح آن را بهطورکامل فراگرفتید. حالا میتوانید روی سرور واقعی کاربری جدید ایجاد کنید و دسترسی ریموت MySQL موردنیاز را به آن بدهید. البته MySQL قابلیتهای بیشتری دارد که پیشنهاد میکنیم برای کسب اطلاعات بیشتر، مستندات MySQL را مطالعه کنید.
MySQL Replication یا تکرار داده در MySQL چیست و نوع همزمان آن چه تفاوتی با ناهمزمان دارد؟ در مقاله زیر بخوانید.
سؤالات متداول
۱. چگونه از راه دور به MySQL متصل شویم؟
برای این کار مراحل زیر را دنبال کنید:
- در سرور پایگاه داده خود، بهعنوان کاربری با امتیازهای روت فایل پیکربندی MySQL خود را باز کنید.
- در فایل پیکربندی bind-address را جستوجو کنید.
- آدرس IP خود را وارد کنید و خارج شوید.
- سرویس MySQL را مجدداً راهاندازی کنید.
۲. چگونه میتوانیم از راه دور به پایگاه داده خود دسترسی داشته باشیم؟
برای افزودن کامپیوتر خود بهعنوان میزبان دسترسی، وارد cPanel شوید. در قسمت Databases، روی نماد Remote MySQL® کلیک کنید. در صفحه Remote MySQL®، آدرس IP اتصال را وارد و سپس روی Add Host کلیک کنید.
۳. چگونه از راه دور به میزکار MySQL دسترسی داشته باشیم؟
MySQL Workbench را باز کنید. روی New Connection در سمت چپ پایین MySQL Workbench کلیک و سپس اطلاعات را برای اتصال وارد کنید.
۴. آیا سرور MySQL رایگان است؟
MySQL نرمافزاری رایگان و منبعباز تحت شرایط GNU محسوب میشود و برای انواع مجوزهای اختصاصی موجود است.
۵. آدرس IP سرور MySQL چیست؟
بهطورپیشفرض هر سرور MySQL به آدرس IP محلی ۱۲۷.۰.۰.۱ گوش میدهد و هر سرور MariaDB همه اتصالات را میپذیرد (یعنی ۰.۰. ۰.۰ گوش میدهد).