This section describes techniques for moving or copying some or all
InnoDB tables to a different server. For example,
you might move an entire MySQL instance to a larger, faster server;
you might clone an entire MySQL instance to a new replication slave
server; you might copy individual tables to another server to
develop and test an application, or to a data warehouse server to
Techniques for moving or copying
InnoDB always stores database and
table names internally in lowercase. To move databases in a binary
format from Unix to Windows or from Windows to Unix, create all
databases and tables using lowercase names. A convenient way to
accomplish this is to add the following line to the
[mysqld] section of your
before creating any databases or tables:
Introduced in MySQL 5.6.6, the transportable tablespaces feature
FLUSH TABLES ... FOR
EXPORT to ready
InnoDB tables for
copying from one server instance to another. To use this feature,
InnoDB tables must be created with
innodb_file_per_table set to
ON so that each
has its own tablespace. For usage information, see
Section 14.4.6, “Copying File-Per-Table Tablespaces to Another Server”.
The MySQL Enterprise Backup product lets you back up a running MySQL
MyISAM tables, with minimal disruption to
operations while producing a consistent snapshot of the database.
When MySQL Enterprise Backup is copying
tables, reads and writes to both
MyISAM tables can continue. During the copying of
MyISAM and other non-InnoDB tables, reads (but
not writes) to those tables are permitted. In addition, MySQL
Enterprise Backup can create compressed backup files, and back up
InnoDB tables. In conjunction with the
MySQL binary log, you can perform point-in-time recovery. MySQL
Enterprise Backup is included as part of the MySQL Enterprise
For more details about MySQL Enterprise Backup, see Section 24.2, “MySQL Enterprise Backup Overview”.
You can move an
InnoDB database simply by copying
all the relevant files listed under "Cold Backups" in
Section 14.15, “InnoDB Backup and Recovery”.
MyISAM data files,
data and log files are binary-compatible on all platforms having the
same floating-point number format. If the floating-point formats
differ but you have not used
DOUBLE data types in your tables,
then the procedure is the same: simply copy the relevant files.
When you move or copy file-per-table
.ibd files, the database
directory name must be the same on the source and destination
systems. The table definition stored in the
InnoDB shared tablespace includes the database
name. The transaction IDs and log sequence numbers stored in the
tablespace files also differ between databases.
To move an
.ibd file and the associated table
from one database to another, use a
If you have a “clean” backup of an
.ibd file, you can restore it to the MySQL
installation from which it originated as follows:
The table must not have been dropped or truncated since you
.ibd file, because doing so
changes the table ID stored inside the tablespace.
ALTER TABLE statement
to delete the current
Copy the backup
.ibd file to the proper
ALTER TABLE statement
InnoDB to use the new
.ibd file for the table:
... IMPORT TABLESPACE feature does not enforce
foreign key constraints on imported data.
In this context, a “clean”
file backup is one for which the following requirements are
There are no uncommitted modifications by transactions in the
There are no unmerged insert buffer entries in the
Purge has removed all delete-marked index records from the
mysqld has flushed all modified pages of the
.ibd file from the buffer pool to the file.
You can make a clean backup
.ibd file using the
Another method for making a clean copy of an
.ibd file is to use the MySQL Enterprise Backup
Use MySQL Enterprise Backup to back up the
Start a second mysqld server on the backup
and let it clean up the
.ibd files in the
You can use mysqldump to dump your tables on one machine and then import the dump files on the other machine. Using this method, it does not matter whether the formats differ or if your tables contain floating-point data.
One way to increase the performance of this method is to switch off autocommit mode when importing data, assuming that the tablespace has enough space for the big rollback segment that the import transactions generate. Do the commit only after importing a whole table or a segment of a table.