MySQL 保守関連
1.状態表示
statusコマンドでServerのバージョンや文字コード設定、時間のかかったクエリなどが表示される。mysql> status -------------- mysql Ver 14.7 Distrib 4.1.16, for redhat-linux-gnu (i386) using readline 4.3 Connection id: 87 Current database: test Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 4.1.16 Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: latin1 Conn. characterset: latin1 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 5 hours 24 min 58 sec Threads: 17 Questions: 3868 Slow queries: 0 Opens: 69 Flush tables: 1 Open tables: 36 Queries per second avg: 0.198 --------------
2.mysqlデーモンの統計情報
SHOW STATUSで統計の表示。mysql> SHOW STATUS; +--------------------------------+---------+ | Variable_name | Value | +--------------------------------+---------+ | Aborted_clients | 0 | | Aborted_connects | 0 | | Binlog_cache_disk_use | 0 | | Binlog_cache_use | 0 | | Bytes_received | 165245 | | Bytes_sent | 1253636 | <略>
3.データベースのバックアップ
3.1 mysqlhotcopyを使う場合
mysqlhotcopyはデータベースのテーブルをロックして書き換えられないようにして、データベースのファイルを指定ディレクトリ/データベースにコピーする(*1)。
mysqlhotcopyは単純なファイルのコピーであるため、高速にバックアップできる。ただし、データベースが置いてあるのと同じサーバーでしか実行できない。また、データベースディレクトリ(/var/lib/mysql/<データベース名>)にアクセスするので、rootなどアクセス権限のあるアカウントで作業する必要がある。
指定データベースにコピーする場合
# mysqlhotcopy -u root -p password friendDB friendDB_2
指定ディレクトリにコピーする場合
# mysqlhotcopy -u root -p password friendDB ./
(*1) データベースのファイルは通常/var/lib/mysql/<データベース名>のディレクトリ配下に置かれているのでこれをコピーしている。
3.2 mysqldumpを使う場合
mysqldumpでは指定データベースの内容をSQL形式で出力してくれるので、ファイルに出力すればよい。リストアする時は、ダンプしたファイルをmysqlの標準入力に与えてやればSQLが実行されてデータベースが復元される。
mysqldumpではmysqlhotcopyよりも時間がかかるが、データベースがリモートホストにあるような場合でもダンプ/リストアできる。
バックアップ
# mysqldump -u root -ppassword friendDB > ~/tmp/friendDB.bak
リストア
# mysql -u root -ppassword friendDB < ~/tmp/friendDB.bak
mysqlhotcopyのようにデータベースのコピーを行いたい場合は、以下のようにmysqldumpとmysqlをパイプでつないで実現できる。以下はserver00のfriendDBをローカルホストのfriendDBにコピーする。ただし、ローカルホストのfriendDBは事前に作成しておかないといけないので注意。
# mysqldump --opt -h server00 -u root -ppassword0 friendDB | \ mysql -u root -ppassword1 -C friendDB