InnoDB से MyISAM तक सभी टेबल को बदलने का सरल तरीका


13

पहले, मैं इसका उपयोग करता हूं:

USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;

मैं एक डेटाबेस में सभी टेबल को एक-एक करके लिखने के बजाए एक डेटाबेस में बदलने का सरल तरीका खोज रहा हूं


1
सरल कैसे? यह मुझे बहुत सरल लगता है।
15 अक्टूबर को

5
अपने लक्ष्यों को पूरा करने के लिए स्क्रिप्टिंग का उपयोग करना सीखें।
टॉम ओ'कॉनर

जवाबों:


11

मुझे खुद mysql में ऐसा करने के किसी भी तरीके के बारे में पता नहीं है, लेकिन एक सरल शेल स्क्रिप्ट काम करेगा:

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

आप इसे स्क्रिप्ट करने और इसे निष्पादित करने के लिए MySQL का उपयोग कर सकते हैं:

यह डेटाबेस में हर InnoDB तालिका dbnameको MyISAM में बदल देगा

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}

यह हर InnoDB टेबल को MyISAM में बदल देगा

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को MyISAM में बदल देगा और अन्य सर्वरों को दोहराएगा नहीं

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 तालिका को MyISAM में बदल देगा और अन्य सर्वरों को दोहराएगा नहीं

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'; mysql 5.7 के बाद से no_zero_date को बाईपास करना चाहते हैं - स्रोत stackoverflow.com/questions/9192027/…
एंटनी गिब्स

वास्तविक दुनिया में MyIsam2InnoDB से जा रहे हैं, आप शायद SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; mysql 5.7 के बाद से no_zero_date को बाईपास करना चाहते हैं - स्रोत 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

मैं इस तरह के सामान के लिए वन-लाइनर्स पसंद करता हूं। यह सबसे स्वीकृत उत्तर का वन-लाइनर संस्करण है।

यह काम करता है यदि आपके पास आपका MySQL उपयोगकर्ता नाम और पासवर्ड सेट है ~/.my.cnf

D=your_db; for t in $(mysql $D -B -e 'SHOW TABLES'); do mysql $D -e "ALTER TABLE $t ENGINE=MyISAM"; done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.