MySQL的2013年十大ニュース


1) MySQL 5.6 GA
Oracle ニュースルーム | ニュースリリース | Oracle 日本
2) MySQL 5.7 DMR
http://www.oracle.com/us/corporate/press/2020378
3) MySQL Cluster 7.3 GA
Oracle ニュースルーム | ニュースリリース | Oracle 日本
4) MySQL Workbench 6.0 GA
Oracle ニュースルーム | ニュースリリース | Oracle 日本
5) MySQL Enterprise Monitor 3.0 GA
Oracle ニュースルーム | ニュースリリース | Oracle 日本
6) MySQL Labs各種リリース
MySQL :: MySQL Labs
7) MySQL Yum Repository
Red Hat Enterprise LinuxOracle LinuxFedoraなどを対象にしたYumレポジトリを公開。
MySQL :: Using the MySQL Yum Repository :: 1 Installing MySQL on Linux Using the MySQL Yum Repository
8) MySQL Cluster Casual初開催
[twitter:@yoku0825] さんのご尽力によりMySQL Cluster CasualをGMOインターネットさんのオフィスにて初開催。 [twitter:@tsakurada] さんによる導入経験者による実践的な事例紹介や開始前にはフリードリンクがあったりと盛りだくさんでした。
MySQL Cluster Casual Talks : ATND
9) MySQL 5.1がSustaining Supportフェーズに
サン・マイクロシステムズとしてリリースした唯一のメジャーバージョンであるMySQL 5.1がついにSustaining Supportフェーズに。このフェーズでは新規のパッチや修正がリリースされません。
10) ユーザ会イベント&セミナー&連載
MyNA会は3, 7, 9月の3回、MySQL Casual Talksが4, 10月の2回、MySQL Cluster Casualが9月と大忙し。さらにオラクル主催のTech Tourがほぼ毎月。そして同じような時期に3本のWeb連載が。
世界で最も使われているOSSデータベース、MySQLの最新事情 記事一覧 | Think IT(シンクイット)
モデリングツールから管理・開発統合環境に進化したMySQL Workbench 6.0 記事一覧 | Think IT(シンクイット)
「MySQLステップアップ講座」連載一覧:EnterpriseZine(エンタープライズジン)

あなたの知らない(かもしれない)EXPLAIN文のこんな使い方

この記事は MySQL Casual Advent Calendar 2013 の18日目の記事です。こんな記事をAdvent Calendar初日に書いちゃったので今回は別のネタで。
メモ:ENUM型をフラグにするのどうなんだろうと思った件 - rkajiyamaの日記

みんな大好きEXPLAIN文。インデックス利用の有無やファイルソートしないかの確認など、MySQLでの実行計画の確認に使う、便利なあれです。MySQL 5.6.3からは、SELECT文だけではなく、UPDATE文、DELETE文、INSERT文とREPLACE文でも使えるようになっています。
EXPLAIN文の一般的な使い方やアウトプットの見方は漢の記事が役に立つのでそっちを見てください。

ここでは小ネタを2つほど。

SQLの実行計画の確認だけじゃないEXPLAIN文

EXPLAINに続けてテーブル名を付けると、

mysql> EXPLAIN world.City;
+-------------+----------+------+-----+---------+----------------+
| Field       | Type     | Null | Key | Default | Extra          |
+-------------+----------+------+-----+---------+----------------+
| ID          | int(11)  | NO   | PRI | NULL    | auto_increment |
| Name        | char(35) | NO   |     |         |                |
| CountryCode | char(3)  | NO   | MUL |         |                |
| District    | char(20) | NO   |     |         |                |
| Population  | int(11)  | NO   |     | 0       |                |
+-------------+----------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

DESCRIBE文やDESC文と同じ結果に。それだけ。
「何がうれしいの?」とか聞いちゃいけません。

EXPLAIN文のEXTENDEDオプション

オプティマイザによるクエリの書き換えやサブクエリなどで一時表に結果を生成(materialize)した処理などが含まれるなどの判断結果を、なぜかWARNINGとして出力してくれるのがEXPLAIN文のEXTENDEDオプションです。EXPLAIN EXTENDEDを実行したら、SHOW WARNINGSを続けて実行しましょう。結果にが出ていればクエリの一部の処理は主キーのルックアップで行われているので効率は悪くありませんが、が出ていればmax_heap_sizeが十分かなどの検討が必要です。各出力の説明はリファレンスマニュアルを参照してください。
http://dev.mysql.com/doc/refman/5.6/en/explain-extended.html

mysql> EXPLAIN EXTENDED
    -> SELECT City.Name, City.CountryCode IN
    ->  (SELECT Country.Code FROM Country)
    -> FROM City LIMIT 2\G
*************************** 1. row ***************************
           id: 1
  select_type: PRIMARY
        table: City
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 4188
     filtered: 100.00
        Extra: NULL
*************************** 2. row ***************************
           id: 2
  select_type: DEPENDENT SUBQUERY
        table: Country
   partitions: NULL
         type: unique_subquery
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 3
          ref: func
         rows: 1
     filtered: 100.00
        Extra: Using index
2 rows in set, 2 warnings (0.00 sec)

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 1681
Message: 'EXTENDED' is deprecated and will be removed in a future release.
*************************** 2. row ***************************
  Level: Note
   Code: 1003
Message: /* select#1 */ select `world`.`city`.`Name` AS `Name`,<in_optimizer>(`world`.`city`.`CountryCode`,<exists>(<primary_index_lookup>(<cache>(`world`.`city`.`CountryCode`) in country on PRIMARY))) AS `City.CountryCode IN
 (SELECT Country.Code FROM Country)` from `world`.`city` limit 2
2 rows in set (0.00 sec)

