mysqldump添加在导入过程中失败的TABLESPACE定义

9w11ddsr  于 2023-03-17  发布在  Mysql
关注(0)|答案(2)|浏览(108)

从sqldump导入时,遇到以下错误。
第753行出现错误1812(HY000):InnoDB:找不到名为TABLESPACE_NAME的常规表空间。
使用以下命令导入和导出。
导出:mysqldump -h $DB_HOST -u$DB_USER -p$DB_PASSWORD --complete-insert --routines --triggers --single-transaction "$dbname" > "$dbname".sql
导入:mysql -h $server -u $user -p$password $dbname < $sql;
相同的脚本在对其他数据库服务器转储时创建了没有(TABLESPACE定义)的转储,而AWS(RDS 5.7)中的转储则生成了具有TABLESPACE定义的转储。当前,转储应该从mysql 5.7导出到作为docker容器运行的mysql 5.7。
在转储时应该排除定义还是在导入时排除定义?无论哪种方式,我都需要数据库Maven关于导入这样的数据库的命令选项的帮助。

flseospp

flseospp1#

经过一些研究和测试,这是我的理解。
当数据库是用表空间创建的,mysqldump不包括表空间定义。mysqldump没有忽略表空间引用的选项。因此,在转储后我有两个选择。1.手动编辑转储并删除对表空间的引用。2.在导入转储之前创建表空间。
我有幸导入到一个作为容器运行的服务器中。因此,mysql列出了所有不可用的表空间(在报告了这样的错误后,我可以扔掉mysql容器并启动另一个容器-感觉服务器是新鲜的)。由于我知道所有的表空间,我选择了第二个选项,并认为编辑由工具(mysqldump)创建的转储不是一个好主意。
使用以下语句创建表空间

create tablespace <tablespace-name> add datafile 'tablespace-name.ibd'

这种方法对我很有效。

juud5qan

juud5qan2#

我遇到了同样的问题。我无法在数据库上创建表空间,因为它是共享主机,需要服务器管理员权限才能创建,但我可以使用生成的错误代码在转储文件中找到对表空间的文本引用。每次都是一致的,所以一个简单的查找和删除搜索就可以处理整个文件,然后事务完成,没有错误。

相关问题