আমি কীভাবে মাইএসকিউএল ডেটা ডিরেক্টরিটি স্থানান্তর করব?


57

আমি আমার মাইএসকিউএল ডাটাবেসের ডেটা ডিরেক্টরিটিকে একটি দ্বিতীয় ডিস্ক অ্যারেতে স্থানান্তরিত করার চেষ্টা করছি যা মাউন্ট পয়েন্ট হিসাবে রয়েছে /array2/

আমার যে সমস্যাটি হচ্ছে তা হ'ল আমি সবকিছু চেষ্টা করেছি এবং আমি My.cnf মাইএসকিএল-তে ডেটাডিরের অবস্থান পরিবর্তন করার পরে আর আরম্ভ হবে না।

আমি যা পাই তা হ'ল:

start: Job failed to start

উত্তর:


62

অ্যাপ্লিকেশন বর্ম সম্পর্কে ভুলে গেছেন।

আগ্রহী যে কারও জন্য আমি ফোল্ডারটি সরাতে নিম্নলিখিতগুলি করেছি।

মাইএসকিএল সার্ভারটি বন্ধ করুন:

stop mysql

নতুন ডিরেক্টরি তৈরি করুন:

mkdir /array2/mysql

কেবলমাত্র ডাটাবেস ফোল্ডারে অনুলিপি করুন:

cp -R /var/lib/mysql /array2/mysql
cp -R /var/lib/mysql/users /array2/mysql

my.cnfফাইলটি ব্যাকআপ করুন:

cp /etc/mysql/my.cnf /root/my.cnf.backup

my.cnfফাইলটি সম্পাদনা করুন:

nano /etc/mysql/my.cnf

পুরানো ডাটাডির এবং সকেটের সমস্ত উল্লেখ আপনার নতুন জায়গায় পরিবর্তন করুন

আমার হয়ে গেল:

datadir=/array2/mysql
socket=/array2/mysql/mysql.sock

ডিরেক্টরি অনুমতি আপডেট করুন:

chown -R mysql:mysql /array2/mysql

পুরানো ডিরেক্টরিটির নতুন নাম দিন:

mv /var/lib/mysql /var/lib/mysql-old

কেবলমাত্র সিমিলিংক তৈরি করুন:

ln -s /array2/mysql /var/lib/mysql 

অ্যাপআর্মার নতুন ডেটাডির সম্পর্কে জানতে দিন:

echo "alias /var/lib/mysql/ -> /your/new/datadir/," >> /etc/apparmor.d/tunables/alias

অ্যাপারমোর প্রোফাইলগুলি পুনরায় লোড করুন

sudo /etc/init.d/apparmor reload

তারপরে মাইএসকিএল শুরু করুন:

start mysql

এটি একটি ভাল উত্তর তবে ক্লায়েন্টদের মাইএসকিএল-তে সংযোগ স্থাপনের জন্য আপনার আরও একটি পদক্ষেপের প্রয়োজন হতে পারে। এর অধীনে এক লাইনের সাথে একটি নতুন গোষ্ঠী যুক্ত করুন ... [ক্লায়েন্টস] সকেট = / অ্যারে 2 / মাইএসকিএল / মাইএসকিএল.সোক যেখানে সকেট = অংশটি আপনার মাইএসকিএল.সোক ফাইলের নতুন অবস্থানে দেখায়।
নাইট আউল

