Linuxなどのメモ書き

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

これは、friendDBをfriendDB2へコピーする。-uで指定するmysqlユーザ名はfriendDBへのアクセス権限がないといけない。-pでパスワードを指定する場合は、mysqlコマンドとは異なり-pとパスワード文字列の間にはスペースが必要なので注意。

指定ディレクトリにコピーする場合

# mysqlhotcopy -u root -p password friendDB ./
これは、friendDBをカレントディレクトリにコピーする。/var/lib/mysql/friendDBが./friendDBにコピーされることになる。

(*1) データベースのファイルは通常/var/lib/mysql/<データベース名>のディレクトリ配下に置かれているのでこれをコピーしている。

3.2 mysqldumpを使う場合

mysqldumpでは指定データベースの内容をSQL形式で出力してくれるので、ファイルに出力すればよい。リストアする時は、ダンプしたファイルをmysqlの標準入力に与えてやればSQLが実行されてデータベースが復元される。

mysqldumpではmysqlhotcopyよりも時間がかかるが、データベースがリモートホストにあるような場合でもダンプ/リストアできる。

バックアップ

# mysqldump -u root -ppassword friendDB > ~/tmp/friendDB.bak

これは、friendDBをダンプする。-pとパスワード文字列の間にスペースは入れない(mysqlコマンドと同じ。mysqlhotcopyとは異なるので注意)。-pだけ指定してパスワード文字列を省略すればパスワードを聞かれる。リモートサーバーのデータベースをダンプしたい場合は、-h <ホスト名>でサーバーを指定すればよい。

リストア

# mysql -u root -ppassword friendDB < ~/tmp/friendDB.bak
ダンプしたファイルでDBベースをfriendDBをリストアする。friendDBを別の名前にすればそのデータベースに対して内容をリストアできる。ただし、データベース自体は存在していないといけない。なければCREATE DATABSEでデータベースを事前に作成しておく必要がある。

mysqlhotcopyのようにデータベースのコピーを行いたい場合は、以下のようにmysqldumpとmysqlをパイプでつないで実現できる。以下はserver00のfriendDBをローカルホストのfriendDBにコピーする。ただし、ローカルホストのfriendDBは事前に作成しておかないといけないので注意。
# mysqldump --opt -h server00 -u root -ppassword0 friendDB | \
    mysql -u root -ppassword1 -C friendDB


最終更新 2007/02/02 10:43:45 - kztomita
(2006/05/13 19:46:43 作成)


リンク

その他のWiki
Linuxメモ
Xnuメモ

会社
(有)ビットハイブ
受託開発やってます。

よくやる仕事

・Webシステム開発(LAMP環境)
・Linuxサーバー設定関連
サーバー移転作業代行

開発事例にデジタルカタログ/マンガビューワーを追加しました。

draggable.jsのスマホ対応版デモページを追加しました。説明はこちら

検索

Adsense
最近のコメント