RDS還原數據庫時報錯:ERROR 1227 (42000) at line 78664

   最近公司準備公司的整套架構從IDC機房向雲上遷移,在RDS上做數據庫恢復的時候遇到如下的問題:

[root@vm10-136-58-79 ~]# mysql -uadmin -h 10.137.212.36 -p </root/mysql_dump.sql

Enter password: 

ERROR 1227 (42000) at line 78664: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

備註:金山雲沒有給mysql的管理員root的密碼,而是給了一個管理用戶admin


排查思路:

  1. 重視報錯信息

  2. 登錄RDS,查看mysql相關的用戶和權限信息

mysql> select user,host,password from mysql.user;
+--------------+-----------+-------------------------------------------+
| user         | host      | password                                  |
+--------------+-----------+-------------------------------------------+
| root         | localhost | *9F9F6951C3EA2E9CEA830C3A3102949B51548ECE |
| rdsrepladmin | %         | *EAA4FB76B6D0776B5CAA760B6A754C5D61CCFCED |
| rdsadmin     | localhost | *843E8882BD0547FD0B7109D70C4A1CF82038D1F3 |
| admin        | %         | *9BEFFE73220FACA3F2AC73B58059B1894609877B |
+--------------+-----------+-------------------------------------------+

admin的權限如下所示:

mysql> select *  from mysql.user\G
*************************** 1. row ***************************
                  Host: localhost
                  User: root
              Password: *9F9F6951C3EA2E9CEA830C3A3102949B51548ECE
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
          Process_priv: Y
             File_priv: Y
            Grant_priv: Y
       References_priv: Y
            Index_priv: Y
            Alter_priv: Y
          Show_db_priv: Y
            Super_priv: Y
 Create_tmp_table_priv: Y
      Lock_tables_priv: Y
          Execute_priv: Y
       Repl_slave_priv: Y
      Repl_client_priv: Y
      Create_view_priv: Y
        Show_view_priv: Y
   Create_routine_priv: Y
    Alter_routine_priv: Y
      Create_user_priv: Y
            Event_priv: Y
          Trigger_priv: Y
Create_tablespace_priv: Y
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: 
 authentication_string: 
*************************** 2. row ***************************
                  Host: %
                  User: rdsrepladmin
              Password: *EAA4FB76B6D0776B5CAA760B6A754C5D61CCFCED
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
         Shutdown_priv: N
          Process_priv: N
             File_priv: N
            Grant_priv: N
       References_priv: N
            Index_priv: N
            Alter_priv: N
          Show_db_priv: N
            Super_priv: N
 Create_tmp_table_priv: N
      Lock_tables_priv: N
          Execute_priv: N
       Repl_slave_priv: Y
      Repl_client_priv: Y
      Create_view_priv: N
        Show_view_priv: N
   Create_routine_priv: N
    Alter_routine_priv: N
      Create_user_priv: N
            Event_priv: N
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: 
 authentication_string: NULL
*************************** 3. row ***************************
                  Host: localhost
                  User: rdsadmin
              Password: *843E8882BD0547FD0B7109D70C4A1CF82038D1F3
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
          Process_priv: Y
             File_priv: Y
            Grant_priv: Y
       References_priv: Y
            Index_priv: Y
            Alter_priv: Y
          Show_db_priv: Y
            Super_priv: Y
 Create_tmp_table_priv: Y
      Lock_tables_priv: Y
          Execute_priv: Y
       Repl_slave_priv: Y
      Repl_client_priv: Y
      Create_view_priv: Y
        Show_view_priv: Y
   Create_routine_priv: Y
    Alter_routine_priv: Y
      Create_user_priv: Y
            Event_priv: Y
          Trigger_priv: Y
Create_tablespace_priv: Y
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: 
 authentication_string: NULL
*************************** 4. row ***************************
                  Host: %
                  User: admin
              Password: *9BEFFE73220FACA3F2AC73B58059B1894609877B
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: N
          Process_priv: Y
             File_priv: N
            Grant_priv: Y
       References_priv: Y
            Index_priv: Y
            Alter_priv: Y
          Show_db_priv: Y
            Super_priv: N
 Create_tmp_table_priv: Y
      Lock_tables_priv: Y
          Execute_priv: Y
       Repl_slave_priv: Y
      Repl_client_priv: Y
      Create_view_priv: Y
        Show_view_priv: Y
   Create_routine_priv: Y
    Alter_routine_priv: Y
      Create_user_priv: Y
            Event_priv: Y
          Trigger_priv: Y
Create_tablespace_priv: N
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: 
 authentication_string: NULL


從上述內容可以看出:管理用戶admin並沒有Super_priv權限,如何給admin用戶增加super權限?

