??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
在该隔离U别Q所有事务都可以看到其他未提交事务的执行l果。本隔离U别很少用于实际应用Q因为它的性能也不比其他别好多少。读取未提交的数据,也被UC读(Dirty ReadQ?br />Read CommittedQ读取提交内容)(j)
q是大多数数据库pȝ的默认隔ȝ别(但不是MySQL默认的)(j)。它满了隔ȝ单定义:(x)一个事务只能看见已l提交事务所做的改变。这U隔ȝ?也支持所谓的不可重复读(Nonrepeatable ReadQ,因ؓ(f)同一事务的其他实例在该实例处理其间可能会(x)有新的commitQ所以同一select可能q回不同l果?br />Repeatable ReadQ可重读Q?/strong>
q是MySQL的默认事务隔ȝ别,它确保同一事务的多个实例在q发d数据Ӟ?x)看到同L(fng)数据行。不q理ZQ这?x)导致另一个棘手的问题Q?QPhantom ReadQ。简单的_(d)q读指当用户d某一范围的数据行Ӟ另一个事务又在该范围内插入了新行Q当用户再读取该范围的数据行Ӟ?x)发现有新?#8220;qd(jing)” 行。InnoDB和Falcon存储引擎通过多版本ƈ发控ӞMVCCQMultiversion Concurrency ControlQ机制解决了该问题?/span>
SerializableQ可串行化)(j)
q是最高的隔离U别Q它通过强制事务排序Q之不可能怺冲突Q从而解军_读问题。简a之,它是在每个读的数据行上加上共享锁。在q个U别Q可能导致大量的时现象和锁竞争?/span>
q四U隔ȝ别采取不同的锁类型来实现Q若d的是同一个数据的话,容易发生问题。例如:(x)
脏读(Drity Read)Q某个事务已更新一份数据,另一个事务在此时d了同一份数据,׃某些原因Q前一个RollBack了操作,则后一个事务所d的数据就?x)是不正的?/span>
不可重复?Non-repeatable read):在一个事务的两次查询之中数据不一_(d)q可能是两次查询q程中间插入了一个事务更新的原有的数据?/span>
q读(Phantom Read):在一个事务的两次查询中数据笔C一_(d)例如有一个事务查询了几列(Row)数据Q而另一个事务却在此时插入了新的几列数据Q先前的事务在接下来的查询中Q就?x)发现有几列数据是它先前所没有的?/span>
在MySQL中,实现了这四种隔离U别Q分别有可能产生问题如下所C:(x)
下面Q将利用MySQL的客L(fng)E序Q分别测试几U隔ȝ别。测试数据库为testQ表为txQ表l构Q?/span>
id | int |
num | int |
两个命o(h)行客L(fng)分别为AQBQ不断改变A的隔ȝ别,在B端修Ҏ(gu)据?/span>
Q一Q、将A的隔ȝ别设|ؓ(f)read uncommitted(未提交读)
在B未更新数据之前:(x)
客户端AQ?/span>
B更新数据Q?/span>
客户端BQ?/span>
客户端AQ?/span>
l过上面的实验可以得出结论,事务B更新了一条记录,但是没有提交Q此时事务A可以查询出未提交记录。造成脏读现象。未提交L最低的隔离U别?/span>
Q二Q、将客户端A的事务隔ȝ别设|ؓ(f)read committed(已提交读)
在B未更新数据之前:(x)
客户端AQ?/span>B更新数据Q?/span>
客户端BQ?/span>
客户端AQ?/span>
l过上面的实验可以得出结论,已提交读隔离U别解决了脏ȝ问题Q但是出C不可重复ȝ问题Q即事务A在两ơ查询的数据不一_(d)因ؓ(f)在两ơ查询之间事务B更新了一条数据。已提交d允许d已提交的记录Q但不要求可重复诅R?/span>
(??span style="font-size: medium;">A的隔ȝ别设|ؓ(f)repeatable read(可重复读)
在B未更新数据之前:(x)
B更新数据Q?/span>
客户端BQ?/span>
客户端AQ?/span>
B插入数据Q?/span>
客户端BQ?/span>
客户端AQ?/span>
׃上的实验可以得出l论Q可重复读隔ȝ别只允许d已提交记录,而且在一个事务两ơ读取一个记录期_(d)其他事务部的更新该记录。但该事务不要求与其他事务可串行化。例如,当一个事务可以找到由一个已提交事务更新的记录,但是可能产生q读问题(注意是可能,因ؓ(f)数据库对隔离U别的实现有所差别)。像以上的实验,没有出现数据ȝ问题?/span>
(??span style="font-size: medium;">A的隔ȝ别设|ؓ(f) 可串行化 (Serializable)
A端打开事务QB端插入一条记?/span>
事务A端:(x)
事务B端:(x)
因ؓ(f)此时事务A的隔ȝ别设|ؓ(f)serializableQ开始事务后Qƈ没有提交Q所以事务B只能{待?/span>
事务A提交事务Q?/span>
事务A?/span>
事务B?/span>
serializable完全锁定字段Q若一个事务来查询同一份数据就必须{待Q直到前一个事务完成ƈ解除锁定为止 ?/span>是完整的隔离U别Q会(x)锁定对应的数据表|因而会(x)有效率的问题?br />
rsync是类unixpȝ下的数据镜像备䆾工具Q从软g的命名上可以看出来?#8212;—remote sync。rsync是Linuxpȝ下的文g同步和数据传输工P它采?#8220;rsync”法Q可以将一个客h和远E文件服务器之间的文件同步,也可?在本地系l中数据从一个分区备份到另一个分Z。如果rsync在备份过E中出现了数据传输中断,恢复后可以l传输不一致的部分。rsync可以执行 完整备䆾或增量备份。它的主要特Ҏ(gu)Q?/p>
1.可以镜像保存整个目录?wi)和文gpȝQ?/p>
2.可以很容易做C持原来文件的权限、时间、Y链接;无须Ҏ(gu)权限卛_安装Q?/p>
3.可以增量同步数据Q文件传输效率高Q因而同步时间短Q?/p>
4.可以使用rcp、ssh{方式来传输文gQ当然也可以通过直接的socketq接Q?/p>
5.支持匿名传输Q以方便q行|站镜象{;
6.加密传输数据Q保证了数据的安全性;
二、镜像目录与内容
rsync -av duying /tmp/test
查看/tmp/test目录Q我们可以看到此命o(h)是把duyingq个文g夹目录连同内容全部考到当前目录下了
rsync -av duying/ /tmp/test 注意Q比上一条命令多了符?#8220;/”
再次查看/tmp/test目录Q我们发现没有duyingq个目录Q只是看C目录中的内容
三、增量备份本地文?/p>
rsync -avzrtopgL --progress /src /dst
-v?#8220;--verbose”,卌l模式输出; -z表示“--compress”Q即传输时对数据q行压羃处理Q?/p>
-r表示“--recursive”Q即对子目录以递归的模式处理;-t?#8220;--time”Q即保持文g旉信息Q?/p>
-o表示“owner”Q用来保持文件属M息;-p?#8220;perms”Q用来保持文件权限;
-g?#8220;group”Q用来保持文件的属组信息Q?/p>
--progress用于昄数据镜像同步的过E;
四、镜像同步备份文?/p>
rsync -avzrtopg --progress --delete /src /dst
--delete选项指定以rsync服务器端为基q行数据镜像同步Q也是要保持rsync服务器端目录与客L(fng)目录的完全一_(d)
--exclude选项用于排除不需要传输的文gcdQ?/p>
五、设|定时备份策?/p>
crontab -e
30 3 * * * rsync -avzrtopg --progress --delete --exclude "*access*"
--exclude "*debug*" /src /dst
如果文g比较大,可用nohup进E放到后台执行?/p>
nohup rsync -avzrtopgL --progress /data/opt /data2/ >/var/log/$(date +%Y%m%d).mail.log &
六、rsync的优点与不
与传l的cp、tar备䆾方式Ҏ(gu)Qrsynch安全性高、备份迅速、支持增量备份等优点Q通过rsync可以解决对实时性要求不高的数据备䆾需求,例如Q定期地备䆾文g服务器数据到q端服务器,Ҏ(gu)地磁盘定期进行数据镜像等?/p>
但是随着pȝ规模的不断扩大,rsync的缺炚w渐被暴露了出来。首先,rsync做数据同步时Q需要扫描所有文件后q行Ҏ(gu)Q然后进行差量传输。如果文 件很大,扫面文g是非常耗时的,而且发生变化的文件往往是很一部分Q因此rsync是非怽效的方式。其ơ,rsync不能实时监测、同步数据,虽然?可以通过Linux守护q程的方式触发同步,但是两次触发动作一定会(x)有时间差Q可能导致服务器端和客户端数据出C一致?/p>
转自Qhttp://blog.sina.com.cn/s/blog_6954b9a901011esn.html
除了帮助面Q所有URIs只会(x)服务application/json
cd的资源,q且需要HTTP基础认证(使用标准RabbitMQ用户数据?. 默认用户是guest/guest.
大多数URIs需要虚拟主机名UC为其路径的一部分, 因ؓ(f)名称是虚拟主机的唯一标识W对? 默认虚拟LUCؓ(f)"/
", 它需要编码ؓ(f)"%2f
".
PUT一个资源会(x)对其q行创徏. 你上传的JSON对象必须有某个键keys (下面文有描q?Q其它的键会(x)被忽? ~失键会(x)引发错误.
在AMQP中,׃l定没有名称或IDsQ因此我们基于其所有属性h工合成了一?
׃一般情况下很难预测q个名字, 你可以通过POST一个工厂URI来创建绑?查看下面的例?
arguments
字段?x)被忽?你不创徏一个队?交换器或使用参数q行l定. 带有参数的队列,交换器或l定也不?x)显C些参敎ͼ下面有几个快速例?它们使用了Unix命o(h)行工?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; background-color: #ffffaa;">curl:
$ curl -i -u guest:guest http://localhost:55672/api/vhosts
HTTP/1.1 200 OK
Server: MochiWeb/1.1 WebMachine/1.7 (participate in the frantic)
Date: Tue, 31 Aug 2010 15:46:59 GMT
Content-Type: application/json
Content-Length: 5
["/"]
$ curl -i -u guest:guest -H "content-type:application/json" \ -XPUT http://localhost:55672/api/vhosts/foo
HTTP/1.1 204 No Content
Server: MochiWeb/1.1 WebMachine/1.7 (participate in the frantic)
Date: Fri, 27 Aug 2010 16:56:00 GMT
Content-Type: application/json
Content-Length: 0
注意: 你必dmimecd指定?code style="font-family: Monaco, Consolas, Courier, 'Lucida Console', monospace; background-color: #ffffaa;">application/json.
Note: 在上传的JSON对象中,对象名称是不需要的Q因为它已经包含在了URI? ׃一个虚拟主机除了名U外没有其它属性,q意味着你完全不需要指定一个body.
$ curl -i -u guest:guest -H "content-type:application/json" \ -XPUT -d'{"type":"direct","auto_delete":false,"durable":true,"arguments":[]}' \ http://localhost:55672/api/exchanges/%2f/my-new-exchange
HTTP/1.1 204 No Content
Server: MochiWeb/1.1 WebMachine/1.7 (participate in the frantic)
Date: Fri, 27 Aug 2010 17:04:29 GMT
Content-Type: application/json
Content-Length: 0
注意: 在PUT或DELETE的响应中Q?除非p|了,否则我们l不?x)返回一个body.
$ curl -i -u guest:guest -H "content-type:application/json" \ -XDELETE http://localhost:55672/api/exchanges/%2f/my-new-exchange
HTTP/1.1 204 No Content
Server: MochiWeb/1.1 WebMachine/1.7 (participate in the frantic)
Date: Fri, 27 Aug 2010 17:05:30 GMT
Content-Type: application/json
Content-Length: 0
GET | PUT | DELETE | POST | Path | Description |
---|---|---|---|---|---|
X | /api/overview | 描述整个pȝ的各U随Z息?/div> | |||
X | /api/connections | 所有打开q接的列? | |||
X | X | /api/connections/name | 一个单独的q接. DELETE它会(x)Dq接关闭. | ||
X | /api/channels | 所有打开通道的列? | |||
X | /api/channels/channel | 单个通道的详? | |||
X | /api/exchanges | 所有交换器的列? | |||
X | /api/exchanges/vhost | 指定虚拟L中所有交换器列表. | |||
X | X | X | /api/exchanges/vhost/name | 一个单独的交换?要PUT一个交换器,你需要一些像下面q样的body:{"type":"direct","auto_delete":false,"durable":true,"arguments":[]} | |
X | /api/exchanges/vhost/name/bindings | 指定交换器中的绑定列? | |||
X | /api/queues | 所有队列的列表. | |||
X | /api/queues/vhost | 指定虚拟L中所有队列列? | |||
X | X | X | /api/queues/vhost/name | 一个单独队?要PUT一个队? 你需要一些像下面q样的body:{"auto_delete":false,"durable":true,"arguments":[]} | |
X | /api/queues/vhost/queue/bindings | 指定队列中的所有绑定列? | |||
X | /api/bindings | 所有绑定列? | |||
X | /api/bindings/vhost | 指定虚拟L上的所有绑定列? | |||
X | X | /api/bindings/vhost/queue/exchange | 队列和交换器之间的所有绑定列? CQ队列和交换器可以绑定多?要创Z个新l定, POST q个URI.你需要一些像下面q样的body:{"routing_key":"my_routing_key","arguments":[]}响应?x)包含一?span style="background-color: inherit;">Location headerQ它?x)告诉你新绑定的URI. | ||
X | X | X | /api/bindings/vhost/queue/exchange/props | 队列和交换器之间的单个绑? URI的props部分是一个名Uͼ用于p\由键和属性组成的l定.你可以通过PUTq个URI来创Z个绑定,它比上面POST URI更方? | |
X | /api/vhosts | 所有虚拟主机列? | |||
X | X | X | /api/vhosts/name | 单个虚拟L.׃虚拟L只有一个名Uͼ因此在PUT时不需要body. | |
X | /api/users | 所有用户列? | |||
X | X | X | /api/users/name | 单个用户. 要PUT一个用? 你需要一些像下面q样的body:{"password":"secret"} | |
X | /api/users/user/permissions | 指定用户的所有权限列? | |||
X | /api/permissions | 所有用L(fng)所有权限列? | |||
X | X | X | /api/permissions/vhost/user | 一个虚拟主Z某个用户的个人权? 要PUT一个权?你需要一些像下面q样的body:{"scope":"client","configure":".*","write":".*","read":".*"} |