mit*_*ous 5 mysql sql character-encoding
在我的生产数据库中,使用"latin"的默认CharSet创建警报相关表,因此我们在尝试在表中插入日语字符时会收到错误.我们需要将表和列的默认字符集更改为UTF8.由于这些表具有巨大的数据,因此Alter命令可能需要花费很长时间(在我的本地数据库中花费5小时的数据量相同)并锁定会导致数据丢失的表.我们是否可以计划一种机制来将Charset更改为UTF8,而不会丢失数据.
哪个是更改大型数据表的字符集的更好方法?
我在mysql手册http://dev.mysql.com/doc/refman/5.1/en/alter-table.html上找到了这个:
在大多数情况下,ALTER TABLE会生成原始表的临时副本.MySQL等待修改表的其他操作,然后继续.它将更改合并到副本中,删除原始表,并重命名新表.在执行ALTER TABLE时,原始表可由其他会话读取.对ALTER TABLE操作开始后开始的表的更新和写入将停止,直到新表准备就绪,然后自动重定向到新表而没有任何失败的更新
所以是的 - 在这样做的同时最大限度地减少停机时间是很棘手的.这取决于您的表的使用情况,是否有更多的读/写?
我能想到的一种方法是使用某种复制.因此,创建一个使用UTF-8的新Alert表,并找到一种方法将原始表复制到新表而不影响可用性/吞吐量.复制完成后(或足够接近),通过重命名切换表?
当然,这说起来容易做起来 - 如果可能的话还需要更多的学习.
小智 5
您可以查看Percona Toolkit :: online-chema-change工具:
pt-online-schema-change
它确实这样做 - "改变表的结构而不阻塞读取或写入" - 有一些限制(仅限InnoDB表等)和风险.
| 归档时间: |
|
| 查看次数: |
2120 次 |
| 最近记录: |