美文网首页
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