অন্য সার্ভার থেকে ডেটাবেস স্থানান্তর
Millida VDS-এ ডেটাবেস মাইগ্রেট করার পদ্ধতি: প্রস্তুতি, নেটওয়ার্কে ডাম্প ট্রান্সফার, ইন্টিগ্রিটি যাচাই, এবং ন্যূনতম ডাউনটাইমে অ্যাপ্লিকেশন সুইচ করা।
আপডেট: ২৩ আগস্ট, ২০২৬
ডেটাবেস মাইগ্রেশন কমান্ডে ভাঙে না — ভাঙে ধাপের ক্রমে: মানুষ আগে ডোমেইন সুইচ করে, তারপর আবিষ্কার করে যে অর্ধেক ডেটা কখনোই আসেনি। নিচে এমন একটি ক্রম দেওয়া হলো যা তা প্রতিরোধ করে।
প্রস্তুতি
নতুন মেশিনে ডেটাবেস সার্ভারের একই বা নতুন সংস্করণ ইনস্টল করুন — PostgreSQL বা MySQL। ডাউনগ্রেড সমর্থিত নয়।
psql --version
mysql --version
df -h /
আপনার প্রায় ডেটাবেসের আকারের ২.৫ গুণ ফাঁকা জায়গা লাগবে: ডাম্প, আনপ্যাক করা ডেটা এবং কিছু অতিরিক্ত জায়গা। VDS-1-এ এটি মোট 40 GB, তাই আগেই পরিকল্পনা করুন।
পুরোনো সার্ভারের মতো একই এনকোডিং দিয়ে একটি ইউজার ও একটি ফাঁকা ডেটাবেস তৈরি করুন।
ডেটা স্থানান্তর
সবচেয়ে সহজ পথ হলো SSH-এর মাধ্যমে ডাম্প, কোনো মধ্যবর্তী ফাইল ছাড়াই:
ssh root@OLD 'pg_dump -Fc -U shop shop' > /srv/shop.dump
pg_restore -U postgres -d shop --no-owner --role=shop /srv/shop.dump
MySQL-এর জন্য:
ssh root@OLD 'mysqldump --single-transaction --routines --events -u root shop' \
| mysql -u root shop
রোল ও ইউজার ডেটাবেস ডাম্পে অন্তর্ভুক্ত থাকে না — সেগুলো আলাদাভাবে এক্সপোর্ট করুন: pg_dumpall --roles-only, অথবা ম্যানুয়ালি তৈরি করুন — দেখুন ইউজার ও গ্রান্ট।
ব্যান্ডউইথ 500 Mbps পর্যন্ত, তাই 20 GB ডেটাবেস কয়েক মিনিটেই মাইগ্রেট হয়; 병নেক সাধারণত ডিস্ক রাইট হয়, যা টিয়ার দ্বারা সীমিত।
সুইচ করার আগে যাচাই করুন
শুধু “সাইট লোড হয়েছে” নয়, সংখ্যাগুলো যাচাই করুন:
SELECT relname, n_live_tup FROM pg_stat_user_tables ORDER BY n_live_tup DESC LIMIT 20;
SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema='shop';
মূল টেবিলগুলোর সারি সংখ্যা পুরোনো সার্ভারের সাথে তুলনা করুন, সিকোয়েন্স রিসেট হয়নি কিনা দেখুন (SELECT last_value FROM users_id_seq;), এবং টেস্ট মোডে নতুন ডেটাবেসের বিপরীতে অ্যাপ্লিকেশন চালান।
সুইচওভার
- পুরোনো সার্ভারে মেইনটেন্যান্স মোড চালু করুন বা অ্যাপ্লিকেশন বন্ধ করুন।
- প্রস্তুতির সময় করা পরিবর্তনগুলোর একটি চূড়ান্ত ডাম্প নিন।
- নতুন মেশিনে তা রিস্টোর করুন।
- অ্যাপ্লিকেশনের কানেকশন স্ট্রিং সুইচ করুন এবং সার্ভিস রিস্টার্ট করুন।
- ডেটা না মুছে পুরোনো সার্ভার আরও এক সপ্তাহ চালু রাখুন।
পাঁচ নম্বর ধাপ বাদ দেবেন না: তিন দিন পর একটি অনুপস্থিত টেবিল আবিষ্কার করা খুব সাধারণ ব্যাপার।
সাধারণ ভুল
| লক্ষণ | কারণ |
|---|---|
রিস্টোরের সময় role does not exist | রোল মাইগ্রেট হয়নি — --no-owner ব্যবহার করুন এবং ম্যানুয়ালি রোল তৈরি করুন |
| বিকৃত অক্ষর | এনকোডিং মেলেনি: utf8mb4 বা UTF8 সহ ডেটাবেসে রিস্টোর করুন |
| সিকোয়েন্স ১ থেকে শুরু | ডাম্পে শুধু ডেটা ছিল, setval ছাড়া |
| রিস্টোরে ঘণ্টার পর ঘণ্টা লাগছে | ইনডেক্স চলমান অবস্থায় তৈরি হচ্ছে; বড় ডেটাবেসের জন্য pg_restore -j 4 ব্যবহার করুন |
| মাঝপথে জায়গা শেষ | ডেটার পাশাপাশি ডাম্পের আকার হিসাব করা হয়নি |
মাইগ্রেশনের আগে যাচাই করুন যে নতুন ডেটাবেস শুধু
127.0.0.1-এ লিসেন করছে। “মাইগ্রেশনের সময়টুকু” এটিকে পাবলিকলি এক্সপোজ করার দরকার নেই — স্থানান্তর SSH-এর মাধ্যমে হয়, দেখুন রিমোট অ্যাক্সেস।