前几天我遇到了一个棘手的 MySQL 问题。我使用 PHPMyAdmin 界面向表“Promotions”(13 个现有列,约 750 条记录)添加了两个新列。此查询(“ALTER TABLE.....”)从未完全执行并锁定了表,因此对“Promotions”的每个后续查询都会挂起并排队。我花了大约一个小时才意识到发生了这种情况,我通过重新启动数据库解决了这个问题。
是否需要采取标准预防措施,以及更改数据库架构时会出现哪些已知问题?我以前从未见过这种锁定。
答案1
考虑以下场景,以便更顺利地更改 mysql 表,特别是在生产环境中:
1. CREATE tmp_table LIKE original_table
2. ALTER tmp_table..
3. INSERT INTO tmp_table SELECT * FROM original_table
4. RENAME original_table to orginal_table_old
5. RENAME tmp_table to original_table
6. DROP original_table_old
编辑: 还有其他解决方案可以解决这个问题,例如pt-在线-架构更改Percona 的工具。