DRS要求的My SQL权限有哪些
DRS在迁移过程中,对帐号有一定的权限要求,本章节主要介绍MySQL引擎的权限要求。
权限要求
源和目标库的连接账号需要具有登录权限,如果没有该账号,可以通过如下方式创建,以user1为例。
参考语句:CREATE USER 'user1'@'host' IDENTIFIED BY 'password';
DRS的实时迁移功能的权限要求,表6-1中以user1为例提供参考语句。
权限要求及参考语句
功能模块 | 源/业务数据库 | 目标/灾备数据库 |
---|---|---|
实时迁移 | 全量迁移权限要求:SELECT、SHOW VIEW、EVENT。参考语句:GRANTSELECT, SHOW VIEW, EVENTON . TO'user1';全量+增量迁移权限要求:SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、REFERENCES、WITH GRANT OPTION。当目标库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。l 其中,REPLICATION SLAVE、REPLICATION CLIENT是全局权限,必须单独开启。参考语句如下:GRANTREPLICATION SLAVE, REPLICATION CLIENTON . TO'user1';l SELECT、SHOW VIEW、EVENT、LOCK TABLES是非全局权限,参考语句如下:GRANTSELECT, SHOW VIEW, EVENT, LOCK TABLESON[待迁移数据库].*TO'user1'; | 全量迁移权限要求:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。参考语句:GRANTSELECT, CREATE, ALTER, DROP, DELETE, INSERT, UPDATE, INDEX, EVENT, CREATE VIEW, CREATE ROUTINE, TRIGGERON . TO'user1'WITH GRANT OPTION;全量+增量迁移权限要求:SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、REFERENCES、WITH GRANT OPTION。当目标库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。参考语句:GRANTSELECT, CREATE, ALTER, DROP, DELETE, INSERT, UPDATE, INDEX, EVENT, CREATE VIEW, CREATE ROUTINE, TRIGGER, REFERENCESON[待迁移数据库].*TO'user1'WITH GRANT OPTION; |
请在以上参考语句后执行 flush privileges; 使授权生效。
用户迁移权限要求
用户迁移时帐户需要有mysql.user的SELECT权限。
参考语句:
GRANT SELECT ON mysql.user TO 'user1'@' host ' ;
GRANT SELECT ON mysql.user_view TO 'user1';
目标数据库账号需要有所有库的SELECT,INSERT,UPDATE,DELETE, WITH GRANT OPTION权限。
参考语句:GRANT SELECT, INSERT, UPDATE, DELETE ON . TO 'user1' WITH GRANT OPTION ;
授权操作说明
创建用户
操作方式:
CREATE USER ' username '@' host ' IDENTIFIED BY ' password ';
· username:待创建的账号。
· host:允许该账号登录的主机,如果允许该账号从任意主机登录数据库,可以使用%。
· password:账号的密码。
授予相应权限
操作方式:
GRANT privileges **ON **databasename.tablename TO ' username '@' host ' WITH GRANT OPTION ;
flush privileges;
· privileges:授予该账号的操作权限,如SELECT、INSERT、UPDATE等,如果要授予该账号所有权限,则使用ALL
· databasename:数据库名。如果要授予该账号具备所有数据库的操作权限,则使用*。
· tablename:表名。如果要授予该账号具备所有表的操作权限,则使用*。
· username:待授权的账号。
· host:允许该账号登录的主机,如果允许该账号从任意主机登录,则使用%。
· WITH GRANT OPTION:授予该账号使用GRANT命令的权限,该参数为可选。
如何将源数据库的用户与权限导出,再导入到目标数据库
步骤 1 选择一台可以访问源数据库的虚拟机。
步骤 2 执行如下命令后,输入密码并回车,将源库用户导出到临时文件“users.sql”中。
mysql -h 'host' -u 'user' -p **** -N $@ -e "SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';') AS query FROM mysql.user" > /tmp/users.sql
其中的 'host' 替换为源数据库的访问IP地址,*'user'** ***替换为源数据库的用户名。
步骤 3 执行如下命令,将源数据库中原有用户的授权信息导出到文件“grants.sql”中**。**
mysql -h 'host' -u 'user' -p -N $@ -e ** "** source /tmp/users.sql" > /tmp/grants.sql
sed -i 's/$/;/g' /tmp/grants.sql
其中的 'host' 替换为源数据库的访问IP地址,*'user'** ***替换为源数据库的用户名。
步骤 4 命令运行成功后,打开“grants.sql”文件可以看到类似以下的结果。
-- Grants for root@%** **
GRANT ALL PRIVILEGES ON . TO 'root'@'%';** **
-- Grants for testt@%** **
GRANT SELECT, INSERT, UPDATE, DELETE ON . TO 'testt'@'%';** **
-- Grants for debian-sys-maint@localhost
GRANT ALL PRIVILEGES ON . TO 'debian-sys-maint'@'localhost' WITH GRANT OPTION;** **
-- Grants for mysql.session@localhost** **
GRANT SUPER ON . TO 'mysql.session'@'localhost';
GRANT SELECT ON performance_schema
.* TO 'mysql.session'@'localhost';** **
GRANT SELECT ON mysql
.user
TO 'mysql.session'@'localhost';** **
-- Grants for mysql.sys@localhost** **
GRANT USAGE ON . TO 'mysql.sys'@'localhost';
GRANT TRIGGER ON sys
.* TO 'mysql.sys'@'localhost';
GRANT SELECT ON sys
.sys_config
TO 'mysql.sys'@'localhost';** **
-- Grants for root@localhost** **
GRANT ALL PRIVILEGES ON . TO 'root'@'localhost' WITH GRANT OPTION;
GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;
步骤 5 在[步骤 4 ]( " ")显示的结果中,可以看到源数据库中所有的用户以及对应的权限,请选择所有需要的用户,逐个添加到本云关系型数据库MySQL中。