3.查看mysql_dump.sql文件:

[root@vm10-136-58-79 ~]# vim mysql_dump.sql.bak(重點看如下幾行) 

78628 /*!50001 CREATE ALGORITHM=UNDEFINED */

78629 /*!50013 DEFINER=`boco_guest`@`%` SQL SECURITY DEFINER */

78630 /*!50001 VIEW `temp_district` AS select `district`.`id` AS `id`,`district`.`cityId` AS `cityId`,`district`.`Name` AS `Name`,`district`.`po      stCode` AS `postCode` from `district` group by `district`.`cityId` */;

78631 /*!50001 SET character_set_client      = @saved_cs_client */;

78632 /*!50001 SET character_set_results     = @saved_cs_results */;

78633 /*!50001 SET collation_connection      = @saved_col_connection */;


原本認爲 78628 /*!50001 CREATE ALGORITHM=UNDEFINED */這個是註釋語句不會執行,可是爲什麼執行到這附近報錯了呢?

mysql /*!50001 註釋解釋
在MySQL裏,多行解釋 是 /* */,這個是SQL的標準 
但是MySQL擴張了解釋 的功能
假如 在起頭的/*後頭加了驚歎 號,那麼此解釋 裏的語句將被推行 
比如 
mysql> /*! select * from test */;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)

再看如下語句
/*!50001 select * from test */;
這裏的50001表示假如 數據庫是5.00.01以上版本,該語句纔會被推行
因此固然 你的mysqldump出來的成立 view的語句在解釋 裏,實際 上它是會被推行 的

假如 是一下內容,就不會推行 了,那是真正的解釋 了
/* select * from test */;
原文地址:http://www.educity.cn/wenda/399480.html



網上搜索了好久都沒有解決,最後在阿里雲常見問題中找到了答案:http://help.aliyun.com/knowledge_detail/5989721.html?spm=5176.788314909.3.8.xC9pCQ

RDS MySQL報錯完整的信息:
[Err] 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation (常見於MySQL 5.6)
ERROR 1725 (HY000) at line 1936: OPERATION need to be executed set by ADMIN (常見於MySQL 5.5)
 
通常以下操作會引起出現這個錯誤:
1. 在創建 存儲過程、函數、觸發器、事件、視圖的時候出現這個錯誤。
2. 從本地數據庫導出SQL,在RDS上應用該SQL的時候出現該錯誤。
3. 從RDS MySQL 5.6實例下載邏輯備份,導入到RDS或本地數據庫中
原因是SQL語句中含有對root或其他用戶的引用,而實際SQL執行過程中無相應用戶的權限,因此需要去除這類語句。
具體操作如下:
1. 檢查SQL文件,去除下面類似的子句:
DEFINER=`root`@`%` 
在Linux平臺下,可以嘗試使用下面的語句去除:
sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/ user.sql > user_revised.sql
2. 檢查SQL文件,去除下面類似的語句:
SET @@GLOBAL.GTID_PURGED='d0502171-3e23-11e4-9d65-d89d672af420:1-373,
d5deee4e-3e23-11e4-9d65-d89d672a9530:1-616234';
在Linux平臺,可以使用下面的語句去除
sed '/GTID_PURGED/N;s/,\n/,/' user_db.sql | grep -iv 'set @@global' > user_db_revised.sql
修改後再進行測試使用。


根據上文的提示:我的具體操作如下:

1.[root@vm10-136-58-79 ~]# cat -n mysql_dump.sql |grep DEFINER
 78629/*!50013 DEFINER=`boco_guest`@`%` SQL SECURITY DEFINER */
 78647/*!50013 DEFINER=`boco_guest`@`%` SQL SECURITY DEFINER */
 78665/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
 78683/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
 78701/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
 78719/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
 78737/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
2.編輯mysql_dump.sql文件,手動去除以上7行內容
3.再次執行如下語句:
[root@vm10-136-58-79 ~]# mysql -uadmin -h 10.137.212.36 -p </root/mysql_dump.sql
Enter password: 
[root@vm10-136-58-79 ~]# [root@vm10-136-58-79 ~]# mysql -uadmin -h 10.137.212.36 -p -e "show databases;"
Enter password: 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| csip_pline_e000001 |
| csip_store         |
| db_pms             |
| mysql              |
| performance_schema |
| ysc0001            |
+--------------------+
至此,問題解決。

參考文章:
http://www.educity.cn/wenda/399480.html
http://help.aliyun.com/knowledge_detail/5989721.html?spm=5176.788314909.3.8.xC9pCQ 
阿里雲相關技術問題文檔:http://help.aliyun.com/knowledge_list/8314905.html?spm=5176.768314883.1863381.391.DRStz2




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章