开启MySQL的binlog日志

binlog 就是binary log,二进制日志文件,这个文件记录了mysql所有的dml操作。通过binlog日志我们可以做数据恢复,做主住复制和主从复制等等。对于开发者可能对binlog并不怎么关注,但是对于运维或者架构人员来讲是非常重要的。
 
如何开启mysql的binlog日志呢?
在my.inf主配置文件中直接添加三行
log_bin=ON
log_bin_basename=/var/lib/mysql/mysql-bin
log_bin_index=/var/lib/mysql/mysql-bin.index
三个参数来指定,
第一个参数是打开binlog日志
第二个参数是binlog日志的基本文件名,后面会追加标识来表示每一个文件
第三个参数指定的是binlog文件的索引文件,这个文件管理了所有的binlog文件的目录
 
当然也有一种简单的配置,一个参数就可以搞定
log-bin=/var/lib/mysql/mysql-bin
这一个参数的作用和上面三个的作用是相同的,mysql会根据这个配置自动设置log_bin为on状态,自动设置log_bin_index文件为你指定的文件名后跟.index
 
这些配置完毕之后对于5.7以下版本应该是可以了,但是我们这个时候用的如果是5.7及以上版本的话,重启mysql服务会报错。这个时候我们必须还要指定一个参数
server-id=123454
随机指定一个不能和其他集群中机器重名的字符串,如果只有一台机器,那就可以随便指定了
 
有了上述的配置之后,我们就可以重新启动我们的mysql了
# CentOS 6
service mysqld restart


# CentOS 7
systemctl restart mysqld

启动成功之后,我们可以登陆查看我们的配置是否起作用

show variables like '%log_bin%'
下面我们可以找到这个目录来看一下
 
因为我这里已经操作过数据库了,所以能看到这里有多个mysql-bin的文件,还有一个mysql-bin.index的文件,我们可以打开这个文件来看一下
到这里,我们的binlog日志就打开了。

对于binlog日志的具体操作,可以参考
binlog日志详解:http://blog.csdn.net/king_kgh/article/details/74833539
使用binlog恢复数据:http://blog.csdn.net/king_kgh/article/details/74890381
 
  • 33
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
这篇文章介绍了如何通过开启 MySQLBinlog 日志,并利用 Kafka 实时同步 MySQL 数据到 SQL Server 数据库中。 首先,需要在 MySQL开启 Binlog 日志。可以通过修改 MySQL 配置文件(my.cnf 或 my.ini)来开启 Binlog 日志: ``` [mysqld] log-bin=mysql-bin binlog-format=row server-id=1 ``` 其中,`log-bin` 指定了 Binlog 文件的名称前缀,`binlog-format` 指定 Binlog 记录的格式为行格式,`server-id` 指定了 MySQL 实例的唯一标识。 接下来,需要创建一个 Kafka 主题,并启动一个 Kafka 生产者,将 MySQL Binlog 数据写入 Kafka 主题: ```java import com.github.shyiko.mysql.binlog.BinaryLogClient; import com.github.shyiko.mysql.binlog.event.*; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord; public class BinlogProducer { private final BinaryLogClient client; private final KafkaProducer<String, String> producer; private final String topic; public BinlogProducer(String hostname, int port, String username, String password, String topic) { this.client = new BinaryLogClient(hostname, port, username, password); this.producer = new KafkaProducer<>(getKafkaConfig()); this.topic = topic; } public void start() throws Exception { client.registerEventListener(event -> { EventData data = event.getData(); if (data instanceof WriteRowsEventData) { WriteRowsEventData eventData = (WriteRowsEventData) data; for (Serializable[] row : eventData.getRows()) { String message = "INSERT INTO " + eventData.getTableId() + " VALUES " + Arrays.toString(row); producer.send(new ProducerRecord<>(topic, message)); } } else if (data instanceof UpdateRowsEventData) { UpdateRowsEventData eventData = (UpdateRowsEventData) data; for (Map.Entry<Serializable[], Serializable[]> row : eventData.getRows()) { String message = "UPDATE " + eventData.getTableId() + " SET " + Arrays.toString(row.getValue()) + " WHERE " + Arrays.toString(row.getKey()); producer.send(new ProducerRecord<>(topic, message)); } } else if (data instanceof DeleteRowsEventData) { DeleteRowsEventData eventData = (DeleteRowsEventData) data; for (Serializable[] row : eventData.getRows()) { String message = "DELETE FROM " + eventData.getTableId() + " WHERE " + Arrays.toString(row); producer.send(new ProducerRecord<>(topic, message)); } } }); client.connect(); } public void stop() throws Exception { client.disconnect(); producer.close(); } private Map<String, Object> getKafkaConfig() { Map<String, Object> config = new HashMap<>(); config.put("bootstrap.servers", "localhost:9092"); config.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); config.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); return config; } } ``` 上述代码中,`BinaryLogClient` 是一个 MySQL Binlog 客户端,可以用来监听 MySQL 数据库的 Binlog 事件。在 `start()` 方法中,我们通过注册事件监听器来捕获 Binlog 事件,然后将事件数据写入 Kafka 主题。需要注意的是,对于不同类型的 Binlog 事件(如插入、更新、删除等),需要分别处理,并将事件数据转换成插入、更新、删除语句,然后写入 Kafka 主题中。 最后,需要启动一个 Kafka 消费者,从 Kafka 主题中读取 Binlog 数据,并写入 SQL Server 数据库中: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Component; @Component public class BinlogConsumer { private final JdbcTemplate jdbcTemplate; @Autowired public BinlogConsumer(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @KafkaListener(topics = "binlog") public void onMessage(String message) { jdbcTemplate.execute(message); } } ``` 上述代码中,`BinlogConsumer` 是一个 Kafka 消费者,使用 `@KafkaListener` 注解来监听 Kafka 主题中的消息。当收到消息时,直接执行消息中的 SQL 语句,将数据写入 SQL Server 数据库中。 通过上述方式,就可以实现 MySQL 数据库和 SQL Server 数据库之间的实时数据同步了。需要注意的是,由于 Binlog 日志是一个增量日志,因此在启动同步任务时,需要首先将 MySQL 数据库中的数据全量复制到 SQL Server 数据库中,然后再开启 Binlog 日志,以保证数据的完整性和一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值