Anteriormente, eu uso isso:
USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;
Estou procurando uma maneira mais simples de converter todas as tabelas em um banco de dados, em vez de escrever cada nome de tabela, um por um
Anteriormente, eu uso isso:
USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;
Estou procurando uma maneira mais simples de converter todas as tabelas em um banco de dados, em vez de escrever cada nome de tabela, um por um
Respostas:
Não tenho conhecimento de nenhuma maneira de fazer isso no próprio mysql, mas um simples shell script fará o trabalho:
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
Você pode usar o MySQL para criar scripts e executá-lo:
dbname
de dados em 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}
Se você não deseja que a conversão das tabelas seja replicada para Slaves, basta colocar SET SQL_LOG_BIN=0;
como a primeira linha. Dessa forma, você pode testar a conversão em uma configuração Mestre / Escravo convertendo apenas o Escravo primeiro e depois o Mestre depois.
dbname
de dados em MyISAM e não replicará para outros servidoresCONVERT_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}
De uma chance !!!
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
algo para ignorar o no_zero_date desde o MySQL 5.7 - Fonte stackoverflow.com/questions/9192027/...
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
algo para ignorar o no_zero_date desde o MySQL 5.7 - Fonte stackoverflow.com/questions/9192027/...
Para quem ainda tem esse problema, pode seguir esse caminho, encontrei essa resposta em um site. Isso ajuda-me muito:
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
Atualização username
e db_name
valores com seus próprios valores.
Após a execução do script, ele salvará um arquivo com o nome: alter.sql
Abra o arquivo e execute o conteúdo na sua linha de comando phpmyadmin
ou mysql
.
Felicidades!