Universe 帮助中心

9.3 实时流外部数据库权限准备

创建于 2022-10-21 / 最近更新于 2022-11-04 / 1104
字体: [默认] [大] [更大]

MySQL(源库)

A. MySQL数据库需要开启row格式的binlog日志

(1)登录数据库后,使用下面命令检查是否开启binlog:

show variables like '%log_bin%';

如图所示,log_bin参数为OFF,表示数据库未开启binlog,需要手动开启。

(2)修改MySQL的配置文件,一般路径为/etc/my.cnf或/etc/mysql/my.cnf,查看配置文件:

vim /etc/my.cnf

在/etc/my.cnf中的[mysqld]下面增加内容(server_id可设置为随机的6位数以下的数字),保存并退出:

server_id=13306
log_bin = mysql-bin
binlog_format = ROW

重启MySQL服务:

service mysql restart 或 systemctl restart mysqld

(3)重启完成后登录MySQL服务器,再次使用下面命令检查binlog是否成功开启:

show variables like '%log_bin%';
show variables like 'binlog_format';

如图所示,则表示row格式的binlog开启成功。

B. MySQL数据库用户需要开启以下权限:

权限

描述

SELECT

使连接器能够获取数据库表的数据,仅在执行快照时使用

RELOAD

使连接器可以使用FLUSH语句清除或重新加载内部缓存,刷新表或获取锁,仅在执行快照时使用

SHOW DATABASES

使连接器可以查看数据库名称,仅在执行快照时使用。

REPLICATION SLAVE

使连接器能够连接并读取MySQL服务器的Binlog

REPLICATION CLIENT

使连接器可以使用以下语句:

  • SHOW MASTER STATUS

  • SHOW SLAVE STATUS

  • SHOW BINARY LOGS

执行快照和解析binlog日志时需要使用

使用如下方式检查用户权限是否足够并为权限不足的用户授权:

假设实时同步使用的用户为guandata,想要检查guandata用户的权限,可以使用管理员权限用户登录MySQL,执行如下命令:

show grants for guandata;

如图所示,该用户目前只具有全局的SELECT权限,我们需要为其授予RELOAD、SHOW DATABASES、REPLICATION SLAVE、REPLICATION CLIENT权限,执行如下命令:

grant RELOAD,SHOW DATABASES,REPLICATION SLAVE,REPLICATION CLIENT on *.* to guandata@'%';

执行结果如上,表示我们完成了对实时同步用户的授权操作。

C. 需要同步的表必须要有主键并且主键不能为null



PostgreSQL(目标库)

PostgreSQL数据库用户需要开启以下权限:

权限

描述

INSERT

使连接器能够完成数据同步所需要的权限

UPDATE

使连接器能够完成数据同步所需要的权限

DELETE

使连接器能够完成数据同步所需要的权限

使用如下方式检查用户权限是否足够并为权限不足的用户授权:

假设实时同步使用的用户为guandata,想要检查guandata用户的权限,可以使用管理员权限用户登录PostgreSQL,执行如下命令:

select * from information_schema.table_privileges where grantee='guandata';

如图所示,该用户目前没有任何表的权限,我们需要为其授予需要同步的数据库下的表的权限,同时授予其INSERT、UPDATE、DELETE权限,执行如下命令:

grant all privileges on database test to guandata;

将数据库 test 权限授予 guandata,但此时用户还是没有读写权限,需要继续授权表,执行如下命令:

注:该命令必须在指定的数据库下执行,所以执行命令前需要切换到对应数据库下

\c test
grant insert,update,delete on all tables in schema public to guandata;

该SQL表示授予guandata用户当前数据库下public schema的所有表的insert、update、delete权限。



如果要授予单独一个表的权限,则可执行:

grant insert,update,delete on table orders to guandata;

该SQL表示将orders这张表的insert、update、delete权限授予guandata。


0 人点赞过