Maxwell监听MySQLbinlog的变化并将变化情况写入到一个文件里

本文详细描述了如何在MySQL中创建用户、分配权限,以及编写一个名为mxw.sh的shell脚本,用于管理Maxwell的启动、停止和状态检查,包括必要的权限调整和使用nohup进行后台运行。

 1.首先创建用户名和密码,并给予权限

SHOW VARIABLES LIKE '%binlog%';
CREATE DATABASE maxwell;
##SET GLOBAL validate_password_length=4;
##SET GLOBAL validate_password_policy=0;
CREATE USER 'maxwell'@'%' IDENTIFIED BY 'maxwell';
GRANT ALL ON maxwell.* TO 'maxwell'@'%';
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'maxwell'@'%';
GRANT ALL PRIVILEGES ON test.* TO 'maxwell'@'%' IDENTIFIED BY 'maxwell';
GRANT SELECT,REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'maxwell'@'%' IDENTIFIED BY 'maxwell'
GRANT ALL PRIVILEGES ON maxwell.* TO 'maxwell'@'%' IDENTIFIED BY 'maxwell';
FLUSH PRIVILEGES;

2.编写脚本mxw.sh,并赋予执行权限

3.脚本内容

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "参数不能为空!!!"
    exit ;
fi



#MAXWELL_HOME=/opt/module/maxwell

status_maxwell(){
    result=`ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | wc -l`
    return $result
}


start_maxwell(){
    status_maxwell
    if [[ $? -lt 1 ]]; then
        echo "启动Maxwell"
        #$MAXWELL_HOME/bin/maxwell --config $MAXWELL_HOME/config.properties --daemon

#注意这里的ip、Maxwell启动路径和输出路径
		nohup /usr/local/mysql/module/maxwell/maxwell-1.29.2/bin/maxwell --user='maxwell' --password='maxwell' --host='xxx.xx.xxx.x' --producer=stdout > /usr/local/mysql/module/maxwell/BinlogChangeFile/output_file20240126.txt  2>&1 &
    else
        echo "Maxwell正在运行"
    fi
}


stop_maxwell(){
    status_maxwell
    if [[ $? -gt 0 ]]; then
        echo "停止Maxwell"
        ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | awk '{print $2}' | xargs kill -9
    else
        echo "Maxwell未在运行"
    fi
}

case $1 in
    start )
        start_maxwell
    ;;
	status )   
					#echo =============== 1代表maxwell正在运行 0是未在运行 ===============
					#ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | wc -l
		 
		# 执行命令,并将结果赋给变量
		result=$(ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | wc -l)
		
		# 检查结果,并输出相应信息
		if [ $result -eq 1 ]; then
		echo "maxwell正在运行"
		else
		echo "maxwell未在运行"
		fi
    ;;
    stop )
        stop_maxwell
    ;;
    restart )
       stop_maxwell
       start_maxwell
    ;;
esac

<think>好的,我需要解决用户的问题:如何通过Maxwell配置将不同表的数据分别抽取到对应的Kafka Topic中。首先,我需要回忆一下Maxwell的相关知识,尤其是关于路由配置的部分。 根据用户提供的引用,特别是引用[2]提到Maxwell可以实时读取MySQL的binlog将数据以JSON格式写入Kafka等中间件。同时,用户的问题涉及到将不同表的数据分发到不同的Topic,这应该涉及到Maxwell的路由规则配置。 首先,Maxwell默认情况下可能将所有表的数据发送到同一个Topic,但用户需要的是按表名或其他条件分开发送。这时候应该想到Maxwell的`producer_partition_by`和`kafka_topic`配置选项。不过,更灵活的方式可能是使用`producer`为`kafka`,配置`kafka_topic`的动态生成,比如根据表名来命名Topic。 接下来,需要确认如何设置路由规则。可能涉及到在配置文件中设置`kafka_topic`格式,例如使用`namespace`或`table`变量。例如,配置`kafka_topic=namespace_%{database}_%{table}`,这样每个表的数据会被发送到以数据库名和表名组合的Topic中。或者,使用`kafka_topic`的表达式来动态生成Topic名称。 另外,可能还需要考虑分区策略,确保同一张表的数据进入同一个分区,保证顺序。不过用户的问题主要是不同表到不同Topic,这部分可能暂时不需要处理分区。 然后,需要验证是否正确应用这些配置。比如,修改`config.properties`文件,添加相应的配置项,然后重启Maxwell服务。之后,通过生产数据到MySQL,观察Kafka中对应的Topic是否有数据生成。 可能还需要注意表名的格式转换,比如是否包含大写字母,Topic名称是否合法。通常Kafka Topic名称推荐使用小写,所以可能需要配置转换规则,将表名转为小写。 另外,用户提供的引用[5]中提到了使用Kafka控制台消费者来查看数据,这可以用来验证配置是否生效。例如,订阅不同的Topic,检查数据是否正确路由。 最后,可能还需要处理一些特殊情况,比如历史数据的同步,或者是否需要在Maxwell中过滤某些表。但用户的问题主要是路由到不同Topic,所以可能不需要涉及过滤配置。 总结步骤应该是:配置`kafka_topic`动态生成,使用表名或数据库名作为变量,重启Maxwell,验证数据流向是否正确。</think>### 如何通过Maxwell配置实现不同表的数据分别抽取到对应Kafka Topic中? #### 步骤说明 1. **配置`kafka_topic`动态规则** 在Maxwell的配置文件(如`config.properties`)中,通过`kafka_topic`参数定义Topic的生成规则。支持使用`%{database}`(数据库名)和`%{table}`(表名)作为占位符。 例如: ```properties kafka_topic=myapp_%{database}_%{table} ``` 此时,表`orders`的数据会发送到`myapp_mydb_orders`的Topic中[^2]。 2. **设置分区策略(可选)** 若需保证同一张表的数据顺序性,可配置`producer_partition_by`参数为`table`,确保同一表的数据写入同一分区: ```properties producer_partition_by=table ``` 3. **处理特殊字符** Kafka Topic名称仅允许小写字母、数字、`.`、`_`、`-`。若表名包含大写字母或特殊符号,需通过正则表达式转换: ```properties kafka_topic=ods_%{database}_%{table|regex=([A-Z]+)|lower}_log ``` 4. **重启Maxwell服务** 修改配置后重启Maxwell进程使配置生效: ```bash bin/maxwell --config config.properties ``` 5. **验证数据流向** 使用Kafka消费者查看目标Topic数据是否生成: ```bash bin/kafka-console-consumer.sh --bootstrap-server your_kafka:9092 --topic myapp_mydb_orders ``` #### 示例配置 ```properties # 基础配置 producer=kafka kafka.bootstrap.servers=your_kafka:9092 # 动态Topic规则 kafka_topic=ods_%{database}_%{table} producer_partition_by=table # 表名转为小写(可选) kafka_topic=ods_%{database}_%{table|lower} ``` #### 注意事项 - **历史数据同步**:Maxwell默认仅同步增量数据,若需全量同步需手动触发`bootstrap`操作[^4]。 - **表过滤**:可通过`filter`配置排除不需要同步的表,例如: ```properties filter=exclude: db.*, include: db.important_table ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值