最近研究了一下数据库问题,搭建了一主多从数据库,实现读写分离,后来发现canal实现数据库同步的机制和主从数据库一样,也就搭建了一个canal,可以和rabbitmq进行交互,代码订阅消息就可以获取数据库的变更信息,废话不说,现在开始
第一步:
从docker拉取数据库镜像,进行安装,我的数据库版本8.0.29、canal的版本为1.1.5
接下来就是安装数据库,执行以下语句,会创建一个mydata/mysql/文件,把配置信息挂载到这里
docker run -p 3306:3306 --name mysql \
-v /root/mysql/mysql-files:/var/lib/mysql-files \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.29
修改配置文件my.cnf
[mysqld]
# 服务器唯一id,默认值1
server-id=1
# 设置日志格式,默认值ROW
binlog_format=STATEMENT
# 二进制日志名,默认binlog
# log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
#binlog-do-db=mytestdb
# 设置不需要复制的数据库
#binlog-ignore-db=mysql
#binlog-ignore-db=infomation_schema
重新启动 docker restart 容器id
进入到容器内部docker exec -it 容器id bash,登录mysql -u root -p
创建canal 用户
create user 'extension_replace' @'192.168.1.130' identified by '1q2w3e4r5t6yWEQWEW7u*U&Y^T%R$E#W@QWDDSADSADASDSADSAD'
赋予创建用户权限
grant replication slave on *.* to 'extension_replace' @'192.168.1.130' identified by '1q2w3e4r5t6yWEQWEW7u*U&Y^T%R$E#W@QWDDSADSADASDSADSAD';
flush privileges;
然后查看时候开启 show slave status\G;
这就开启了主数据库日志,
第二步,安装canal,同上,拉去之后,执行下面启动语句
docker run --name canal -p 11111:11111 \
-v /mydata/canal/instance.properties:/home/admin/canal-server/conf/example/instance.properties \
-v /mydata/canal/canal.properties:/home/admin/canal-server/conf/canal.properties \
-v /mydata/canal/logs:/home/admin/canal-server/logs \
-d canal/canal-server:v1.1.5
然后修改配置文件canal.properties文件,将模式改为rabbitmq
并配置rabbitmq信息,配置里面的交换机要和rabbitmq里面的一致
继续配置实例新型instance.propertise里面的信息,配置主数据库的id:port,用户名密码,既可以了,然后重启canal
第三部
rabbitmq,和上面差不多,拉取镜像,启动,配置rabbitmq的信息皆可以了,