इस बंद को खींचने का केवल एक ही तरीका है। आपको mysqldumps का उपयोग करके डेटा निर्यात करना होगा, सभी डेटाबेस को छोड़ना होगा, mysqld को बंद करना होगा, ib_logfile0 को हटाना होगा, ib_logfile1 को हटाना होगा, ibdata1 को हटाना होगा, शीर्षक के innodb_file_per_table
नीचे जोड़ना होगा, ssql को [mysqld]
शुरू करना होगा।
मैंने अक्टूबर 2010 में वापस StackOverflow में यह उत्तर पोस्ट किया
यहां लंबवत सूचीबद्ध किए गए चरण हैं:
चरण 01) एक SQL पाठ फ़ाइल में सभी डेटाबेस MySQLDump (इसे SQLData.sql कहें)
चरण 02) सभी डेटाबेस (mysql स्कीमा को छोड़कर) ड्रॉप करें
चरण 03) शटडाउन mysql
CAVEAT : InnoDB फ़ाइलों से अनक्लेम्ड लेनदेन को पूरी तरह से साफ़ करने के लिए, इसे चलाएँ
mysql -uroot -p... -Ae"SET GLOBAL innodb_fast_shutdown = 0;"
service mysql stop
चरण 04) निम्नलिखित पंक्तियों को /etc/my.cnf में जोड़ें
[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G
सिडेनोट: जो भी आपके सेट innodb_buffer_pool_size के लिए है, सुनिश्चित करें कि innodb_log_file_size 25% innodb_buffer_pool_size है।
चरण 05) ibdata1, ib_logfile0 और ib_logfile1 हटाएं
इस बिंदु पर, केवल / var / lib / mysql में mysql स्कीमा होना चाहिए
चरण 06) mysql को पुनरारंभ करें
यह ibdata1 को 10MB, ib_logfile0 पर और ib_logfile1 को 1G पर पुनः बनाएगा
चरण ० Rel) SQLData.sql को mysql में पुनः लोड करें
ibdata1 बढ़ेगा लेकिन इसमें केवल टेबल मेटाडेटा होगा
प्रत्येक InnoDB तालिका ibdata1 के बाहर मौजूद होगी
मान लीजिए कि आपके पास mydb.mytable नाम की एक InnoDB तालिका है। यदि आप / var / lib / mysql / mydb में जाते हैं, तो आपको तालिका का प्रतिनिधित्व करने वाली दो फाइलें दिखाई देंगी
- mytable.frm (स्टोरेज इंजन हैडर)
- mytable.ibd (mydb.mytable के लिए टेबल डेटा और टेबल इंडेक्स का घर)
ibdata1 में अब कभी भी InnoDB डेटा और इंडेक्स नहीं होंगे।
/Etc/my.cnf में innodb_file_per_table विकल्प के साथ, आप OPTIMIZE TABLE mydb.mytable चला सकते हैं और फ़ाइल /var/lib/mysql/mydb.mytable.ibd वास्तव में सिकुड़ जाएगी।
मैंने अपने करियर में कई बार MySQL DBA के रूप में ऐसा किया है
वास्तव में, पहली बार मैंने ऐसा किया था, मैंने 50 जीबी ibdata1 फ़ाइल को 500MB में ढह दिया।
कोशिश करो। यदि आपके पास इस पर और प्रश्न हैं, तो मुझे ईमेल करें। मुझ पर विश्वास करो। यह छोटी अवधि में और लंबी दौड़ में काम करेगा। !!!
एक विकल्प है जो ibdata1 सिकुड़ते हुए InnoDB तालिका को निकालेगा।
चरण 01) निम्नलिखित पंक्तियों को /etc/my.cnf में जोड़ें
[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G
चरण 02) service mysql restart
चरण 03) mydb.mytable नामक एकल InnoDB तालिका निकालने के लिए, यह करें:
ALTER TABLE mydb.mytable ENGINE=InnoDB;
यह मूल संरचना फ़ाइल रखने के लिए एक फ़ाइल pleus बनाएगा
- /var/lib/mysql/mydb/mytable.frm
- /var/lib/mysql/mydb/mytable.ibd
आप इसे प्रत्येक InnoDB तालिका के लिए कर सकते हैं। दुर्भाग्य से, ibdata1 150GB रहेगा।
ERROR 1071 (42000) at line 25: Specified key was too long; max key length is 1000 bytes
किसी भी विचार मिला ?