
# DRS要求的MySQL权限有哪些
DRS在迁移、同步、灾备过程中，对账号有一定的权限要求，本章节主要介绍MySQL引擎的权限要求。
#### 权限要求
- 源和目标库的连接账号需要具有登录权限，如果没有该账号，可以通过如下方式创建，以user1为例。 参考语句：CREATE USER 'user1'@'host' IDENTIFIED BY 'password';
  
- DRS的实时迁移、实时同步、实时灾备功能的权限要求，[表1 权限要求]中以user1为例提供参考语句。
   表1权限要求及参考语句 
  | 功能模块 | 源/业务数据库                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 目标/灾备数据库                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
  |:---|:---|:---|
  | 实时迁移 | **全量迁移权限要求：** SELECT、SHOW VIEW、EVENT。 参考语句：**GRANT** SELECT, SHOW VIEW, EVENT **ON** \*.\* **TO** 'user1'; **全量+增量迁移权限要求：** SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。 - 其中，REPLICATION SLAVE、REPLICATION CLIENT是全局权限，必须单独开启。参考语句如下： **GRANT** REPLICATION SLAVE, REPLICATION CLIENT **ON** \*.\* **TO** 'user1';   - SELECT、SHOW VIEW、EVENT、LOCK TABLES是非全局权限，参考语句如下： **GRANT** SELECT, SHOW VIEW, EVENT, LOCK TABLES **ON** \[待迁移数据库\].\* **TO** 'user1';   - 当业务数据库为8.0.2以上版本时，还需要有XA_RECOVER_ADMIN权限。   | **全量迁移权限要求：** 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权限。 参考语句：**GRANT** SELECT, CREATE, ALTER, DROP, DELETE, INSERT, UPDATE, INDEX, EVENT, CREATE VIEW, CREATE ROUTINE, TRIGGER **ON** \*.\* **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权限。 参考语句：**GRANT** SELECT, CREATE, ALTER, DROP, DELETE, INSERT, UPDATE, INDEX, EVENT, CREATE VIEW, CREATE ROUTINE, TRIGGER, REFERENCES **ON** \[待迁移数据库\].\* **TO** 'user1' **WITH GRANT OPTION**; |
  | 实时同步 | SELECT、SHOW VIEW、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。全量+增量任务，当源数据库为8.0.2及以上版本时，还需要授予XA_RECOVER_ADMIN权限，以防启动或编辑时未提交的XA事务导致数据有损。 - 其中，REPLICATION SLAVE、REPLICATION CLIENT是全局权限，必须单独开启。参考语句如下： **GRANT** REPLICATION SLAVE, REPLICATION CLIENT **ON** \*.\* **TO** 'user1';   - SELECT、SHOW VIEW、LOCK TABLES是非全局权限，参考语句如下： **GRANT** SELECT, SHOW VIEW, EVENT, LOCK TABLES **ON** \[待同步数据库\].\* **TO** 'user1';   - 当业务数据库为8.0.2以上版本时，还需要有XA_RECOVER_ADMIN权限。                                                                                                                                                                                                                                                                                                                          | SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、ALTER、CREATE VIEW、CREATE ROUTINE、REFERENCES。 参考语句：**GRANT** SELECT, CREATE, DROP, DELETE, INSERT, UPDATE, ALTER, REFERENCES**ON** \[待同步数据库\].\* TO 'user1';                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
  | 实时灾备 | SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、TRIGGER、REFERENCES、SHOW VIEW、EVENT、INDEX、LOCK TABLES、CREATE VIEW、 CREATE ROUTINE、 ALTER ROUTINE、 CREATE USER、RELOAD、REPLICATION SLAVE、REPLICATION CLIENT、WITH GRANT OPTION，RDS for MySQL实例的root账户默认已具备上述权限。当业务数据库为8.0.14-8.0.18版本时，还需要有SESSION_VARIABLES_ADMIN权限。当业务数据库为8.0.2及以上版本时，还需要授予XA_RECOVER_ADMIN权限，以防启动时未提交的XA事务导致数据有损。RDS for MySQL实例的root账户默认已具备上述权限。 当业务数据库为8.0.2以上版本时，还需要有XA_RECOVER_ADMIN权限。 参考语句：**GRANT** SELECT,CREATE,ALTER,DROP,DELETE,INSERT,UPDATE,TRIGGER,SHOW VIEW,EVENT,INDEX,LOCK TABLES,CREATE VIEW,CREATE ROUTINE,ALTER ROUTINE,CREATE USER,RELOAD,REPLICATION SLAVE,REPLICATION CLIENT **ON** \*.\* **TO** 'user1';                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、TRIGGER、REFERENCES、SHOW VIEW、EVENT、INDEX、LOCK TABLES、CREATE VIEW、 CREATE ROUTINE、 ALTER ROUTINE、 CREATE USER、RELOAD、REPLICATION SLAVE、REPLICATION CLIENT、WITH GRANT OPTION，RDS for MySQL实例的root账户默认已具备上述权限。当灾备数据库为8.0.14-8.0.18版本时，还需要有SESSION_VARIABLES_ADMIN权限。 参考语句：**GRANT** SELECT,CREATE,ALTER,DROP,DELETE,INSERT,UPDATE,TRIGGER,REFERENCES,SHOW VIEW,EVENT,INDEX,LOCK TABLES,CREATE VIEW,CREATE ROUTINE,ALTER ROUTINE,CREATE USER,RELOAD,REPLICATION SLAVE,REPLICATION CLIENT **ON** \*.\* **TO** 'user1'@'%' **WITH GRANT OPTION**;                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
     
  ![](https://support.huaweicloud.com/drs_faq/public_sys-resources/note_3.0-zh-cn.png)
  请在以上参考语句后执行flush privileges;使授权生效。
  
 
- 用户迁移权限要求 用户迁移时，如果源数据库为8.0版本，需要有mysql.user表的SELECT权限；如果为5.7及以下版本，则需要mysql系统库的SELECT权限，源数据库为阿里云数据库，则账户需要同时具有mysql.user和mysql.user_view的SELECT权限。
  参考语句：
  GRANT SELECT ON mysql.user TO 'user1'@'*host*' ;
  GRANT SELECT ON mysql.\* 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;
  
- 函数、存储过程迁移权限要求 对于源数据库为MySQL 5.6、5.7，如果您需要迁移函数、存储过程，则需要MySQL系统库的proc表的SELECT权限。
  参考语句：
  GRANT SELECT ON \`mysql\`.\`proc\` TO 'user1'@'*host*';
  对于源数据库为MySQL 8.0以上版本的时候，如果您需要迁移函数、存储过程，则需要整个实例的SELECT权限。对于MySQL 8.0.20版本以上，也可以使用SHOW_ROUTINE权限来迁移函数、存储过程。参考语句：
  GRANT SELECT ON \*.\* TO 'user1'@'*host*';
  或者：
  GRANT SHOW_ROUTINE ON \*.\* TO 'user1'@'*host*';
  参考资料：<https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_show-routine>
  DRS迁移完成后，可通过[数据对比](https://support.huaweicloud.com/realtimemig-drs/drs_02_0007.html)功能查看迁移前后数据是否一致。
  
#### 授权操作说明
- 创建用户 操作方式：
  CREATE USER '*username* '@'*host* ' IDENTIFIED BY '*password*';
  · username：待创建的账号。
  · host：允许该账号登录的主机，如果允许该账号从任意主机登录数据库，可以使用%。
  · password：账号的密码。
  例如：授予drsmigration账号具备所有数据库和表的所有权限，并允许从任意主机登录数据库，命令如下。
  CREATE USER '*drsmigration* '@'%' IDENTIFIED BY '*Drs123456*';
  
- 授予相应权限 操作方式：
  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命令的权限，该参数为可选。
  例如：创建一个账号，账号名为drsmigration，密码为Drs123456，并允许从任意主机登录数据库，命令如下。
  GRANT ALL ON \*.\* TO 'drsmigration'@'%';
  
 
