Heim >Datenbank >MySQL-Tutorial >Mysql不同主从格式(ReplicationFormats)的区别_MySQL

Mysql不同主从格式(ReplicationFormats)的区别_MySQL

WBOY
WBOYOriginal
2016-06-01 13:18:541045Durchsuche

bitsCN.com

Mysql之所以可以实现主从服务器之间的同步,是因为主服务器端的事件(events)写到了 binary log 中,然后在从服务器上再次执行这些事件。

事件写入BINLOG中,主要有以下三种格式:

1、基于语句的记录(Statement-Based Replication)
就是将主服务器上执行的语句记录下来,在从服务器上再次执行一遍。在MYSQL 5.1.4之前,只有这一种方式;

这种类型的优点包括:

A、从3.23版本以来,MYSQL只有这一种类型,所以这种类型已经被实践所证实;

B、写入BINLOG的数据相对来说少一些,特别是更新很多行的语句,不用把每行的变化记录下来;

C、所有更改数据库的语句都会被记录下来,可以用来监督数据库。

这种类型的缺点也很明显,是一种不“安全”的记录方式:

A、不能更新不缺定地行;比如UPDATE语句中有不加ORDER的LIMIT;

B、

LOAD_FILE()
UUID(), UUID_SHORT()
USER()
FOUND_ROWS()
SYSDATE() (unless both the master and the slave are started with the --sysdate-is-now option)
GET_LOCK()
IS_FREE_LOCK()
IS_USED_LOCK()
MASTER_POS_WAIT()
RAND()
RELEASE_LOCK()
SLEEP()
VERSION()

比如,使用SBR(STATEMENT-BASED REPLICATION)同步这条语句:

update table set column=uuid() limit 2
更新后,这两条记录主服务器端该字段的值为:

45734358-9df1-11e3-b0fd-782bcb74f37e

从服务器端的值:

3fa4171e-9df0-11e3-a0e5-782bcb74f37e

C、比基于行的方式需要更多地行级锁;

2、基于行的记录(Row-Based Replication)

就是将主服务器上对每一行的修改记录下来,然后在从服务器上实现之;

这个类型的优势:

A、是一种安全的方式,也就是说能够准确无误地同步主服务器的内容,比如上面那个例子使用RBR(ROW-BASED REPLICATION)的结果:

主服务器和从服务器端均为:

b290f3a0-9df5-11e3-b0fd-782bcb74f37e

B、需要锁行的数量很少

这个类型的缺点就是:

A、需要记录的内容太多,如果一条语句更新了一个几千万条数据的,那就会记录几千万条BINLOG……

B、如果一些生成的变量很庞大,比如BLOB类型,会使得记录很庞大

C、无法知道当前哪条语句在执行,无法监督主从进度

3、混合类型记录(Row-Based Replication)

就是上述两种都有,系统会实时选择合适的类型来记录主服务器的记录。

bitsCN.com
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn