美文网首页
Canal 使用之Mysql配置

Canal 使用之Mysql配置

作者: 万事万物 | 来源:发表于2021-08-03 08:28 被阅读0次

配置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唯一 (不能和canalcanal.instance.mysql.slaveId一样)
    只要开启了binlog需求,mysql就认为你有主从复制的需求,在主从同步的场景中,每个mysql的实例都需要有唯一的Id。
# 保证server-id 唯一
server-id=1
  • binlog_format 的格式,那就是有三种,分别是STATEMENT,MIXED,ROW
# 定义binlog文件的记录格式(在配置文件中选择配置row)
binlog_format=row

区别:

  1. statement
    语句级,binlog会记录每次一执行写操作的语句。
    相对row模式节省空间,但是可能产生不一致性,比如
    update tt set create_date=now()
    如果用binlog日志进行恢复,由于执行时间不同可能产生的数据就不同。
    优点:节省空间
    缺点:有可能造成数据不一致。
  2. row
    行级,binlog会记录每次操作后每行记录的变化。
    优点:保持数据的绝对一致性。因为不管sql是什么,引用了什么函数,他只记录执行后的效果。
    缺点:占用较大空间。
  3. 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日志功能

相关文章

网友评论

      本文标题:Canal 使用之Mysql配置

      本文链接:https://www.haomeiwen.com/subject/wpelvltx.html