我正在尝试在另一个大陆设置从属 MySQL 服务器。新服务器上没有足够的空间来容纳主服务器包含的整个数据库。因此,我尝试在没有三个最大数据库的情况下启动此服务器。一旦服务器开始工作,我打算删除这三个数据库。
该数据库大量使用InnoDB,因此innodb-file-per-table option
它不是单个ibdata1
表空间文件。
我尝试复制数据目录,但不包括三个超大数据库的目录。但这个方法没有奏效,因为它无法加载未复制的数据库中的表的 innodb 表空间。
然后我复制了其余的文件,但使用 dd 只复制了.ibd
这三个目录中每个文件的前 100MB,而不是许多主服务器上的文件包含的 GB 数。使用 innodb 恢复选项,我可以开始MySQL,但是我无法在此时删除表或数据库。
在没有三个大型数据库的情况下,如何才能成功启动这个从属数据库,以便可以在剩余表的子集上进行复制?
答案1
用于mysqldump
导出数据库,然后用于mysql
恢复远程服务器上的转储。mysqldump
转储单个数据库,因此您可以自由选择要转储的数据库。
在不知道文件的具体内部实现的情况下试图破解实际的数据库文件并不是一个好主意。
答案2
如果空间是一个重要问题,也许 NFS 可以避免这个问题。
结合部分备份(需要innodb-file-per-table
启用,您已经启用了),您可以将这些大型 InnoDB 数据库复制到另一个从属服务器中。
答案3
使用mysqldump -u root -p --all-databases > alldb.sql
转储所有数据库,然后将alldb.sql
文件复制到远程服务器。再次通过命令恢复数据库mysql -u root -p < alldb.sql
。