配置Mysql
- mysql 默认是不开启
BinLog
日志记录的,需要手动开启。
修改配置文件sudo vim /etc/my.cnf
,[mysqld] 下面添加log-bin=mysql-bin
[mysqld]
# 开启 binlog 日志
log-bin=mysql-bin
- 默认binlog文件保存在mysql的家目录(
/var/lib/mysql
),文件的后缀(mysql-bin.00000x
) - 添加server-id ,保证id唯一 (不能和
canal
的canal.instance.mysql.slaveId
一样)
只要开启了binlog
需求,mysql就认为你有主从复制的需求,在主从同步的场景中,每个mysql的实例都需要有唯一的Id。
# 保证server-id 唯一
server-id=1
- binlog_format 的格式,那就是有三种,分别是
STATEMENT
,MIXED
,ROW
。
# 定义binlog文件的记录格式(在配置文件中选择配置row)
binlog_format=row
区别:
- statement
语句级,binlog会记录每次一执行写操作的语句。
相对row模式节省空间,但是可能产生不一致性,比如
update tt set create_date=now()
如果用binlog日志进行恢复,由于执行时间不同可能产生的数据就不同。
优点:节省空间
缺点:有可能造成数据不一致。 - row
行级,binlog会记录每次操作后每行记录的变化。
优点:保持数据的绝对一致性。因为不管sql是什么,引用了什么函数,他只记录执行后的效果。
缺点:占用较大空间。 - mixed
statement的升级版,一定程度上解决了,因为一些情况而造成的statement模式不一致问题
在某些情况下譬如:
当函数中包含 UUID() 时;
包含 AUTO_INCREMENT 字段的表被更新时;
执行 INSERT DELAYED 语句时;
用 UDF 时;
会按照 ROW的方式进行处理
优点:节省空间,同时兼顾了一定的一致性。
缺点:还有些极个别情况依旧会造成不一致,
另外statement和mixed对于需要对binlog的监控的情况都不方便。
- 重启mysql
添加完成之后,保存退出并重启mysql。
sudo systemctl restart mysqld
[root@hadoop102 mysql]# sudo systemctl restart mysqld
- 切换到mysql的家目录
(/var/lib/mysql)
中
[root@hadoop102 mysql]# cd /var/lib/mysql
此时就有了一个mysql-bin.000001
[root@hadoop102 mysql]# ll
...
drwxr-x---. 2 mysql mysql 4096 6月 7 16:20 mysql
-rw-r-----. 1 mysql mysql 154 7月 31 21:51 mysql-bin.000001
-rw-r-----. 1 mysql mysql 19 7月 31 21:51 mysql-bin.index
....
若原来没设置过的朋友,需要重新配置一下(过程就翻上去看一下)
canal.instance.master.journal.name
canal.instance.master.position
测试BinLog
- 准备一张表
mysql> select * from demo.employees;
+----+--------+------+------+-------------------+----------+
| id | name | sex | age | email | phone |
+----+--------+------+------+-------------------+----------+
| 1 | 张三 | 男 | 18 | 123@qq.com | 94645645 |
| 2 | 村花 | 女 | 22 | 123@qq.com | 788654 |
| 3 | root | 女 | 18 | 122@qq.com | 486745 |
| 8 | 飞龙 | 男 | 18 | 321 | 4141 |
| 10 | 飞龙 | 男 | 18 | 321 | 4141 |
+----+--------+------+------+-------------------+----------+
5 rows in set (0.00 sec)
-将 id 为 8 的用户name改成飞龙2
mysql> update demo.employees set name='飞龙2' where id=8;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
- 查看写操作是否记录在
mysql-bin.000001
,需要使用mysqlbinlog
进行查看。
[root@hadoop102 mysql]# mysqlbinlog mysql-bin.000001 |grep employees
#210731 22:02:54 server id 1 end_log_pos 352 CRC32 0xa0dba122 Table_map: `demo`.`employees` mapped to number 108
记录指定的库(binlog-do-db)
修改my.cnf
添加binlog-do-db
[root@hadoop102 mysql]# vim /etc/my.cnf
# 只记录哪些库的写操作,如果有多个库,则继续添加
binlog-do-db=数据库名
保存退出 并重启mysql
[root@hadoop102 mysql]# sudo systemctl restart mysqld
最后
这样mysql就开启了binlong
日志功能
网友评论