EXPLAIN EXTENDEDを実行すると普通のEXPLAIN文との違いはfiltered列の有無になります。このfiltered列にはデーブルに対して何%ぐらいがWHERE句などで絞り込まれるかの推測値が出力されることになっています。
http://dev.mysql.com/doc/refman/5.6/en/explain-output.html#explain_filtered
filtered列の値が100%以外になるようなクエリが書けなかったので、誰か書けたら教えてください。

EXPLAIN EXTENDED文の出力結果のSQL文は、そのまま実行できるようには考慮されていないので注意してください。


ちなみにMySQL 5.7のEXPLAIN文はデフォルトEXTENDEDオプションがついているのと同じ状態となります。


MySQL Casual Advent Calendarのネタとして、MySQL Utilitiesの一つであるシャーディング環境構築ツールのMySQL Fabricの解説を書こうと思っていましたが、記事を書く当日になってlabs版からアルファ版に変わるという想定外の事態があったので内容を差し替えました。

新しくなったMySQL UtilitiesのMac OS Xインストーラ

明日は hrokmimさんが担当です。

メモ:ENUM型をフラグにするのどうなんだろうと思った件

tagomorisさんが書いたMySQL Casual Advent Calendar 20131日目の記事を読んで、なんとなくやってみた。深くは考えていないのでトラップがあるかも。

mysql> CREATE TABLE flg(id SERIAL, flg1 ENUM("1") NOT NULL);
Query OK, 0 rows affected (0.06 sec)

