Posts tagged ‘MySQL’

MySQL on Docker with UTF-8 CHARSET

ちょっとした自分用メモです。
以前、デモで MySQL の Docker コンテナを作成した際、オフィシャルの Docker イメージを利用した場合、たとえ、下記を /etc/mysql/conf.d/charset.cnf に指定しても作成した DB のテーブルが latin1 になってしまう問題にあいました。

     [mysqld]'; 
      skip-character-set-client-handshake
      character-set-server=utf8
      collation-server=utf8_general_ci
      init-connect = SET NAMES utf8
      [client]
      default-character-set=utf8

そこで、docker-entrypoint.sh を追記して、DB 作成時に明示的に utf8 を渡すように変更しました。
(docker-entrypoint.sh の追記箇所)

# 前略
# 引数で書く所をファイル中に記載
DATADIR="/var/lib/mysql"
MYSQL_ROOT_PASSWORD="supersecret"
MYSQL_DATABASE="artist-db"
MYSQL_USER="mysql"
MYSQL_PASSWORD="mysql"
MYSQL_CHARSET="utf8"

# 中略 
                if [ "$MYSQL_DATABASE" ]; then
                        echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ${MYSQL_CHARSET:+CHARACTER SET $MYSQL_CHARSET} ;" >> "$tempSqlFile"
                fi
# 後略

これで、Docker コンテナの MySQL で UTF-8 を扱えるようになるかと思います。

MySQL 用の Dockerfile

FROM mysql:5.7

RUN { \
      echo '[mysqld]'; \
      echo 'skip-character-set-client-handshake'; \
      echo 'character-set-server=utf8'; \
      echo 'collation-server=utf8_general_ci'; \
      echo 'init-connect = SET NAMES utf8'; \
      echo '[client]'; \
      echo 'default-character-set=utf8'; \
    } > /etc/mysql/conf.d/charset.cnf

COPY ./docker-entrypoint.sh /tmp/entrypoint.sh
COPY ./start-up.sh /tmp/start-up.sh
RUN chmod a+x /tmp/entrypoint.sh
RUN chmod a+x /tmp/start-up.sh

ENTRYPOINT ["/tmp/start-up.sh"]
EXPOSE 3306
CMD ["mysqld"]

DB を作成するためのスクリプトファイル(docker-entrypoint.sh)

#!/bin/bash
set -e

# if command starts with an option, prepend mysqld
if [ "${1:0:1}" = '-' ]; then
        set -- mysqld "$@"
fi
# 引数で書く所をファイル中に記載
DATADIR="/var/lib/mysql"
MYSQL_ROOT_PASSWORD="supersecret"
MYSQL_DATABASE="artist-db"
MYSQL_USER="mysql"
MYSQL_PASSWORD="mysql"
MYSQL_CHARSET="utf8"

if [ "$1" = 'mysqld' ]; then
        # read DATADIR from the MySQL config
        DATADIR="$("$@" --verbose --help 2>/dev/null | awk '$1 == "datadir" { print $2; exit }')"
        if [ ! -d "$DATADIR/mysql" ]; then
                if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then
                        echo >&2 'error: database is uninitialized and MYSQL_ROOT_PASSWORD not set'
                        echo >&2 '  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?'
                        exit 1
                fi
                
                echo 'Initializing database'
                mysqld --initialize-insecure=on --datadir="$DATADIR"
                echo 'Database initialized'
                
                # These statements _must_ be on individual lines, and _must_ end with
                # semicolons (no line breaks or comments are permitted).
                # TODO proper SQL escaping on ALL the things D:
                
                tempSqlFile='/tmp/mysql-first-time.sql'
                cat > "$tempSqlFile" <<-EOSQL
                        -- What's done in this file shouldn't be replicated
                        --  or products like mysql-fabric won't work
                        SET @@SESSION.SQL_LOG_BIN=0;
                        
                        DELETE FROM mysql.user ;
                        CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
                        GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
                        DROP DATABASE IF EXISTS test ;
                EOSQL
                
                if [ "$MYSQL_DATABASE" ]; then
                        echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ${MYSQL_CHARSET:+CHARACTER SET $MYSQL_CHARSET} ;" >> "$tempSqlFile"
                fi
                
                if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then
                        echo "CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;" >> "$tempSqlFile"
                        
                        if [ "$MYSQL_DATABASE" ]; then
                                echo "GRANT ALL ON \`$MYSQL_DATABASE\`.* TO '$MYSQL_USER'@'%' ;" >> "$tempSqlFile"
                        fi
                fi
                
                echo 'FLUSH PRIVILEGES ;' >> "$tempSqlFile"
                
                set -- "$@" --init-file="$tempSqlFile"
        fi
        
        chown -R mysql:mysql "$DATADIR"
