10.11 Kafka + Canal
业务库 MySQL 5.7 (binlog) → Canal (解析 binlog) → Kafka (topic) → 后续数仓 ODS 层
端口 3307 /opt/module/canal /opt/module/kafka
1. 下载 MySQL 5.7 二进制包
cd /opt/module
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz
2. 解压
tar -zxvf mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.43-linux-glibc2.12-x86_64 mysql
rm -f mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz
3. 创建数据和日志目录
mkdir -p /opt/module/mysql/data
mkdir -p /opt/module/mysql/log
chown -R hadoop:hadoop /opt/module/mysql
4. 初始化数据库(生成临时 root 密码)
cd /opt/module/mysql
bin/mysqld --initialize --user=hadoop --basedir=/opt/module/mysql --datadir=/opt/module/mysql/data
5. 记下临时密码(在输出最后一行)
[Note] A temporary password is generated for root@localhost: xxxxxxxx
6. 创建配置文件
/opt/module/mysql/my.cnf
my.cnf for MySQL 5.7 (port 3307, binlog enabled):
```ini
[mysqld]
port=3307
basedir=/opt/module/mysql
datadir=/opt/module/mysql/data
socket=/opt/module/mysql/mysql.sock
log-error=/opt/module/mysql/log/mysqld.log
pid-file=/opt/module/mysql/mysqld.pid
# binlog 配置(Canal 必需)
server-id=1
log-bin=mysql-bin
binlog-format=ROW
binlog_row_image=FULL
# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 其他
max_connections=200
- Phase 3 架构概述 (brief)
- TodoWrite for Phase 3
- Step 1: Install MySQL 5.7
Step 1: 在 VM 里装 MySQL 5.7(二进制包,端口 3307)
用二进制 tarball 装的好处:不跟 MariaDB 的 yum 包冲突,独立目录,装完即用。整个过程 hadoop 用户操作(除了装 libaio 依赖需要 root)。
1.1 装 libaio 依赖(root 用户)
MySQL 5.7 二进制包初始化时依赖 libaio 库,CentOS 7 最小化安装可能没有。
su - root
yum install -y libaio
exit
1.2 下载 MySQL 5.7 二进制包(hadoop 用户)
cd /opt/module
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz
如果
wget不存在,改用curl -O代替。下载约 670MB,耐心等。
1.3 解压并重命名
tar -zxvf mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.43-linux-glibc2.12-x86_64 mysql
rm -f mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz
1.4 创建数据和日志目录
mkdir -p /opt/module/mysql/data
mkdir -p /opt/module/mysql/log
chown -R hadoop:hadoop /opt/module/mysql
1.5 编写配置文件 my.cnf
创建 /opt/module/mysql/my.cnf:
[mysqld]
# 基本配置
port=3307
basedir=/opt/module/mysql
datadir=/opt/module/mysql/data
socket=/opt/module/mysql/mysql.sock
log-error=/opt/module/mysql/log/mysqld.log
pid-file=/opt/module/mysql/mysqld.pid
# binlog 配置(Canal 必需,Step 2 会详细讲)
server-id=1
log-bin=mysql-bin
binlog-format=ROW
binlog_row_image=FULL
# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 连接数
max_connections=200
关键点:端口设 3307 避开 MariaDB 的 3306;socket 路径也独立,不和 MariaDB 的
/var/lib/mysql/mysql.sock冲突。
1.6 初始化数据库
cd /opt/module/mysql
bin/mysqld --defaults-file=/opt/module/mysql/my.cnf --initialize --user=hadoop
初始化完成后,查看日志里的临时 root 密码:
cat /opt/module/mysql/log/mysqld.log | grep "temporary password"
输出类似:
[Note] A temporary password is generated for root@localhost: xxxxxxxxxx
把临时密码记下来,下一步要用。
1.7 启动 MySQL
bin/mysqld_safe --defaults-file=/opt/module/mysql/my.cnf --user=hadoop &
等几秒,检查是否启动成功:
# 看进程
ps -ef | grep mysqld | grep -v grep
# 用 socket 连接(注意指定 socket 路径,因为不是默认 3306)
bin/mysql -uroot -p -S /opt/module/mysql/mysql.sock
输入临时密码,能进 mysql> 提示符就说明成功了。
1.8 修改 root 密码 + 开启远程访问
在 mysql> 提示符里执行:
-- 改 root 密码为 123456(跟其他服务统一,方便记忆)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
-- 允许 root 远程连接(Canal 连接需要)
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
-- 验证 binlog 是否开启
SHOW VARIABLES LIKE 'log_bin'; -- 应该是 ON
SHOW VARIABLES LIKE 'binlog_format'; -- 应该是 ROW
SHOW VARIABLES LIKE 'server_id'; -- 应该是 1
exit;
1.9 (可选)配环境变量方便调用
在 ~/.bash_profile 里加一行:
export MYSQL_HOME=/opt/module/mysql
export PATH=$PATH:$MYSQL_HOME/bin
然后 source ~/.bash_profile,之后可以直接用 mysql -uroot -p -P 3307 -h 127.0.0.1 连接。
验证清单(全部满足才算 Step 1 完成):
ps -ef | grep mysqld能看到 mysqld 进程,端口 3307mysql -uroot -p能登录,密码已改为 123456SHOW VARIABLES LIKE 'log_bin'返回ONSHOW VARIABLES LIKE 'binlog_format'返回ROW
Step 2(建 food_order 业务库 + Canal 复制用户)。

浙公网安备 33010602011771号