mysql> INSERT INTO flg(flg1) VALUES (0), (1), (2), (''), ('1');
Query OK, 5 rows affected, 3 warnings (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 3

Warning (Code 1265): Data truncated for column 'flg1' at row 1
Warning (Code 1265): Data truncated for column 'flg1' at row 3
Warning (Code 1265): Data truncated for column 'flg1' at row 4

mysql> SELECT * FROM flg WHERE flg1 = 0;
+----+------+
| id | flg1 |
+----+------+
|  1 |      |
|  3 |      |
|  4 |      |
+----+------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM flg WHERE flg1 = 1;
+----+------+
| id | flg1 |
+----+------+
|  2 | 1    |
|  5 | 1    |
+----+------+
2 rows in set (0.00 sec)

Oracle Contributor AgreementのFAQの非公式参考訳

2013年10月31日現在で最新のOracle Contributor AgreementのFAQの参考訳を作ってみました。なお、非公式の参考訳ですので、あらかじめご了承ください。

免責事項

この非公式参考訳はOracle Contributor Agreementを読まれる方の参考になればと思い作成をしております。あくまでも法律の専門家では無い個人が翻訳したものであり、またOracle Corporationや日本オラクルの見解ではありません。また本翻訳文書の内容は一切の法的な有効性を持ちません。翻訳内容に誤りがあった場合でも責任を負うことはできませんのであらかじめご了承ください。

用語説明

  • 貢献 (= contribution)

ソフトウェアのソースコードに限らず、ドキュメントや画像、またはソフトウェアのバグフィックスなどの自らの著作物を、オープンソースプロジェクトにて利用されることを想定して提供する行為を指します。

本文書におけるオープンソースプロジェクトとは、オラクルがスポンサーや開発の管理を行っていることを指す場合が多いです。他のプロジェクトを表す場合は明示されています。




Overview / 概要

The Oracle Contributor Agreement (OCA) must be signed by any person or entity that wishes to contribute code or other materials to an open source project that is administered by Oracle. The overview page for the OCA can be found at: http://www.oracle.com/technetwork/goto/oca
The Oracle Contributor Agreement (OCA)にサインしなければならないのは、オラクルが管理するオープンソースプロジェクトのソースコードやその他の項目に貢献したいと考える個人または企業や団体です。OCAの概要情報は下記をご参照ください: http://www.oracle.com/technetwork/goto/oca

OCA Administration / OCA全般

I want to contribute. Do I need to sign anything to get started? 貢献をしたいと考えていますが、まずは署名をするところから始めるのか?

Yes. Oracle requires that contributors to all of its free and open-source projects sign the Oracle Contributor Agreement (OCA) and e-mail or fax back the completed agreement. A copy of the current version of the OCA can be found at http://www.oracle.com/technetwork/oca-405177.pdf.
はい、オラクルは、全てのオラクルのフリー&オープンソースプロジェクトへの貢献者にOracle Contributor Agreement (OCA)への署名をお願いしています。署名されたOCAはメールまたはファックスにて書面全体をお送りください。最新のOCAは下記をご参照ください: http://www.oracle.com/technetwork/oca-405177.pdf

When do I need to fill out an OCA? / OCAに署名する必要があるのはいつですか?

Before you first contribute code or any other materials like documentation, design specs, bug fixes, or graphics any contribution to any Oracle-sponsored open-source project such as the OpenJDK, GlassFish, MySQL, or others, you must first execute an OCA. This is true no matter how large or small your contribution might be. Please allow some time for the community manager to review and acknowledge your OCA.
最初のソースコードやその他ドキュメント、デザインスペックバグフィックス、またはグラフィックスなどを、オラクルがスポンサーするオープンソースプロジェクト(OpenJDK, GlassFish, MySQLなど)に貢献する前に、OCAへの署名をする必要があります。貢献される規模の大小を問わずお願いしております。コミュニティマネージャがお送りいただいた内容のレビューと確認にお時間を要することをご了承ください。

How do I file my completed OCA? Can I do it by email? / 署名済みのOCAを提出する方法は?メールでもかまいませんか?

You may send your signed and completed OCA to Oracle by by fax (number available by request), or by scanning your completed form and emailing the image to oracle-ca_us@oracle.com. Please specify the project you wish to contribute to in the subject of the e-mail.
署名済みのOCAはファックス(番号は別途ご案内いたします)、またはフォーム全体をスキャンしてメールで oracle-ca_us@oracle.com 宛にお送りください。メールの件名には貢献予定のプロジェクト名を記載してください。

Do I need to fill out a separate OCA for every Oracle- sponsored project to which I want to contribute? For each contribution? / オラクルがスポンサーする複数のオープンソースプロジェクトへの貢献をしたい場合、プロジェクトごとにOCAに署名する必要がありますか?個別の貢献ごとに署名する必要がありますか?

No. Once you execute an OCA, it is valid for all Oracle- sponsored projects. One OCA covers all of your contributions to all of these projects. However, before you contribute to any Oracle-sponsored project you should contact the Oracle lead for that project. And remember, not all contributions will be used or incorporated into the code for the project.
いいえ、1つのOCAに署名しご提出いただければ、全てのオラクルがスポンサーするオープンソースプロジェクトにて有効となります。しかし、いずれのプロジェクトに貢献する場合にも、オラクルのプロジェクトリードに事前に連絡してください。また全ての貢献がプロジェクトのコードに採用されるわけでは無いことをご承知おきください。

What if I'm contributing on behalf of my company? / 企業や団体の立場として貢献を行う場合は?

In that case, a person authorized to sign document on behalf of your company (usually a VP or higher) must sign the OCA, indicating his or her title. Please contact the Oracle project lead before submitting a company-wide OCA. Among other things, we want to understand who from your company will be authorized to make contributions.
この場合、企業や団体としての署名権限をお持ちの方によるOCAへの署名およびその方の役職の記載が必要です。企業や団体としてのOCA提出前に、オラクルのプロジェクトリードに事前にご相談ください。特に重要なのは、企業や団体の中でどなたが貢献を承認するかをお知らせください。

I've previously assigned copyright in my prospective contribution to the Free Software Foundation or some other organization under their contribution policy. So I no longer have the ability to assign a joint copyright to Oracle. How can I contribute? / 私は以前、貢献したものをFree Software Foundationやその他の組織の貢献ポリシーに従って著作権の譲渡を行いました。そのため私はオラクルとの共同著作権を割り当てることができないと思いますが、どうすれば貢献できますか?

If you have previously assigned your copyright, you may still be able to contribute. Please contact the project lead for additional details before you contribute the same code or material to an Oracle-sponsored project.
仮に過去にあなたの著作権を譲渡していたとしても、貢献できる可能性はあります。以前のコードやドキュメントなどオラクルがスポンサーするオープンソースプロジェクトに実際に貢献する前に、プロジェクトリードに事前にご相談ください。

How do I terminate my OCA? / OCAの合意を終了するにはどうすればいいですか?

You can stop your participation in a project at any time, but you cannot rescind your assignments or grants with respect to prior contributions. This protects the whole community, allowing Oracle and downstream users of the code base to rely on it. Oracle cannot terminate its responsibilities under the OCA either.
プロジェクトへの参加はいつでも辞めることができます。但し、合意そのものや以前の貢献に関連する権限を撤回することはできません。これはコミュニティ全体を保護し、オラクルおよびコードベースのダウンストリームのユーザがそれらを引き続き利用することを許可します。オラクルもまた、OCAにおける責任を破棄することはできません。

Benefits of a Contributor Agreement

Why does Oracle have a Contributor Agreement? / なぜオラクルはContributor Agreementを有しているのか?

The OCA protects the integrity of the code base, which in turn protects the development community and the project's users.
OCAはコードベースの完全性を守り、ひいてはプロジェクトの開発コミュニティとユーザを守ることを目的としています。

For Oracle-sponsored projects (i.e. projects that require an OCA), Oracle acts on the community's behalf in the event of any legal challenge. This is in keeping with how other code stewards, including the Free Software Foundation, the Apache Software Foundation and the Eclipse Foundation operate. In order to represent a code base against legal challenges, Oracle needs to have copyright ownership of all the code in that project.
ラクルがスポンサーするオープンソースプロジェクト(言い換えるとOCAを要求するプロジェクト)は、オラクルはいかなる法的な課題にもコミュニティの代わりに応対します。Free Software Foundation, Apache Software FoundationやEclipse Foundationなど、他の支援団体と同様の考えです。法的な課題にコードベースの代表として対応するためには、オラクルはそのプロジェクトにおけるコードの全ての著作権の所有を必要としています。

Consolidating ownership of the code also allows for the possibility of relicensing the whole code base should that become desirable. Having the ability to license code under a different license can be a useful tool, and not having that flexibility may be a drawback.
コードの所有を集約することで、必要な場合にコードベース全体を別のライセンスで提供することが可能となります。一つのコードを異なったライセンスで提供できるようになることは便利なツールとなり得、この柔軟性が無い場合は不都合が生じます。

Without aggregated copyright, Oracle would have to contact and obtain permission from every single contributor in order to license the code under a different license. Consolidating ownership in this way is a common practice in various open source communities.
著作権を集約しない場合、別のライセンスで提供しようとすると、オラクルは貢献者全員に個別に連絡して許諾を得る必要があります。様々なオープンソースプロジェクトでは、このような状況を想定して、集約した所有の場合が行われています。

The joint copyright assignment also allows Oracle to act as a bridge between different communities using the same code under different licenses. This allows the sharing of code between open source projects which might otherwise not be possible and it allows Oracle to license source code to parties who are not yet prepared to work with an open source license.
共同の著作権によって、オラクルは同じコードを異なったライセンスで別のコミュニティに提供することも可能となります。これによってオラクルはまだオープンソースプロジェクトとの連携準備ができていない組織にも、オープンソースプロジェクトのソースコードを供与することができます。

Most importantly, having joint ownership of copyright allows Oracle to offer commercial, binary distributions of the project. Without this ability, it would not be possible for Oracle to open its technologies, nor feasible to continue to invest in them as a business and employ developers working on the code.
最も重要なのは、著作権の共同所有によってオラクルが商用製品の提供、プロジェクトのバイナリ配布が可能となる点です。これができないと、オラクルは自社技術の公開ができず、またそのコードの開発やビジネスを行う社員に対する投資の継続が難しくなってしまいます。

What does the OCA do? / OCAによって何が起こるのか?

By executing an OCA, you

  • share your copyrights with Oracle
  • license any patents bearing on your contributions to Oracle
  • assert that your contributions are original works
  • assert that you are legally entitled to grant Oracle these rights
  • assert that your contributions do not violate anyone else's rights

OCAの行使によって、あなたは、

  • 著作権をオラクルと共有する
  • あなたの貢献物に関連する特許をオラクルにライセンスする
  • あなたの貢献物は独自の著作物であることを宣言する
  • これらの権利を合法的にオラクルに付与する権利を持っていることを宣言する
  • あなたの貢献物は他社の権利を侵害していないことを宣言する

By accepting an OCA, Oracle

  • promises that it will make your contributions available under a free or open-source software license for as long as Oracle continues to distribute them.

OCAを受け入れることによって、オラクルは、

  • あなたの著作物の配布を継続している間は、フリーまたはオープンソース ソフトウェア ライセンスの元で入手可能とすることを約束する

The OCA has been drafted in such a way as to be legally enforceable in multiple jurisdictions.
OCAは、複数の裁判権の中で法的な有効性を持つことを想定して作成されています。

Are Contributor Agreements such as this one common? / このような「Contributor Agreements(≒貢献者との合意書)」は一般的ですか?

Yes, many other open-source communities and projects have Contributor Agreements.
はい、他の多くのオープンソースコミュニティやプロジェクトにもContributor Agreementsが存在します。

How does the Contributor Agreement help me? / Contributor Agreementsはどのように私を助けてくれますか?

It allows Oracle to sponsor the projects to which you want to contribute, while retaining the ability to offer commercial licenses. Without this ability, Oracle could not responsibly open source code bases such as OpenJDK or MySQL that represent hundreds of millions of dollars of investment in infrastructure, development, and governance. Moreover, the OCA lets Oracle protect community members (both developers and users) from hostile intellectual property litigation should the need arise. The community can have greater confidence that there are no hidden encumbrances with the OCA's assertions, reducing this risk, but not eliminating it.
あなたが貢献したいプロジェクトに対して、商用ライセンスを提供可能としつつ、オラクルがスポンサーすることが可能となります。この自由度が無いと、オラクルは、環境整備や開発、管理に多額を投資してきたOpenJDKやMySQLなどのプロジェクトのコードベースをオープンソース化することができません。さらに、敵意を持って知財訴訟を起こそうとする者がいたとしても、オラクルはOCAによって(開発者とユーザ両方の)コミュニティメンバーを守ることができます。コミュニティは、OCAで明言されているとおり、隠された負担は無く、リスクを削減および排除できることとなります。

The contributor agreement also includes an "open source covenant", or a promise that a contribution will remain available from Oracle as free and open-source software for as long as Oracle continues to distribute the contribution.
OCAには、「オープンソース宣言(covenant)」が含まれており、これはオラクルが貢献物の配布を継続している間は、フリーまたはオープンソース ソフトウェア ライセンスの元で入手可能とするという約束です。

Oracle has tried to make the agreement as clear as possible. The latest revision of the OCA has no substantive changes but was written to include plain English terms. If you are in doubt about the OCA, you should seek professional legal advice.
ラクルは、この合意書をできるだけ明快なものにしようと試みています。最新のバージョンのOCAは、実質的な変更を行っていませんが、平易な英語表現で記述されています。もしOCAの内容に疑問がある場合は、法律の専門家のアドバイスを受けてください。

The Contributor Agreement and Your Rights / Contributor Agreementとあなたの権利

Do I lose any rights to my contribution under the OCA? / OCAの元で私は貢献物に関する何かの権利を失うことはありますか?

No, the OCA only asks you to share your rights. Unlike some contribution agreements that require you to transfer copyrights to another organization, the OCA does not take away your rights to your contributed intellectual property. When you agree to the OCA, you grant Oracle joint ownership in copyright, and a patent license for your contributions. You retain all rights, title, and interest in your contributions and may use them for any purpose you wish. Other than revoking the rights granted to Oracle, you still have the freedom to do whatever you want with your code.
いいえ、OCAは権利の共有をお願いしています。著作権を他の組織に譲渡することを求めるような一部のContributor Agreementとは異なり、OCAではあなたが貢献した知的財産に関する権利を剥奪することはありません。OCAにご同意いただくことで、オラクルに共同著作権を付与すること、あなたの貢献物に関する特許をライセンスすることとなります。あなたは、貢献物に関する全ての権利、法的権利(title)、および所有権(interest)を維持し、自身が希望するいずれの方法でも行使することができます。オラクルから権利を剥奪することをのぞいて、あなたは自身のコードに関してあらゆる自由をもっています。

Please be aware of the fact that most employment agreements require you to obtain permission to donate code, even if you have written the code after hours, and did so using your own equipment. Please check with your employer to ensure that you can assign copyright of the code as an individual, while permanently employed in a similar capacity.
多くの雇用契約では、業務時間外や自身の持つ機器で作成したソースコードでも、所属組織に贈与する(donate)ことを求めていることがありますのでご注意ください。このような雇用関係の場合には、ソースコード著作権を個人の物と割り当てることができるかを、雇用者に確認してください。

What can Oracle do with my contribution? / オラクルは私の貢献物に何ができますか?

Oracle may exercise all rights that a copyright holder has, as well as the rights you grant in the OCA to use any patents you have in your contributions. As the OCA provides for joint copyright ownership, you may exercise the same rights as Oracle in your contributions.
ラクルは著作権の所有者が持つ全ての権利を行使することができます。OCAにてあなたが付与したあなたの貢献に係るいずれの特許についても同様です。OCAでじゃ著作権を共同で所有することとなっているため、あなたもオラクルと同様にいずれの権利の行使も可能です。

The OCA requires that I agree not to assert my "moral rights” What are moral rights? / OCAでは私の"moral rights”を付与しないことに合意するよう求めています。"moral rights”とは何ですか?

Moral rights are additional rights of the creators of copyrighted works recognized in some jurisdictions, and intended to protect the relationship between an artist and his or her work. These rights remain in place even after ownership of the work is shared or transferred. Moral rights typically only apply to visual or artistic works, and not to utilitarian works such as software. They may prohibit the alteration or mutilation of a work, may protect the author's right of attribution or anonymous publication, and in general govern the artistic integrity of a creative work. It would be unusual for moral rights to apply to an open-source contribution, but in the event they do and you live in a jurisdiction that recognizes moral rights, when you sign the OCA you agree not to assert them with respect to your contributions.
著作者人格権"moral rights”とは、いくつかの裁判権の中で(訳注:「国によっては」と意訳できる)認められている著作物の作者に認められた権利です。アーティストとその作品の関係を守ることを目的としています。これらの権利は、作品の所有権を共有または譲渡しても維持されます。著作者人格権"moral rights”は、特に絵画や映像、芸術作品に適用されますが、ソフトウェアなどの実用的な成果物には適用されません。これは、作品や成果物の改変を禁じることもあり、作者の特徴や名前を伏せての公開する権利を守り、一般的には創造的な作品の芸術的な一元性を確保することを目的とします。オープンソースの貢献に著作者人格権"moral rights”は適さないものの、著作者人格権"moral rights”を認知している裁判権の中ではこれが適用され得るため、OCAに署名する際にあなたの貢献に関してはこの権利の主張をしないとすることとなります。

Oracle gains the benefits of the aggregated code base of an entire project. I only retain the benefit of my own contribution. Isn't that unfair? / オラクルはプロジェクトのコードベース全てに関する利益を得ています。私は自分の貢献のみに利益があります。これは公平では無いのでは?

The rights you have in the aggregated code base are not determined by the OCA. Rather, they're a function of the project's license. Open-source licenses confer a lot of rights to users and developers of software. The benefits you seek are very likely available to you in the licenses of the projects themselves.
コード全体に対してのあなたの権利はOCAには定義されていません。むしろ、それはプロジェクトのライセンスにおける役割です。オープンソースのライセンスは、ソフトウェアのユーザと開発者に多くの権利を与えています。あなたが考えるメリットは、プロジェクトそのもののライセンスによって実現されています。

What if Oracle is acquired, or the rights to a particular code base are transferred? Do I have assurances that the party receiving these rights will continue to honor the OCA? / もしオラクルが買収されるか、コードベースに該当する権利を譲渡した場合はどうなりますか?権利を受領した組織はOCAを尊重し続けるという保証はありますか?

The OCA does not include any relicensing terms or obligations in the event of transfer of rights. But because contributors retain all their rights, there is no danger that contributions can be made exclusively proprietary. Contributors retain the ability to make sure their contributed material is always freely available.
OCAには、権利の譲渡が発生した場合の再ライセンスに関する条項や義務を有していません。しかし、貢献者が全ての権利を維持し続けるため、貢献が独占されてしまうような危険はありません。貢献者は、貢献した物が常に自由に入手可能であることを確保し続けられます。

I'm hesitant to give Oracle unlimited ability to initiate enforcement against infringers. As joint copyright holder, do I have a say whether Oracle enforces the assigned copyright? / 私は、権利侵害者に対して権利侵害の解消を強制するための無制限の権利を、オラクルに譲渡することをためらっています。共同著作権保持者として、付与された著作権に関してオラクルが強制するかどうかに関して発言できますか?

It depends on the circumstances. In order to protect the whole community, when you agree to the OCA, Oracle gains the right to enforce its copyrights in your contributions. However, copyright ownership is shared, and not transferred: the contributor retains the freedom to make additional arrangements for their contributions as they see fit.
状況によります。コミュニティ全体を守るため、OCAに署名を頂くと、オラクルはあなたの貢献の著作権に関する権利への準拠の強制が可能となります。しかし、著作権の所有は譲渡では無く共有されています。貢献者は必要な場合には他の貢献者と追加の合意を行う自由はあります。

I'd like Oracle to give me credit for my contributions. Can I expect this? / 私はオラクルに私の貢献に関して名前を表記して欲しい。これは期待して良いか?

Oracle is very grateful for the participation and enthusiasm of community members. The community lead will frequently acknowledge significant contributions using social media and conferences. However, the OCA does not obligate Oracle to offer any particular form of credit or recognition for contributions; such policies are determined by individual projects. You should consult a specific project's governance and license documentation for more information.
ラクルはコミュニティメンバーの参加と熱意にとても感謝しています。コミュニティのリーダーは、ソーシャルメディアやカンファレンスを通じて顕著な貢献を行ったメンバーに謝意を伝えることが頻繁にあります。しかし、OCAでは、貢献に対して特定の形での名前の表記や表彰などをオラクルが行う義務は定めていません。これらのポリシーはプロジェクトごとに定められます。詳細は対象のプロジェクトの運営者やライセンスドキュメントなどで確認してください。

Do I have a say in the relicensing of my contribution and use of my granted patent rights? How can I be certain that my contributions will make their way into the "real" products and distributions that Oracle actively markets, or that they will be used only for the advancement of free software? / 私の貢献の再ライセンスや私が付与した特許権の行使について発言できますか?私の貢献が実際の製品に含まれてオラクルが製品として市場展開されるか、またフリーソフトウェアの発展のみに使われるかを確認できますか?

The OCA does not give you these assurances. But through the governance processes for each project and community, participants usually have a strong voice in how the code base as a whole evolves. Please consult the governance policies of the projects to which you contribute for specific details on how to participate.
OCAはこれらについての保証は含まれていません。しかし、それぞれのプロジェクトやコミュニティの運営において、参加者はコードベースの全体の方向性について強い発言力を有します。どのように参加するかについての詳細は、あなたが貢献するプロジェクトの運営ポリシーを確認してください。

I don't want my contribution to end up only in a proprietary product. Does Oracle promise to publish my contribution under an open-source license? / 私の貢献がプロプライエタリ(訳注:ここではオラクルが販売する商用製品に該当)のみでの利用に終わって欲しくないです。オラクルは私の貢献がオープンソースライセンスの元で公開されることを保証しますか?

Yes, Oracle will make certain that any contributions that are published under any license, are available under an FSF or OSI approved license as well.
はい、オラクルは、いずれの貢献物もあらゆるライセンスにて提供されることを確実にし、かつFSFまたはOSIにて認定されたライセンスでも入手可能とします。

Can I be certain that if I contribute to a Oracle-sponsored project, I'll retain the right to contribute to other, non- Oracle projects under any license? / もし私がオラクルがスポンサーするプロジェクトに貢献したら、他のオラクルではないプロジェクトに別のライセンスで貢献する権利を維持できることは確実ですか?

There is nothing in the OCA that prohibits you from contributing the same works to other projects. Remember, you are only asked to share rights, not relinquish them. Contribution policies of other projects to which you might want to contribute may restrict your ability to contribute works you've contributed to an Oracle project, or to participate in some roles if you have participated in an Oracle project. Please consult their policies for more information.
OCAはあなたが同じ成果物を他のプロジェクトに貢献することを妨げることはありません。権利の共有のみが求められており、権利の放棄では無いことをご確認ください。あなたが貢献を検討している他のプロジェクトの貢献ポリシーでは、あなたが既にオラクルのプロジェクトに貢献した物やオラクルのプロジェクトでの役割を受け入れない可能性があります。詳細は他のプロジェクトのポリシーを確認してください。

Discussing the OCA / OCAに関する議論

I or my company would like to negotiate some changes to the OCA. How do I do this? / 私、または私の所属する企業/団体がOCAの変更について交渉したい場合、どのようにできますか?

Oracle has a policy of not altering OCAs or amendments. This protects everyone equally, with the goal that no contributor gets special treatment to the of other participants. If the terms of the OCA are not acceptable to you or your company, we can discuss an alternative commercial arrangement.
ラクルはOCAや関連文書を変更しないポリシーとしています。これは公平性を確保し、どの貢献者も他の参加者に対して特別な扱いとしないことを目的としています。もしOCAの条項があなた、またはあなたの所属する企業/団体にて受け入れることができない場合、代替の商用の合意書について協議します。

How can I comment to Oracle about the OCA? / どのようにOCAについてオラクルにコメントできますか?

We welcome community comments and feedback. Please send your thoughts and feedback to us by email at the following email address: oracle-ca_us@oracle.com].
弊社ではコミュニティからのコメントやフィードバックを歓迎しています。ご意見やフィードバックは下記メールアドレス宛にお送りください: oracle-ca_us@oracle.com]