1
আপনি মার্জ করতে বিরক্ত করা না চান তাহলে /etc/apparmor.d/usr.sbin.mysqldপ্রতিটি সময় MySQL একটি আপডেট পায় আপনি যোগ করতে পারেন /array2/mysql/** rwk,করার /etc/apparmor.d/local/usr.sbin.mysqldপরিবর্তে। MySQL এর এখনও পুরানো ডেটা ডায়ারে অ্যাক্সেস থাকবে তবে এটি সম্ভবত কোনও সমস্যা নয়।
ড্রিভিকো

sed -i "s,datadir.*=.*,datadir=$new_dir,g" /etc/mysql/my.cnf। কেন কেবল ডাটাবেস ফোল্ডার?
int_ua

: যেকেউ ZFS তাদের datadir চলন্ত (যেমন আমি করেছি) এর জন্য নিশ্চিত করুন যে আপনার যোগ করা innodb_use_native_aio=0মধ্যে [mysqld]আপনার বিভাগে my.cnfফাইল, যেহেতু লিনাক্স ZFS AIO পদ্ধতি সমর্থন করে না। dev.mysql.com/doc/refman/5.5/en/…
অ্যান্ড্রু এনসলে

23

আমি দেখতে পেলাম যে অ্যাপআরর্মার পরীক্ষা করেই অপরাধী syslogএবং mysqlএই প্রক্রিয়াটি অনুসরণ করে ডেটা অবস্থানের সাফল্যের সাথে পরিবর্তন করতে সক্ষম হয়েছিল ।

দয়া করে নোট করুন যে, নীচে সম্পাদিত ফাইলগুলিতে, শুরু হওয়া লাইনগুলি +যুক্ত হয়েছিল এবং এর সাথে শুরু হওয়া লাইনগুলি -সরানো হয়েছিল। +এই ফাইলগুলিতে লাইন যুক্ত করার সময় আপনার অবশ্যই লক্ষণগুলি টাইপ / আটকানো উচিত নয় ।

আমি mysqlডিরেক্টরিটি নতুন জায়গায় ক্লোন করেছি :

sudo rsync -av /var/lib/mysql /new_dir

তারপরে আমি datadirলাইনটি সম্পাদনা করেছি /etc/mysql/my.cnf:

sudo vi /etc/mysql/my.cnf
-datadir     = /var/lib/mysql
+datadir     = /new_dir/mysql

তারপরে আমি সম্পাদনা করেছি /etc/apparmor.d/usr.sbin.mysqld:

sudo vi /etc/apparmor.d/usr.sbin.mysqld
-  /var/lib/mysql/ r,
-  /var/lib/mysql/** rwk,
+  /new_dir/mysql/ r,
+  /new_dir/mysql/** rwk,

তারপরে আমি আবার শুরু করলাম mysql


13

সচেতন থাকা.

আপনার যদি ইনোডিবি সারণী থাকে তবে আপনার অবশ্যই ফাইল ibdata*এবং ib_logfile*ফাইলগুলি অনুলিপি করতে হবে বা আপনি টেবিলগুলি ব্যবহার করতে পারবেন না। তুমি পাবে:

'টেবিল' ডাটাবেসনাম.ট্যাবলনেম 'বিদ্যমান নেই'

ত্রুটি।

এই কপি কমান্ড সঞ্চালন করুন উপর কপি করতে ibdata*এবং ib_logfile*ফাইল।

sudo cp -p /var/lib/mysql/ib* /array2/mysql/

এটি একটি মন্তব্য হওয়া উচিত, এটি সম্পূর্ণ উত্তর নয়
পোস্টডেলমাগা

4

আমি কেবল অন্যভাবে চেষ্টা করেছি, যাতে কারওর পক্ষে এটি দরকারী হয়ে উঠতে পারে:

অনুমতি সহ অনুলিপি:

rsync -avzh /var/lib/mysql /path/to/new/place

ব্যাক আপ (যদি কিছু ভুল হয়ে যায়):

mv /var/lib/mysql /var/lib/_mysql

পুরানো স্থানে একটি নতুন খালি ডিরেক্টরি তৈরি করুন:

mkdir /var/lib/mysql

পুরানো নতুন স্থান মাউন্ট বাঁধুন:

mount -B /path/to/new/place /var/lib/mysql

আশা করি এটি কাউকে সহায়তা করে, কারণ সিমলিংকিং আমার পক্ষে কাজ করে না, এবং এটি ছিল সহজতম উপায়


3

আপনি যদি আপনার ডেটাডিরটি সরিয়ে নিয়ে থাকেন তবে আপনাকে কেবল নতুন ডেটাডির অনুমতি দেওয়ার প্রয়োজন হবে না, তবে আপনাকে সমস্ত পিতামাতার ডিরেক্টরিগুলির অনুমতি দেওয়ার জন্য বীমা করা প্রয়োজন।

আমি আমার ডাটাডিরকে একটি হার্ড ড্রাইভে স্থানান্তরিত করেছি, উবুন্টুতে এটির মতো করে দেওয়া হয়েছে:

/media/*user*/Data/

