* 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