I see there is a Creative Commons license on the document. Why is that? / OCAにクリエイティブコモンズのライセンスがついています。なぜですか?

Many community members have asked us if it's OK to use Oracle's Contributor Agreement as the basis for their own. We believe we've created a best-practice document here and we are delighted for others to use it for their own open source projects. We have thus made that clear by applying a Creative Commons attribution-share alike license to the copyright of the Oracle Contributor Agreement. We would be very interested to hear from you about your views and experiences using the document and would welcome a note to say you are using it.
多くのコミュニティメンバーから、オラクルのContributor AgreementをそのコミュニティでのContributor Agreementのベースとして良いかのお問い合わせを受けています。我々はベストプラクティスとなり得る文書を作成したと考えており、様々なオープンソースプロジェクトで活用していただけることを歓迎しています。そこで、我々は、オラクルのContributor Agreementの著作権に対してクリエイティブコモンズattribution-share alikeライセンスを適用して明確化しました。我々はこのドキュメントの利用について見解やご経験、利用に当たってのポイントを伺いたいと考えています。

Does Oracle publish the names of project contributors? / オラクルはプロジェクトへの貢献者の名前を公表していますか?

Yes, Oracle reserves the right to publish a list of open source project contributors. We will not publish email address, titles, or any other private data. The list contains name, project affiliation, and sometimes a respective community username. This list is linked from our main OCA page: http://www.oracle.com/technetwork/goto/oca
はい、オラクルはオープンソースプロジェクトへの貢献者のリストを公表する権利を有しています。メールアドレスや肩書きなどの個人情報は公表しません。貢献者の名前と対象のプロジェクト名、および一部の参加者はコミュニティでのユーザ名がリストに含まれます。このリストはOCAのページからリンクされています: http://www.oracle.com/technetwork/goto/oca


