如果没有,则在/etc/my.cnf的[mysqld]选项中追加以下内容:
如果上述内容不是在[mysqld]选项中新增的,而是在其他选项中新增的,那么即使更改了配置文件/etc/my.cnf,二进制日志也无法启动。下面解释一下代码中各项的含义。
server-id:MySQL的ID属性是唯一值,作用如下。
(1)MySQL的同步数据中是包含server-id的,用于标识该语句最初是从哪个server写入的,所以server-id一定要有。
(2)每一个同步的slave在master上都有对应的一个master线程,该线程就是通过slave的server-id来标识的。
• 每个slave在master上最多有一个master线程,如果两个slave的server-id相同,则后一个连接成功时,前一个会被“踢”掉。
• 在slave主动连接master之后,如果在slave上执行了slave stop,则连接断开,但是master上对应的线程并没有退出。
• 在slave运行之后,master不能再创建一个线程而保留原来的线程,否则在数据同步时可能出现问题。
(3)在MySQL中做主主同步时,多个主需要构成一个环状,但在同步时又要保证一条数据不会陷入死循环,这就是靠server-id来实现的。
log-bin:打开二进制日志功能。在复制(replication)配置中,master必须打开此项。
binlog-format:二进制日志的模式与配置。在MySQL中,复制二进制日志的方式主要有三种:
- 基于SQL语句的复制(Statement-Based Replication,SBR)。
- 基于行的复制(Row-Based Replication,RBR)。
- 混合模式复制(Mixed-Based Replication,MBR)。
对应的二进制日志模式有三种:Statement Level模式、Row Level模式和Mixed模式,其优点和缺点如表所示。
MySQL默认使用Statement Level模式,推荐使用Mixed模式。对于一些特殊使用,可以考虑使用Row Level模式。例如,通过二进制日志同步数据的修改,会节省很多相关操作,所以对于二进制日志数据处理会变得非常轻松。如 果 采 用 INSERT 、 UPDATE 、 DELETE 等 直 接 操 作 表 , 则 日 志 格 式 根 据binlog_format的设定而记录。如果采用GRANT、REVOKE、SET PASSWORD等管理语句来操作表,那么一定要采用Statement Level模式记录。
除此之外,还可以对二进制日志进行以下配置:
binlog_cache_size:在一个事务中,二进制日志记录了SQL状态所持有的缓存大小。如果经常使用大的、多声明的事务,则可以把此值设置得大一些,以获取更好的性能。所有从事务来的状态都先被缓存在二进制日志中,在提交后再一次性写入二进制日志中。如果事务比此值大,则使用磁盘上的临时文件来替代。此缓存是在每个连接的事务第一次更新状态时被创建的,属于session级别,通常采用默认值即可,编写方式如下所示: