In cases where you need to transfer databases between different architectures, you can use mysqldump to create a file containing SQL statements. You can then transfer the file to the other machine and feed it as input to the mysql client.
Use mysqldump --help to see what options are available.
If GTIDs are in use on the server where you create the dump (gtid_mode=ON
), by default, mysqldump includes the contents of the gtid_executed
set in the dump to transfer these to the new machine. The results of this can vary depending on the MySQL Server versions involved. Check the description for mysqldump's --set-gtid-purged
option to find what happens with the versions you are using, and how to change the behavior if the outcome of the default behavior is not suitable for your situation.
The easiest (although not the fastest) way to move a database between two machines is to run the following commands on the machine on which the database is located:
mysqladmin -h 'other_hostname
' createdb_name
mysqldumpdb_name
| mysql -h 'other_hostname
'db_name
If you want to copy a database from a remote machine over a slow network, you can use these commands:
mysqladmin createdb_name
mysqldump -h 'other_hostname
' --compressdb_name
| mysqldb_name
You can also store the dump in a file, transfer the file to the target machine, and then load the file into the database there. For example, you can dump a database to a compressed file on the source machine like this:
mysqldump --quickdb_name
| gzip >db_name
.gz
Transfer the file containing the database contents to the target machine and run these commands there:
mysqladmin createdb_name
gunzip <db_name
.gz | mysqldb_name
You can also use mysqldump and mysqlimport to transfer the database. For large tables, this is much faster than simply using mysqldump. In the following commands, DUMPDIR
represents the full path name of the directory you use to store the output from mysqldump.
First, create the directory for the output files and dump the database:
mkdirDUMPDIR
mysqldump --tab=DUMPDIR
db_name
Then transfer the files in the DUMPDIR
directory to some corresponding directory on the target machine and load the files into MySQL there:
mysqladmin createdb_name
# create database catDUMPDIR
/*.sql | mysqldb_name
# create tables in database mysqlimportdb_name
DUMPDIR
/*.txt # load data into tables
Do not forget to copy the mysql
database because that is where the grant tables are stored. You might have to run commands as the MySQL root
user on the new machine until you have the mysql
database in place.
After you import the mysql
database on the new machine, execute mysqladmin flush-privileges so that the server reloads the grant table information.