The replication process does not care if the source table on the
master and the replicated table on the slave use different engine
types. In fact, the system variables
storage_engine
and
table_type
are not replicated.
This provides a number of advantages in the replication process in
that you can take advantage of different engine types for
different replication scenarios. For example, in a typical
scaleout scenario (see
Section 16.2.3, “Using Replication for Scale-Out”), you want to use
InnoDB
tables on the master to take advantage
of the transactional functionality, but use
MyISAM
on the slaves where transaction support
is not required because the data is only read. When using
replication in a data logging environment you may want to use the
Archive
storage engine on the slave.
Setting up different engines on the master and slave depends on how you set up the initial replication process:
If you used mysqldump to create the database snapshot on your master then you could edit the dump text to change the engine type used on each table.
Another alternative for mysqldump is to
disable engine types that you do not want to use on the slave
before using the dump to build the data on the slave. For
example, you can add the
--skip-innodb
option on your
slave to disable the InnoDB
engine. If a
specific engine does not exist, MySQL will use the default
engine type, usually MyISAM
. If you want to
disable further engines in this way, you may want to consider
building a special binary to be used on the slave that only
supports the engines you want.
If you are using raw data files for the population of the
slave, you will be unable to change the initial table format.
Instead, use ALTER TABLE
to
change the table types after the slave has been started.
For new master/slave replication setups where there are currently no tables on the master, avoid specifying the engine type when creating new tables.
If you are already running a replication solution and want to convert your existing tables to another engine type, follow these steps:
Stop the slave from running replication updates:
mysql> STOP SLAVE;
This will enable you to change engine types without interruptions.
Execute an ALTER TABLE ...
Engine='
for
each table where you want to change the engine type.
enginetype
'
Start the slave replication process again:
mysql> START SLAVE;
Although the storage_engine
and
table_type
variables are not
replicated, be aware that CREATE
TABLE
and ALTER TABLE
statements that include the engine specification will be correctly
replicated to the slave. For example, if you have a CSV table and
you execute:
mysql> ALTER TABLE csvtable Engine='MyISAM';
The above statement will be replicated to the slave and the engine
type on the slave will be converted to MyISAM
,
even if you have previously changed the table type on the slave to
an engine other than CSV. If you want to retain engine differences
on the master and slave, you should be careful to use the
storage_engine
variable on the
master when creating a new table. For example, instead of:
mysql> CREATE TABLE tablea (columna int) Engine=MyISAM;
Use this format:
mysql> SET storage_engine=MyISAM; mysql> CREATE TABLE tablea (columna int);
When replicated, the
storage_engine
variable will be
ignored, and the CREATE TABLE
statement will be executed with the slave's default engine type.
User Comments
Add your own comment.