এবং আমার ডেটাডিরটি ছিল ডেটাবেসস

আমাকে মিডিয়া, ব্যবহারকারী এবং ডেটা ডিরেক্টরিগুলির প্রত্যেকের কাছে 1 to১ তে অনুমতি নির্ধারণ করতে হয়েছিল :

sudo chmod 771 *DIR*

যদি এটি কাজ না করে, আপনি মাইএসকিএল-কে কাজ করার অন্য একটি উপায় হ'ল /etc/mysql/my.cnf এর ব্যবহারকারীকে রুটে পরিবর্তন করতে পারেন; সুরক্ষার দৃষ্টিকোণ থেকে এটি করার বিষয়ে কোনও সন্দেহ নেই।


2

আমি মাউন্ট উইন্ড বাইন্ড ব্যবহার করতে পছন্দ করি তাই আমি অ্যাপারমার এবং মাইএসকিএল কনফিগারেশনের কোনও পরিবর্তন এড়াতে পারি না।


উদাহরণ স্বরূপ:

মনে করুন আমি সব কিছু ভিতরে যেতে চাই /var/www। আসুন বলতে দিন এই দিরটি আমার দেব পরিবেশ এবং এটি একটি আলাদা পার্টিশনে মাউন্ট করা হয়েছে

  1. প্রথমে আমাদের মাইএসকিএল বন্ধ করতে হবে :

    sudo systemctl stop mysql.service
    
  2. আমরা ফাইলগুলি স্থানান্তর করি (অনুমতি সংরক্ষণ করে)

    sudo rsync -av /var/lib/mysql /var/www
    

    এটি /var/www/mysql/সমস্ত সামগ্রী সহ একটি ডিরেক্টরি তৈরি করবে ।

  3. আমরা পুরানো ডিরেক্টরিতে সমস্ত কিছু সরিয়ে ফেলি:

    sudo rm -r /var/lib/mysql/*
    
  4. আমরা bindপুরানো মধ্যে বিকল্প সহ নতুন ডিরেক্টরি মাউন্ট । এই লাইনটি
    সম্পাদনা করুন /etc/fstabএবং যুক্ত করুন:

    /var/www/mysql /var/lib/mysql  none  bind 0 0
    

    এই মাউন্ট হবে /var/www/mysqlআমাদের খালি দির বিকল্প এখানে জাদু না, এতে পূরণ হবে বিষয়বস্তুর সঙ্গে মাইএসকিউএল জন্য তাই এবং apparmor এটা পছন্দ কিছুই পরিবর্তিত হয়েছে করা হবে না।/var/lib/mysql
    bind/var/lib/mysql/var/www/mysql

  5. এখন আমরা মাউন্ট:

    sudo mount -a
    

    এবং mysql পুনরায় আরম্ভ করুন।


0

আপনি উপলব্ধি করেছেন যদি আপনি গৃহীত উত্তর থেকে আদেশটি ভারব্যাটিমটি অনুসরণ করেন তবে এটি ব্যর্থ হবে?

সিপি -আর / ভার / লিব / মাইএসকিএল / অ্যারে 2 / মাইএসকিএল

/ Var / lib / mysql কে / অ্যারে 2 / মাইএসকিএল / মাইএসকিএল অনুলিপি করবে।

আপনি যখন আপনার কনফিগারেশন ফাইলটি সেট করবেন তখন ডিরেক্টরিতে আরও ভালভাবে / অ্যারে 2 / মাইএসকিএল / মাইএসকিএল রাখবেন বা অন্যথায় আপনার মাইএসকিএলডি ব্যর্থ হবে।

কপি কমান্ড ভাল হবে:

সিপি -আর / ভার / লিবিব / মাইএসকিএল / অ্যারে 2 / সিপি -আর / ভেরি / লিবি / মাইএসকিএল / ব্যবহারকারী / অ্যারে 2 / মাইএসকিএল

শুধু আমার 2 সেন্ট মূল্য।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.