como desativar a verificação de chave estrangeira?
realtebo 14/06/19
7
Você pode usar o MySQL para criar scripts e executá-lo:
Isso converterá todas as tabelas do InnoDB no banco dbnamede dados em 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}
Isso converterá todas as tabelas do InnoDB para 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}
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.
Isso converterá todas as tabelas do InnoDB no banco dbnamede dados em MyISAM e não replicará para outros servidores
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}
Isso converterá todas as tabelas do InnoDB para MyISAM e não replicará para outros servidores
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}
Indo de MyIsam2InnoDB no mundo real, você provavelmente vai querer 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/...
Antony Gibbs
Indo de MyIsam2InnoDB no mundo real, você provavelmente vai querer 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/...
Antony Gibbs
0
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 usernamee db_namevalores 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 phpmyadminou mysql.
Respostas:
Não tenho conhecimento de nenhuma maneira de fazer isso no próprio mysql, mas um simples shell script fará o trabalho:
fonte
Você pode usar o MySQL para criar scripts e executá-lo:
Isso converterá todas as tabelas do InnoDB no banco
dbname
de dados em MyISAMIsso converterá todas as tabelas do InnoDB para MyISAM
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.Isso converterá todas as tabelas do InnoDB no banco
dbname
de dados em MyISAM e não replicará para outros servidoresIsso converterá todas as tabelas do InnoDB para MyISAM e não replicará para outros servidores
De uma chance !!!
fonte
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
edb_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 comandophpmyadmin
oumysql
.Felicidades!
fonte
Eu prefiro one-liners para esse tipo de coisa. Esta é uma versão única da resposta mais aceita.
Isso funciona se você tiver seu nome de usuário e senha do MySQL definidos
~/.my.cnf
.fonte