前提:在linux和windows系統的mysql數據庫中創建相同結構的數據庫和表,我的linux中mysql是用docker實現的(5.7版本),拉取mysql鏡像后,當我們創建容器時,一定要記得對目錄進行掛載,否則后期是無法開啟logbin功能的。
1.開啟mysql的logbin功能
#拉取鏡像 docker pull mysql #創建容器 docker run -p 33306:3306 --name mysql -v /root/mysql/conf:/etc/mysql/mysql.conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -di mysql
(1)可以通過進入mysql然后修改/etc/mysql/mysql.conf.d/mysqld.cnf文件
docker exec -it mysql /bin/bash cd /etc/mysql/mysql.conf.d #docker中並沒有vim命令 所以可以選擇安裝vim apt-get update apt-get install -y vim #安裝完后可以進行修改
(2)也可以使用命令進行修改
docker exec myMysql bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
docker exec myMysql bash -c "echo 'server-id=123454' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
(3)因為進行了目錄掛載所以也可以直接在宿主機上修改
然后重啟mysql
docker restart myMysql
檢查binlog功能是否有開啟
mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set (0.00 sec)
log_bin是ON則代表開啟了。
2.在linux中安裝canal服務並啟動
下載地址:
https://github.com/alibaba/canal/releases
(1)下載之后,放到目錄中,先創建好目錄,目錄任意,linux中要有Java環境
mv 安裝包 /usr/local/canal/
然后解壓
tar -zvxf 安裝包
(2)修改配置文件
vi conf/example/instance.properties
#需要改成自己的數據庫信息(linux中mysql的ip和端口) canal.instance.master.address=192.168.44.132:3306 #需要改成自己的數據庫用戶名與密碼 該用戶必須有權限來跨系統連接 #可以通過windows中數據庫連接工具進行測試,連上就代表有權限 canal.instance.dbUsername=canal canal.instance.dbPassword=canal #需要改成同步的數據庫表規則,例如只是同步一下表 #canal.instance.filter.regex=.*\\..* canal.instance.filter.regex=guli_ucenter.ucenter_member
若沒有權限,則給用戶賦予權限
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal'; GRANT SHOW VIEW, SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES;
注意:
mysql 數據解析關注的表,Perl正則表達式. 多個正則之間以逗號(,)分隔,轉義符需要雙斜杠(\\) 常見例子: 1. 所有表:.* or .*\\..* 2. canal schema下所有表: canal\\..* 3. canal下的以canal打頭的表:canal\\.canal.* 4. canal schema下的一張表:canal.test1 5. 多個規則組合使用:canal\\..*,mysql.test1,mysql.test2 (逗號分隔) 注意:此過濾條件只針對row模式的數據有效(ps. mixed/statement因為不解析sql,所以無法准確提取tableName進行過濾)
(3)進入bin目錄下啟動
cd bin sh startup.sh
(4)關閉服務
./stop.sh