Skip to content
redsummernight edited this page May 2, 2020 · 10 revisions

Please refer to the Active Record Migrations guide for working with migrations in general.

Updating schema dumps

We track both types of schema dumps in our repository: Ruby and SQL. Every once in a while, we generate new versions of these dumps by connecting to a production app server and running:

cd ~/app/current
bundle exec rake db:schema:dump    # Ruby dump
bundle exec rake db:structure:dump # SQL dump

The new dumps can be found at:

~/app/current/db/schema.rb
~/app/current/db/structure.sql

We need to manually edit them:

For an example schema dump update, refer to #3677.

Special migrations

We use Percona Toolkit's pt-online-schema-change tool when we need to change a large table without going into maintenance mode. This lets us make changes without blocking writes to the table.

pt-online-schema-change D=$DATABASE,t=$TABLE \
  --alter "ROW_FORMAT=$ROW_FORMAT CHARACTER SET utf8mb4 COLLATE $COLLATE" \
  -uroot --ask-pass --chunk-size=5k --max-flow-ctl 0 --pause-file /tmp/pauseme \
  --max-load Threads_running=15 --critical-load Threads_running=100 \
  --set-vars innodb_lock_wait_timeout=2 --alter-foreign-keys-method=auto \
  --execute
  • Only use --max-flow-ctl 0 if the environment is running Galera.
  • Run the Active Record migration after the pt-online-schema-change command to mark the migration as done.