MySQL
请遵循以下说明以确保在 Tapdata 中成功添加和使用 MySQL 目标数据库。
支持版本
MySQL 5.0、5.1、5.5、5.6、5.7、8.x
作为源库
保障任务的顺利执行,您需要为 MySQL 数据库开启 Binlog(可实现增量数据同步),然后为数据复制/开发任务创建一个数据库账号。
- 登录 MySQL 数据库,执行下述格式的命令,创建用于数据同步/开发任务的账号。
- MySQL 5.x
- MySQL 8.x
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
CREATE USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
- username:用户名。
- password:密码。
- host:允许该账号登录的主机,百分号(%)表示允许任意主机。
示例:创建一个名为 tapdata 的账号。
CREATE USER 'tapdata'@'%' IDENTIFIED BY 'Tap@123456';
- 为刚创建的账号授予权限。
- 授予指定库 SELECT 权限
- 授予全局权限
GRANT SELECT, SHOW VIEW, CREATE ROUTINE, LOCK TABLES ON database_name.table_name TO 'username' IDENTIFIED BY 'password';
GRANT RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'username' IDENTIFIED BY 'password';
- database_name.table_name:要授予权限的库和表,名称间用英文句号(.)分隔,例如 demodata.customer。
- username:用户名。
- password:密码。
为保障读取 MySQL 数据库的增量数据,您需要跟随下述步骤开启 Binlog。
使用
vim
命令,修改$MYSQL_HOME/mysql.cnf
中的配置,例如:server_id = 223344
log_bin = mysql-bin
expire_logs_days = 1
binlog_format = row
binlog_row_image = full- server_id:对于 MySQL 中的每个服务器和复制客户端必须是唯一的,设置为大于 0 的整数
- log_bin:Binlog 序列文件的基本名称
- expire_logs_days:二进制日志文件保留的天数,到期自动删除
- binlog_format:设置为 row
- binlog_row_image:设置为 full
修改完成后,执行下述命令重启 MySQL 进程。
/etc/inint.d/mysqld restart
(可选)登录 MySQL 数据库,执行下述命令确认配置已生效,即输出的结果中,format 的值为 ROW。
SHOW VARIABLES LIKE 'binlog_format';
输出示例如下:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.00 sec)
作为目标库
- 登录 MySQL 数据库,执行下述格式的命令,创建用于数据同步/开发任务的账号。
- MySQL 5.x
- MySQL 8.x
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
CREATE USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
- username:用户名。
- password:密码。
- host:允许该账号登录的主机,百分号(%)表示允许任意主机。
示例:创建一个名为 tapdata 的账号。
CREATE USER 'tapdata'@'%' IDENTIFIED BY 'Tap@123456';
- 为刚创建的账号授予权限。
- 授予指定库 SELECT 权限
- 授予全局权限
GRANT SELECT, SHOW VIEW, CREATE ROUTINE, LOCK TABLES ON database_name.table_name TO 'username' IDENTIFIED BY 'password';
GRANT RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'username' IDENTIFIED BY 'password';
- database_name.table_name:要授予权限的库和表,名称间用英文句号(.)分隔,例如 demodata.customer。
- username:用户名。
- password:密码。
常见问题
问:可以使用从库作为源进行数据同步吗?
答:可以,除在从库上开启以上设置外,还需要:
执行下述命令,检查 MySQL 库的参数配置,确保 log_slave_updates 的值为 1。
Select @@log_slave_updates
检查主从库是否一致,不一致时可查看从节点状态:
SHOW SLAVE STATUS
,根据具体报错修复后,再执行数据同步。
问:Tapdata Cloud 连接测试时,提示错误:“Unknown error 1044”
答:如果已经授予了正确的权限,可以通过下述方法检查并修复:
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;