繰り返しになりますが、この参考訳は非公式のものですので、免責事項をご確認ください。

MySQL Cluster 7.3 の外部キーについて

2013年4月にリリースされたMySQL Cluster 7.3 DMR2にて、ついに外部キーの機能が追加されました。この機能はGAではありませんが、MySQL Cluster 7.3 DMR2をダウンロードしていただくことでお試しいただけます。

MySQL Cluster 7.3の外部キーの詳細は下記のブログをご参照ください。今回は全部は訳しませんw
Foreign Keys in MySQL Cluster @ Andrew Morgan’s MySQL Cluster Database Blog

MySQL Cluster 7.3の外部キーの特徴

MySQL Cluster 7.3の外部キーはSQLでのアクセスのみならず、新たに追加されるnode.js、Memcached APIJava APIのClusterJ、mod_NDBでのRESTアクセス、もしくはC++のNDB APIなどいずれのNoSQL APIを利用した場合でも外部キーの機能が利用できます。

基本的にはInnoDBの外部キーの機能とほぼ同等になるように実装されていますが、以下の点が違いとなります。

  • MySQL Cluster 7.3では参照オプションとして"NO ACTION"と"RESTRICT"が利用可能だが、InnoDBでは"NO ACTION"は"RESTRICT"として扱われる
    • "RESTRICT" : 子テーブルから参照されている値が存在している場合は、親テーブルのレコードの変更や削除を一切許可しない
    • "NO ACTION": "RESTRICT"に類似するが、UPDATE文やDELETE文、およびトリガの実行後に参照制約が評価され、制約に違反する場合はROLLBACKされる
  • MySQL Cluster 7.3ではON UPDATE CASCADEは利用不可

