MySQL需要具备哪些权限才能完成数据传输?
在使用DTS执行MySQL的数据传输时,需要区分是迁移还是同步任务,MySQL是源库还是目标库,根据不同的情况,来准备相关的权限。
- 数据迁移
数据库 所需权限 参考赋权语句 源库 源库为MySQL5.7时:
对MySQL库的SELECT权限。
对待迁移库的SELECT,EVENT,TRIGGER权限。
部分全局权限:
LOCK TABLES
REPLICATION CLIENT
REPLICATION SLAVE
SHOW VIEW
PROCESS
如果是整实例迁移,需要对所有数据库的查询权限。
源库为MySQL8.0时:
对MySQL库的SELECT权限。
对待迁移库的SELECT, EXECUTE, EVENT,TRIGGER权限。
部分全局权限:
PROCESS
LOCK TABLES
REPLICATION CLIENT
REPLICATION SLAVE
SHOW VIEW
SHOW_ROUTINE
如果是整实例迁移,需要对所有数据库的查询权限。
源库为MySQL5.7时: GRANT SELECT ON mysql.* TO '迁移账号'@'%';
GRANT SELECT, EVENT,TRIGGER ON 待迁移的库.* TO '迁移账号'@'%';
GRANT LOCK TABLES, REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW, PROCESS ON *.* TO '迁移账号'@'%';
源库为MySQL8.0时:
GRANT SELECT ON mysql.* TO '迁移账号'@'%';
GRANT SELECT, EXECUTE, EVENT, TRIGGER ON 待迁移的库.* TO '迁移账号'@'%';
GRANT PROCESS, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT, SHOW VIEW, SHOW_ROUTINE ON *.* TO '迁移账号'@'%';
目标库
以下全局权限:
ALTER
ALTER ROUTINE
CREATE
CREATE ROUTINE
CREATE TEMPORARY TABLES
CREATE USER
CREATE VIEW
DELETE
DROP
EVENT
EXECUTE
INDEX
INSERT
LOCK TABLES
PROCESS
REFERENCES
SELECT
SHOW DATABASES
SHOW VIEW
TRIGGER
UPDATEGRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE USER, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, PROCESS, REFERENCES, SELECT, SHOW DATABASES, SHOW VIEW, TRIGGER, UPDATE ON *.* TO '迁移账号'@'%';
- 数据同步
数据库 所需权限 参考赋权语句 源库 源库为MySQL5.7时:
对MySQL库的SELECT权限。
对待同步库的SELECT,EVENT,TRIGGER权限。
部分全局权限:
LOCK TABLES
REPLICATION CLIENT
REPLICATION SLAVE
SHOW VIEW
PROCESS
如果是整库同步,需要对所有数据库的查询权限。
源库为MySQL8.0时:
对MySQL库的SELECT权限。
对待同步库的SELECT, EXECUTE, EVENT,TRIGGER权限。
部分全局权限:
PROCESS
LOCK TABLES
REPLICATION CLIENT
REPLICATION SLAVE
SHOW VIEW
SHOW_ROUTINE
如果是整库同步,需要对所有数据库的查询权限。
源库为MySQL5.7时: GRANT SELECT ON mysql.* TO '同步账号'@'%';
GRANT SELECT , EVENT,TRIGGER ON 待同步的库.* TO '同步账号'@'%';
GRANT LOCK TABLES, REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW, PROCESS ON *.* TO '同步账号'@'%';
源库为MySQL8.0时:
GRANT SELECT ON mysql.* TO '同步账号'@'%';
GRANT SELECT, EXECUTE, EVENT, TRIGGER ON 待同步的库.* TO '同步账号'@'%';
GRANT PROCESS, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT, SHOW VIEW, SHOW_ROUTINE ON *.* TO '同步账号'@'%';
目标库
以下全局权限:
ALTER
ALTER ROUTINE
CREATE
CREATE ROUTINE
CREATE TEMPORARY TABLES
CREATE USER
CREATE VIEW
DELETEDROP
EVENTEXECUTE
INDEX
INSERT
LOCK TABLESPROCESS
REFERENCESSELECT
SHOW DATABASES
SHOW VIEW
TRIGGER
UPDATE
GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE USER, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, PROCESS, REFERENCES, SELECT, SHOW DATABASES, SHOW VIEW, TRIGGER, UPDATE ON *.* TO '同步账号'@'%';
注意如果待迁移/同步对象包含用户自定义function,则在满足上述权限的基础上,目标端数据库同时需将log_bin_trust_function_creators设置为1,参考语句如下:
set global log_bin_trust_function_creators = 1;
定时任务是否需要特定权限的用户才可以执行?
天翼云DTS支持配置迁移/同步任务时,按需开启定时任务,用户可以配置在特定的时间节点启动任务。定时任务的开启/关闭,和当前登录账号权限无关。也即所有天翼云官网门户经过实名认证的个人/企业账号均可以在配置DTS任务时按需开启定时功能。
DTS任务运行过程中为什么提示账号权限不足?
DTS要正常完成数据迁移/同步,需要迁移/同步账号具备一定的权限。一旦账号权限不足,就可能导致数据传输失败。为确保数据传输正常进行,请给待迁移/同步账号赋予特定的权限,具体可参照:
将MySQL迁移到MySQL的【数据库账号及权限】部分内容。
将PostgreSQL迁移到PostgreSQL的【数据库账号及权限】部分内容。
将DDS/MongoDB副本集迁移到DDS/MongoDB副本集的【数据库账号及权限】部分内容。
将DDS/MongoDB分片集群迁移到DDS/MongoDB分片集群的【数据库账号及权限】部分内容。
将DDS/MongoDB副本集迁移到DDS/MongoDB分片集群的【数据库账号及权限】部分内容。
将SQL Server迁移到SQL Server的【数据库账号及权限】部分内容。
将MySQL同步到MySQL的【数据库账号及权限】部分内容。
MySQL实例间的双向同步的【数据库账号及权限】部分内容。
将PostgreSQL同步到PosgreSQL的【数据库账号及权限】部分内容。
PostgreSQL实例间的双向同步的【数据库账号及权限】部分内容。
将SQL Server同步到SQL Server的【数据库账号及权限】部分内容。