我在 mysql 目录中有一堆 MyISAM 文件(MYD、MYI、FRM),在另一个目录中有它们的较新版本。如何在不停止 mysql 服务器的情况下用“新”替换“旧”?
对于我的回答,让我们假设
这是一种诱饵和转换方法
步骤 01) mysql> CREATE DATABASE baitandswitch;
这应该创建文件夹 /var/lib/mysql/baitandswitch
步骤02)将新版本的proddata表放入baitandswitch数据库,如下:
$ cp /root/proddata.frm /var/lib/mysql/baitandswitch/.
$ cp /root/proddata.MYD /var/lib/mysql/baitandswitch/.
$ cp /root/proddata.MYI /var/lib/mysql/baitandswitch/.
Run Code Online (Sandbox Code Playgroud)
警告:不要担心 mysql。它将检测baitandswitch数据库中新表的存在并即时更新 information_schema。
步骤 03) 在proddb数据库和baitandswitch数据库之间执行 proddata 表的交换
mysql> ALTER TABLE proddb.proddata RENAME baitandswitch.proddata_old;
mysql> ALTER TABLE baitandswitch.proddata RENAME proddb.proddata;
Run Code Online (Sandbox Code Playgroud)
我建议您在同一行上运行这两个命令:
mysql> ALTER TABLE proddb.proddata RENAME baitandswitch.proddata_old; ALTER TABLE baitandswitch.proddata RENAME proddb.proddata;
Run Code Online (Sandbox Code Playgroud)
就是这样
玩得开心。
试一试 !!!
警告
步骤 03 使用 SQL 执行交换,因为它会协商何时可以安全地移动表。因此,如果有任何查询针对它运行,SQL 的执行将等待所有查询停止,然后再执行表的移动。
这种方法的另一个好处是旧表在baitandswitch数据库中仍然可用。您可以复制操作系统中的表,对其运行 SQL,或者简单地删除baitandswitch数据库以删除所有需要切换的表。
| 归档时间: |
|
| 查看次数: |
1787 次 |
| 最近记录: |