BLOGTIMES
» ArchiveList (Tag for "mysql / ruby" )
«Prev || 1 · 2 · 3 · 4 · 5 ·... | | Next»
2023/03/14

MariaDB が yum/dnf でアップデートできなくなっていたので

mysql  centos7  centos8  rockylinux9 

MariaDB は yum/dnf で自動的にアップデートされるようにしていたのですが、いつの間にか以下のようなエラーが出るようになってしまっていました。

warning: /var/cache/yum/x86_64/7/mariadb-main/packages/MariaDB-server-10.3.38-1.el7.centos.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID c74cd1d8: NOKEY The following updates will be applied on host.example.jp: ================================================================================ Package Arch Version Repository Size ================================================================================ Updating: MariaDB-client x86_64 10.3.38-1.el7.centos mariadb-main 11 M MariaDB-common x86_64 10.3.38-1.el7.centos mariadb-main 82 k MariaDB-compat x86_64 10.3.38-1.el7.centos mariadb-main 2.2 M MariaDB-server x86_64 10.3.38-1.el7.centos mariadb-main 25 M MariaDB-shared x86_64 10.3.38-1.el7.centos mariadb-main 113 k Transaction Summary ================================================================================ Upgrade 5 Packages Updates failed to install with the following error message: GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/MariaDB-Server-GPG-KEY"

どうやら GPG のキーが新しくなった*1ようで、エラーを解消するにはこれをインストールしてやる必要があります。
MariaDB の公式マニュアル通りに以下を実行することで大丈夫でした。

sudo rpm --import https://supplychain.mariadb.com/MariaDB-Server-GPG-KEY

at 21:31 |
2021/02/22

Dokcer で Redmine + MariaDB サーバを立ててみた

docker  redmine  mysql  dockercompose 

今度は Redmine + MariaDB を Docker 化していきます。

Redmine も MariaDB もどちらも公式のイメージを使います。

今回の Redmine は要件として

  • バージョンは 3.x 系統であること
  • パスは /redmine で参照できること

というのがあるので、この部分についてはカスタマイズを行っています。

ファイルを配置したら以下のコマンドで起動できます。

docker-compose up -d

起動ができたら http://hostname:3000/redmine/ でアクセスができるはずです。

マイグレーション

既存の環境からの DB のマイグレーションについては、docker-compose exec redmine-db bashで MariaDB のコンテナに入り、MariaDB にデータをインポートすれば良いと思います。ファイルについては ./data ディレクトリ以下に必要なファイルをコピーすれば OK です。

ファイル構成

