Wcześniej używam tego:
USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;
Szukam prostszego sposobu na konwersję wszystkich tabel w bazie danych, zamiast pisać każdą nazwę tabeli jedna po drugiej
Wcześniej używam tego:
USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;
Szukam prostszego sposobu na konwersję wszystkich tabel w bazie danych, zamiast pisać każdą nazwę tabeli jedna po drugiej
Odpowiedzi:
Nie wiem, jak to zrobić w samym mysql, ale wystarczy prosty skrypt powłoki:
TABLES=$(mysql -pXXXXXXX -uXXXXXXX --skip-column-names -B -D $DB -e 'show tables')
for T in $TABLES
do
mysql -pXXXXX -uXXXXX -D $DB -e "ALTER TABLE $T ENGINE=MYISAM"
done
Możesz użyć MySQL do skryptu i wykonania:
dbname
do MyISAMCONVERT_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}
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.
dbname
do MyISAM i nie powiela się na innych serwerachCONVERT_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}
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}
Spróbuj !!!
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
i db_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
lub mysql
.
Twoje zdrowie!