InnoDBではセッション変数FOREIGN_KEY_CHECKSで制約の有無を制御できますが、MySQL Cluster 7.3 DMR2の時点では利用できません。これはGAにて対応できるはず。。。

ちなみに、InnoDBストレージエンジンを使用したテーブルとndbclusterストレージエンジンを使用したテーブルの間で外部キーを設定することはできません。


MySQL Workbenchでは、InnoDBMySQL Clusterの外部キーを設定できます。こちらもぜひご利用ください。
Viewing & updating Foreign Key Constraints in MySQL Workbench

MySQL Cluster 7.3 DMR2 – Includes MySQL Cluster Auto-Installer 抄訳版

4月中旬に発表されたMySQL Cluster 7.3 DMR2に含まれる新しいインストーラをご紹介したブログの抄訳版です。
http://www.clusterdb.com/mysql-cluster/mysql-cluster-7-3-auto-installer/

MySQL Cluster 7.3 DMR2

http://dev.mysql.com/downloads/cluster/#downloads

MySQL Clusterの導入がこれまで以上に簡単になりました。アプリケーションに最適なクラスタ構成の設定を確実に行うため、オラクルは新たにMySQL Clusterのインストーラをリリースし、導入および設定作業が格段にシンプルになりました。インストーラMySQL Clusterの最新のDMRの一部としてリリースされており、現時点ではGAではありませんが、すでにGAとなっているMySQL Cluster 7.2にもお使いいただけます。コマンドからWebベースのウィザードを起動し、MySQL Clusterの設定プロセスに進みます。この中では作業がよりシンプルになり、自動的にターゲットとなるマシンのリソースを自動的に検知でき、指定したアプリケーションのワークロードにあわせて主要なパラメタを設定します。

