binlog介绍
MySQL的binlog(二进制日志)是一种记录数据库服务器上所有修改数据的日志文件。它主要用于数据复制和主从同步。binlog的主要作用是记录数据库的DDL(数据定义语言)操作和DML(数据操作语言)操作,以便在发生故障时进行恢复。
binlog的主要特点如下:
- 二进制格式:binlog以二进制格式存储,因此占用空间较小,传输速度快。
- 顺序写:binlog是顺序写入磁盘的,因此对磁盘的写入性能较好。
- 不可修改:binlog一旦写入,就不可修改。这保证了数据的完整性和一致性。
- 可追加:binlog可以追加到文件末尾,不会覆盖原有的内容。
- 支持GTID(全局事务标识符):GTID是一种用于标识事务的唯一标识符,可以避免主从同步时的冲突和误操作。
查看是否开启binlog日志
show variables like 'log_bin';
要查看MySQL服务器上的binlog状态,可以使用以下命令:
SHOW MASTER STATUS;
使用以下命令查看所有binlog日志列表:
SHOW MASTER LOGS;
要查看当前正在写入的binlog文件名和位置,可以使用以下命令:
SHOW BINLOG EVENTS;
要查看所有的binlog文件列表,可以使用以下命令:
SHOW BINARY LOGS;
查看binlog日志保存路径
SHOW VARIABLES LIKE 'datadir';
刷新log日志,立刻产生一个新编号的binlog日志文件,跟重启一个效果,可以执行以下命令:
FLUSH LOGS;
清空所有binlog日志,可以执行以下命令:
RESET MASTER;
binlog文件长啥样
这些文件就是binlog日志文件
binlog.index和binlog.000057这两个文件都是MySQL的binlog日志文件,但他们在性质和用途上有所不同。
binlog.index文件是MySQL服务器自动创建的二进制索引文件,它用于加速对binlog日志文件的查找。当我们需要查看某个特定编号的binlog日志时,MySQL服务器会首先在这个索引文件中查找,如果找到了对应的日志文件,就直接读取该日志文件,从而提高了查询效率。
而binlog.000057文件则是一个实际的binlog日志文件,它记录了数据库的所有更改操作,包括DDL(数据定义语言)和DML(数据操作语言)语句(除了数据查询语句SELECT、SHOW等)。这些语句以“事件”的形式保存,描述了数据的更改情况。
总的来说,binlog.index文件主要起到索引的作用,提高了查询binlog日志的效率;而binlog.000057这样的文件则是实际存储所有数据库更改操作的地方。
内容对比
.index
.000057
mysql开启binlog
window下找my.ini linux下找my.cnf
修改配置文件,在原来内容后新增如下内容
# 开启binlog
log-bin=mysql-bin
# 选择ROW模式
binlog-format=ROW
# 配置MySQL replaction需要定义,不要和canal的slaveId重复
server_id=1
binlog三种模式说明
- statement【语句级】
binlog会记录每一次执行写操作的语句
优点:节省空间 例:批量操作:通过性别批量更新姓名,只会记录一条语句
缺点:有可能造成数据不一致 例如:语句中存在UUID() now() 随机数等函数,使用binlog恢复数据时,会产生不一样的数据 - row【行级】
binlog会记录每次操作后每行的变化
优点:保证数据的绝对一致性
缺点:占用空间大 - mixed【混合日志记录】
默认是【statement】模式,特殊情况时会使用row模式(包含UUID、自增[auto_increment]等)
优点:节省空间,同时兼顾了一定的一致性
缺点:还有极个别情况依旧会造成不一致
重启mysql服务
windows就在搜索中搜索服务
linux中就使用命令
sudo systemctl restart mysqld
查看bin是否开启
show variables like 'log_bin';