タグ: MySQL

  • GASからCloud SQL(MySQL)にSSL接続するコード

    Google Apps Scripsから、Google Cloud SQLのMySQLにSSL(TLS)で通信を暗号化して接続するコードのサンプル。このとき、Cloud SQLのMySQLは、MySQL 5.7よりも古くないと接続できない。

    DBへの接続は、JDBCを使用する。このとき、JDBCの読み込みは必要なく、GASのエディタ上で直接記述してよい。このサンプルでは、SSL(TLS)を使用するバージョン。接続にPEMファイルを使うため、あらかじめGoogle Cloud SQL側で発行しておく必要がある。

    記載するPEMファイルの中身は、末尾に改行コードを表す”\n”をいれて、さらにコード上の改行を明示的にするために”\”を入れる必要があった。なので、PEMファイルの中身の末尾が”\n\”になっている。

    接続のチェックのため、コンソールログに、いろいろと書き出すようにしている。Logの部分はなくても、問題なし。

    サンプルコード。

    function myFunction() {
      dbConnection();
    }
    
    // --------------------------------
    // SSLで接続する
    // --------------------------------
    function dbConnectionSSL(){
    
      Logger.log('start dbConnection function.');
    
      // 接続先設定
      var connectionIp = 'xxx.xxx.xxx.xxx'; // 接続のMysqlのIPアドレス(ホスト名も可)
      var userName = 'user'; // 接続で使うユーザ名
      var passwd = 'pass'; // 接続で使うパスワード
      var databaseName = 'dbname'; // データベース名
    
      var addr = 'jdbc:mysql://' + connectionIp + '/' + databaseName + '?useSSL=true';
    
      // SSL用の証明書を変数に入れる
      var clientKey = '\
    -----BEGIN RSA PRIVATE KEY-----\n\
    MIIEowIBAAKCAQEAyDuIOE1t/ABFSMIz/2Ni4vIoaNvBkDLaeJdl6KmeK9iexl2D2d\n\
    ~~~中略~~~
    P8B5s7xmSbH4Yv/OeKrw8F6xAmoQmWVlnw686I0QqNHexlwIe3lss2LDEI3d\n\
    -----END RSA PRIVATE KEY-----';
    
      var clientCert = '\
    -----BEGIN CERTIFICATE-----\n\
    MIIDVzCCAj+gAwIBAgIEJD9I+TANBgkqhkiG9w0BAQsFADB7MS0wKwYDVQQuEyRl\n\
    ~~~中略~~~
    QNwLDry8Tk3DwnD07+dkQf+FFFu943GFUlY9d4Rv75S+Vwm2Ci2azIRR2Q==\n\
    -----END CERTIFICATE-----';
    
      var serverCa = '\
    -----BEGIN CERTIFICATE-----\n\
    MIIDfzCCAmegAwIBAgIBADANBgkqhkiG9w0BAB3MS0wKwDELW39xwSDyQ3ZjVm\n\
    ~~~中略~~~
    bfgDM8ARAAqMqECaXYC8+xHviva4ON6weeD/wsdessDP9K3ws3mGKbbjlLmc=\n\
    -----END CERTIFICATE-----';
    
      Logger.log('start mysql con');
      Logger.log(addr);
    
      var connectionInfo = {
        user: userName,
        password: passwd,
        _serverSslCertificate: serverCa,
        _clientSslCertificate: clientCert,
        _clientSslKey: clientKey
      }
      Logger.log(connectionInfo);
    
      var connection = Jdbc.getConnection(addr, connectionInfo);
      Logger.log(connection.getCatalog());
    
      // コネクションを閉じる
      connection.close();
      Logger.log('end');
    }

  • GASからCloud SQL(MySQL)に接続するコード

    Google Apps Scripsから、Google Cloud SQLのMySQLに接続するコードのサンプル。このとき、Cloud SQLのMySQLは、MySQL 5.7よりも古くないと接続できない。

    DBへの接続は、JDBCを使用する。このとき、JDBCの読み込みは必要なく、GASのエディタ上で直接記述してよい。このサンプルでは、SSL(TLS)を使わないバージョン。通信経路が暗号化されないので、注意が必要。

    接続のチェックのため、コンソールログに、いろいろと書き出すようにしている。Logの部分はなくても、問題なし。

    function myFunction() {
      dbConnection();
    }
    // --------------------------------
    // SSL 接続なしで接続する
    // --------------------------------
    function dbConnection(){
      Logger.log('start dbConnection function.');
      // 接続先設定
      var connectionIp = 'xxx.xxx.xxx.xxx'; // 接続のMysqlのIPアドレス(ホスト名があれば、ホスト名も可)
      var userName = 'user'; // 接続で使うユーザ名
      var passwd = 'password'; // 接続で使うパスワード 変数名をpasswdにしているのは、コネクションInfoの作成時にキーワードと変数が同じになるのを避けるため。
      var databaseName = 'dbname'; // データベース名
      var addr = 'jdbc:mysql://' + connectionIp + '/' + databaseName;
      Logger.log('start mysql con');
      Logger.log(addr);
      var connectionInfo = {
        user: userName,
        password: passwd
      }
      var connection = Jdbc.getConnection(addr, connectionInfo);
      // 接続できたことを確かめるために、ログにDB名を出力。
      Logger.log(connection.getCatalog());
      // コネクションを閉じる
      connection.close();
      Logger.log('end');
    }
  • MySQL Workbench をインストールしようとしたら、Visual Cのランタイムがなくてエラーになった

    MySQL Workbench 8.0CE をインストールしようとしたら、Visual Cのランタイムコンポーネントがなくてエラーになった。

    MySQL Workbench requires the Visual C++ 2019  
    Redistributable Package to be installed. Click the 
    Download-Button on the next page to open a web 
    page containing further instructions.

    下記のMicrosoftのサイトから、「Microsoft Visual C++ Redistributable for Visual Studio 2022」のパッケージをダウンロード。

    https://visualstudio.microsoft.com/ja/downloads/

    ダウンロードができたら、実行して、インストールする。パッケージには、Visual C++ 2015~2022までが入っているので、2019が含まれている。

    Visual C++のランタイムのインストールが終わってから、MySQL Workbenchのインストールを再実行し、インストールに成功した。起動もできるし、無事に使えている。

  • MySQLをSSLで接続するときのポート番号

    メモとして。

    MySQLデータベースに接続するとき、SSL接続のオプションを使うとき、何番ポートを使っているのか。ファイアウォールの許可などもあるので、調べてみた。

    MySQLに接続するとき、SSLのオプションをつけても、つけなくても、同じ3306番ポートを使っている。設定で3306番から変更している場合には、そのポート番号で受け付ける。

  • 2021年12月の時点でも、GASのJDBCからMySQL8.0に接続できない。

    昨年、Google App Scriptから、JDBC経由で、Google CloudのCloud SQL のMySQL 8.0のインスタンスに接続を試して、失敗した。JDBCがMySQL 8.0  に対応しておらず、接続エラーになるというものだった。

    あれから1年がたち、もう一度、試してみたが、Google App ScriptからJDBCを使って、MySQL 8.0のインスタンスに接続することはできなかった。まだ、MySQL 5.7のインスタンスまでしか対応していない。

    MySQL 5.7 のインスタンスには、GASから正常にアクセスできていることも、ついでに確認した。

  • インストールされているMariaDBが64ビットかどうかを確認する

    64bitでインストールされているはずだが、念のため、MariaDBが64bitでインストールされているかどうかを調べる方法について。DBに接続した状態で、下記のコマンドを実施する。MySQLでも同じように調べることができる。

    show variables like 'version_compile_machine';

    これの結果が、「X86_64」になっていれば、64bitでインストールされている。「i386」や「i686」の場合は、32bitでインストールされている。

    MariaDB [(none)]> show variables like 'version_compile_machine';
    +-------------------------+--------+
    | Variable_name           | Value  |
    +-------------------------+--------+
    | version_compile_machine | x86_64 |
    +-------------------------+--------+
    1 row in set (0.001 sec)
    MariaDB [(none)]>
  • WordPressのURLをDBで変更する方法のメモ

    ミスで、Wordpress上で、サイトのURLを変更してしまい、管理画面などにアクセスできなくなった場合に、WordpressのURLをDBの値を直接書き換えて変更する方法のメモ。

    WordPressのURLの情報は、DBの「wp_options」(wp_ は設定によっては変わる)に入っている。”option_name”の”siteurl”と”home”を検索して、値を調べる。これの値が、誤って変更したURLになっていれば、この2つを正しいものにUpdate文で更新する。

    検索するSQL

    select * from wp_options where option_name = 'siteurl';
    select * from wp_options where option_name = 'home';

    UpdateするSQL文

    update wp_options set option_value = 'https://新しいURLを入れる'  where option_name = 'siteurl';
    update wp_options set option_value = 'https://新しいURLを入れる'  where option_name = 'home';
  • Bitnami Redmine のMySQLダンプ

    Bitnami Redmine(Windows版)を使っていて、MySQLのダンプを取ろうと、mysqldumpコマンドを実行したが、接続エラーになる。mysqlコマンドでは、接続できているので、ユーザとパスワードと接続については、問題がないはず。いろいろと試した結果、以下のコマンドのときは成功したので、メモとして残しておく。

    mysqldumpで成功したコマンド

    mysqldump -u bitnami --password=password --all-databases --default-character-set=binary --port=3307 > dump2019mmdd.sql
    

    これを実行すると、パスワードのくだりのところで、警告は出たが、MySQL Dumpは成功した。passwordの部分は、実際のパスワードに置き換える。

  • kernel: Out of memory: Kill processが発生する

    管理している環境の一つで、数か月に1回、忘れたころにMariaDB(MySQL)が落ちるという問題がある。

    messagesログをチェックしていくと、「~~~ kernel: Out of memory: Kill process ~~~」が発生し、MySQLのプロセスが殺されていた。

    調べていくと、メモリの使い過ぎの状態を解消するために、メモリを大量に使っていたMariaDB(MySQL)本体か子プロセスが生贄にされたということ。メモリが足りなくなって、MariaDBが落とされているわけだが、MariaDBがメモリを喰ったわけではなく、メモリが足りない時にメモリ使用の上位にいるプロセスが落とされているだけ。なので、本当の原因は別にいるはず。

    ■ログの内容:抜粋

    May 14 22:52:16 hostname kernel: Out of memory: Kill process 6534 (mysqld) score 52 or sacrifice child
    May 14 22:52:16 hostname kernel: Killed process 6534 (mysqld) total-vm:1674092kB, anon-rss:0kB, file-rss:0kB 
    

    とりあえず、急にDBが落ちるという不可解な障害の直接原因だけはわかった。

  • MySQL上のユーザを削除する方法

    drop user 文を使い、ユーザを削除する。 ユーザを削除すると、そのユーザに与えられていた権限も、もちろん削除される。

    ■構文

    drop user ユーザ名@localhost;

    localhostのところは、環境に応じて変える。 たとえば、DBのアクセスが「192.168.0.1」から受け付けるようになっている場合は、それを指定する。

    ■例

    MariaDB [mysql]> drop user you_name@localhost;
    Query OK, 0 rows affected (0.01 sec)
    
    MariaDB [mysql]>
    

    Query OK, O rowsだけど、ちゃんと削除できていた。