Skip to content
Snippets Groups Projects
Commit 4bf20d67 authored by Rémy Coutable's avatar Rémy Coutable
Browse files

Merge branch 'mysql_drop_all_tables' into 'master'

Disable MySQL foreign key checks before dropping all tables

Fixes #20237. Disables MySQL foreign key checks before dropping all tables in a restore. MySQL doesn't honor `CASCADE` without a special flag when the database/tables are created. In order to drop the tables we need to disable foreign key checks. After the drop, re-enable the key checks. 

WIP: Pending confirmation from customer that this fix works. 

See merge request !5472
parents 68162ba9 cfd103db
No related branches found
No related tags found
No related merge requests found
Loading
@@ -16,6 +16,7 @@ v 8.11.0 (unreleased)
Loading
@@ -16,6 +16,7 @@ v 8.11.0 (unreleased)
v 8.10.2 (unreleased) v 8.10.2 (unreleased)
- User can now search branches by name. !5144 - User can now search branches by name. !5144
- Fix backup restore. !5459 - Fix backup restore. !5459
- Disable MySQL foreign key checks before dropping all tables. !5472
- Use project ID in repository cache to prevent stale data from persisting across projects. !5460 - Use project ID in repository cache to prevent stale data from persisting across projects. !5460
   
v 8.10.1 v 8.10.1
Loading
Loading
Loading
@@ -25,6 +25,10 @@ namespace :gitlab do
Loading
@@ -25,6 +25,10 @@ namespace :gitlab do
desc 'Drop all tables' desc 'Drop all tables'
task :drop_tables => :environment do task :drop_tables => :environment do
connection = ActiveRecord::Base.connection connection = ActiveRecord::Base.connection
# If MySQL, turn off foreign key checks
connection.execute('SET FOREIGN_KEY_CHECKS=0') if Gitlab::Database.mysql?
tables = connection.tables tables = connection.tables
tables.delete 'schema_migrations' tables.delete 'schema_migrations'
# Truncate schema_migrations to ensure migrations re-run # Truncate schema_migrations to ensure migrations re-run
Loading
@@ -35,6 +39,9 @@ namespace :gitlab do
Loading
@@ -35,6 +39,9 @@ namespace :gitlab do
# MySQL: http://dev.mysql.com/doc/refman/5.7/en/drop-table.html # MySQL: http://dev.mysql.com/doc/refman/5.7/en/drop-table.html
# Add `IF EXISTS` because cascade could have already deleted a table. # Add `IF EXISTS` because cascade could have already deleted a table.
tables.each { |t| connection.execute("DROP TABLE IF EXISTS #{connection.quote_table_name(t)} CASCADE") } tables.each { |t| connection.execute("DROP TABLE IF EXISTS #{connection.quote_table_name(t)} CASCADE") }
# If MySQL, re-enable foreign key checks
connection.execute('SET FOREIGN_KEY_CHECKS=1') if Gitlab::Database.mysql?
end end
   
desc 'Configures the database by running migrate, or by loading the schema and seeding if needed' desc 'Configures the database by running migrate, or by loading the schema and seeding if needed'
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment