2023年11月の時点ではGASのJDBCからMySQL8.0に接続できる。

ついにGoogle App Scriptから、JDBC経由で、Google CloudのCloud SQL のMySQL 8.0のインスタンスに接続を試して、成功した。JDBCがMySQL 8.0  に対応した。(忘れていたけれど、2022年11月も成功していたようだ・・・)

なお、接続はSSL / TLS クライアント証明書による接続。

GASサンプルコード:接続して、DB名とバージョンを取得する

function myFunction() {
  dbConnectionSSL()
}

// --------------------------------
// SSLで接続する
// --------------------------------
function dbConnectionSSL(){
  Logger.log('start dbConnection function.');

  // 接続先設定
  var connectionIp = '34.xx.xx.xx'; // 接続のMysqlのIPアドレス(ホスト名も可)
  var userName = 'username'; // 接続で使うユーザ名
  var passwd = 'passowrd'; // 接続で使うパスワード
  var databaseName = 'CT'; // データベース名
  var addr = 'jdbc:mysql://' + connectionIp + '/' + databaseName + '?useSSL=true';

  // SSL用の証明書を変数に入れる
  var clientKey = '\
-----BEGIN RSA PRIVATE KEY-----\n\
zylvsBC2kozS3rAxO1KUeD+rUbdDC/0PDbANXi4s/96qEN9vV80WBfH7Ut1TDdWt\n\
~~~中略~~~
wGeppu4uYW4hSE6rATB+GhNwFJtAl1qz4M2nefKWBCc97wmZte/G\n\
-----END RSA PRIVATE KEY-----';

  var clientCert = '\
-----BEGIN CERTIFICATE-----\n\
g+vn0NZqwTzhGhfXV9y7k0wsjqN3VjfvLSkSqinYRgDID/vb7FvAD3qyGyTiR9HT\n\
~~~中略~~~
l+AUFjEP\n\
-----END CERTIFICATE-----';

  var serverCa = '\
-----BEGIN CERTIFICATE-----\n\
pIa8Cnto3SIGqcwdV1SjA8iS1ohC3t+2igQq9aykOjd51jSQlVRqsE5lYty1VhiX\n\
~~~中略~~~
fCcN9N2TqwxUXmD7g/+5lBi+wf+FBCPml/cyeRvDu5PZIqQ=\n\
-----END CERTIFICATE-----';

  Logger.log('start mysql con');
  Logger.log(addr);

  var connectionInfo = {
    user: userName,
    password: passwd,
    _serverSslCertificate: serverCa,
    _clientSslCertificate: clientCert,
    _clientSslKey: clientKey
  }

  // DBにコネクションをはるオブジェクトを作る
  var connection = Jdbc.getConnection(addr, connectionInfo);
  Logger.log(connection.getCatalog());

  // Select文を実行するための処理
  // sqlステートメントをデータベースに送信するためのオブジェクトを作る
  var statement = connection.createStatement();

  // sqlを実行して結果をオブジェクトに入れる
  var result = statement.executeQuery('select @@version;');

  // 結果を取り出す
  while (result.next()) {
    var name = result.getString('@@version');
    // ログに出力する
    Logger.log(name);
  }

  // コネクションを閉じる
  connection.close();

  Logger.log('end');
}

// -----------------------------------
// DB Connection close
// -----------------------------------
function dbConnectionClose(connection) {
  Logger.log('start db connection close');

  connection.close;  

  Logger.log('end db connection close');
}
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする