java JDK 版本:java version "1.8.0_221"
mysql版本:5.6.33-log MySQL Community Server (GPL)
Maxwell下载地址:https://github.com/zendesk/maxwell/releases/download/v1.29.2/maxwell-1.29.2.tar.gz (注意:Maxwell-1.30.0及以上版本不再支持JDK1.8。)
kafka版本:kafka_2.12-3.4.0.tgz
以上jdk和mysql的安装这里不做详细的介绍了,大家自己去安装一下和查阅相关安装文档
1.登录mysql
mysql -h 127.0.0.1 -u root -p
2.查看状态
show variables like '%bin%';
如果log_bin是OFF我们需要开启binlog
3.查看安装路径
whereis mysql #查看mysql安装路径命令
4.编辑mysql配置(my.cnf)
vim my.cnf
# server-id表示单个结点的id,这里由于只有一个结点,所以可以把id随机指定为一个数,这里将id设置成1。若集群中有多个结点,则id不能相同
server_id=1
#日志保存位置,5.5版本不生效 默认与表空间同一目录
log_bin=mysql-bin
#binlog的格式也:有三种:STATEMENT,ROW,MIXED。
binlog-format=row
#maxwell我们选择row格式比较好
注:MySQL Binlog模式
Statement-based:基于语句,Binlog会记录所有写操作的SQL语句,包括insert、update、delete等。
优点: 节省空间
缺点: 有可能造成数据不一致,例如insert语句中包含now()函数。
Row-based:基于行,Binlog会记录每次写操作后被操作行记录的变化。
优点:保持数据的绝对一致性。
缺点:占用较大空间。
mixed:混合模式,默认是Statement-based,如果SQL语句可能导致数据不一致,就自动切换到Row-based。
Maxwell要求Binlog采用Row-based模式。
5.重启mysql
第一种方式:service mysql restart #如果不可以
第二种方式:
#先停止mysql服务命令
cd /usr/local/mysql/bin
service mysqld stop
#在启动服务器mysql命令:
cd /usr/local/mysql
./bin/mysqld_safe --defaults-file=/home/mysql/conf/my.cnf &
下载kafka :Apache Kafka
wget https://downloads.apache.org/kafka/3.4.0/kafka_2.12-3.4.0.tgz
解压安装包
tar -xzvf kafka_2.12-3.4.0.tgz
修改server.properties文件
cd /root/kafka/kafka_2.12-3.4.0/config
vim server.properties
broker.id=0
port=9092 #端口号
host.name=localhost #单机可直接用localhost
log.dirs=/opt/monitor/kafka/kafka_dat #日志存放路径可修改可不修改
zookeeper.connect=localhost:2181 #zookeeper地址和端口,单机配置部署,localhost:2181
4.修改zookeeper.properties文件
vim zookeeper.properties
5.启动kafka
bin/kafka-server-start.sh -daemon config/server.properties
或
/root/kafka/kafka_2.12-2.7.0/bin/kafka-server-start.sh /root/kafka/kafka_2.12-2.7.0/config/server.properties &
#创建topic
/root/kafka/kafka_2.12-3.4.0/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic maxwell
#启动生产者
/root/kafka/kafka_2.12-3.4.0/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic maxwell
#启动消费者
/root/kafka/kafka_2.12-3.4.0/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic maxwell --from-beginning
#删除Topic
/root/kafka/kafka_2.12-3.4.0/bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic maxwell
#查看Topic
/root/kafka/kafka_2.12-3.4.0/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
可以开启两个终端,一个发送消息,一个接受消息。效果如下:
下载安装包(Maxwell-1.30.0及以上版本不再支持JDK1.8)
https://github.com/zendesk/maxwell/releases/download/v1.29.2/maxwell-1.29.2.tar.gz
解压安装
tar -zxvf maxwell-1.29.2.tar.gz -C /root/maxwell/
拷贝一份原始配置文件
cp ./config.properties.example ./config.properties
修改配置文件
vim config.properties
配置选项 配置说明
producer=kafka #实时监控到的日志发送到kafka生产者
kafka.bootstrap.servers=localhost:9092 #配置的本地kafka节点IP地址以及端口号,kafka默认端口号9092
host=xx.xx.xx.xx #本地Mysql安装节点IP地址
user=******* #用户名
password=****** #用户密码(按照自己设置输入)
kafka_topic=maxwell #实时监控到的日志数据发送kafkaTopic下(默认发送maxwell)
#include_dbs=test #过滤除test数据库下所有日志数据
#include_tables= #表名,表名 可以指定不需要过滤日志数据的表名
5.登陆mysql,创建maxwell账号
mysql -uroot -p******
create database maxwell #创建maxwell数据库
grant all privileges on *.* to maxwell@localhost identified by '123456'; #创建maxwell账户
#修改maxwell账户权限
GRANT ALL PRIVILEGES ON *.* TO 'maxwell'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'maxwell'@localhost IDENTIFIED BY '123456' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'maxwell'@127.0.0.1 IDENTIFIED BY '123456' WITH GRANT OPTION;
刷新配置
flush privileges;
查看权限
SELECT User, Host, authentication_string FROM mysql.user;
6、启动maxwell
/root/maxwell/maxwell-1.29.2/bin/maxwell --config /root/maxwell/maxwell-1.29.2/config.properties --daemon
注意:如果maxwell启动报错,看看kafka的topic创建是否成功,还有就是kafka的消费偏移量问题,可以删除mysql中创建的maxwell数据库,重新在创建,然后在启动!
最后测试:
可以开3个命令窗口测试maxwell的binlog日志是否有进入kafka中
#!/bin/bash
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
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
;;
stop )
stop_maxwell
;;
restart )
stop_maxwell
start_maxwell
;;
esac
代码解释:
1:
wc -l 统计条数
如果查看进程有则统计结果必然是1,
否则进程死了的话结果就是0
2:
$?就是上面调用status_maxwell方法的结果result的值
-lt 小于
如果值小于1 说明没启动,那么现在启动
否则显示正在运行
3:
同理如上
-gt大于
4:
最后的case in 判断后面的第一个变量值来执行相应命令
参考文档:https://www.cnblogs.com/traditional/p/11709235.html