无法创建表'<xxx_db>。#sql-XXX_XX'(错误号:150)
相关内容
还需要帮助吗?
Atlassian社区在这里为您服务。
问社区
问题
atlassian-stash.log升级 Stash 1.2.X到 以下时出现以下内容 Stash 1.3.X:
<span style="color:#172b4d"><span style="color:black"><code class="language-none">2012-10-10 12:42:18,286 ERROR [main] liquibase Change Set liquibase/r1_3/m01.xml::STASHDEV-1651-6::bturner failed. Error: Error executing SQL ALTER TABLE `stash`.`sta_comment` ADD CONSTRAINT `fk_sta_comment_author` FOREIGN KEY (`author_id`) REFERENCES `stash`.`stash_user` (`id`): Can't create table '<STASH_DB>.#sql-XXX_XX' (errno: 150)
liquibase.exception.DatabaseException: Error executing SQL ALTER TABLE `stash`.`sta_comment` ADD CONSTRAINT `fk_sta_comment_author` FOREIGN KEY (`author_id`) REFERENCES `stash`.`stash_user` (`id`): Can't create table '<STASH_DB>.#sql-XXX_XX' (errno: 150)
...
Caused by: java.sql.SQLException: Can't create table '<STASH_DB>.#sql-XXX_XX' (errno: 150)
</code></span></span>
诊断
环境
MySQL作为数据库
诊断步骤
运行以下查询以检查是否 Table设置为 MyISAM:
<span style="color:#172b4d"><span style="color:black"><code class="language-none">SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<STASH_DB>';</code></span></span>
原因
你的一张或多张桌子是 MyISAM。为了正确执行迁移,表必须是InnoDB。
解析度
创建一个转储old database,创建一个 new database(根据我们 的MySQL指南),恢复 dump of the old database到 new database并尝试Bitbucket Server 再次升级 :
在执行以下步骤之前,请记住停止 Bitbucket Server实例。
创造一个 Dump file旧的 Database
<span style="color:#172b4d"><span style="color:black"><code class="language-none">mysqldump -u root -p[root_password] [database_name] > /PATH/TO/dumpfilename.sql</code></span></span>
转储包含存储引擎。以下命令将myISAM替换为innodb
<span style="color:#172b4d"><span style="color:black"><code class="language-none">sed -i.bak 's#MyISAM#InnoDB#g' /PATH/TO/dumpfilename.sql</code></span></span>
创建一个新数据库
<span style="color:#172b4d"><span style="color:black"><code class="language-none">mysql> SET GLOBAL storage_engine = 'InnoDB';
mysql> CREATE DATABASE bitbucket CHARACTER SET utf8 COLLATE utf8_bin;
mysql> GRANT ALL PRIVILEGES ON bitbucket.* TO 'bitbucketuser'@'localhost' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
mysql> QUIT</code></span></span>
恢复 old Database到 new Database
<span style="color:#172b4d"><span style="color:black"><code class="language-none">mysql -u root -p[root_password] [database_name] < /PATH/TO/dumpfilename.sql</code></span></span>
更改 以使用新的。<STASH_HOME>/stash-config.propertiesDatabase
现在upgrade再次尝试 该实例,程序应该没有任何问题