如何在rails 5上迁移时避开表锁定



我想使用这样的短语来迁移和更改表。

execute "ALTER TABLE `#{table}` CHANGE `#{column.name}` `#{column.name}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

但在更改数据库时,表将被锁定。如何在没有停机时间的情况下迁移。

rails5支持这种变通工作?(轨道6似乎支持advisory lock(

我使用的是mysql5.7

https://blog.saeloun.com/2019/09/09/rails-6-disable-advisory-locks.html#:~:text=Rails%20使用%20an%20咨询%20锁定,服务器%20by%20使用共享%20连接

您可以告诉MySQL在执行此操作时不要锁定表,还可以使用INPLACE算法。

class YourMigration < ActiveRecord::Migration[7.0]
def up
execute <<-SQL.squish
ALTER TABLE your_table
CHANGE column_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
ALGORITHM=INPLACE, LOCK=NONE;
SQL
end
def down
execute <<-SQL.squish
ALTER TABLE your_table
CHANGE column_name CHARACTER SET utf8mb4_unicode_ci COLLATE utf8mb4,
ALGORITHM=INPLACE, LOCK=NONE;
SQL
end
end

相关内容

  • 没有找到相关文章

最新更新