MySQL

本文档提供有关设置 MySQL 连接配置

支持的版本

  • MySQL 5.0

  • MySQL 5.1

  • MySQL 5.5

  • MySQL 5.6

  • MySQL 5.7

  • MySQL 8.x

先决条件

1. 作为源端数据库

开启binlog

注意:

  1. 必须开启 MySQL 的 binlog ,Tapdata 才能正常完成同步工作。

  2. 级连删除(CASCADE DELETE),这类由数据库产生的删除不会记录在binlog内,所以不被支持。

修改 $MYSQL_HOME/mysql.cnf , 例如:

server_id = 223344
log_bin = mysql-bin
expire_logs_days = 1
binlog_format = row

配置解释:

  • server-id: 对于 MySQL 中的每个服务器和复制客户端必须是唯一的

  • binlog_format:必须设置为 row 或者 ROW

  • expire_logs_days:二进制日志文件保留的天数,到期会自动删除。

  • log_bin:binlog 序列文件的基本名称

重启 MySQL

/etc/inint.d/mysqld restart

验证 binlog 已启用,请在 mysql shell 执行以下命令

show variables like 'binlog_format';

输出的结果中,format value 应该是"ROW"

创建MySQL账号

Mysql8以后,对密码加密的方式不同,请注意使用对应版本的方式,设置密码,否则会导致无法进行增量同步

  • 5.x版本

create user 'username'@'localhost' identified by 'password';
  • 8.x版本

// 创建用户
create user 'username'@'localhost' identified with mysql_native_password by 'password';
// 修改密码
alter user 'username'@'localhost' identified with mysql_native_password by 'password';

给 tapdata 账号授权

对于某个数据库赋于select权限

GRANT SELECT, SHOW VIEW, CREATE ROUTINE, LOCK TABLES ON <DATABASE_NAME>.<TABLE_NAME> TO 'tapdata' IDENTIFIED BY 'password';

对于全局的权限

GRANT RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'tapdata' IDENTIFIED BY 'password';

2. 作为目标数据库

对于某个数据库赋于全部权限

GRANT ALL PRIVILEGES ON <DATABASE_NAME>.<TABLE_NAME> TO 'tapdata' IDENTIFIED BY 'password';

对于全局的权限

GRANT PROCESS ON *.* TO 'tapdata' IDENTIFIED BY 'password';

常见错误

  • Unknown error 1044

如果权限已经grant了,但是通过tapdata还是无法通过测试连接,可以通过下面的步骤检查并修复

SELECT host,user,Grant_priv,Super_priv FROM mysql.user where user='username';
查看Grant_priv字段的值是否为Y
如果不是,则执行以下命令
UPDATE mysql.user SET Grant_priv='Y' WHERE user='username';
FLUSH PRIVILEGES;