9.3 实时流外部数据库权限准备
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 | 使连接器可以使用以下语句:
执行快照和解析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。