最近公司準備公司的整套架構從IDC機房向雲上遷移,在RDS上作數據庫恢復的時候遇到以下的問題:html
[root@vm10-136-58-79 ~]# mysql -uadmin -h 10.137.212.36 -p </root/mysql_dump.sqlmysql
Enter password: sql
ERROR 1227 (42000) at line 78664: Access denied; you need (at least one of) the SUPER privilege(s) for this operation數據庫
備註:金山雲沒有給mysql的管理員root的密碼,而是給了一個管理用戶adminvim
排查思路:bash
重視報錯信息架構
登陸RDS,查看mysql相關的用戶和權限信息ide
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權限?post
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