Spowoduje to konwersję każdej tabeli InnoDB w bazie danych dbnamedo 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}
Spowoduje to konwersję każdej tabeli InnoDB do MyISAM
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}
Jeśli nie chcesz, aby konwersja tabel była replikowana do Slave, po prostu wstaw SET SQL_LOG_BIN=0;jako pierwszy wiersz. W ten sposób możesz przetestować konwersję w konfiguracji Master / Slave, najpierw konwertując tylko Slave, a następnie Master.
Spowoduje to konwersję każdej tabeli InnoDB w bazie danych dbnamedo MyISAM i nie powiela się na innych serwerach
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}
Spowoduje to konwersję każdej tabeli InnoDB do MyISAM i nie powiela się na innych serwerach
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}
Przechodząc z MyIsam2InnoDB w prawdziwym świecie, prawdopodobnie będziesz chciał SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; gdzieś ominąć no_zero_date od mysql 5.7 - Źródło stackoverflow.com/questions/9192027/...
Antony Gibbs
Przechodząc z MyIsam2InnoDB w prawdziwym świecie, prawdopodobnie będziesz chciał SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; gdzieś ominąć no_zero_date od mysql 5.7 - Źródło stackoverflow.com/questions/9192027/...
Antony Gibbs
0
Dla tych, którzy nadal mają ten problem, możesz to zrobić w ten sposób, znalazłem tę odpowiedź na stronie internetowej. To bardzo mi pomaga:
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
Aktualizuj usernamei db_namewartości z własnymi wartościami.
Po uruchomieniu skryptu zapisze plik pod nazwą: alter.sql
Otwórz plik i uruchom zawartość w linii poleceń phpmyadminlub mysql.
Odpowiedzi:
Nie wiem, jak to zrobić w samym mysql, ale wystarczy prosty skrypt powłoki:
źródło
Możesz użyć MySQL do skryptu i wykonania:
Spowoduje to konwersję każdej tabeli InnoDB w bazie danych
dbname
do MyISAMSpowoduje to konwersję każdej tabeli InnoDB do MyISAM
Jeśli nie chcesz, aby konwersja tabel była replikowana do Slave, po prostu wstaw
SET SQL_LOG_BIN=0;
jako pierwszy wiersz. W ten sposób możesz przetestować konwersję w konfiguracji Master / Slave, najpierw konwertując tylko Slave, a następnie Master.Spowoduje to konwersję każdej tabeli InnoDB w bazie danych
dbname
do MyISAM i nie powiela się na innych serwerachSpowoduje to konwersję każdej tabeli InnoDB do MyISAM i nie powiela się na innych serwerach
Spróbuj !!!
źródło
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
gdzieś ominąć no_zero_date od mysql 5.7 - Źródło stackoverflow.com/questions/9192027/...SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
gdzieś ominąć no_zero_date od mysql 5.7 - Źródło stackoverflow.com/questions/9192027/...Dla tych, którzy nadal mają ten problem, możesz to zrobić w ten sposób, znalazłem tę odpowiedź na stronie internetowej. To bardzo mi pomaga:
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
Aktualizuj
username
idb_name
wartości z własnymi wartościami.Po uruchomieniu skryptu zapisze plik pod nazwą:
alter.sql
Otwórz plik i uruchom zawartość w linii poleceńphpmyadmin
lubmysql
.Twoje zdrowie!
źródło
Wolę jedno-linijki do tego typu rzeczy. Jest to jednoliniowa wersja najbardziej akceptowanej odpowiedzi.
Działa to, jeśli masz ustawioną nazwę użytkownika i hasło MySQL
~/.my.cnf
.źródło