Sie können MySQL verwenden, um es zu skripten und auszuführen:
Dadurch wird jede InnoDB-Tabelle in der Datenbank dbnamein MyISAM konvertiert
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}
Dadurch wird jede InnoDB-Tabelle in MyISAM konvertiert
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}
Wenn Sie nicht möchten, dass die Konvertierung der Tabellen in Slaves repliziert wird, geben Sie einfach SET SQL_LOG_BIN=0;die erste Zeile ein. Auf diese Weise können Sie die Konvertierung in einem Master / Slave-Setup testen, indem Sie zuerst den Slave und später den Master konvertieren.
Dadurch wird jede InnoDB-Tabelle in der Datenbank dbnamein MyISAM konvertiert und nicht auf andere Server repliziert
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}
Dadurch wird jede InnoDB-Tabelle in MyISAM konvertiert und nicht auf andere Server repliziert
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}
Wenn man von MyIsam2InnoDB in der realen Welt Sie wahrscheinlich werden wollen SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; irgendwo Bypass der NO_ZERO_DATE seit MySQL 5.7 - Quelle stackoverflow.com/questions/9192027/...
Antony Gibbs
Wenn man von MyIsam2InnoDB in der realen Welt Sie wahrscheinlich werden wollen SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; irgendwo Bypass der NO_ZERO_DATE seit MySQL 5.7 - Quelle stackoverflow.com/questions/9192027/...
Antony Gibbs
0
Für diejenigen, die immer noch dieses Problem haben, können Sie dies folgendermaßen tun. Ich habe diese Antwort auf einer Website gefunden. Das hilft mir sehr:
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
Aktualisieren Sie usernameund db_nameWerte mit Ihren eigenen Werten.
Wenn Sie das Skript ausführen, wird eine Datei unter dem Namen gespeichert: alter.sql
Öffnen Sie die Datei und führen Sie den Inhalt auf Ihrer phpmyadminoder mysqlKommandozeile aus.
Antworten:
Ich kenne keine Möglichkeit, dies in MySQL selbst zu tun, aber ein einfaches Shell-Skript erledigt den Job:
quelle
Sie können MySQL verwenden, um es zu skripten und auszuführen:
Dadurch wird jede InnoDB-Tabelle in der Datenbank
dbname
in MyISAM konvertiertDadurch wird jede InnoDB-Tabelle in MyISAM konvertiert
Wenn Sie nicht möchten, dass die Konvertierung der Tabellen in Slaves repliziert wird, geben Sie einfach
SET SQL_LOG_BIN=0;
die erste Zeile ein. Auf diese Weise können Sie die Konvertierung in einem Master / Slave-Setup testen, indem Sie zuerst den Slave und später den Master konvertieren.Dadurch wird jede InnoDB-Tabelle in der Datenbank
dbname
in MyISAM konvertiert und nicht auf andere Server repliziertDadurch wird jede InnoDB-Tabelle in MyISAM konvertiert und nicht auf andere Server repliziert
Versuche es !!!
quelle
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
irgendwo Bypass der NO_ZERO_DATE seit MySQL 5.7 - Quelle stackoverflow.com/questions/9192027/...SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
irgendwo Bypass der NO_ZERO_DATE seit MySQL 5.7 - Quelle stackoverflow.com/questions/9192027/...Für diejenigen, die immer noch dieses Problem haben, können Sie dies folgendermaßen tun. Ich habe diese Antwort auf einer Website gefunden. Das hilft mir sehr:
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
Aktualisieren Sie
username
unddb_name
Werte mit Ihren eigenen Werten.Wenn Sie das Skript ausführen, wird eine Datei unter dem Namen gespeichert:
alter.sql
Öffnen Sie die Datei und führen Sie den Inhalt auf Ihrerphpmyadmin
odermysql
Kommandozeile aus.Prost!
quelle
Ich bevorzuge Einzeiler für diese Art von Sachen. Dies ist eine einzeilige Version der am häufigsten akzeptierten Antwort.
Dies funktioniert, wenn Sie Ihren MySQL-Benutzernamen und Ihr Passwort eingegeben haben
~/.my.cnf
.quelle