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 を起動できるかと思います。
※ オフィシャルのイメージに対して、文字コードを指定できるようにしてほしいというリクエストが多数上がっているので、オフィシャル側で対応してほしいですね。他に良い方法をご存知の方がいらっしゃったら教えてください。
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を本気で削減したいと
考えている方は、是非これらの製品の導入をご検討ください。
GlassFish & MySQL でCometアプリケーション
先日10/30(木)、31(金)に開催されたMySQLユーザカンファレンスで
使用したプレゼンテーションはMySQLのサイトからも入手できるように
なるかと思いますが、下記からも入手できるようにしました。
S-D2: GlassFish と MySQLで広がる新しい世界
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のアプリケーションを開発できるようになると
思います。
GlassFishとMySQLでComet!!
久々の更新となりますが、
MySQL ユーザコンファレンス 2008のご案内
でも紹介しましたが、来週の週末にMySQLのイベントが開催されます。
私もそこで1コマ担当させていただくわけですが、デモ用のアプリが突貫工事ですが、
完成しました。今回はMySQLとGlassFish上でCometを使用してDBに変更されたら
直ちに訪問者に通知するアプリケーションを紹介します。
手作り感たっぷりのあいかわらずデザインセンスの無いデモ画面 (^_^;)
DBの変更検知部分はやっつけで書いたので綺麗ではありませんが、
GlassFish上でCometを使うと、DBに対して負荷をかなり軽減
させる事ができます。
詳しくは来週の木曜日に発表する予定ですので、ここでは詳細は説明しませんが、
もし御興味のある方は是非、下記より事前登録の上御参加ください。
MySQLユーザカンファレンス事前登録
PS.
発表時以外は基本的に展示ブースにいますので、気軽に声を掛けてください。
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.
今日は、御仕事で新宿に行ってまいりました。
新宿の都庁前にも桜が咲いていたのですが、もうすっかり満開でした!!
明日は、雨らしいので週末に向けて散らない事を祈る限りです。