IT技术博客大学习 共学习 共进步

内存表在同步环境注意事项

MySQL支持 2012-12-08 22:58:44 浏览 5,583 次

   在一些场景想利用MySQL的内存表存一些数据来加快数据的操作。但如果在复制环境中这可不是一个好事情。

   主要原因如下:

   1. 内存表在数据库重启或是异常down机的情况下内存表的数据会全部丢失。如果从库重启一下则同步就不能进行了。

   2. 另一方面,在主从环境下,如果从库上同时有大的操作或是排序工作,有借助于临时表的的场景,同时主库上内存表也有较大的写入,从库有可能会就出现报那个内存表is full (1114)这样的错误。

   3. 特别需要注意在使用内存表的场景主库重启会主动发起一次对内存表的truncate table操作

   那如何解决呢:

   1. 从我对数据库的了解上来看推荐用Innodb表去替代memory表, Innodb表如果一个表的数据经常被访问,就会被加载到内存里,数据和索引都在内存,访问速度是比较快的。

   2. 不要复制Innodb表。 利用replication-igore-table=db.tbaname形式声明不同步那个表。 这种情况下如果在statement级别的复制,禁止出现insert into otbname select c1 from tbname这种语句。

   3.把监表单独放到一个实例下,和主要业务数据分开。

建议继续学习

  1. mysql 主从配置中的server-id的作用 (阅读 7,661)
  2. 也谈PostgreSQL的同步配置(Slony) (阅读 5,405)
  3. MySQL5.5数据库复制搭建报错之Could not initialize master info structure (阅读 5,283)
  4. PHP查询MySQL大量数据的内存占用分析 (阅读 4,922)
  5. MTU值的调整导致MySQL复制异常 (阅读 4,662)
  6. MySQL复制的概述、安装、故障、技巧、工具 (阅读 4,263)
  7. mysql主从同步快速设置 (阅读 3,840)
  8. [MySQL优化案例] — slave延迟很大优化方法 (阅读 3,845)
  9. 如何监控主从之间的延时:seconds_behind_master OR mk-heartbeat (阅读 3,823)
  10. 自己动手实现Multi-Master Replication (阅读 3,821)