docker-redmine-mariadb/  ├ docker-compose.yml  └ redmine/    └ Dockerfile


    at 22:55 |
    2020/12/28

    Ruby 3.0.0 がリリースされてた

    ruby 

    しばらくウォッチしていないうちに Ruby 3.0.0 がリリースされていました。
    Ruby 2.7 からの変更がいろいろとある*1ので、時間をとって確認する必要がありそうです。

    Ruby 3.0.0 リリース

    Ruby 3.0系初のリリースである、Ruby 3.0.0 が公開されました。


    at 19:36 |
    2020/11/05

    php + MariaDB で Malformed communication packet というエラーが出るときは

    mysql  php  centos7 

    今日は朝から php + MariaDB の環境で以下のエラーが発生して困ってしまいました。

    500 SQLSTATE[HY000]: General error: 1835 Malformed communication packet (SQL: select * from ・・・・)

    Malformed communication packet というエラーは初めて見たかもしれません。

    MariaDB をダウングレードして暫定対処

    原因としては MariaDB のバージョンアップに起因するようなので、以下のように MariaDB をダウングレードして暫定対象しました。

    systemctl stop mariadb yum downgrade MariaDB-server MariaDB-common MariaDB-shared MariaDB-client MariaDB-compat MariaDB-devel --skip-broken yum --showduplicates search MariaDB-* yum install MariaDB-server-10.4.15-1.el7.centos.x86_64 MariaDB-client-10.4.15-1.el7.centos.x86_64 systemctl status mariadb systemctl enable mariadb

    同じ話題が Stack Overflow にも

    以下の Stack Overflow のエントリににもあるように、意外と同じところでハマった人は多いようです。
    これを見ると PHP 7.3 では発生しないという話も出ているので PHP 7.1 と最新版の Maria DB の問題みたいですね。


      at 12:58 |
      2019/11/06

      mysql2 をスレッドセーフに

      ruby 

      gem mysql2 をマルチスレッドで使っていたら、以下のようなエラーがでて困ってしまいました。

      This connection is in use by: #<Thread:0x000000020e0c70 sleep> (Mysql2::Error)

      どうやら mysql2 はスレッドセーフではないことが原因の模様。

      いろいろと調べてみたら、MutexLockedQuerying*1というモジュールを書いている人を見つけたので、ちょっと改造して取り込んでみました。元の実装だとクラス変数を使っているのでロックがインスタンス単位ではなく、グローバルにかかってしまうので、インスタンス変数に変更してあります。ロックの粒度的にはこちらの方が望ましいはずです。

      require 'mysql2' module MutexLockedQuerying def initialize(*) @semaphore = Mutex.new super end def query(*) @semaphore.synchronize { super } end end Mysql2::Client.send(:prepend, MutexLockedQuerying)

      at 19:11 |
      2019/10/29

      gem mysql から mysql2 に移行してみる

      ruby  mysql 

      昔書いた Ruby のプログラムを CentOS 7 上で動かそうとしたのですが、MariaDB が 10.4 と比較的新しいバージョンだったので gem で mysql がインストールできないので困ってしまいました。

      mysqlを見ると、最終アップデート日が 2013 年になっていて、最近はメンテナンスされていないようです。このまま粘っても解決の見込みも立たないので、mysql2 に移行してしまうことにしました。

      ソースの書き換えは大きく3箇所

      基本的には以下の3箇所を変更してやれば、基本的な動作はするようです。
      Date などの部分を自動的に cast する機能がついたようですが、これは :cast => false でオフにしてあります。

      # モジュールの読み込み require 'mysql' require 'mysql2' # 接続 @db = Mysql::connect('localhost', 'user_name', 'pass', 'db_name') @db = Mysql2::Client.new(:host => 'localhost', :username => 'user_name', :password=> 'pass', :database => 'db_name', :cast => false) # 結果の取得 rows.each_hash rows.each
      [gem mysql から mysql2 に移行してみる の続きを読む]

        at 22:24 |
        2019/09/09

        CentOS 7 + MariaDB の組み合わせで gem mysql2 がエラーになるときは

        ruby  centos7  mysql 

        CentOS 7 に MariaDB をインストールして、Ruby の gem mysql2 実行したらエラーになってしまって困ってしまいました。

        エラーメッセージを読む限りリンカのエラーのようなので、もう一度良く MariaDB のインストールを確認したら MariaDB-shared が入っていないのが原因だったようで、以下のコマンド1行で解決でした。MariaDB-devel だけでいけると思っていたのが、勘違いでしたね。

        yum install -y MariaDB-shared

        CentOS 7 への MariaDB のインストール

        ハマらないように次回からは以下のような感じでインストールすることにしようと思います。

        curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash yum install -y MariaDB-server MariaDB-client MariaDB-devel MariaDB-shared systemctl start mariadb systemctl enable mariadb mysql_secure_installation

          at 16:28 |
          2019/07/05

          MariaDB を 10.3 にしようとしたら「A manual upgrade is required.」と言われたので・・・

          mysql 

          先日、CentOS 7 の MariaDB を 10.3 にアップデートした話を書きましたが、10.1 → 10.3 の場合は 「A manual upgrade is required. 」と言われてしまうことが分かりました。
          ちょうど yum でアップデートしようとすると、以下のようなエラーが出ます。

          Resolving Dependencies --> Running transaction check ---> Package MariaDB-server.x86_64 0:10.1.40-1.el7.centos will be updated ---> Package MariaDB-server.x86_64 0:10.3.16-1.el7.centos will be an update --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================================== Package Arch Version Repository Size ======================================================================================================================================== Updating: MariaDB-server x86_64 10.3.16-1.el7.centos mariadb-main 24 M Transaction Summary ======================================================================================================================================== Upgrade 1 Package Total download size: 24 M Is this ok [y/d/N]: y Downloading packages: Delta RPMs disabled because /usr/bin/applydeltarpm not installed. MariaDB-server-10.3.16-1.el7.centos.x86_64.rpm | 24 MB 00:00:50 Running transaction check Running transaction test Transaction test succeeded Running transaction ****************************************************************** A MySQL or MariaDB server package (MariaDB-server-10.1.40-1.el7.centos.x86_64) is installed. Upgrading directly from MySQL 10.1 to MariaDB 10.3 may not be safe in all cases. A manual dump and restore using mysqldump is recommended. It is important to review the MariaDB manual's Upgrading section for version-specific incompatibilities. A manual upgrade is required. - Ensure that you have a complete, working backup of your data and my.cnf files - Shut down the MySQL server cleanly - Remove the existing MySQL packages. Usually this command will list the packages you should remove: rpm -qa | grep -i '^mysql-' You may choose to use 'rpm --nodeps -ev <package-name>' to remove the package which contains the mysqlclient shared library. The library will be reinstalled by the MariaDB-shared package. - Install the new MariaDB packages supplied by MariaDB Foundation - Ensure that the MariaDB server is started - Run the 'mysql_upgrade' program This is a brief description of the upgrade process. Important details can be found in the MariaDB manual, in the Upgrading section. ****************************************************************** error: %pre(MariaDB-server-10.3.16-1.el7.centos.x86_64) scriptlet failed, exit status 1 Error in PREIN scriptlet in rpm package MariaDB-server-10.3.16-1.el7.centos.x86_64 Verifying : MariaDB-server-10.3.16-1.el7.centos.x86_64 1/2 MariaDB-server-10.1.40-1.el7.centos.x86_64 was supposed to be removed but is not! Verifying : MariaDB-server-10.1.40-1.el7.centos.x86_64 2/2 Failed: MariaDB-server.x86_64 0:10.1.40-1.el7.centos MariaDB-server.x86_64 0:10.3.16-1.el7.centos Complete!

          仕方がないのでマニュアルでアップデート

          マニュアルでアップデートと言っても、やることは一旦アンインストールしてから、再インストールするだけです。
          とりあえずエラーメッセージに従って、非互換な部分について確認します。
          やはり主な問題は sql_mode の部分でしょうか。

          ちなみに yum remove しても /var/lib/mysql の下のデータファイルは消えませんが、念のため全データのダンプは取っておきます。
          .conf は .rpmsave にリネームされてしまうので、特別な設定を入れている場合にはファイルを復元しておきます。

          具体的には以下のような感じでしょうか。

          systemctl stop mariadb yum remove MariaDB-server yum install MariaDB-server mv /etc/my.cnf.d/server.conf{,.bak} mv /etc/my.cnf.d/server.conf{.rpmsave,} systemctl start mariadb mysql_upgrade -u root -p

            at 18:16 |
            2019/06/07

            CentOS7 の MariaDB を 10.3 にアップデートする

            mysql  centos7 

            CentOS 7 に載っている MariaDB 5.5 を 10.3 にアップデート*1してみたので、その手順をメモ。

            アップデート自体は yum で OK

            単に MariaDB を更新するだけならば、以下の手順ですんなりアップグレードできます。

            curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash yum clean all yum update -y mysql_upgrade -u root -p

            問題になるのは SQL_MODE の STRICT_TRANS_TABLES

            MariaDB (MySQL)は当初はいろいといい加減な部分がありましたが、最近は機能も増えていろいろと厳密になってきています。

            特にバージョンアップの際に問題になると思われるのは、最近のバージョン(10.2.4 以降)の SQL_MODE にデフォルトで設定されている STRICT_TRANS_TABLES という指定です。これにより INSERT 文の書き方がいい加減な場合、これまで通っていた INSERT 文が通らなくなるという不具合が発生します。

            以下が MariaDB 10.3 系でのデフォルトの SQL_MODE です。

            MariaDB [none]> show variables like 'sql_mode'; +---------------+-------------------------------------------------------------------------------------------+ | Variable_name | Value | +---------------+-------------------------------------------------------------------------------------------+ | sql_mode | STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+-------------------------------------------------------------------------------------------+

            ちなみに、この SQL_MODE は

            • 10.1.7 以前は指定なし
            • 10.1.7 は NO_ENGINE_SUBSTITUTION, NO_AUTO_CREATE_USER
            • 10.2.4 以降は STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

            という設定になっているようです。

            とりあえず、デフォルトから STRICT_TRANS_TABLES を除くためには /etc/my.cnf.d/server.cnf[mariadb] のセクションに以下を追加する必要があります。

            sql_mode='ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

            変更後に MariaDB のデーモンを再起動させると、SQL_MODE が以下のようになっていることが確認できるはずです。

            MariaDB [none]> show variables like 'sql_mode'; +---------------+-----------------------------------------------------------------------+ | Variable_name | Value | +---------------+-----------------------------------------------------------------------+ | sql_mode | ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+-----------------------------------------------------------------------+
            • *1: DB をアップデートするといろいろ動かなくなったりするのであまりやりたくなかったのですが、あるテーブルで Row size too large (> 8126) というエラーを吐くようになってしまったので、ROW_FORMAT=DYNAMIC に変換するための苦肉の策です。

            at 17:38 |
            2019/05/09

            Windows 10 でコマンドプロンプトから MySQL (MariaDB) を使うと文字化けする?

            windows10  mysql 
            レガシーコンソール - Windows 10 でコマンドプロンプトから MySQL (MariaDB) を使うと文字化けする?

            Windows 10 のコンソール上から MySQL (MariaDB) にログインすると、文字コードをきちんと CP932 や SJIS にしていても日本語が文字化けすることがあるようです。

            することがある」とちょっとぼやかした書き方なのは、同じバージョンの Windows 10 と MySQL (MariaDB) の組み合わせで導入しても文字化けする端末とそうでない端末があり、僕が調べた限りでは再現条件が不明です。確認方法は簡単で、以下のようなテーブルを使わない SQL を打ち込んでみるだけです。嘘のような話ですが、こんな単純なSQLですら文字化けします。

            SELECT 'あああああ';

            いろいろ調べてみると Windows 10 1809 のコンソールには以下のバグがあり、今のところ Fix されていないようです。この指示に従って文字化けしているマシンの cmd.exe の設定をレガシーコンソールモードにしてみると、文字化けが解消することが確認できました。こういうのが OS のバグというのは困ったものです。

            バージョン 1809 の OS 上でコンソール出力が正しく表示されない問題について

            本問題は対象のバージョンの OS で導入された新しいコンソールの不具合に起因して発生しています。
            出力ストリームに紐づけられた内部的なコードページ テーブルの初期化処理に不足があり、内部処理でマルチバイト文字を正しく認識することができず、正しくコンソール出力を行えない問題が発生します。


              at 12:41 |
              «Prev || 1 · 2 · 3 · 4 · 5 ·... | | Next»
              » ArchiveList (Tag for "mysql / ruby" )