ラベル MySQL の投稿を表示しています。 すべての投稿を表示
ラベル MySQL の投稿を表示しています。 すべての投稿を表示

2020年11月19日木曜日

Ubuntu Server 20.04/Tomcat9/GitBucketでMySQL

前回の記事で Ubuntu Server 20.04/tomcat9上でGitBucketが動作する所までは対応しました。

GitBucketはデフォルトで H2 Database を使用しています。

開発元が公式に

「H2はデータの保全性に問題がありますので業務等の重要な用途にGitBucketを使われるのであればなるべくPostgreSQLもしくはMySQLを利用することが望ましいです(パフォーマンス面でもメリットがあります)」

と説明されていますので、今回、MySQLに変更することにしました。

なお前の Ubuntu 18.04 の時も MySQL を使用していました。基本的な内容は同じです。細かな部分については前の記事の方が詳しいので、そちらを参考にしてください。大枠としては 20.04/Tomcat9 での動作確認の意味でこちらの記事を参照してください。


MySQL を Ubuntu Server 20.04 の標準リポジトリからインストールすると、本記事作成時点では、バージョン 8.0.22 がインストールされます:

$ mysql --version
mysql  Ver 8.0.22-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))
これを使うことにします。

GitBucket 側の設定方法は公式Wikiの External database configuration に説明が記載されています。

ほぼその通りにすれば出来るのですが、注意点としては、

  • mysqlのバージョンが8以上なので、上記ページ記載の MySQL8 以上への対応が必要
  • 説明されている grant all privileges on ... のコマンド一文が MySQL8 ではエラーとなるため、ユーザ作成と grant を別コマンドで実行

があるかなと思います。

無事に稼働すると、以下のように外部データベースで無事に接続出来ていることが確認出来ます。

色々とスムーズに導入できるので、開発者の方やこれまでの多くのユーザさんに感謝です。

これで信頼性を確保し導入が容易なGitリポジトリが実現出来ました。

あと気になる所はデータバックアップですね。

次はデータバックアップの設定を行いたいと思います。

ただバックアップからの復帰確認は、するかしないか、少し悩んでいます。

ちょっとした手間+リスクですしね。

そもそも自分ローカルのネットワーク内でどこでも作業可能とし、色々な開発リソースの置き場を一元化することを主目的に導入したものであるため、とりあえずバックアップが取れて、そこに必要なデータが入っていることが確認出来たら、それ以上は確認しないかもしれません。


2018年9月30日日曜日

GitBucket の設定 / データベース (2)

Tomcat8 上の GitBucket における MySQL の設定記事の後半です.

MySQL での接続は,GitBucketの説明ページにも記載されて手順:

  1. mysql -uroot -p -hlocalhost
  2. create database gitbucket;
  3. grant all privileges on `gitbucket`.* to testuser@localhost identified by 'testpassword';
  4. flush privileges; 
  5. quit

で進めていくことになります.これで問題ないとは思いますが,自分自身での確認も含めて,自分がやった方法を順を追って説明します.

まず最初は MySQL でのデータベース管理システムへの接続です.これは上記の手順1の通り,以下となります:

server:~$ sudo mysql -u root -p -h localhost 
Enter password:
Welcome to the MySQL monitor.  
Commands end with ; or \g.Your MySQL connection id is 6Server version: 5.7.23-0ubuntu0.18.04.1 (Ubuntu)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. 
Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>


コマンド mysql への引数の意味は
  • -u : ユーザ指定 (rootで)
  • -p : パスワード要求
  • -u : ホスト名の指定
です.
その後,MySQL のコマンドプロンプト mysql> からデータベース操作を行います.

その後の手順を進める前に,まずはデフォルトの MySQL の動作モードがどうなっているかを確認しておく方が良いのではと思います.それは以下のコマンドを mysql> のプロンプトで発行することで確認できます:

  • mysql> SELECT @@sql_mode;

