Upgrade to 9.3.0 - Issue in DB-Migration: collation mix between utf8_unicode_ci and utf8_unicode_ci
Dear all,
I updated the gitlab instance to 9.3.0 and had the following issue.
Looks like the name
column of the ci_stages
table uses utf8_unicode_ci and the stage_id
column of the ci_builds
table uses utf8_general_ci
I could fix it by changing collation of ci_stages.name to utf8_general_gi - which only works as there is normal ascii text content. Maybe you can have a look if others have this too or where this table declaration comes from.
Recipe: gitlab::database_migrations
* bash[migrate gitlab-rails database] action run
[execute] rake aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql2::Error: Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=': UPDATE `ci_builds` SET `stage_id` = (SELECT id FROM ci_stages
WHERE ci_stages.pipeline_id = ci_builds.commit_id
AND ci_stages.name = ci_builds.stage)
WHERE `ci_builds`.`id` >= 1 AND `ci_builds`.`id` < 1022 AND `ci_builds`.`stage_id` IS NULL/opt/gitlab/embedded/service/gitlab-rails/config/initializers/connection_fix.rb:20:in `execute'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:231:in `block in update_column_in_batches'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:208:in `loop'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:208:in `update_column_in_batches'
/opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20170526190000_migrate_build_stage_reference_again.rb:17:in `up'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:50:in `block (3 levels) in <main>'
/opt/gitlab/embedded/bin/bundle:22:in `load'
/opt/gitlab/embedded/bin/bundle:22:in `<main>'
ActiveRecord::StatementInvalid: Mysql2::Error: Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=': UPDATE `ci_builds` SET `stage_id` = (SELECT id FROM ci_stages
WHERE ci_stages.pipeline_id = ci_builds.commit_id
AND ci_stages.name = ci_builds.stage)
WHERE `ci_builds`.`id` >= 1 AND `ci_builds`.`id` < 1022 AND `ci_builds`.`stage_id` IS NULL
/opt/gitlab/embedded/service/gitlab-rails/config/initializers/connection_fix.rb:20:in `execute'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:231:in `block in update_column_in_batches'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:208:in `loop'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:208:in `update_column_in_batches'
/opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20170526190000_migrate_build_stage_reference_again.rb:17:in `up'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:50:in `block (3 levels) in <main>'
/opt/gitlab/embedded/bin/bundle:22:in `load'
/opt/gitlab/embedded/bin/bundle:22:in `<main>'
Mysql2::Error: Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='
/opt/gitlab/embedded/service/gitlab-rails/config/initializers/connection_fix.rb:20:in `execute'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:231:in `block in update_column_in_batches'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:208:in `loop'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/migration_helpers.rb:208:in `update_column_in_batches'
/opt/gitlab/embedded/service/gitlab-rails/db/post_migrate/20170526190000_migrate_build_stage_reference_again.rb:17:in `up'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:50:in `block (3 levels) in <main>'
/opt/gitlab/embedded/bin/bundle:22:in `load'
/opt/gitlab/embedded/bin/bundle:22:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
== 20170526190000 MigrateBuildStageReferenceAgain: migrating ==================
-- exec_query("SELECT COUNT(*) AS count FROM `ci_builds` WHERE `ci_builds`.`stage_id` IS NULL")
-> 0.0011s
-- exec_query("SELECT `ci_builds`.`id` FROM `ci_builds` WHERE `ci_builds`.`stage_id` IS NULL ORDER BY `ci_builds`.`id` ASC LIMIT 1")
-> 0.0008s
-- exec_query("SELECT `ci_builds`.`id` FROM `ci_builds` WHERE `ci_builds`.`id` >= 1 AND `ci_builds`.`stage_id` IS NULL ORDER BY `ci_builds`.`id` ASC LIMIT 1 OFFSET 1013")
-> 0.0008s
-- execute("UPDATE `ci_builds` SET `stage_id` = (SELECT id FROM ci_stages\n WHERE ci_stages.pipeline_id = ci_builds.commit_id\n AND ci_stages.name = ci_builds.stage)\n WHERE `ci_builds`.`id` >= 1 AND `ci_builds`.`id` < 1022 AND `ci_builds`.`stage_id` IS NULL")
================================================================================
Error executing action `run` on resource 'bash[migrate gitlab-rails database]'
================================================================================