Anteriormente, uso esto:
USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;
Estoy buscando una forma más sencilla de convertir todas las tablas en una base de datos, en lugar de escribir cada nombre de tabla uno por uno
Anteriormente, uso esto:
USE dbname;
ALTER TABLE tablename ENGINE=MYISAM;
Estoy buscando una forma más sencilla de convertir todas las tablas en una base de datos, en lugar de escribir cada nombre de tabla uno por uno
Respuestas:
No conozco ninguna manera de hacer esto en mysql, pero un simple script de shell hará el trabajo:
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
Puede usar MySQL para escribirlo y ejecutarlo:
dbname
de datos a 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}
Si no desea que la conversión de las tablas se replique en esclavos, simplemente ponga SET SQL_LOG_BIN=0;
como primera línea. De esa manera, puede probar la conversión en una configuración Maestro / Esclavo convirtiendo solo el Esclavo primero y luego el Maestro después.
dbname
de datos a MyISAM y no se replicará a otros 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}
Darle una oportunidad !!!
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
lugar para evitar el no_zero_date desde mysql 5.7 - Fuente stackoverflow.com/questions/9192027/…
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
lugar para evitar el no_zero_date desde mysql 5.7 - Fuente stackoverflow.com/questions/9192027/…
Para aquellos que todavía tienen este problema, pueden seguir esta forma de hacerlo, encontré esta respuesta en un sitio web. Me ayuda mucho:
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
Actualización username
y db_name
valores con sus propios valores.
Afet ejecutar el script, se guardará un archivo con el nombre: alter.sql
Abrir el archivo y ejecutar el contenido de su phpmyadmin
o de mysql
línea de comandos.
¡Salud!
Prefiero frases para este tipo de cosas. Esta es una versión de una sola línea de la respuesta más aceptada.
Esto funciona si tiene configurado su nombre de usuario y contraseña de MySQL ~/.my.cnf
.
D=your_db; for t in $(mysql $D -B -e 'SHOW TABLES'); do mysql $D -e "ALTER TABLE $t ENGINE=MyISAM"; done