Tutorial Video / チュートリアルビデオ

次に進む前に、インストーラのデモ行ったビデオがありますのでこちらをご覧ください。(但し、すこし古いバージョンのため一部異なる部分があります)

Downloading and running the wizard / ダウンロードとウィザードの起動

インストーラを含むファイルは、MySQL Clusterのダウンロードページの “Development Releases”タブから選択します。Windows版の場合、setup.batを起動します。MSIインストーラディレクトリを変更せずにファイルを展開した場合、通常は C:\Program Files (x86)\MySQL\MySQL Cluster 7.3 のような場所にあるはずです。Linux版ではbinディレクトリのndb_setupコマンドを実行します。

デスクトップ環境でインストーラを起動した場合、自動的にブラウザ上にウィザードの最初のページが表示されます。もしブラウザが起動しない場合は、コマンドラインに表示されたURLにアクセスします。

Creating your cluster / クラスタを作成する

スプラッシュスクリーンの後、図のような画面でクラスタを構成するサーバのリストを指定します。また、ここでクラスタの"タイプ"をしていできます。最初にテストする場合などには"Simple testing"でかまいませんが、本番環境などではアプリケーションのタイプやクエリの種類(書き込み比率が高い、など)を指定します。
クラスタ作成


次のページでは、ウィザードがターゲットとなるマシンのリソースを自動で検出しようとします。もしアクセス可能なSSHサーバがターゲットとなるマシン上で稼働していない場合、インストーラは自動で検出できないため、手動でこれらのリソース情報を登録します。また、MySQL Clusterのコンポーネントがメモリを占有しないようにするために、これらの自動検出された値を上書きすることもできます。
ターゲットの検出

また、このページでMySQL Clusterのソフトウェアが置かれているディレクトリを指定します。このディレクトリは各ホスト上でMySQL Clusterのソフトウェアを展開したディレクトリです。データや設定ファイルもここに格納されます。それぞれの行は"edit"ボタンを押すことで編集できます。


次のページでは、デフォルトのノード(プロセス)構成とどのホストでプロセスが実行されるかが表示されます。表示された構成で問題無ければ次のページに進みます。必要に応じて、ノードの追加や移動、削除、または別のノードへ変更することもできます。
クラスタ作成


次のページでは、主要な設定パラメタと値が表示されます。(表示された以外にもインストーラが自動的に設定しているものもあります) これらは上書きすることもできます。問題無ければ次のページに進みます。さらなるパラメータの確認/変更は、"advanced configuration option"で可能です。
パラメタの表示と設定


最後の画面ではファイルを配置していきます。設定のコピーやディレクトリの作成も同時に行われます。そしてクラスタが起動されます。手動でプロセスの起動を行う場合には、このページに表示されたコマンドが利用可能です。(手動で設定ファイルを追加したい場合の情報も表示されています)
ファイル配置


最後に全てのプロセスや設定が正しいことを確認できます。(設定ファイルのAPIノードの項目のうち、MySQL Serverによって利用されていないものは表示しない設計になっています)
設定確認


是非テストしていただき、もし問題や改善点があればフィードバックをいただければと思います。

