MySQL の機能的特徴●●●●●●●●ANSI SQL標準に準拠(一部の文法を除く。)種々のプラットフォームをサポート( Windows 、 Linux 、 Mac 、各種 UNIX 系 OS )ストレージエンジンによりデータを格納するレイヤーを仮想化ACID 準拠のトランザクションXA トランザクション非同期・準同期 - Master/Slave型レプリケーション水平パーティショニング( Range 、 List 、 Hash 、 Key )ストアドプロシージャ、ストアドファンクション、トリガ●●●●●●●●●●●UNIONビューサブクエリINFORMATION_SCHEMASSL による通信Unicode をはじめとした各種文字コードのサポート全文検索タイムゾーンのサポート多種多様な開発言語のサポート( C 、 C++ 、 Java 、 Perl 、 PHP 、 Python 、Ruby など)ODBC による接続のサポートNoSQL インターフェイス
8.
MySQL の構造的特徴●●●●●●●●●●シングルプロセス・マルチスレッド1 セッション=1 スレッドストレージエンジン API によるデータストアの仮想化その他各種プラグイン APIGNU Bison による Lexical Scannerコストベースのオプティマイザ全ての更新を保存するバイナリログ2 種類のスレッドで実装された非同期型レプリケーション移植性の高い関数群( MySQL システムライブラリ mysys )を使って実装ソースコードは C/C++ 混在
GPL - GNUGeneral Public License●リチャード・ストールマン氏により考案されたソフトウェアライセンス––––●●1989 年〜世界で最も用いられているオープンソースライセンスフリー(自由な)ソフトウェアを実現するために考えられたコピーレフトを具現化するためのライセンス現在の著作権法の上に立脚Copyleft – All rights reversed–Copyright – All rights reserved を文字ったもの●––意味は真逆ユーザーに完全な自由を認める。再配布物(派生物や 2 次利用した作品)のライセンスを同じものにすることを要求
MySQL で利用可能な文字コード文字コード名対応文字ストレージサイズsjisJIS X0208:19971 〜 2 バイトcp932JIS X 0208:1997 + NEC 特殊文字・ IBM拡張文字1 〜 2 バイトujisJIS X 0208:19971 〜 3 バイトeucjpmsJIS X 0208:1997 + NEC 特殊文字・ IBM拡張文字1 〜 3 バイトutf8JIS X 0208:1997 + NEC 特殊文字・ IBM拡張文字1 〜 3 バイトutf8mb4JIS X 0213:20041 〜 4 バイト
文字コードの指定はカラム単位CREATE TABLE t(a VARCHAR(100) CHARACTER SET cp932,b VARCHAR(100) CHARACTER SET eucjpms,c VARCHAR(100) CHARACTER SET utf8,:);必要に応じて自動変換
32.
MySQL サーバーにおける文字コード自動変換④ データを蓄える際の文字コード②クエリの実行に利用する文字コード⑤ テーブル名やカラム名に対する文字コードテーブル① 送信するSQL 文に対する文字コードクライアントセッションMySQL サーバー⑥ ファイル名を解決する際の文字コード③ クエリの実行結果に対する文字コードファイルシステム出展:エキスパートのための MySQL[運用+管理]トラブルシューティングガイド
33.
カラムの文字コードのデフォルト値CREATE TABLE t(a VARCHAR(100) CHARACTER SET cp932,b VARCHAR(100) CHARACTER SET eucjpms,c VARCHAR(100),:指定がない) CHARACTER SET utf8;デフォルト値としてテーブルの文字コードがカラムに適用される
34.
テーブルの文字コードのデフォルト値CREATE TABLE t(a VARCHAR(100),b VARCHAR(100),c VARCHAR(100),:);カラム、テーブル双方に文字コードの指定がないCREATE DATABASE db CHARACTER SET utf8;データベースの文字コードが適用される
Explainmysql> EXPLAIN SELECT'cond1' AS LABEL, COUNT(1) AS COUNT FROM Country WHERE Code LIKE 'J%' UNION SELECT 'cond2', COUNT(1)FROM Country WHERE IndepYear > 1900 UNION SELECT 'cond3', COUNT(1) FROM Country WHERE Continent = 'Africa' UNION SELECT'cond4', count(1) FROM Country WHERE Name = LocalName;+----+--------------+----------------+-------+---------------+---------+---------+------+------+--------------------------+| id | select_type | table| type | possible_keys | key| key_len | ref | rows | Extra|+----+--------------+----------------+-------+---------------+---------+---------+------+------+--------------------------+| 1 | PRIMARY| Country| range | PRIMARY| PRIMARY | 3| NULL |3 | Using where; Using index || 2 | UNION| Country| ALL| NULL| NULL| NULL| NULL | 239 | Using where|| 3 | UNION| Country| ALL| NULL| NULL| NULL| NULL | 239 | Using where|| 4 | UNION| Country| ALL| NULL| NULL| NULL| NULL | 239 | Using where|| NULL | UNION RESULT | <union1,2,3,4> | ALL| NULL| NULL| NULL| NULL | NULL | Using temporary|+----+--------------+----------------+-------+---------------+---------+---------+------+------+--------------------------+5 rows in set (0.00 sec)
バックアップ戦略〜考慮するべきポイント〜●●●●●オンライン or オフライン論理or 物理フル or 差分 / 増分どのストレージエンジンが対象かバックアップ / リストアにかかる時間––●スケジュール。––●●●復旧優先?データ保全優先?どの時間帯にとるか?どこまで巻戻っても OK か?手順は確立されているか?バックアップの保管先有償 or 無償