fi

exec "$@"

MySQL の起動用スクリプト(start-up.sh)

#!/usr/bin/env bash
/tmp/entrypoint.sh mysqld --datadir=/var/lib/mysql --user=mysql 

ファイルを作成したのち、Dockerfile を保存している場所で下記のコマンドを実行して Docker イメージを作成

$ docker build -t tyoshio2002/mysql:5.7 .

作成した Docker イメージを起動

$ docker run -d -p 3306:3306 tyoshio2002/mysql:5.7

で MySQL を起動できるかと思います。

※ オフィシャルのイメージに対して、文字コードを指定できるようにしてほしいというリクエストが多数上がっているので、オフィシャル側で対応してほしいですね。他に良い方法をご存知の方がいらっしゃったら教えてください。

2016年3月7日 at 2:02 午後 2件のコメント

GlassFishとMySQLの連携について



MySQLがSunに統合されて早い物で1年が過ぎました。

この1年で社内にも色々な変化がありました。



物理的に距離も縮まり、私が所属する部署とMySQLの方々が

所属する部署も隣同士になり蜜に連携をとる体制ができました。



組織の連携だけではなくもちろん、アプリケーション間の連携も

着実に進んできました。



例えば、昨年もブログに書きましたが、GlassFishにMySQLをバンドルした製品

をリリースしたりしています。



また、私のセミナーでGlassFishとMySQLでComet
のアプリケーションを作成し、

組み合わせる事でどのような事ができるかについても少し説明させて頂きました。



もちろん、上記以外にもアプリケーションサーバとDBサーバを組み合わせる事で

色々な事ができます。

US Sun社員が、GlassFishとMySQLでこんな事ができると言った記事を

連載で書いておりますので、是非こちらも参考にしてください。

そして皆様には是非、GlassFishとMySQLで様々なWebアプリケーションを構築してください。





SDN 連載1:GlassFish and MySQL, Part 1: A Perfect Combination for Web Applications

SDN 連載2:GlassFish and MySQL, Part 2: Building a CRUD Web Application With Data Persistence

SDN 連載3:GlassFish and MySQL, Part 3: Creating and Using a Web Service



また、サポートを必要とするような環境でもこれらの製品は他社に対して優位性を発揮します。

GlassFish, MySQLはそれぞれ社員数に応じたUnlimitedライセンスや、年間サポート付きの

サブスクリプションライセンスを安価で提供しています。

このような景気が悪化している情勢で、システム投資に対するTCOを本気で削減したいと

考えている方は、是非これらの製品の導入をご検討ください。


2009年1月22日 at 9:51 午後

GlassFish & MySQL でCometアプリケーション



先日10/30(木)、31(金)に開催されたMySQLユーザカンファレンスで

使用したプレゼンテーションはMySQLのサイトからも入手できるように

なるかと思いますが、下記からも入手できるようにしました。




S-D2: GlassFish と MySQLで広がる新しい世界



2008年11月3日 at 6:59 午後

GlassFishでCometアプリケーション



先日、MySQLカンファレンスにてGlassFishでCometのアプリケーションを

動作させましたが、サンプルのアプリケーションをアップします。

MySQLカンファレンスではGlassFishとMySQLとの連携をデモを行いましたが、

いきなりDB連携は難しいのでかんたんにCometを動かす方法について紹介します。

是非、ここで紹介するプログラムを改造したり参考にして色々と楽しいアプリケーションを

作成してください。



ここで紹介するアプリケーションはボタンを押下すると、サーバに接続する

全てのクライアントに対して同一の数値をサーバからPushし表示させる

Cometアプリケーションです。










1. まずはNetBeans6.1のGlassFIshバンドルをご入手ください。





