我正在使用mysqldump作为一个大型的数据库(几GB),并从pipe道导入结果,请参阅下面的命令,是否增量pipe道,或等到第一个完成后导入? 这是一个跨服务器导入大型数据库的好方法吗? 我知道你可以导出gz,然后pscp然后导入。 快速的select是值得欢迎
mysqldump -u root -ppass -q mydatabase | mysql -u root -ppass --host=xxx.xx.xxx.xx --port=3306 -C mydatabase
它“增量”*。 具体来说,第二个进程一看到它就会执行一个mysql语句,第一个进程在每次遇到换行符时都会发送一个mysql语句。
*取决于你如何定义增量。
mysqldump输出删除表(如果存在)的SQL命令,创build它们,然后一次填充表中的一行。 每一个语句一读完就执行。 这包括在每个语句之后适当地更新索引,并进行任何你已经设置的日志logging。 这是非常强大和便携的,因此备份的精彩,但它是一个低效的传输机制,你可以想出。
如果您正在处理整套数据库,则可以通过简单地复制数据库文件(通常位于/var/lib/mysql )来简化此过程。 更stream行的存储引擎的二进制格式是可移植的跨体系结构,使文件复制相对健壮。 但是,确保在复制时采取措施防止数据发生更改,通过locking表或通过简单地closuresMySQL直到复制(或归档)过程完成。
请注意,MyISAM将其所有文件存储在模式的子目录中,因此/var/lib/mysql/mydb/将包含称为mydb的模式(“数据库”)所需的所有内容。 只需将该子目录复制到其他服务器,即可完成。 然而,默认情况下,InnoDB表将其数据存储在/var/lib/mysql/ibdata*和/var/lib/mysql/ib_logfile* ,在服务器上的所有其他各种InnoDB表之间共享这些文件。 所以,如果你使用的是InnoDB, mysqldump是唯一真正安全的select,除非你正在转移一切 。
要通过ssh将数据库快速复制到远程主机,您可以使用:
mysqldump | gzip | ssh remotehost sh -c 'gunzip | mysql'
在命令行上直接指定密码通常也是不好的做法。
如果你想导入一个压缩的数据库,你可以使用这个命令。
zcat mydatabase.sql.gz | mysql -u root -ppass --host=xxx.xx.xxx.xx --port=3306 -C mydatabase