imported>Administrator |
|
1行目: |
1行目: |
− | '''MySQL Connector/NET'''とは、[[.NET Framework]]を用いたアプリから[[MySQL]]データベースサーバーに接続するためのADO.NETプロバイダー(ライブラリ)である。
| + | [[Xamarin Studio]]の[[NuGet]]でバージョンを指定してパッケージが[[インストール]]したい。 |
| | | |
− | == インストール ==
| + | 具体的には[[MonoGame]] 3.5(と[[Xamarin.Android]])で[[3Dモデル]]を表示した際にライティングが正常に機能せず画面が暗くなる問題が発生したためMonoGame 3.4に戻したい。 |
− | === 通常 ===
| |
− | * mysql-connector-net-version-noinstall.zip をダウンロードする。
| |
− | http://www.mysql.com/downloads/connector/net/#downloads
| |
| | | |
| + | [[Visual Studio]]なら[[コマンドライン]](Package Manager Console)で「-Version」引数を付ければできるが、Xamarin Studioではコマンドラインがない。 |
| + | どうしたものか。 |
| | | |
− | * ダウンロードしたファイルを展開する。 | + | == 解決策 == |
− | <source lang="bash">
| + | # バージョン指定で入れたいパッケージ名で[[ググり]]、NuGet Gallery(NuGet公式サイト)で正式なパッケージ名とバージョン番号をメモる。 |
− | $ unzip mysql-connector-net-version-noinstall.zip -d mysql-connector-net-version-noinstall
| + | # Xamarin Studio上のプロジェクトの「パッケージ」[[フォルダ]]を[[右クリック]]して「Add Packages」を選ぶ[[NuGet]]を開く |
− | </source>
| + | # 検索窓に以下の形式で入力する。「version:***」を付けることでバージョン指定できるようだ。 |
| + | #: パッケージ名 version:バージョン番号 |
| | | |
| + | ; Xamarin StudioのNuGetでMonoGame最新版ではなくMonoGame 3.4を見つけ出す例 |
| + | MonoGame.Framework.Android version:3.4.0.459 |
| | | |
− | * 展開したディレクトリの中からmysql.data.dllファイルを探し出し、Monoで作ったアプリのインストールフォルダにコピーする。
| + | == 関連項目 == |
− | <source lang="bash">
| |
− | $ find . -name mysql.data.dll
| |
− | ./v4/mysql.data.dll
| |
− | ./v2/mysql.data.dll
| |
− | </source>
| |
− | 2012年3月5日時点で最新バージョンとなっていたmysql-connector-net-6.4.4-noinstall.zipの中には、v2/mysql.data.dllとv4/mysql.data.dllの2個あったが、名前から推測するに、たぶん.NET Framework 2.0と4.0用だと思うので、とりあえずv4/mysql.data.dllを入れてみた。
| |
− | | |
− | === GACに登録しておく場合 === | |
− | Connector/NET コンポーネントを、gacutil コマンドで Global Assembly Cache に登録する :
| |
− | <source lang="bash">
| |
− | $ gacutil /i MySql.Data.dll
| |
− | Installed mysql.data.dll into the gac (/opt/novell/mono/lib/mono/gac)
| |
− | </source>
| |
− | | |
− | インストールが完了すれば、Connector/NET コンポーネントとコンパイルされたアプリケーションは以後変更する必要はありません。しかし、アプリケーションをコンパイルする際、-r:MySqlData.dll コマンドライン オプションを使用して Connector/NET コンポーネントを確実に含むようにしてください。
| |
− | | |
− | == ConnectionString ==
| |
− | [[ConnectionString]]の設定例を示す。
| |
− | | |
− | ConnectionStringに設定する項目名は宗教上の理由および政治上の理由により、同じ意味の異なる語句が大量に存在しており非常に紛らわしい。ここに記述してある項目は最新でもなく全てを網羅しているわけでもないのでMySQL公式サイト上のマニュアルを見るのが一番確実である<ref>http://dev.mysql.com/doc/refman/5.1/en/connector-net-connection-options.html</ref>。
| |
− | | |
− | === 標準的な設定 ===
| |
− | MySQLサーバーの設定をいじってポート番号を変えてある場合はポート番号を明示する。
| |
− | Portを省略するとMySQLデフォルトの3306番ポートが使用される。
| |
− | <source lang="text">
| |
− | Server=サーバーアドレス;Database=データベース名;Uid=ユーザー名;Pwd=パスワード;Port=ポート番号;
| |
− | </source>
| |
− | | |
− | === 接続先サーバーのアドレスを指定する ===
| |
− | * Host
| |
− | * Server
| |
− | * Data Source
| |
− | * DataSource
| |
− | * Address
| |
− | * Addr
| |
− | * Network Address
| |
− | デフォルト値:localhost
| |
− | | |
− | 接続先サーバーを指定する。
| |
− | | |
− | 接続先サーバーに「localhost」が指定されており、かつ[[UNIX]]上の[[Mono]]で動いている場合は、[[BSDソケット]]([[TCP/IP]])ではなく[[UNIXソケット]]([[プロセス間通信]])を使おうと試みる。
| |
− | <source lang="text">
| |
− | Server=サーバーアドレス;
| |
− | </source>
| |
− | | |
− | 接続先サーバーをアンパサンド(&)で区切りで複数指定すると、すべてをレプリケーションサーバー(スレーブ)として自動的に負荷分散してくれる。なおMySQLはマスター・スレーブな非同期レプリケーションが大前提であり、アンパサンドで繋ぐ書き方は複数のスレーブサーバーを列挙する書き方なので、こいつに対してINSERT/UPDATE/DELETEなどの書き込みに使ってはいけない。あくまでSELECT専用。別途マスターサーバーを指定した[[ConnectionString]]を用意しておくこと。
| |
− | <source lang="text">
| |
− | Server=サーバーアドレス1 & サーバーアドレス2 & サーバーアドレス3;
| |
− | </source>
| |
− | | |
− | === 接続先サーバーのポート番号を指定する ===
| |
− | * Port
| |
− | デフォルト:3306
| |
− | | |
− | MySQLサーバーが待ち受けているポート番号を指定する。
| |
− | この値は接続先がlocalhostで[[UNIXソケット]]が使える場合は無視されます。
| |
− | | |
− | === 接続プロトコルを指定する ===
| |
− | * Protocol
| |
− | * Connection Protocol
| |
− | * ConnectionProtocol
| |
− | デフォルト:socket
| |
− | | |
− | 接続に使用するプロトコルを指定する。
| |
− | | |
− | 設定できる値は以下のとおり。
| |
− | * socket または tcp - BSDソケット(TCP/IP)で接続する。UNIXソケットが使えそうな場合はUNIXソケットで繋ぎに行く。
| |
− | * unix - UNIXソケットで接続する。
| |
− | * pipe - 名前付きパイプで接続する。
| |
− | * memory - MySQL共有メモリで接続する。
| |
− | | |
− | === 初期データベースを指定する ===
| |
− | * Initial Catalog
| |
− | * Database
| |
− | デフォルト:mysql
| |
− | | |
− | 初期状態で使用するデータベース名を指定する。
| |
− | MySQLのデータベース名は大文字小文字を区別するので注意すること。
| |
− | 接続後は「use データベース名;」というクエリーを実行することで切り替えれる。
| |
− | | |
− | === ユーザー名を指定する ===
| |
− | * User Id
| |
− | * UserID
| |
− | * Username
| |
− | * Uid
| |
− | * User name
| |
− | * User
| |
− | デフォルト:なし
| |
− | | |
− | 接続に使用するMySQLアカウントを指定する。
| |
− | | |
− | === パスワードを指定する ===
| |
− | * Password
| |
− | * pwd
| |
− | デフォルト:なし
| |
− | | |
− | 接続に使用するMySQLアカウントのパスワードを指定する。
| |
− | | |
− | === 通信の暗号化の有無を指定する(旧) ===
| |
− | * Encrypt
| |
− | * UseSSL
| |
− | デフォルト:false
| |
− | | |
− | MySQL Connector/NET 5.0.3 以降で使えるようになったオプションで、それより古いバージョンでは無視される。
| |
− | MySQL Connector/NET 6.2.1 以降で廃止されたので、このオプションではなくSSL Modeオプションを使えとのこと。
| |
− | | |
− | === 通信の暗号化の有無を指定する(新) ===
| |
− | * SSL Mode
| |
− | * SslMode
| |
− | デフォルト:None
| |
− | | |
− | MySQL Connector/NET 6.2.1 以降で新設された暗号化設定。
| |
− | | |
− | 設定できる値は以下のとおり。
| |
− | * None - SSLを使用しない。
| |
− | * Preferred - SSLを優先する。接続先MySQLサーバーがSSLをサポートしていない場合は自動的にSSLを使用しないで接続する。
| |
− | * Required - SSLを使用する。接続先MySQLサーバーがSSLをサポートしていない場合は接続エラーとなる。[[オレオレ証明書]]を使う場合に使うのか?。
| |
− | * VerifyCA - SSLを使用し、かつ認証局(CA)での検証を行う。ただし証明書の有効性のみを検証し、ホスト名の不一致を許容する。
| |
− | * VerifyFull - SSLを使用し、かつ認証局(CA)での検証を行う。ホストが一致しない場合は接続エラーとなる。
| |
− | | |
− | === 接続がタイムアウトするまでの時間を指定する ===
| |
− | * Connect Timeout
| |
− | * Connection Timeout
| |
− | * ConnectionTimeout
| |
− | デフォルト:15
| |
− | | |
− | MySQLサーバーへの接続を試み、タイムアウトするまでの時間(秒数)を設定する。
| |
− | | |
− | === コマンドがタイムアウトするまでの時間を指定する ===
| |
− | * Default Command Timeout
| |
− | * DefaultCommandTimeout
| |
− | デフォルト:30
| |
− | | |
− | MySQL Connector/NET 5.1.4 で追加されたオプション。
| |
− | MySQLサーバーとの接続が完了し、コマンド(クエリー)を発行してからここで設定した時間(秒数)が経っても応答がない場合はエラーを発生させる。あくまでデフォルト値なのでコマンド(クエリー)発行時にコマンドタイムアウト時間を明示した場合はそちらが優先される。
| |
− | | |
− | === プリペアド・ステートメントの実行場所を指定する ===
| |
− | * Ignore Prepare
| |
− | * IgnorePrepare
| |
− | デフォルト:true
| |
− | | |
− | プリペアド・ステートメントの構文解析をサーバー側(MySQLサーバー)で行うか、クライアント側(MySQL Connecter/NET)で行うかを設定します。falseの場合はサーバー側で行い、trueの場合はクライアント側で行います。デフォルトはtrue(クライアント側)です。
| |
− | | |
− | === 文字コードを指定する ===
| |
− | * CharSet
| |
− | * Character Set
| |
− | * CharacterSet
| |
− | デフォルト:なし
| |
− | | |
− | MySQLサーバーに送信する全てのクエリーに使用する文字コードを指定する。
| |
− | 結果はデータベース内の文字コード(テーブルごとに設定された文字コード)で帰ってくるので注意。
| |
− | <source lang="text">
| |
− | CharSet=UTF8;
| |
− | </source>
| |
− | | |
− | MySQLを何も考えないでインストール直後の設定で運用し、デフォルトでlatin1が設定され、後々大変なことになる現場を大量に見てきたので文字コードには注意すること。MySQLで一番確実な文字コードは「Binary」(MediaWikiのデフォルト値)だが、[[Dapper]]などから使う場合によろしくないので普通はUTF8くらいが良いかもしれない。
| |
− | | |
− | === コネクション・プールの有無を指定する ===
| |
− | * Pooling
| |
− | デフォルト:true
| |
− | | |
− | コネクションプールはデフォルトで有効となっている。
| |
− | | |
− | コネクションプールが有効な場合は、MySqlConnectionオブジェクトを生成する際に、プールしている接続の中から適切なものが引き出され、使えそうな接続が無ければ新規に作られる。
| |
− | | |
− | === コネクション・プールの最小値を指定する ===
| |
− | * Minimum Pool Size
| |
− | * Min Pool Size
| |
− | * MinimumPoolSize
| |
− | デフォルト:0
| |
− | | |
− | 以下、Oracleと同じであれば、負荷が低いときはこの値に向かい接続を切り、無駄な接続維持をしない。また、アプリ起動直後などでこの値よりプールしている接続少ないは特に何もしないで増えるのを待つ。たとえばこの値が10に設定されていると10になるまで極力切断せずにプールし続けようとする。
| |
− | | |
− | ソースも見ていないし、実際に試してもいないので、実際のところ本当にそうなのかは不明。
| |
− | | |
− | === コネクション・プールの最大数を指定する ===
| |
− | * Maximum Pool Size
| |
− | * Max Pool Size
| |
− | * maximumpoolsize
| |
− | デフォルト:100
| |
− | | |
− | Oracleと同じであれば、接続数が最大数に達している状態では新規接続ができなくなる。高負荷でサーバーが吹っ飛ぶ(応答すらしなくなる)のを防止するための設定なので大きくすればいいというものではない。
| |
− | | |
− | ソースも見ていないし、実際に試してもいないので、実際のところ本当にそうなのかは不明。
| |
− | | |
− | == 備考 ==
| |
| | | |
− | == 関連項目 ==
| |
− | * [[Dapper]]
| |
| == 参考文献 == | | == 参考文献 == |
− | <references/>
| + | {{reflist}} |
| | | |
− | == 外部リンク ==
| + | {{stub}} |
− | * http://www.mysql.com/downloads/connector/net/
| |
| | | |
− | {{stub}}
| + | [[category: Xamarin Studio]] |
| + | [[category: Xamarin.Android]] |
| + | [[category: Xamarin.iOS]] |
| + | [[category: Xamarin.Mac]] |
| + | [[category: MonoGame]] |