2. NetBeans, GlassFishをインストールした後、GlassFish上でCometのアプリケーションを動作させる

  設定を行ってください。

  GlassFishの管理画面へはデフォルトで、http://[インストールマシンのIPアドレス]:4848/でアクセスします。

  ログインユーザ名、パスワードはそれぞれ下記を入力しログインできます。

  ユーザ名:admin

  パスワード:adminadmin



  ログインした後、管理画面中より「設定」→「HTTPサービス」→「HTTPリスナー」より

  「http-listener-1」を選択し下記のように「追加プロパティ(1)」中に記載される、全ての項目を削除し、

  「cometSupport」「true」を入力し保存してください。

  これにより、GlassFishでCometのアプリケーションを動作させる事ができるようになります。








3. 次にNetBeansのCometサンプルアプリケーションのプロジェクトを入手してください。

ファイルを展開すると下記のファイルが含まれています。




> jar tvf sample-comet.jar

0 Sat Nov 01 13:40:48 JST 2008 META-INF/

60 Sat Nov 01 13:40:48 JST 2008 META-INF/MANIFEST.MF

0 Sat Nov 01 13:21:02 JST 2008 sample-comet/

0 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/

0 Sat Nov 01 13:21:04 JST 2008 sample-comet/build/web/

189 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/button.html

446 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/count.html

438 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/index.html

513 Sat Nov 01 13:21:04 JST 2008 sample-comet/build/web/J2EE.dpf

0 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/META-INF/

23 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/META-INF/MANIFEST.MF

0 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/WEB-INF/

0 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/WEB-INF/classes/

205 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/WEB-INF/classes/HiddenCometServlet$1.class

3473 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/WEB-INF/classes/HiddenCometServlet$CounterHandler.class

3476 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/WEB-INF/classes/HiddenCometServlet.class

0 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/WEB-INF/lib/

596144 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/WEB-INF/lib/grizzly-1.0.21.jar

513 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/WEB-INF/sun-web.xml

710 Sat Nov 01 13:21:02 JST 2008 sample-comet/build/web/WEB-INF/web.xml

3081 Sat Nov 01 13:17:06 JST 2008 sample-comet/build.xml

0 Sat Nov 01 13:21:02 JST 2008 sample-comet/dist/

607377 Sat Nov 01 13:21:02 JST 2008 sample-comet/dist/sample-comet.war

0 Sat Nov 01 13:04:06 JST 2008 sample-comet/nbproject/

3538 Sat Nov 01 13:04:08 JST 2008 sample-comet/nbproject/ant-deploy.xml

43350 Sat Nov 01 13:17:06 JST 2008 sample-comet/nbproject/build-impl.xml

447 Sat Nov 01 13:17:06 JST 2008 sample-comet/nbproject/genfiles.properties

0 Sat Nov 01 13:04:06 JST 2008 sample-comet/nbproject/private/

2409 Sat Nov 01 13:04:08 JST 2008 sample-comet/nbproject/private/private.properties

2354 Sat Nov 01 13:17:04 JST 2008 sample-comet/nbproject/project.properties

932 Sat Nov 01 13:17:04 JST 2008 sample-comet/nbproject/project.xml

0 Sat Nov 01 13:04:06 JST 2008 sample-comet/src/

0 Sat Nov 01 13:04:06 JST 2008 sample-comet/src/conf/

23 Sat Nov 01 13:04:06 JST 2008 sample-comet/src/conf/MANIFEST.MF

0 Sat Nov 01 13:10:40 JST 2008 sample-comet/src/java/

3458 Sat Nov 01 13:22:10 JST 2008 sample-comet/src/java/HiddenCometServlet.java

0 Sat Nov 01 13:04:06 JST 2008 sample-comet/test/

0 Sat Nov 01 13:07:00 JST 2008 sample-comet/web/

189 Sat Nov 01 13:06:38 JST 2008 sample-comet/web/button.html

446 Sat Nov 01 13:07:04 JST 2008 sample-comet/web/count.html

438 Sat Nov 01 13:05:54 JST 2008 sample-comet/web/index.html

0 Sat Nov 01 13:04:06 JST 2008 sample-comet/web/WEB-INF/

