InnoDB থেকে সমস্ত সারণী মাইআইএসএমে রূপান্তর করার সহজ উপায়


13

পূর্বে, আমি এটি ব্যবহার:

USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;

আমি প্রতিটি টেবিলের নাম এক এক করে লেখার চেয়ে ডাটাবেসে সমস্ত টেবিলকে রূপান্তর করার সহজতর উপায়টি খুঁজছি


1
সহজ কিভাবে? এটি আমার কাছে বেশ সহজ দেখাচ্ছে।
জোড়াদেচে

5
আপনার লক্ষ্যগুলি অর্জন করতে স্ক্রিপ্টিং ব্যবহার করতে শিখুন।
টম ও'কনর

উত্তর:


11

আমি নিজেই এটি মাইএসকিএলে করার কোনও উপায় সম্পর্কে অবগত নই, তবে একটি সাধারণ শেল স্ক্রিপ্ট কাজটি করবে:

TABLES=$(mysql -pXXXXXXX -uXXXXXXX --skip-column-names -B -D $DB -e 'show tables')
for T in $TABLES
do
    mysql -pXXXXX -uXXXXX -D $DB -e "ALTER TABLE $T ENGINE=MYISAM"
done

1
বিদেশী কী চেকটি কীভাবে অক্ষম করবেন?
রিয়েলটিবো

7

আপনি এটি স্ক্রিপ্ট করতে এবং এটি কার্যকর করতে মাইএসকিউএল ব্যবহার করতে পারেন:

এটি ডাটাবেসের dbnameপ্রতিটি ইনোডিবি টেবিলকে মাইআইএসএমে রূপান্তর করবে

CONVERT_SCRIPT=Convert_dbname_InnoDB_to_MyISAM.sql
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE table_schema='dbname' AND engine='InnoDB';" > ${CONVERT_SCRIPT}
mysql -u... -p... -A < ${CONVERT_SCRIPT}

এটি প্রতিটি ইনোডিবি টেবিলকে মাইআইএসএমে রূপান্তর করবে

CONVERT_SCRIPT=Convert_InnoDB_to_MyISAM.sql
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE engine ='InnoDB';" > ${CONVERT_SCRIPT}
mysql -u... -p... -A < ${CONVERT_SCRIPT}

আপনি যদি না চান তবে সারণীর টেবিলগুলির রূপান্তরটি স্ল্যাভে প্রতিলিপি করা উচিত, কেবল SET SQL_LOG_BIN=0;প্রথম লাইন হিসাবে রেখে দিন। এইভাবে, আপনি প্রথমে কেবল স্লেভ এবং পরে মাস্টারকে রূপান্তর করে মাস্টার / স্লেভ সেটআপে রূপান্তরটি পরীক্ষা করতে পারেন।

এটি ডাটাবেসের প্রতিটি InnoDB টেবিলটি dbnameমাইআইএসএএম-তে রূপান্তর করবে এবং অন্যান্য সার্ভারে প্রতিলিপি দেবে না

CONVERT_SCRIPT=Convert_dbname_InnoDB_to_MyISAM.sql
echo "SET SQL_LOG_BIN=0;" > ${CONVERT_SCRIPT}
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE table_schema='dbname' AND engine='InnoDB';" >> ${CONVERT_SCRIPT}
mysql -u... -p... -A < ${CONVERT_SCRIPT}

এটি প্রতিটি InnoDB টেবিলটি মাইআইএসএএম-তে রূপান্তর করবে এবং অন্যান্য সার্ভারে প্রতিলিপি দেবে না

CONVERT_SCRIPT=Convert_InnoDB_to_MyISAM.sql
echo "SET SQL_LOG_BIN=0;" > ${CONVERT_SCRIPT}
mysql -u... -p... -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE engine ='InnoDB';" >> ${CONVERT_SCRIPT}
mysql -u... -p... -A < ${CONVERT_SCRIPT}

একবার চেষ্টা করে দেখো !!!


আপনি সম্ভবত চাইবেন MyIsam2InnoDB থেকে যাওয়া বাস্তব জগতে SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; no_zero_date বাইপাস কোথাও থেকে MySQL 5.7 - উত্স stackoverflow.com/questions/9192027/...
অ্যান্টনি গিবস

আপনি সম্ভবত চাইবেন MyIsam2InnoDB থেকে যাওয়া বাস্তব জগতে SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; no_zero_date বাইপাস কোথাও থেকে MySQL 5.7 - উত্স stackoverflow.com/questions/9192027/...
অ্যান্টনি গিবস

0

যাদের এখনও এই সমস্যা রয়েছে, আপনি এটি করার জন্য এই উপায়টি অনুসরণ করতে পারেন, আমি এই উত্তরটি একটি ওয়েবসাইটে পেয়েছি। এটা আমাকে অনেক সাহায্য করেছে:

shell> mysql -u username -p -e "SELECT concat('ALTER TABLE ', TABLE_NAME,' ENGINE=MYISAM;') FROM Information_schema.TABLES WHERE TABLE_SCHEMA = 'db_name' AND ENGINE = 'InnoDB' AND TABLE_TYPE = 'BASE TABLE'" | tail -n+2 >> alter.sql

আপডেট usernameএবং db_nameআপনার নিজস্ব মান সঙ্গে মান।

স্ক্রিপ্টটি কার্যকর করে, এটি নামের অধীনে একটি ফাইল সংরক্ষণ করবে: alter.sql ফাইলটি খুলুন এবং আপনার phpmyadminবা mysqlকমান্ড লাইনে থাকা বিষয়বস্তুটি কার্যকর করুন ।

চিয়ার্স!


-1

আমি এই ধরণের স্টাফের জন্য ওয়ান-লাইনার পছন্দ করি। এটি সর্বাধিক গৃহীত উত্তরের একটি-লাইন সংস্করণ।

আপনার মাইএসকিউএল ব্যবহারকারীর নাম এবং পাসওয়ার্ড সেট করা থাকলে এটি কাজ করে ~/.my.cnf

D=your_db; for t in $(mysql $D -B -e 'SHOW TABLES'); do mysql $D -e "ALTER TABLE $t ENGINE=MyISAM"; done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.