FAT47の底辺インフラ議事録

学んだことのメモ帳です

MySQLの勉強メモ:クライアントプログラム、キャラクタセット、テーブルメンテナンス

セクション 3: DBA 作業のクライアント・プログラム
管理者用クライアントの概要
mysql
mysqladmin
mysqlimport
mysqldump
クライアント・プログラムの制限

mysql
mysqlは単純なSQLシェルです。
mysql -uユーザ名 -p [DB名]で利用することができます。

mysqladmin
mysqladminは管理オペレーションを実行するためのコマンドです。サーバコンフィグや現在のステータスのチェック、データベース作成、削除などに利用できます。
mysqladmin [options] command [command-arg] [command [command-arg]]
で利用できます。
mysqladminは以下のようなコマンドをサポートしています。

コマンド 説明
create DB名 DB作成
drop DB名 DB削除
extended-status サーバステータス変数とその値を表示します
flush-hosts ホストキャッシュ内の情報を全てフラッシュします
flush-logs ログを全てフラッシュします
flush-privileges グラントテーブルを再ロードします
flush-threads スレッドキャッシュをフラッシュします
version バージョン情報を表示します

mysqlimport
LOAD_DATA_INFILE SQLステートメントコマンドラインインターフェースを提供しています。
mysqlimport [options] db_name textfile1 [textfile2 ...]

で利用します。

mysqldump
データベースのダンプに利用します。sql文での出力の他にもCSVや区切り文字のテキスト出力、XMLフォーマットの出力も可能です。
mysqldump [options] db_name [tables]
mysqldump [options] --all-databases

オプション 説明
--default-character-set=charset_name デフォルトキャラクタセットの指定。指定されていない場合utf8になります
--master-data[=value] 出力にバイナリログファイル名とポジションを書き出します。1を指定した場合、CHANGE MASTERが出力されます。2の場合はSQLコメントとして値が書かれています。
--add-drop-table DROP TABLEステートメントをCREATE TABLEステートメントの前に追加します。
--extended-insert 複数行のINSERT構文を使用して、ダンプファイルサイズを小さくします。挿入時のスピードがあがります。


セクション 4:
キャラクタ・セットのサポート
パフォーマンス問題
文字カラム用のデータ型の選択

キャラクタセット
キャラクタセットとは、バイナリエンコーディングから定義済みの一連の記号へのマッピングです。特定のアルファベットをビットで表す方法といえます。

パフォーマンス問題
文字セットによっては、より多くCPUやメモリを消費したりインデックスを無効にしたりすることがあります。
サーバがソートにインデックスを使用できるのは、クエリが指定したものと同じ照合順序によってソートされる場合に限られます。
結果セットを別の照合順序で並べ替えたい場合は、ファイルソートが実行されるので遅くなります。

文字カラム用のデータ型の選択
主な文字列型はVARCHARとCHARです。
VARCHAR
可変長の文字列を格納する文字列データ型です。必要な記憶域しか使用しないため固定長の型ほど多くの記憶域を必要としません。
列の最大長が255バイト以下である場合は1バイトを使用して、それよりも大きい場合は2バイトを使用します。つまりVARCHAR(1000)は長さの情報を格納するために2バイト使用するので、最大1002バイト使用します。

CHAR
固定長の文字列データ型です。CHARは非常に短い文字列を格納する場合や、すべての値がほぼ同じ長さである場合に役に立ちます。


セクション 7: データ (テーブル) のメンテナンス
テーブルの各種メンテナンス操作
テーブルのメンテナンスに使用するSQL
CHECK TABLE
テーブルとインデックスのエラーを検査します。

REPAIR TABLE
破損したテーブルを修復します。InnoDBの場合は、何もしないALTER文を利用します。
InnoDB テーブルの修復
REPAIR TABLEはInnoDBは利用できません。
ALTER TABLE tbl_1 ENGINE=INNODB;

MyISAM の自動回復の有効化
mysqldに以下のオプションを与えます。
--myisam-recover=モード
オプションは、DEFAULT、BACKUP、FORCE、QUICK の任意の組み合わせで利用します。
mysqld はテーブルを開く一方でMyISAM テーブルを開き、テーブルにクラッシュのマークが付いていないか、つまりテーブルを正しく閉じているかどうかをチェックします。テーブルにクラッシュマークが付いていた場合、mysqld はテーブルをチェックし、テーブルが破損していた場合はmysqld で修復を試みます。

オプション 説明
DEFAULT --myisam-recoverでどのオプションも指定しないのと同じです。
BACKUP 修復時にデータテーブルを変更する場合、tbl_name.MYD データファイルのバックアップをtbl_name-datetime.BAKとして保存します。
FORCE .MYD ファイルから複数のレコードがなくなる場合でも修復を実行します。
QUICK 削除ブロックがない場合、テーブル内のレコードをチェックしない。

ANALYZE TABLE
インデックス統計情報の更新を行います。InnoDBでは自発的に統計情報の更新が行われているので必要ありません。

OPTIMIZE TABLE
フラグメンテーションの解消や、テーブルスキャンの高速化のメリットがあります。
InnoDBで利用した場合は自動的に上記で照会したALTER TABLE文が実行されます。


テーブルのメンテナンスに使用するクライアントおよびユーティリティ・プログラム
mysqlcheck
テーブルのチェック、修復、最適化、分析を行います。myisamchkと似ていますが、mysqlcheckはサーバが動作中にしか利用できません。逆にmyisamchkはサーバがオフライン時にしか利用できません。
SQLステートメントCHECK TABLE、REPAIR TABLE、ANALYZE TABLE、OPTIMIZE TABLEが実行されます。
つまりMyISAMの場合は4つとも対応しているので実行されます。