513 Sat Nov 01 13:04:08 JST 2008 sample-comet/web/WEB-INF/sun-web.xml

710 Sat Nov 01 13:11:50 JST 2008 sample-comet/web/WEB-INF/web.xml





  上記には、サンプルアプリケーションのソースコードと実行ファイルである

  「sample-comet.war」、またCometの開発に必要なGrizzlyのAPI(grizzly-1.0.21.jar)

  が含まれています。



※ 最新のgrizzly-1.0.x.jarは下記より入手可能です。

  https://maven-repository.dev.java.net/nonav/repository/grizzly/jars/



4. 入手したNetBeansのプロジェクトファイルをご自身の環境にインポートします。



NetBeansのメニューより、「プロジェクトを開く」を選択し上記で入手、展開した

ディレクトリを指定してください。









5. プロジェクトを開くと恐らくGlassFishのインストールパスやJDKのインストールパスが

  異なるため、いくつか設定を修正して頂く必要があるかと思いますが、それらの参照先を

  変更して頂ければNetBeans上でCometのアプリケーションを開発できるようになると

  思います。


2008年10月31日 at 10:45 午後 2件のコメント

GlassFishとMySQLでComet!!



久々の更新となりますが、
MySQL ユーザコンファレンス 2008のご案内

でも紹介しましたが、来週の週末にMySQLのイベントが開催されます。



私もそこで1コマ担当させていただくわけですが、デモ用のアプリが突貫工事ですが、

完成しました。今回はMySQLとGlassFish上でCometを使用してDBに変更されたら

直ちに訪問者に通知するアプリケーションを紹介します。






手作り感たっぷりのあいかわらずデザインセンスの無いデモ画面 (^_^;)



DBの変更検知部分はやっつけで書いたので綺麗ではありませんが、

GlassFish上でCometを使うと、DBに対して負荷をかなり軽減

させる事ができます。

詳しくは来週の木曜日に発表する予定ですので、ここでは詳細は説明しませんが、

もし御興味のある方は是非、下記より事前登録の上御参加ください。



MySQLユーザカンファレンス事前登録



PS.

発表時以外は基本的に展示ブースにいますので、気軽に声を掛けてください。


2008年10月24日 at 11:44 午前 1件のコメント

GlassFishとMySQL

Translate to English by
Google Translator




今日は、アクアリウムで嬉しい発表がありました!!



ご存知の通り、SunとMySQLは今年はじめに統合を発表し、

すでに統合も完了しているのですが、その成果が早くも現れてきました。



なんと、アプリケーションサーバとMySQL Community Serverの統合バージョンが

ついにリリースされました。







SJS AppServer 9.1ur1+MySQLのダウンロード先



上記は現状で英語版のみの提供ですが、こうしてMySQLとの統合結果が早くも

現実になった事は嬉しい限りです。



そういえば、他のブロガーの皆様も発表しているようですが、MySQLの

イベントが開催される予定です。



米国 Sun Microsystems, Inc. と MySQL の合弁完了にともない、日本で

両社がひとつとなって、ビジネスを開始するに当たり、初めての外部向け

セミナーを、下記の要領にて開催いたします。



「春のMySQL祭り2008 – Jumping to the Sun !」



開催概要:

日時:2008年04月09日 13:30開場

会場:ウエスティンホテル東京

〒153-8580 東京都目黒区三田1-4-1(恵比寿ガーデンプレイス内)



費用:無料(事前登録制)

主催:MySQL株式会社、サン・マイクロシステムズ株式会社



お申し込み・詳細はこちらをご覧下さい。



http://jp.sun.com/mysql





是非、御興味あるかたは無料セミナーなのでどしどし御参加下さい!!





PS.

今日は、御仕事で新宿に行ってまいりました。

新宿の都庁前にも桜が咲いていたのですが、もうすっかり満開でした!!

明日は、雨らしいので週末に向けて散らない事を祈る限りです。










2008年3月27日 at 8:40 午前


Java Champion & Evangelist

Translate

ご注意

このエントリは個人の見解であり、所属する会社の公式見解ではありません

カレンダー

2023年5月
1234567
891011121314
15161718192021
22232425262728
293031  

カテゴリー

clustermap

ブログ統計情報

  • 1,267,388 hits

RSSフィード

アーカイブ