* MySQL関連 [#f92d8f10]

** MySQL操作基本 [#o0124375]
- [[過去のメモ:http://omoshiro-joho.com/tech-center/old_site/other/program/mysql.html]]
-- こちらに、これまでまとめてきた内容が書いてあります。こちらのWikiには、上記ページで足りない内容を、書いていきます。
- [[MySQLクイックリファレンス:http://www.bitscope.co.jp/tep/MySQL/quickMySQL.htm]]
-- 参考

*** データベースの確認 [#y1479469]
現在存在するデータベースの一覧を表示します。
 mysql> show databases;

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

mysqlプロンプト内で実行する場合
 mysql> DROP DATABASE データベース名

mysqladminを使う場合
 $ mysqladmin -u root -p drop データベース名

** 外部からアクセス [#nc094ecb]
まず、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 文を使って、適切な権限を付与してください。

** 文字化け対策 [#tacb652a]
まず現象の説明です。サーバと別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
 (略)

上記の内容は、以下のサイトで、ユーモラスに説明されているので、ご参照ください。
- [[くまくまー:http://wota.jp/ac/?date=20061011]]
*** mysqldump [#kfb9ec6a]
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 

- [[参考:http://it.kndb.jp/entry/show/id/1067]]
** Windows GUI クライアント [#zca24bfc]
*** テーブルの修正 [#t51aa29d]
MySQL Administrator の "カタログ" メニューから実行できる。

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

----
** 履歴 [#p3c5488c]
- 2007/08/17 新規作成 bokupi

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS