2015-02-24 46 views
1

我們的應用程序與下列要求開發間歇性問題,Google Apps腳本和HTML

前端:HTML和谷歌Apps腳本

後端:谷歌雲SQL,MySQL的VER 5.6.21,引擎= InnoDB

我們使用存儲過程來訪問CLOUD SQL。 此存儲過程將通過Google Apps腳本調用。

實施例的存儲過程和執行通過谷歌應用腳​​本如下過程...

步驟1:存儲過程將創建一個用戶和用於存儲程序,表格,觸發器給授予訪問權限,視圖

DROP PROCEDURE IF EXISTS SP_TEST; 
CREATE PROCEDURE SP_TEST(OUT SUCCESS_MESSAGE TEXT) 
BEGIN 
DECLARE EXIT HANDLER FOR SQLEXCEPTION 
BEGIN 
ROLLBACK;  
SET SUCCESS_MESSAGE=0; 
END; 
START TRANSACTION; 
SET AUTOCOMMIT = 0; 
DROP USER TESTUSER; 
CREATE USER 'TESTUSER'@'%' IDENTIFIED BY 'TESTUSER'; 
GRANT EXECUTE ON PROCEDURE PROC_NAME1 TO 'TESTUSER'@'%'; 
GRANT EXECUTE ON PROCEDURE PROC_NAME2 TO 'TESTUSER'@'%'; 
SET SUCCESS_MESSAGE=1; 
COMMIT; 
END; 

步驟2:在谷歌使用腳本Apps腳本調用存儲過程/訪問SQL表

try 
{ 
//OPEN CONNECTION 
var conn=Jdbc.getCloudSqlConnection("jdbc:google:rdbms://" + DB_INSTANCE + "/" + DB_SCHEMA, DB_USER, DB_PASSWORD); 
conn.setAutoCommit(false); 

//CALL STORE PROCEDURE 
var create_stmt = conn.createStatement(); 
create_stmt.execute("CALL SP_TEST (@SUCCESS_MESSAGE)」); 
create_stmt.close(); 

//SELECT RESULT RETURNED FROM STORE PROCEDURE 
var stmt_rolecrinsrtflag = conn.createStatement() 
var flag_rolecrinsrtselect="SELECT @SUCCESS_MESSAGE"; 
var flag_rolecrinsrtrs=stmt_rolecrinsrtflag.executeQuery(flag_rolecrinsrtselect); 
if(flag_rolecrinsrtrs.next()) 
var flag_rolecrinsrtinsert=flag_rolecrinsrtrs.getString("@SUCCESS_MESSAGE"); 
flag_rolecrinsrtrs.close(); 
stmt_rolecrinsrtflag.close(); 
conn.commit(); 

//CLOSE CONNECTION 
conn.close(); 
return flag_rolecrinsrtinsert; 
} 
catch(err) 
{ 
//to do rollback,if any exception.. 
conn.rollback(); 
} 

我們有200多個sp和98個表格。 所有的存儲過程和所有表將被加載到谷歌雲Sql通過像用戶只。

通過Google apps腳本調用Store Procedure後,將在用戶表中創建用戶,併爲創建的用戶授予存儲過程的訪問權限。

但是當我們調用任何存儲過程/通過Google Apps腳本訪問sql表時,有時我們會遇到以下問題。最初它運行良好,但最近,只有我們正面臨着這些問題。

錯誤1: 「無效的連接ID」 被關上,下面的事情是 觀察

  • TESTUSER在mysql.user表中擦去如下

  • 執行權限撤銷的PROC_NAME1,PROC_NAME2。

  • 它已經創建已經自動 下降,如PROC_NAME2一些存儲過程

  • 着能夠與Google Apps腳本的剩餘執行

錯誤2着手:「此連接IS已關閉「

  • 我們無法繼續進行剩餘執行..

在腳本方面,如果發生任何問題/異常,我們需要繼續執行,即,我們需要刪除在STORE PROCEDURE執行過程中創建的臨時表。

由於上述問題的發生,我們可以不能夠繼續進行腳本執行。

而且還當我們執行該存儲過程,有時我們越來越像問題

錯誤3:「爲表‘./mysql/procs_priv.MYI’不正確的密鑰文件,試圖修復它」

  • 此問題之後,無法執行或運行任何存儲過程/ 訪問Google雲Sql。

請參照下面的鏈接..

具有被上述前發行和發行後給定的樣本存儲過程的結果......

https://docs.google.com/a/ssomens.com/document/d/1N5_-O2UfescCmWe9IorteUZUh7gtgkF9-RwubvF4MhM/edit

+1

請勿SHOUT。謝謝。 – jbutler483 2015-02-24 12:55:09

回答

0

的「JDBC:谷歌:RDBMS'連接的方式被棄用,以從外部應用程序連接到雲SQL的首選方法是通過使用IP連通性‘JDBC:MySQL的’(docs)。

0

這看起來像常見的連接超時由於實例活動(即雲SQL有兩種計費方案和大多數用戶選擇,這意味着該實例並不總是啓動和運行每次使用計劃remeber)。

作爲一般的經驗法則,實施某種類型的指數回退總是可取的,以應對偶爾的連接錯誤,例如由於已經提到的不活動超時而可能不時發生的Cloud SQL實例重新啓動,並可能還有其他不可預知的原因。

請參閱「我應如何管理連接?」公共文件第[1]節。

[1] https://cloud.google.com/sql/faq#connections