Tenemos una base de datos razonablemente pequeña que queríamos convertir de MyISAM a InnoDB. Al ser novatos de la base de datos, acabamos de convertir (usando la tabla alter) sin siquiera quitar el sitio.
Ahora que se ha realizado la conversión, parece que faltan muchas filas intermitentes. ¿Es esto posiblemente debido a las operaciones durante la conversión? ¿O es el problema en otro lugar?
Respuestas:
Realizar un ALTER para cambiar los motores de almacenamiento no hará que las filas desaparezcan. Sin embargo, déjame ofrecerte algunos consejos, ya que dijiste que eres 'novatos de la base de datos' en tu pregunta.
Al modificar el esquema existente o hacer cualquier cosa que pueda afectar los datos, aquí hay algunos consejos básicos:
Probablemente hay mucho más que podría entrar, pero lo anterior le proporcionará opciones cuando algo va mal.
En cuanto a sus datos / filas desaparecidos, no hay manera de saber w / OA "antes / después" instantánea para comparar. Puede comparar con su último respaldo para al menos verificar eso.
fuente
Una de las mejores formas de convertir MyISAM a InnoDB sin mucho tiempo de inactividad tiene solo un requisito previo: usar un esclavo de replicación.
Aquí hay una vista panorámica del plan
¿Suena simple? Hay muchos detalles detrás de esto.
Crear configuración de replicación maestro / esclavo
Hay un camino resbaladizo para crear un esclavo sin mucha perturbación del Maestro. Escribí dos publicaciones:
En lugar de detalle cómo utilizar rsync, por favor leer esos dos puestos.
Convertir cada tabla MyISAM en el esclavo a InnoDB
En DB Slave, puede hacer la siguiente instrucción SQL:
Para MySQL 5.5:
Versión para MySQL anterior a MySQL 5.5
Usando el resultado de la consulta, tiene un script de conversión para el esclavo.
Debe colocar estas dos líneas en la parte superior del script:
El script primero deshabilitará el registro binario (si configuró el esclavo para tener registros binarios), detendrá la replicación y convertirá cada tabla MyISAM a InnoDB.
Aquí se explica cómo crear ese script y ejecutarlo:
Apunte su aplicación al esclavo
Realizar consultas SELECT desde el esclavo. Si está satisfecho con el contenido de datos en el Esclavo, no dude en señalar su aplicación al esclavo de la siguiente manera:
SHOW SLAVE STATUS\G
y asegúrate de que Seconds_Behind_Master sea 0service mysql stop
(comienza el tiempo de inactividad)Si llegaste a este punto ileso, ¡FELICIDADES!
BONIFICACIÓN AGREGADA : Si configura la replicación maestra / maestra (también conocida como replicación circular) en lugar de maestra / esclava, puede hacer esto en su lugar:
SHOW SLAVE STATUS\G
y asegúrate de que Seconds_Behind_Master sea 0STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='';
Lo que ahora tienes es Maestro / Esclavo en reversa. El nuevo maestro tiene datos de InnoDB y el viejo maestro ahora es un esclavo con datos de MyISAM. Si divide lecturas y escrituras, las lecturas pueden ir desde el esclavo (las lecturas son más rápidas desde MyISAM que InnoDB) y las escrituras van al maestro (soporte transaccional para InnoDB). Como canta Hannah Montana, obtienes lo mejor de ambos mundos (¡¡Sí, tengo dos hijas que aman el espectáculo) !!!
OTRA BONIFICACIÓN ADICIONAL : Debido a que el Maestro ahora es InnoDB, puede hacer mysqldump desde el Maestro sin tiempo de inactividad y sin interferir con las transacciones. El único inconveniente es aumentar la CPU y la E / S de disco. Por lo tanto, podría utilizar un mysqldump de estructuras de tabla solo en el Maestro (InnoDB) y un mysqldump de los datos solo en el esclavo (Tal volcado no tendrá referencias a InnoDB o MyISAM. Solo serán datos) más un mysqldump del estructuras de tabla para que el esclavo tenga el diseño MyISAM.
Las posibilidades pueden continuar debido a esta nueva configuración ...
ACTUALIZACIÓN 2011-08-27 19:50 EDT
Mis disculpas. No leí completamente la pregunta. Ya realizó la conversación .
Solo si ya tenía activado el registro binario y tiene una copia de seguridad anterior, podría
service mysql stop
service mysql start --datadir=/var/lib/mysql2
Esto debería capturar todo lo que se grabó y la conversión debería iniciarse. Nuevamente, todo esto es continuo en que ya tenía activado el registro binario antes de la última copia de seguridad . De lo contrario, mis condolencias.
fuente