上記コマンドを入力すると表形式で情報が表示されますが,そのコンテンツとしては以下が表示されるのではないかと思います:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 
詳細についてはネット検索や MySQL のリファレンスマニュアル で確認できると思いますが,一つのポイントは以下かと思います:
NO_AUTO_CREATE_USER認証情報が指定される場合を除き、ほかの方法で実行される場合は、GRANT ステートメントで新規ユーザーを自動的に作成しません。ステートメントは IDENTIFIED BY を使用した空以外のパスワードを指定するか、IDENTIFIED WITH を使用した認証プラグインを指定する必要があります。
その後のSQL文における GRANT ステートメント発行において IDENTIFIED BY でパスワードを指定するか,陽にユーザ作成を行ってから GRANT を発行する必要があるとの認識です.MySQL のリファレンスマニュアルでは
「通常、データベース管理者は最初に CREATE USER を使用してアカウントを作成し、次に GRANT を使用してその権限や特性を定義します」(13.7.1.4 GRANT 構文
と記載してあり,通常の順をおったやり方ではまずは CREATE USER でのアカウント作成になるかとは思います.ただし「通常」と記載されている通り,自身の理解があるのであれば簡略した手順で進めていくことも可かと思います.

それをふまえて以下を進めます.
次はデータベースの生成です(手順2).これは GitBucket のページの通りです:
mysql> create database gitbucket;
Query OK, 1 row affected (0.00 sec)
無事に成功です.

その後の手順3:
grant all privileges on `gitbucket`.* to testuser@localhost identified by 'testpassword';
ですが,これは
testpassword というパスワードにより認識されたローカルホストのユーザ名 testuser に,MySQL の gitbucket データベース下のアクセスに関するすべての権限を与える
という意味になりますかね.特に「all privileges」は
ALL [PRIVILEGES] は、GRANT OPTION および PROXY 権限を除き、権限が付与されるレベルで使用可能なすべての権限を表します
となっています.
ここではユーザ名とパスワードを適切に指定して発行します.シングルコーテーション等少しわかりずらい所がありますが,自分は以下と入力し無事にOKが出ました
mysql> grant all privileges on gitbucket.* to 'gitbucket'@'localhost' identified by 'gitbucket'; 
Query OK, 0 rows affected, 1 warning (0.01 sec)
その後は手順4の
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
です.FLUSH ステートメントは,さまざまな内部キャッシュをクリアまたはリロードしたり、テーブルをフラッシュしたりするものですが,上記の「privileges」指定は以下の意味となります:
mysql データベース内の付与テーブルから権限をリロードします。
GRANT、CREATE USER、CREATE SERVER、および INSTALL PLUGIN ステートメントの結果として、サーバーは情報をメモリーにキャッシュします。このメモリーは、対応する REVOKE、DROP USER、DROP SERVER、および UNINSTALL PLUGIN ステートメントによって解放されないため、キャッシュを発生させるステートメントの多数のインスタンスを実行するサーバーでは、メモリー使用量が増加します。このキャッシュされたメモリーは FLUSH PRIVILEGES で解放できます。
その後は最後の quit です:
mysql> quit
Bye

これで無事にデータベースが作成できました.

後は GitBucket 側での設定です.それは次に記事にて.



GitBucket の設定 / データベース (1)

GitBucket を立ち上げ後,System Administration にて各種設定をしていくのですが,その際,System Settings にて以下の表示が目につくと思います:

ピンク色で囲まれた記載:
Your GitBucket is running on embedded H2 database. Recommend to configure to use external database if you would like to use GitBucket for important purpose.
がポイントです.

 GitBucketのデフォルトでは,その各種データを Java SQL Database である
H2 Database Engine
に保存するようになっています.Wikipedia のページ で紹介されている通り,オープンソースで低フットプリントな Java プラットフォーム用データベースの様で,開発元のwebページにある History and Roadmap を拝見するに 2004 年から開発されているデータベースの様です.
 使ってみた感覚として,それなりの信頼性はありそうな気はしますが,上記の GitBucket 上の記載を見るに,重要なデータを管理する場合には,より広く使われているデータベース(MySQLなりPostgreSQLなり)を使用することが薦められています.
作者側で確認済のことがあるのやもしれませんが,一般論としても,その使用者数が多いことからくる信頼性の高さは H2 よりも MySQL/PostgreSQL の方は良いかとは思います.
 記載上にある青字の "configure to use external database" のリンクに飛ぶと,MySQL や PostgreSQL を用いた設定方法が記載されています.
External database configuration
上記ページの記述を元に設定すればデータベースは使える様ですが,さて,どちらを使うべきか,です.
 それについては,僕自身は判断根拠を持ってはいませんが,以下のページを参考にさせて頂きました:
PostgreSQLとMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較!
このページの結論によると
  • PostgreSQLは「多機能であること」が最大の利点なので、その特徴が生きるようなシステムには向いていると思います。たとえば、Oracle Databaseからの移行やSIer系の企業で使われるケースが多いという印象を個人的には持っています。あとは、分析系のシステムでもよく使われます。ただこれも前述のようにMySQLの分析機能が徐々に充実してきているため、将来的に差は少なくなってくるでしょう。
  • (MySQLは) 基本的には、シンプルなWebサービスに向いていると思います。一定数の結果セットを取ってきて、そのデータを表示するといった感じの。たとえばTwitterのように、タイムラインの先頭部分を表示して、下にスクロールすると次のデータを読みこむようなサービスは、MySQLには特にマッチしていると思います。
の様です.最後は「とはいえ、バージョンが上がるごとにPostgreSQLもMySQLも高性能になってきているので、結局は使いたい方を使えばいいんじゃないでしょうか。」と結ばれていますが,上記内容を見るに「MySQL」でいこうかなと思います.GitBucketのページでも MySQL の方が最初に記載されていますし.

MySQL での設定については,少し確認したこととかもあるので後半の記事で紹介しようと思います.

GNU Emacs for Windows における最近の IMEパッチ問題

自分は GNU Emacs 使いなのですが、Windows版の Emacs を使用する場合、IMEパッチの問題がありました。 ざっくり言うと、FSFの正規のリリースバイナリだと日本語変換のIMEに切り替えた時、インラインで候補文字が表示されないという問題です。そのために有志の方々...