我现在使用mysqldump进行数据库备份,我想重新创建一个用户专门用来备份,但是创建完用户后,在备份的过程中出现这样的错误提示,mysqldump: backupsso has insufficent privileges to SHOW CREATE FUNCTION `fdm_exp_rank`!,应该是说对函数没有权限,但是我查看了官方文档,并没有看到哪个权限是用于函数的,以下是我创建用户的语句,请教还少了什么权限:
GRANT SELECT,LOCK TABLES,SHOW VIEW,EXECUTE,CREATE ROUTINE
 ON internaltest0.* TO backupsso@"%" IDENTIFIED BY "backupsso"; 

解决方案 »

  1.   

    关键是我不能使用root用户    最好是使用一个专门用户    因为我是写脚本备份的
      

  2.   

    试试这条
    GRANT  SELECT, RELOAD, LOCK_TABLES, REPL_CLIREPL_CLIENT
     ON internaltest0.* TO backupsso@"%" IDENTIFIED BY "backupsso";  
      

  3.   

    理解,
    有create function权限的, 手册:
    13.5.1.3. GRANT和REVOKE语法
    GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...
        ON [object_type] {tbl_name | * | *.* | db_name.*}
        TO user [IDENTIFIED BY [PASSWORD] 'password']
            [, user [IDENTIFIED BY [PASSWORD] 'password']] ...
        [REQUIRE
            NONE |
            [{SSL| X509}]
            [CIPHER 'cipher' [AND]]
            [ISSUER 'issuer' [AND]]
            [SUBJECT 'subject']]
        [WITH with_option [with_option] ...]object_type =
        TABLE
      | FUNCTION
      | PROCEDUREwith_option =
        GRANT OPTION
      | MAX_QUERIES_PER_HOUR count
      | MAX_UPDATES_PER_HOUR count
      | MAX_CONNECTIONS_PER_HOUR count
      | MAX_USER_CONNECTIONS countREVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...
        ON [object_type] {tbl_name | * | *.* | db_name.*}
        FROM user [, user] ...REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
      

  4.   

    这些权限赋予用户,在备份的时候还是会报错:
    mysqldump: backupsso has insufficent privileges to SHOW CREATE FUNCTION `fdm_exp_rank`!我的权限语句:
    GRANT SELECT,LOCK TABLES,SHOW VIEW,EXECUTE,CREATE ROUTINE,ALTER ROUTINE
     ON internaltest0.* TO backupsso@"%" IDENTIFIED BY "backupsso"; 
      

  5.   

    我使用show grants查看的权限:
    GRANT USAGE ON *.* TO 'backupsso'@'%' IDENTIFIED BY PASSWORD '13a446e902d675f6'
    GRANT SELECT, LOCK TABLES, EXECUTE, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE ON `internaltest0`.* TO 'backupsso'@'%'
    GRANT EXECUTE ON FUNCTION `internaltest0`.`fdm_exp_rank` TO 'backupsso'@'%'这样看来,我应该是对函数有权限查看的,但是为什么报那样的错呢。
      

  6.   

    mysqldump: backupsso has insufficent privileges to SHOW CREATE FUNCTION `fdm_exp_rank`!其实错误信息也已经提示你了。SHOW CREATE FUNCTION 把这个权限给上。
      

  7.   


    我也知道啊,但是在权限表中没有SHOW CREATE FUNCTION这个权限。GRANT SHOW CREATE FUNCTION 
     ON FUNCTION internaltest0.fdm_exp_rank TO backupsso@"%" IDENTIFIED BY "backupsso"; 
    报错,
    GRANT SHOW CREATE FUNCTION 
     ON internaltest0.* TO backupsso@"%" IDENTIFIED BY "backupsso"; 
    报错。
    Error Code : 1064
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE FUNCTION 
     ON internaltest0.* TO backupsso@"%" IDENTIFIED BY "backupsso"' at line 1
      

  8.   

    grant select on  mysql.proc  to ...试一下。
      

  9.   

    GRANT SELECT ON FUNCTION `internaltest0`.`fdm_exp_rank` TO 'backupsso'@'%'报错:Error Code : 1144
    Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used
      

  10.   

    grant select on  mysql.proc  TO 'backupsso'@'%'
      

  11.   

    OK   解决了  太感谢了   原来是要吧系统表的select权限赋给用户  谢谢。