部署环境及需要的工具
虚拟机vm内centos7
安装mysql
xshell
xftp
使用shell查看binlog是否打开
- 开启mysql服务
service mysql start
- 进入mysql
mysql -u root -p
接着输入密码
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
1 row in set (0.00 sec)
1,修改 mysql 的配置文件 my.cnf
vi /etc/my.cnf
追加内容:
log-bin=mysql-bin #binlog文件名
binlog_format=ROW #选择row模式
server_id=1 #mysql实例id,不能和canal的slaveId重复
2,重启 mysql:
service mysql restart
3,登录 mysql 客户端,查看 log_bin 变量
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON|
+---------------+-------+
1 row in set (0.00 sec)
————————————————
如果显示状态为ON表示该功能已开启
在mysql里面添加以下的相关用户和权限
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
GRANT SHOW VIEW, SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
下载Canal
放到centos的 /usr/local/canal 目录下
利用xftp拷贝过去
使用命令解压
tar zxvf canal.deployer-1.1.5.tar.gz
接着修改配置
可以直接操作
conf/example/instance.properties
#需要改成自己的数据库信息
canal.instance.master.address=192.168.152.131:3306
#需要改成自己的数据库用户名与密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
#需要改成同步的数据库表规则,例如只是同步一下表
#canal.instance.filter.regex=.*\\..*
canal.instance.filter.regex=guli_ucenter.ucenter_member
这边需要先两边都创建数据库进行后续的测试
可以使用 Navicat Premium 15连接两边的数据库创建
接着启动他
sh bin/startup.sh
centos记得放开端口 11111,不然后续会超时
firewall-cmd --zone=public --add-port=11111/tcp --permanent # 开放11111端口
firewall-cmd --zone=public --remove-port=11111/tcp --permanent #关闭11111端口
firewall-cmd --reload # 配置立即生效
新增的代码有问题,int类型为null 的时候会报错,为null的时候不应该去赋值,要跳过
//可为NULL,但是是NULL的,不需要处理
if (columnList.get(i).getIsNull() && !columnList.get(i).hasValue()) {
continue;
}
当时复制了表,却一直报编码错误
windows默认创建的数据库
字符集是 utf8mb4
排序规则是 utf8mb4_0900_ai_ci
centos7创建的是
字符集是 utf8
排序规则是 utf8_general_ci
右键-》转存sql文件
保存后打开这个文件
搜索里面是 utf8mb4的替换为utf8
utf8mb4_0900_ai_ci替换为utf8_general_ci
这样的语句在centos7里面执行才会成功。