一、引言

昨天下午老大让我查资料看一下mysql的内存表在主从备份中是否能被复制,我还没听说过内存表呢,于是上网查资料,记录一下,以便查阅、学习

二、进展

参考:

http://www.cnblogs.com/sunss/p/3191137.html

内存表:
复制代码
session
$ mysql -uroot
root@(none) ::>use test
Database changed
root@test ::>CREATE TABLE tmp_memory (i INT) ENGINE = MEMORY;
Query OK, rows affected (0.00 sec)
root@test ::>insert into tmp_memory values ();
Query OK, row affected (0.00 sec)
root@test ::> session2
$ mysql -uroot test
root@test ::>CREATE TABLE tmp_memory (i INT) ENGINE = MEMORY;
ERROR (42S01): Table 'tmp_memory' already exists
root@test ::>select * from tmp_memory;
+------+
| i |
+------+
| |
+------+
row in set (0.00 sec)
复制代码
. 多个session,创建表的名字不能一样 . 一个session创建会话后,对其他session也是可见的
. data目录下只有tmp_memory.frm ,表结构放在磁盘上,数据放在内存中
. mysql 重启或者关闭后内存表里的数据会丢失,但是表结构仍然存在
. 可以创建索引,删除索引,支持唯一索引
. 不影响主备,主库上插入的数据,备库也可以查到
. show tables 看得到表

http://www.cnblogs.com/sunss/archive/2011/03/16/1986050.html

  “内存表”顾名思义创建在内存中的表,真是这样吗?其实不然,MySQL的内存表,表结构创建在磁盘上,数据存放在内存中,所以当MySQL启动着的时候,这个表是存在的,数据也是存在的,如果用户有查看这个表的权限,在所有会话里面,都可以访问这个内存表的数据;当MySQL重启后,数据消失,结构还存在。

内存表的创建:

CREATE TABLE test(
id int(),
num int()
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
查看是否创建成功: show tables;
使用完内存表后,如果我们想释放掉占用掉的内存,可以有两种方法:
-- 删除数据
delete from test;
或者 -- 清空表
truncate table test;
再或者
-- 删除表
drop table test;
对于我们常用的功能来说,内存有以下特征: .对于varchar等变长类型,内存表使用固定的长度来存放; .内存表可以有非唯一键; .内存表不能包含BLOB或者TEXT列; .内存表支持AUTO_INCREMENT列; .内存表支持插入延迟,使读取优先; .非临时内存表和其它非内存表一样在所有客户端直接共享; 我们使用内存表的时候,需要注意以下几个方面: .服务器内存足够大; .我们创建的内存表和MySQL内部临时表有所不同: 内存表的数据存放在内存中,而内部临时表(我们的query语句产生的)在恰当的时候存放在内存中,当内部临时表变得很大时,MySQL会自动地把它转化为 在磁盘上存储的表,而我们创建的内存表,却不会自动转换。 .当我们单独地delete from 某个内存表的时候,不会回收内存;只有当整个表被delete的时候,才会回收内存; .在MySQL的主从服务器上,内存表可以被复制

http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html (mysql官方文档,英文不好,参考的不多,英文还需继续努力)

自己的实践--mysql单机

可见执行insert into tblName select * from heapTbl;是可以将数据复制的。

实践--mysql主备--结构:192.168.0.161:2000--192.168.0.161:2001

.在2000节点上创建内存数据库testHeap并插入数据
create table testHeap(i int) type=heap;
在2001节点上show tables是可以看到testHeap的,并且是有数据的。 .在2001节点上对表testHeap插入一些数据
在2000节点上select * from testHeap;是可以看到新数据的。

三、结论

内存表在主从备份结构中是可以被复制的。

最新文章

  1. ora-01033和ora-12560错误的解决方案
  2. SQL Server服务器上需要导入Excel数据的必要条件
  3. 单调队列 I
  4. net use命令详细解释
  5. jQuery的animate方法在IE8下出现小问题
  6. WinSetupFromUSB – Install Windows XP from USB Flash Drive
  7. Object-c学习之路十一(NSDate和反射)
  8. 设计模式 -- 迭代器模式(Iterator)
  9. Restful 接口开发 完整版
  10. webpack-dev-server不是内部或外部命令
  11. 【idea】之使用SVN一些技巧
  12. 【Java】 剑指offer(59-2) 队列的最大值
  13. 数据分箱:等频分箱,等距分箱,卡方分箱,计算WOE、IV
  14. 第11章 拾遗3:虚拟局域网(VLAN)
  15. 【API】文件操作编程基础-CreateFile、WriteFile、SetFilePointer
  16. input file实现多选,限制文件上传类型,图片上传前预览功能
  17. 取出表A中第31到第40记录
  18. JvisualVM的使用【转载】
  19. 更改oracle数据库字符集
  20. GitHub Desktop使用

热门文章

  1. python 实现简单的感知机
  2. C#动态调用webservice方法
  3. nginx 相关命令 nginx -s reload/stop/quit
  4. PHP图像操作:3D图、缩放、旋转、裁剪、加入水印(一)
  5. 数据採集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)
  6. virtualbox使用相关问题
  7. python——python数据结构之栈、队列的实现
  8. connect(mapStateToProps,mapDispatchToProps) 的写法
  9. 如何设置outlook实现自动秘密抄送邮件的功能?
  10. Sphinx-PHP使用Sphinx搜索技术