sql >> Database teknologi >  >> RDS >> Mysql

Sådan formindskes/renses ibdata1-fil i MySQL

Den ibdata1 krymper ikke er et særligt irriterende træk ved MySQL. ibdata1 fil kan faktisk ikke krympes, medmindre du sletter alle databaser, fjerner filerne og genindlæser et dump.

Men du kan konfigurere MySQL, så hver tabel, inklusive dens indekser, gemmes som en separat fil. På den måde ibdata1 vil ikke vokse sig så stor. Ifølge Bill Karwins kommentar dette er aktiveret som standard fra version 5.6.6 af MySQL.

Det er et stykke tid siden, jeg gjorde dette. Men for at konfigurere din server til at bruge separate filer for hver tabel, skal du ændre my.cnf for at aktivere dette:

[mysqld]
innodb_file_per_table=1

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

Som du vil genvinde pladsen fra ibdata1 du skal faktisk slette filen:

  1. Foretag en mysqldump af alle databaser, procedurer, triggere osv. undtagen mysql og performance_schema databaser
  2. Slet alle databaser undtagen de 2 ovenstående databaser
  3. Stop mysql
  4. Slet ibdata1 og ib_log filer
  5. Start mysql
  6. Gendan fra dump

Når du starter MySQL i trin 5, vises ibdata1 og ib_log filer vil blive genskabt.

Nu er du klar til at gå. Når du opretter en ny database til analyse, vil tabellerne blive placeret i separat ibd* filer, ikke i ibdata1 . Som du normalt dropper databasen kort efter, vil ibd* filer vil blive slettet.

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

Du har sikkert set dette:
http://bugs.mysql.com /bug.php?id=1341

Ved at bruge kommandoen ALTER TABLE ENGINE=innodb eller OPTIMER TABEL man kan udtrække data og indeksere sider fra ibdata1 til separate filer. Ibdata1 vil dog ikke krympe, medmindre du udfører ovenstående trin.

Angående informationsskemaet , det er ikke nødvendigt eller muligt at droppe. Det er faktisk bare en masse skrivebeskyttede visninger, ikke tabeller. Og der er ingen filer forbundet med dem, ikke engang en databasemappe. informationsskemaet bruger hukommelsen db-motoren og droppes og regenereres ved stop/genstart af mysqld. Se https://dev.mysql.com/doc/ refman/5.7/da/information-schema.html .



  1. Hvad er STATISTICS IO i SQL Server?

  2. Hvorfor respekterer PL/SQL ikke privilegier givet af roller?

  3. SELECT-forespørgsel med CASE-betingelse og SUM()

  4. Den parameteriserede forespørgsel forventer den parameter, der ikke blev leveret