Respuestas:
Copiar es muy simple para MyISAM y es completamente 100% arriesgado (casi suicida) con InnoDB.
De tu pregunta, mencionaste
cp /db1/mytable.frm /db2/mytable.frm
Esto está bien hacer. Sin embargo, no puede simplemente mover el .frm. Debes mover todos los componentes. De su pregunta, tomemos una tabla llamada db1.mytable. En una instalación normal, la tabla se encuentra en / var / lib / mysql / db1. Habría tres archivos que componen la mesa.
Debe mover los tres archivos para mover una tabla. Si todas sus tablas usan el motor de almacenamiento MyISAM, puede cerrar mysql y copiar. Si simplemente está haciendo una copia de la tabla y colocándola en otra base de datos, debe hacerlo usando SQL.
Por ejemplo, si desea copiar db1.mytable en la base de datos db2, haga esto:
CREATE TABLE db2.mytable LIKE db1.mytable;
ALTER TABLE db2.mytable DISABLE KEYS;
INSERT INTO db2.mytable SELECT * FROM db1.mytable;
ALTER TABLE db2.mytable ENABLE KEYS;
Ahora, si solo mueve la tabla de db1 a db2, puede hacer esto:
ALTER TABLE db1.mytable RENAME db2.mytable;
Copiar es muy peligroso debido a la infraestructura con la que trabaja InnoDB. Hay dos infraestructuras básicas: 1) innodb_file_per_table deshabilitado y 2) innodb_file_per_table habilitado
El talón de Aquiles de InnoDB es el archivo de espacio de tabla del sistema conocido como ibdata1 (normalmente ubicado en / var / lib / mysql). ¿Qué contiene ese archivo ?
Con innodb_file_per_table deshabilitado, todos estos tipos de información de InnoDB viven dentro de ibdata1. La única manifestación de cualquier tabla InnoDB fuera de ibdata1 es el archivo .frm de la tabla InnoDB. Copiar todos los datos de InnoDB a la vez requiere copiar todos / var / lib / mysql.
Copiar una tabla InnoDB individual es totalmente imposible. Debe mysqldump para extraer un volcado de la tabla como una representación lógica de los datos y sus correspondientes definiciones de índice. Luego cargaría ese volcado en otra base de datos en el mismo servidor u otro servidor.
Con innodb_file_per_table habilitado, los datos de la tabla y sus índices viven en la carpeta de la base de datos al lado del archivo .frm. Por ejemplo, para la tabla db1.mytable, la manifestación de esa tabla InnoDB fuera de ibdata1 sería:
Todos los metadatos para db1.mytable todavía residen en ibdata1 y no hay absolutamente nada de eso . Los registros de rehacer y los datos de MVCC también viven con ibdata1.
Si está pensando en copiar el archivo .frm y .ibd, está en línea para un mundo de daños. Copiar el archivo .frm y .ibd de una tabla InnoDB solo es bueno si puede garantizar que el id del espacio de tabla del archivo .ibd coincida exactamente con la entrada de id del espacio de tabla en los metadatos del archivo ibdata1.
Escribí dos publicaciones en DBA StackExchange sobre este concepto de id de espacio de tabla
Aquí hay un excelente enlace sobre cómo volver a adjuntar y el archivo .ibd a ibdata1 en caso de id. De espacio de tabla no coincidentes: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file . Después de leer esto, deberías poder ver por qué dije casi suicida.
Para InnoDB solo necesitas esto
CREATE TABLE db2.mytable LIKE db1.mytable;
INSERT INTO db2.mytable SELECT * FROM db1.mytable;
hacer una copia de una tabla InnoDB. Si lo está migrando a otro servidor de base de datos, use mysqldump.
.frm
, .MYD
y .MYI
.
Copiar todo el datadir de MySQL es una técnica práctica, suponiendo que el servicio de MySQL se detenga y desee copiar todo el servidor de la base de datos.
Esta es una técnica útil para cambiar bases de datos con índices grandes, y un volcado de mysql no incluirá los índices, que deberán regenerarse en el momento de la importación. He encontrado esta técnica útil al configurar esclavos MySQL.
Copiar un archivo individual dependerá del esquema de la tabla en uso, pero en la mayoría de las situaciones no es una solución adecuada.
Utilice xtrabackup w / ow w / o innobackupex wrapper y estará bien en las bases de datos myisam e innodb. Tenga en cuenta que la restauración de las bases de datos innodb no es solo copiar los archivos incluso si usa xtrabackup. Dile si necesitas más información
No, debe hacer una copia de seguridad con mysqdump y restaurar con la utilidad mysql cli, copiando el archivo frm que está copiando solo la estructura de la tabla y no los datos en el interior, y si está en innodb, copiar el archivo directamente no es posible.
La mejor manera es volcar y restaurar la tabla.