MySQLのProxy User

MySQL 5.5からユーザ認証の仕組みがプラグイン化され、それに伴ってProxy Userなるものが導入されています。マニュアルを読んでも分かりにくい。特に"Proxy User"と"Proxied User"の違いとか。ということでマニュアルを翻訳したら理解できるかと思ってやり始めました。

が、しかし!!
すでに分かりやすい短い解説が↓ここに orz
漢(オトコ)のコンピュータ道: MySQL 5.5新機能徹底解説 ここの「認証および監査のプラグイン化」の項目
とりあえずマニュアルの抄訳もやっちゃったので残しておきます。

MySQL 5.6 Reference Manual 6.3.8. Proxy Usersの抄訳

MySQLサーバへの認証を認証プラグインで行う際、権限の確認のために外部からの接続ユーザを別のユーザとして取り扱うことをプラグインは要求する。これは外部のユーザを"第2のユーザ"としてプロキシすることを可能とする; つまり"第2のユーザ"の権限を持つことである。言い換えると、外部ユーザは(他のユーザとして振る舞うことができるユーザ)「プロキシ・ユーザ Proxy User」であり、"第2のユーザ"は(「プロキシ・ユーザ」によって権限を利用されるユーザ)「プロキシされた・ユーザ Proxied User」となる。

本章ではプロキシ・ユーザ機能を解説する。認証プラグインの一般的な情報はSection 6.3.7, “Pluggable Authentication”。プロキシ・ユーザをサポートした独自の認証プラグインを開発を計画している場合はSection 22.2.4.9.4, “Implementing Proxy User Support in Authentication Plugins”を参照。

プロキシは以下の条件を満たした場合に行われる;

  • 接続するクライアントが「プロキシ・ユーザ」として扱われる場合、「プロキシされた・ユーザ」として識別するために、プラグインは別の名称を返す
  • プロキシ・ユーザ」のアカウントはプラグインによって認証されなければならない。CREATE USER文やGRANT文によってプラグインとアカウントが結びつけられる
  • プロキシ・ユーザ」のアカウントは、「プロキシされた・ユーザ」のアカウントに対するPROXY権限を持つ。GRANT文によってこれを行う。

CREATE USER 'empl_external'@'localhost'
  IDENTIFIED WITH auth_plugin AS 'auth_string';
CREATE USER 'employee'@'localhost'
  IDENTIFIED BY 'employee_pass';
GRANT PROXY
  ON 'employee'@'localhost'
  TO 'empl_external'@'localhost';

ローカルホスト上のクライアントからユーザ名empl_externalで接続すると、MySQLサーバはauth_pluginで認証を行う。もし('auth_string'のコンテンツを元に外部認証システムなどを利用して)auth_pluginがユーザ名employeeをMySQLサーバに返すと、MySQLサーバ内での権限チェックのために、MySQLサーバはemployeeユーザとしてこのクライアント接続を扱う。この場合、'empl_external'が「プロキシ・ユーザ」で、'employee' が「プロキシされた・ユーザ」となる。サーバは、'employee'としてのプロキシ認証を'empl_external'ができるかを、'empl_external'が'employee'に対するPROXY権限を持っているかどうかをチェックすることで確かめる。

USER() と CURRENT_USER() (詳細は略)

USER():接続したユーザアカウント
CURRENT_USER():このセッションで適用されている権限に該当するアカウント

mysql> SELECT USER(), CURRENT_USER();
+-------------------------+--------------------+
| USER()                  | CURRENT_USER()     |
+-------------------------+--------------------+
| empl_external@localhost | employee@localhost |
+-------------------------+--------------------+

PROXY権限の付与 (略)

デフォルト プロキシユーザ

一部もしくは全てのユーザが外部プラグインを利用するよう設定する場合は、「ブランク」MySQLユーザを作成し、このこれが認証プラグインを利用するよう設定する。これによってプラグインは実際に使用するユーザ名(ブランクとは異なるユーザ名)を返す。ldap_authを使ってLDAP認証を行う例は以下の通り:

CREATE USER ''@'' IDENTIFIED WITH ldap_auth AS 'O=Oracle, OU=MySQL';
CREATE USER 'developer'@'localhost' IDENTIFIED BY 'developer_pass';
CREATE USER 'manager'@'localhost' IDENTIFIED BY 'manager_pass';
GRANT PROXY ON 'manager'@'localhost' TO ''@'';
GRANT PROXY ON 'developer'@'localhost' TO ''@'';

ここでクライアントが接続を試みた場合、

mysql --user=myuser --password='myuser_pass' ...

サーバはMySQLユーザとしてのmyuserを見つけることはできない(mysql.userテーブルに存在しないため)。しかし、 ''@'' で表現されるブランクユーザアカウントが存在している。これにユーザ名とホスト名がマッチするため、サーバはクライアントの認証をこのアカウントにて行う。サーバはldap_authを利用してmyuserとmyuser_passをユーザとパスワードとして渡す。

ldap_authがLDAPディレクトリにてmyuser_passがmyuserユーザのパスワードとして正しくないと判断すると、サーバは接続を拒否する。

もしパスワードが正しく、かつldap_authがmyuserユーザはdeveloperであると判断すると、プラグインはサーバにユーザ名developerを返す。サーバは ''@'' がPROXY権限を持つdeveloperとして認証されたとして接続を許可する。該当のセッションはmyuserユーザがdeveloperの権限で処理される。(この例では記載されていないがdeveloperには適宜権限をGRANT文で付与すること) USER() と CURRENT_USER()の出力は以下の通り。

mysql> SELECT USER(), CURRENT_USER();
+------------------+---------------------+
| USER()           | CURRENT_USER()      |
+------------------+---------------------+
| myuser@localhost | developer@localhost |
+------------------+---------------------+