MySQLクライアントの起動
サーバが立ち上がったら、早速、クライアントのmysql.exeを動かして、サーバに接続します。
コマンド・プロンプトに
mysql
と入力すると、mysqlプロンプト(mysql>)が表示されます(↓下図)。
MySQLをインストールした段階では、anonymousユーザ(しかもroot権限を持っている)がサーバにアクセスすることを許容していますので、mysqlと入力しただけでサーバに接続できます。
C:\mysql\bin>mysql[Enter Key]
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.23.53-max-debug
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
|
mysqlコマンドの基本構文は、
mysql -u ユーザ名 -pパスワード -h ホスト名 データベース名
です。
パスワードは-pの直後にスペースを挿入しないで入力しなければなりません。
ホスト名はIPアドレスを指定します。
localhostのサーバに接続する場合は、-h(hostオプション)を省略できます。
接続する際に、使用するデータベース名を指定することもできますが、この段階では指定しないで、後でuseコマンドでデータベースを指定することも可能です。
仮に、MySQLサーバが立ち上がっていない場合は、以下のようなエラー・メッセージが表示されます。
C:\mysql\bin>mysql[Enter Key]
ERROR 2003: Can't connect to MySQL server on 'localhost' (10061)
C:\mysql\bin>
|
また、mysqlを終了させたい場合は、
\q
あるいは
quit
あるいは
exit
などと入力すると、元のコマンド・プロンプトに戻ります。
mysql> quit[Enter Key]
Bye
C:\mysql\bin>
|
生まれたてのMySQL
さて、インストールしたばかりのMySQLの中には、デフォルトで二つのデータベースが存在しています。
mysqlデータベースとtestデータベースです。
testの方は空なのでどうでもいいのですが、mysqlの方にはユーザ管理等の重要な情報が入っています。
どのようなデータベースが存在しているのかは、mysqlプロンプトから
show databases;
と入力すれば確認できます。
ここで気を付けなくてはならないのは、mysqlのコマンドには必ず最後に;(セミコロン)をつけなくてはならないという点です。
セミコロンがないとコマンドが終了したと解釈されず、Enterキーを入力しても延々とプロンプトが表示され続けます。
mysq> show databases;[Enter Key]
+-----------+
| Databases |
+-----------+
| mysql |
| test |
+-----------+
2 rows in set (0.00 sec)
|
データベースの中には0〜複数のテーブルが存在していて、実際のデータはそこに格納されます。
テーブルというのは表計算ソフトのシートのようなものであり、二次元のマトリックスです。
mysqlデータベースが持つテーブルの情報を確認するには、
show tables from mysql;
と入力します。
その結果、mysqlデータベースには六つのテーブルのあることが分かります。
mysql> show tables from mysql;[Enter Key]
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user |
+-----------------+
6 rows in set (0.00 sec)
|
ここで、ユーザ情報を管理しているuserテーブルを見るには、
show fields from mysql.user;
と入力します。
show columns from mysql.user;
あるいは、
desc mysql.user;
としても同じです。
mysql.userというのはmysqlデータベースのuserテーブルを意味します。
ただし、show(or desc)コマンドによって表示されるのは、userテーブルのデータそのものではなく、userテーブルのデータ項目の定義だけです。
すなわち、userテーブルには17のデータ項目(Field)があり、それぞれのデータ型(Type)、デフォルト値(Default)などが表示されています。
mysql> show fields from mysql.user;[Enter Key]
+-----------------+-----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-----------------+------+-----+---------+-------+
| Host | char(60) binary | | PRI | | |
| User | char(16) binary | | PRI | | |
| Password | char(16) binary | | | | |
| Select_priv | enum('N','Y') | | | N | |
| Insert_priv | enum('N','Y') | | | N | |
| Update_priv | enum('N','Y') | | | N | |
| Delete_priv | enum('N','Y') | | | N | |
| Create_priv | enum('N','Y') | | | N | |
| Drop_priv | enum('N','Y') | | | N | |
| Reload_priv | enum('N','Y') | | | N | |
| Shutdown_priv | enum('N','Y') | | | N | |
| Process_priv | enum('N','Y') | | | N | |
| File_priv | enum('N','Y') | | | N | |
| Grant_priv | enum('N','Y') | | | N | |
| References_priv | enum('N','Y') | | | N | |
| Index_priv | enum('N','Y') | | | N | |
| Alter_priv | enum('N','Y') | | | N | |
+-----------------+-----------------+------+-----+---------+-------+
17 rows in set (0.00 sec)
|
実際に、userテーブルのデータ内容を見るには、showコマンドではなく、selectコマンドを利用します。
select * from mysql.user;
と入力するとデータが表示されます。
↓下図はInsert_priv以降のフィールドを省略してありますが、実際には17のフィールドがあります。
既に述べたように、mysqlデータベースのuserテーブルはユーザ管理のためのテーブルです。
Hostフィールドは、ユーザ(クライアント)がどこからアクセスしてくるのかを表しています。
Userフィールドにはユーザ名が、Passwordフィールドにはパスワード登録されています(現在、未登録の状態です)。
それ以降の*_privというのは全て、mysqlコマンドの操作権限を示しており、Yならば操作可能、Nならば操作不可能であることを意味します。
mysql> select * from mysql.user;[Enter Key]
+-----------+------+----------+-------------+-------------
| Host | User | Password | Select_priv | Insert_priv
+-----------+------+----------+-------------+-------------
| localhost | root | | Y | Y
| % | root | | Y | Y
| localhost | | | Y | Y
| % | | | N | N
+-----------+------+----------+-------------+-------------
4 rows in set (0.00 sec)
|
MySQLの初期設定
↑上図のように、インストールしたばかりのuserテーブルには四つのユーザ情報が登録されています。
一行目はlocalhostからアクセスしてくるrootユーザ(root@localhost)であり、パスワードはなく、root権限(=全ての権限がYes)を持っています。
二行目はどこからでもアクセスできるrootユーザであり、やはり、パスワードはなく、root権限を持っています。
三行目はlocalhostからアクセスしてくるanonymousユーザであり、やはり、パスワードはなく、root権限を持っています。
現在、この状態でMySQLサーバにログインしています。
四行目はどこからでもアクセスできるanonymousユーザであり、パスワードはありませんが、権限も全くありません。
このままではマズイので、とりあえず@rootにパスワードを設定して、Aanonymousユーザを消去しておきましょう。
set password for root@localhost=password('kintakunte');
と入力すると、loclhostのrootユーザのパスワードがkintakunteに設定されます。
ちなみに、password( )というのは、パスワードを暗号化してくれる関数です。
mysql> set password for root@localhost=password('kintakunte');[Enter Key]
Query OK, 0 rows affected (0.00 sec)
mysql>
|
入力を終えたら、userテーブルにパスワードが登録されているかどうか実際に確かめてみましょう。
select host, user, password from mysql.user where user='root@localhost';
と入力します。
このコマンドの意味は、mysqlデータベースのuserテーブルから(from mysql.use)、root@loclhostの(where user='root@localhost')、hostフィールドとuserフィールドとpasswordフィールドを検索せよ(select host, user, password)ということです。
passwordフィールドにはkintakunteではなく、暗号化された6c8a198c0c746914が登録されています。
mysql> select host, user, password from mysql.user where user='root@localhost';[Enter Key]
+-----------+------+------------------+
| host | user | password |
+-----------+------+------------------+
| localhost | root | 6c8a198c0c746914 |
+-----------+------+------------------+
1 rows in set (0.00 sec)
|
同様に、どこからでもアクセスできるrootユーザのパスワードも設定しておきましょう。
set password for root@'%'=password('kintakunte');
と入力します。
この場合、ホスト名が'%'のように、シングルコーテーションで囲まれていることに注意して下さい。
mysql> set password for root@'%'=password('kintakunte');[Enter Key]
Query OK, 0 rows affected (0.00 sec)
mysql>
|
次に、セキュリティを脆弱にしてしまう可能性のあるanonymousユーザを消去しておきます。
ここではdeleteコマンドを使い、
delete from mysql.user where user='';
と入力します。
続けて、selectコマンドで確認すると、anonymousユーザは消去されていることが分かります。
mysql> delete from mysql.user where user='';[Enter Key]
Query OK, 2 rows affected (0.00 sec)
mysql> select host, user, password from mysql.user;[Enter Key]
+-----------+------+------------------+
| host | user | password |
+-----------+------+------------------+
| localhost | root | 6c8a198c0c746914 |
| % | root | 6c8a198c0c746914 |
+-----------+------+------------------+
2 rows in set (0.00 sec)
mysql>
|
一通り設定が終わったら、
flush privileges;
と入力して設定を更新しておきます。
flush privilegesは権限を初期化するためのコマンドです。
mysql> flush privileges;[Enter Key]
Query OK, 0 rows affected (0.00 sec)
mysql>
|
そうすれば、一旦、mysqlを終了して、再びログインしようとしても、mysqlとだけ入力したのでは、ログインできなくなります。
mysql> quit[Enter Key]
Bye
C:\mysql\bin>mysql[Enter Key]
ERROR 1045: Access denied for user: 'ODBC@localhost' (Using password: NO)
C:\mysql\bin>
|
mysql -u root -pと入力してEnterキーをクリックしてから、実際のパスワード(ここでは、kintakunte)を入力します。
↑上で述べたように、mysql -u root -p kintakunteとしても構いません。
C:\mysql\bin>mysql -u root -p[Enter Key]
Enter password: **********[Enter Key]
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 3.23.53-max-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
|
rootのパスワードを設定すると、mysqladminもユーザ名とパスワードを入力しなければ起動しなくなります。
例えば、pingを飛ばす場合は、mysqladmin -u root -p pingとします。
C:\mysql\bin>mysqladmin -u root -p ping[Enter Key]
Enter password: **********[Enter Key]
mysqld is alive
C:\mysql\bin>
|
このページで解説したmysqlコマンドを以下に挙げておきます。
操作内容 |
構文 |
データベースの表示 |
show databases; |
テーブルの表示 |
show tables from [database]; |
フィールドの表示 |
show fields from [table] |
フィールドの表示 |
show columns from [table] |
フィールドの表示 |
desc [table]; |
パスワードの設定 |
set password for [user]@[host] = password('[password]'); |
パスワードの設定 ログオン中ユーザ |
set password = password('[password]'); |
フィールドの検索 |
select [field] from [table] where [field]=[value]; |
レコードの削除 |
delete from [table] where [field]='[value]'; |
|