MySQL関連

MySQL操作基本

データベースの確認

現在存在するデータベースの一覧を表示します。

mysql> show databases;

データベースの削除

データベース自体を削除する場合、下記の手順があります。いずれの方法でも良いです。

mysqlプロンプト内で実行する場合

mysql> DROP DATABASE データベース名

mysqladminを使う場合

$ mysqladmin -u root -p drop データベース名

外部からアクセス

まず、mysqlサーバとTCP接続を確立できるようにします。netstat コマンドを使い、現在の状態を確認してください。

# netstat -a
tcp        0      0 localhost:mysql         *:*                     LISTEN

上記のように、"localhost" と表示する場合は、外部から接続することはできません。次のように、設定を修正します。

# vi /etc/mysql/my.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1  # <-この行をコメントアウト

設定を変更したら、再起動します。

# mysqladmin -u root shutdown
# mysqld_safe --user=mysql &

再び netstat -a を実行して、下記のように localhost が * に変わっていることを確認します。

# netstat -a
tcp        0      0 *:mysql                 *:*                     LISTEN

あとは、mysql内のアクセス制御の修正を行ないます。GRANT 文を使って、適切な権限を付与してください。

文字化け対策

まず現象の説明です。サーバと別PCのクエリブラウザからマルチバイト文字を登録しようとすると、不正な文字列だと怒られます。一方サーバと同じPC上でCUIで登録すると、登録はできますが、先述のクエリブラウザで参照すると、化けて見えます。

原因は、もちろん文字コードの設定が違っているせいです。mysqlクライアントを立ち上げ、statusコマンドとshow variablesコマンドで、現在の設定を確認します。

mysql> status
(略)
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
(略)
mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

すると、character_set_system のみ utf8 で、残りは全て latin1 でした。なるほど、latin1 で揃っていたため、CUI から登録ができたのかもしれませんね。

これを、utf8 に直してやります。/etc/mysql/my.cnf の [mysqld] セクションに、下記の記述を追加します。

default-character-set=utf8
skip-character-set-client-handshake

my.cnf の変更が終わったら、mysqld を再起動します。

# mysqladmin -u root shutdown
# mysqld_safe --user=mysql &

そして、status コマンドを実行します。

mysql> status
(略)
Server characterset:    utf8
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
(略)

これで OK ってあれ?そうです、既に作成したデータベースの文字コードは変更されません。削除をして、作り直します。

mysql> drop database database_name;
mysql> create database database_name;

今度こそ、OK です。

mysql> status
(略)
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
(略)

上記の内容は、以下のサイトで、ユーモラスに説明されているので、ご参照ください。

mysqldump

mysqldumpコマンドを用いて、データベースのバックアップを取ることができます。作成するバックアップファイルは、sql文形式になります。そのため、互換性が非常に高いです。

全てのデータベースをバックアップ

$ mysqldump -u root -x --all-databases > dump.sql

特定のデータベースをバックアップ

$ mysqldump -u root データベース名 > dump.sql

特定のデータベースの特定のテーブルをバックアップ

$ mysqldump -u root データベース名 テーブル1 テーブル2 > dump.sql

特定のデータベースのテーブル構造のみをバックアップ

$ mysqldump -u root -d データベース名 > dump.sql

特定のデータベースのレコードのみをバックアップ

$ mysqldump -u root -t データベース名 > dump.sql

全てのデータベースを復元

$ mysql -u root < dump.sql 

特定のデータベースを復元

$ mysql -u root データベース名 < dump.sql 

Windows GUI クライアント

テーブルの修正

MySQL Administrator の "カタログ" メニューから実行できる。

MySQL開発

エラー情報の取得

mysql_errno(MYSQL* mysql) 関数を使うことで、直近に実行したコマンドのエラー状態を確認できます。各コマンドの戻り値自体は、エラー(0以外)、非エラー(0)の区別のみ行ないます。


履歴


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-01-26 (月) 23:20:01