Mysql 5.7 开启binlog
1. 什么是binlog
binlog
是mysql
的二进制日志:
二进制日志包含描述数据库更改(例如表创建操作或表数据更改)的“事件”。 它还包含针对可能进行了更改的语句的事件(例如,不匹配任何行的DELETE),除非使用基于行的日志记录。 二进制日志还包含有关每个语句花费该更新数据多长时间的信息。
2. 主要作用:
- 对于复制,主复制服务器上的二进制日志提供了要发送到从属服务器的数据更改的记录。 主服务器将其二进制日志中包含的事件发送到从属服务器,从属服务器执行这些事件以对主服务器进行相同的数据更改。
- 某些数据恢复操作需要使用二进制日志。 恢复备份后,将重新执行二进制日志中在备份后记录的事件。 这些事件使数据库从备份开始就保持最新状态。
3.binlog特点:
- 开启
binlog
会降低服务器的性能,但是它的作用会超过这种较小的性能下降。 binlog
不记录不修改数据库中数据的操作,例如:query
,show
等操作。- 二进制日志通常对意外停止具有弹性,因为只有完成的事务才会被记录或读回。
- 如果修改了密码,在
binlog
当中,服务器会重写日志中的语句和密码,不会让密码以纯文本的方式出现。
4.开启binlog
测试环境:
mysql
版本:5.7.17- 系统:
cent os 7
如何安装mysql
,请参阅Linux(Centos)安装Mysql
- 检查
binlog
的状态
show variables like 'log_bin';
这里没有打开bin_log
,bin_log
是一个只读变量,不能在mysql
开启的时候修改,所以先关闭mysql
2. 关闭mysql
systemctl stop mysqld
- 开启bin_log
修改/etc/my.cnf
,在mysqld
下面添加如下的参数配置;
参数解释:log-bin=mysql_bin server-id=1
log-bin
:设置mysql
的binlog
文件的前缀名称,支持写全路径,例如:log-bin=/var/lib/mysql/binlog/mysql_bin
,这样可以指定binlog
的保存位置server-id
:这个变量指定服务器的ID,在Mysql 5.7
中,如果要启用二进制记录,则必须指定一个值,否则将启动不了binlog
日志功能。
- 重启mysql
在做完上述的配置之后,重启一下mysql
就好了。
用账号登录systemctl restart mysqld
mysql
,检查一下mysql
的binlog
的状态是否开启show variables like 'log_bin';
执行完毕之后,会在/var/lib/mysql
这个目录下看到,两个文件
文件解释:- 这个名字中的前半本部分
mysql_bin
对应的就是在/etc/my.cnf
的文件名称,每次服务器创建新的日志文件时,该数目都会增加,从而创建了有序的文件系列。每次发生以下任何事件,服务器都会在系列中创建一个新文件。- 服务器已启动或者重新启动的时候。
- 服务器刷新日志的时候。
- 当日志大小达到
max_binlog_size
- 文件
mysql_bin.index
中记录的是类似mysql_bin.0000x
这类的文件名列表。 - 文件
mysql_bin.0000x
这个文件记录的就是mysql
的非查询操作的二进制日志。 - 文件
mysql_bin.0000x
这个文件大小154
的就是记录mysql
中的偏移量(Position),与在mysql
中使用show master status
中的Position
一致
- 这个名字中的前半本部分
- binlog的三种日志记录格式:
*binlog_format=statement
:Mysql
中的复制功能最初是基于SQL
语句从主服务器到从服务器的传播,这称为基于语句的日志记录。
*binlog_format=row
:在基于行的日志记录中,主服务器将事件写入二进制日志,这些事件指示如何影响各个表行。因此,表始终使用主键以确保可以有效地标识行是很重要的。
*binlog_format=mixed
:混合日志记录,对于混合日志记录,默认情况下使用基于日志(statement
)的记录,但是在某些情况下,日志记录模式会自动切换成基于行(row
)。
使用基于语句(statement
)的复制,复制不确定的语句可能出现问题,在确定给定语句对于statement
的复制是否安全的时候,Mysql
确定是否可以保证使用statement
的日志记录方式来复制该语句,如果Mysql
无法保证,它将标记该语句为潜在不可靠的对象并发出警告,以statement
记录日志可能并不安全。
但是可以用row
的日志记录方式来避免这些问题。
4. Mysql BinLog的其它设置参数:
Parameters | means |
---|---|
binlog_row_event_max_size | 指定基于行(row )的二进制日志事件的最大大小,以字节为单位。 |
log_bin_index | 二进制日志索引文件的名称,其中包含二进制日志文件的名称。默认情况下,它的位置和基本名称与使用–log-bin 选项加扩展名为二进制日志文件指定的值相同.index |
binlog_do_db | 这里列举产生binlog的指定数据库的名称,如果有多个数据库的话,要使用多个实例列举出来,在这里面要特别注意下binlog_format对日志记录的影响。先挂上官网的例子,日后再水全这一篇 |
binlog_cache_size | 在事务期间用于保存对二进制日志的更改的缓存的大小。如果服务器支持任何事务存储引擎,并且服务器启用了二进制日志(–log-bin选项),则为每个客户端分配一个二进制日志缓存。如果经常使用大型事务,则可以增加缓存大小以获得更好的性能 |
binlog_ignore_db | 指定要忽略记录binlog 的数据库,这里同样要注意binlog_foormat 对这条命令的影响先挂上连接,到时候跟上文一起水 |
总结
走到本文的第4小节,就可以成功开启binlog了,如果其中有什么差错,请大佬辛苦一下指出来。我好改正,多学习学习,谢谢!