Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да свиете/изчистите ibdata1 файл в MySQL

Това ibdata1 не се свива е особено досадна характеристика на MySQL. ibdata1 файлът всъщност не може да се свие, освен ако не изтриете всички бази данни, премахнете файловете и презаредите дъмп.

Но можете да конфигурирате MySQL така, че всяка таблица, включително нейните индекси, да се съхранява като отделен файл. По този начин ibdata1 няма да нарасне толкова голям. Според коментар на Бил Карвин a> това е активирано по подразбиране от версия 5.6.6 на MySQL.

Преди време направих това. Въпреки това, за да настроите сървъра си да използва отделни файлове за всяка таблица, трябва да промените my.cnf за да активирате това:

[mysqld]
innodb_file_per_table=1

https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html

Тъй като искате да възстановите пространството от ibdata1 всъщност трябва да изтриете файла:

  1. Направете mysqldump на всички бази данни, процедури, тригери и т.н. с изключение на mysql и performance_schema бази данни
  2. Изхвърлете всички бази данни с изключение на горните 2 бази данни
  3. Спри mysql
  4. Изтрийте ibdata1 и ib_log файлове
  5. Стартирайте mysql
  6. Възстановяване от дъмп

Когато стартирате MySQL в стъпка 5, ibdata1 и ib_log файловете ще бъдат пресъздадени.

Сега сте готови да тръгнете. Когато създадете нова база данни за анализ, таблиците ще бъдат разположени в отделен ibd* файлове, а не в ibdata1 . Както обикновено изтривате базата данни скоро след това, ibd* файловете ще бъдат изтрити.

http://dev.mysql.com/doc/refman /5.1/en/drop-database.html

Вероятно сте виждали това:
http://bugs.mysql.com /bug.php?id=1341

С помощта на командата ALTER TABLE <tablename> ENGINE=innodb или OPTIMIZE TABLE <tablename> човек може да извлича данни и индексиращи страници от ibdata1 в отделни файлове. Въпреки това, ibdata1 няма да се свие, освен ако не изпълните стъпките по-горе.

Относно information_schema , това не е необходимо, нито е възможно да се откаже. Всъщност това е просто куп изгледи само за четене, а не таблици. И няма файлове, свързани с тях, дори директория на база данни. information_schema използва db-двигателя на паметта и се изтрива и регенерира при спиране/рестартиране на mysqld. Вижте https://dev.mysql.com/doc/ refman/5.7/en/information-schema.html .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mySQL заявка за дължина и ширина за други редове в радиус от x мили

  2. MySQL получава липсващи идентификатори от таблицата

  3. изчислете сумата от типа време с помощта на sql

  4. Използване на индекс, използване на временен, използване на filesort - как да поправя това?

  5. 5 най-добри онлайн курсове за изучаване на MySQL