पहले, मैं इसका उपयोग करता हूं:
USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;
मैं एक डेटाबेस में सभी टेबल को एक-एक करके लिखने के बजाए एक डेटाबेस में बदलने का सरल तरीका खोज रहा हूं
पहले, मैं इसका उपयोग करता हूं:
USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;
मैं एक डेटाबेस में सभी टेबल को एक-एक करके लिखने के बजाए एक डेटाबेस में बदलने का सरल तरीका खोज रहा हूं
जवाबों:
मुझे खुद 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
आप इसे स्क्रिप्ट करने और इसे निष्पादित करने के लिए MySQL का उपयोग कर सकते हैं:
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}
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;
तो पहली पंक्ति के रूप में कहें । इस तरह, आप केवल स्लेव को पहले और बाद में मास्टर को परिवर्तित करके मास्टर / स्लेव सेटअप में रूपांतरण का परीक्षण कर सकते हैं।
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}
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}
कोशिश करो !!!
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
mysql 5.7 के बाद से no_zero_date को बाईपास करना चाहते हैं - स्रोत stackoverflow.com/questions/9192027/…
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
mysql 5.7 के बाद से no_zero_date को बाईपास करना चाहते हैं - स्रोत stackoverflow.com/questions/9192027/…
जिन लोगों के पास अभी भी यह समस्या है, आप इसे करने के लिए इस तरीके का अनुसरण कर सकते हैं, मुझे यह उत्तर एक वेबसाइट में मिला। इससे मुझे बहुत सहायता प्राप्त हुई:
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
कमांड लाइन पर सामग्री को निष्पादित करें ।
चीयर्स!