SQL事始め

RevはTCP/IPによってUnix ServerのMySQLにアクセスしてコントロールすることも、CGIを通じてMySQLをコントロールすることもできる。

ISPが提供するほとんどのServerにはおまけでMySQLがついているが、Revが直接MySQLをコントロールするには、そのMySQLがSSHによるリモートによるアクセスを許可している必要がある。

ここでは、CGIを使わずにRevが直接、外部サーバーのMySQLにアクセスする方法を説明する。

 

手順

まずSSHでMySQLにアクセスできるようにする必要がある。
そのためには、

  1. そのサーバーにおいて、MySQLへの外部からのアクセスができるようにする (必要な場合)
  2. SSHでMySQLを操作して、root以外のユーザーを設定する。

の準備が必要。次にSSHやphpMyAdminなどでMySQL上にテーブルやフィールドを設定する。
ここまで出来たならRevの出番となり、Revでスクリプトを書いてMySQLとデータのやりとりをすることができる。

以下、この手順に沿って解説する。

 

サーバーの条件

Revから直接、レンタルサーバー上のMySQLを動かすにはそのサーバーが次の条件を満たしている必要がある。

  • rootでShell権限があること
  • MySQLがTCP/IPでリモート接続できること

そして、そのためには、ServerはVDSである必要がある。(VDS, Virtual Dedicated Serverについての一般的な説明はhttp://ezinearticles.com/?Dedicated-/-Virtual-Dedicated-Servers-and-Its-Benefits!&id=67818、もっと技術的な説明はhttp://www.hardhathosting.com/をご覧ください。)

 

MySQLのバージョン

MySQLは、4.0以前、4.1以降、5.1以降で性能が違うだけでなく、上位互換性も完全ではない。さらに、日本語の扱いも異なる。海外のレンタルサーバーで最新バージョンのMySQLを使っているところは少なく、一方、日本のMySQLのマニュアル本はMySQLの最新バージョン、しかもlocalhostによるオペレーションを前提に書かれているものがほとんどである。その結果、同じことをやっているのに動かない、という事態になる。したがって、自分がMySQLのどのバージョンを使っているのかは注意を要する。

  1. 4.0以前の方が日本語の扱いはシンプル。
  2. キャラクタセットのcp932, eucjpms, ucs2, utf8はバージョン4.0では対応していない。(4.0で日本語の使えるキャラクタセットはujis、sjisのみらしい。)
  3. 4.0までは「CHAR(5)」の5は5バイトを意味しましたが、4.1以降は5文字を意味する。
  4. 4.1から登場したbinayは画像データのためのバイナリでなく、自動変換機能がキャンセルされるキャラクタセットらしい。
  5. フィールドごとに異なるキャラクタセットを設定できるのは4.1以降。(それ以前はセッション単位か?)
  6. skip-character-set-client-handshake というオプションが使えるのは5.X以降。

などの違いがあるので、バージョンの違いには注意が必要 (これを知らなかったので一週間ぐらい悩んだ。)
バージョンと日本語対応の違いの詳細な情報は、翔泳社刊「MySQL徹底入門第二版」日本MySQLユーザー会著がおすすめ。

MySQL日本語メーリングリストの過去ログはhttp://www.mysql.gr.jp/mysqlml/mysql/

最初に何を使ってMySQLに接続するか

もちろん、最終的にはRevから接続するわけですが、あらかじめMySQLにテーブルやフィールドの設定をしておかないとRevでデータを書き込むことができない。
そこで最初は、SSHなどでMySQLにアクセスしてテーブルなどを作るのだが、phpMyAdmin、MySQL Control Center、MySQLAdministrator、MySQLQueryBrowserなどを使えばグラフィカルな表示でデータベースの構築、データの入出力や表示ができる。http://dev.mysql.com/からダウンロード可能。

phpMyAdminは多くのサーバーにインストールされているもので、テーブルやフィールドの作成やデータの閲覧までできる便利なものである。
次はトラブルシューティング。

 

MySQLにアクセスできない

skip-networking
MySQLの設定ファイルであるmy.cnfに、
skip-networking
と書かれているとMySQLはリモートアクセスを拒否する。my.cnfファイルは普通はroot/etc/の下にある。書かれていたら削除して、MySQLをリスタート。

rootでMySQL Control Centerは使えない
私の使っているサーバーは、rootでは、shell以外でMySQLにアクセスできない。すなわち、MySQL Control Centerは、root権限で作ったユーザーが使うことはできても、rootが使う(MySQLにアクセスする)ことはできない、ということである。

Access Hosts
レンタルサーバーによっては、さらにAccess Hostという設定にクライアントのIPを書いておかないとアクセスを拒否されることがある。DHCPなどのダイナミックIPの場合、58.81.166.%などとワイルドカードを混ぜておけばよい。

 

MySQLのユーザー設定

MySQLのユーザーと、そのMySQLが動作しているサーバーのユーザーはまったく別のものである。
次の点に注意する必要がある。

  • MySQLをインストールするとrootというMySQL用のユーザーが自動的にできるが、これはサーバーのrootと関係がない。
  • そのMySQL用のrootにはパスワードが設定されていないので、誰でもrootを使用できる。従って、MySQLをインストールしたらすぐにパスワードを設定する方がよい。
  • 匿名ユーザー(anonymous)も自動的に作られるので、気になるなら削除するべき。

最初は、MySQLのユーザーはrootと匿名ユーザーしかないので、SSHなどでrootでMySQLにログインするしかない。MySQLにログインしたらgrantコマンドで新規ユーザーを作り、ログアウトして、grantで作った新規ユーザーで再度MySQLにログインする。そして普通に使う。


初めてのログイン
  1. SSH2でサーバーにログイン。
    Last login: Sat Oct 27 14:21:22 2007 from 58x81x113x7.ap58.ftth.tcom.ne.jp
    [server_name][~]$
    と出るので、mysqlとタイプし、リターン。
  2. これはrootユーザーによるログインである。パスワードが設定されていないので簡単にログインできてしまう。

    ※ MySQL データベースのアクセス認証に使用するユーザー名・パスワードは、Unixのログインユーザとは別である。しかし、mysqlへのログイン時にユーザ名が指定されていないときは、現在のログインしているUnixのユーザ名をMySQLのユーザー名としてログインが行われる。
    (プロバイダが提供するMySQLのインストーラーによっては、インストール時にrootのパスワードを設定できるものがある。)

    ユーザー名の指定は-uスイッチで変更できる。
    rootでUnixにログインしている場合、次のコマンドはすべて同じである。

# mysql -h localhost -u root
# mysql -h localhost
# mysql -u root
# mysql

 

rootのパスワードの設定と匿名ユーザーの削除

rootのパスワードの設定は次のコマンドで行う。
「Query OK, 0 rows affected (0.00 sec)」と出ればOK。

rootのパスワードを変える

mysql> SET PASSWORD FOR 'root'@'localhost'=PASSWORD('newPassword');

匿名ユーザーの削除は次のコマンドで行う。

匿名ユーザーを削除する

mysql> DELETE FROM mysql.user WHERE user='';

 

新規ユーザーの作成

ユーザーを作るためにはrootでMySQLにログインして次のコマンドを実行する。

mysql> grant all privileges on *.* to 'userName'@'%'identified by 'newPassword';

userNameは新規のユーザー名、newPasswordはそのユーザー用のパスワードである。all privileges on *.* によって、すべてのデータベースにアクセスでき、データの作成、変更、削除まで何でもできるスーパーユーザーが誕生する。

よく原理がわからないので、私の場合、次のコマンドも実行してユーザーをもうひとつ作った。

mysql> grant all privileges on *.* to 'userName'@'localhost' identified by 'newPassword';

このようにして作った、userName@%userName@localhostというユーザーはまったく別個のものである。すなわち、userNameではじまる名前のユーザーが二つ存在する。%の方はどのIPからでもアクセスできるユーザーである。
MySQL は接続の際、ホスト名とユーザー名の両方をあわせてチェックする。違うホスト間でユーザ名が重複していても、ユーザは別のものとして扱われる。
SmartStart サイト構築講座

「@以下がないユーザー名を登録した場合、MySQL のデフォルト状態では、localhost からアクセスすると、匿名ユーザとして評価されてしまいます」、とMySQLのメーリングリストに書かれていた。

 

その他のユーザー権限の設定

ykaccデータベースのaccテーブルのみ書き換えできるユーザー

mysql> grant insert on ykacc.acc to 'userName'@'localhost' identified by 'newPassword';

 

特定のカラムだけ閲覧できるユーザー

mysql> GRANT SELECT (price) ON ykacc.pro TO 'test'@'localhost';

上記の場合、ykaccというデータベースのproテーブルのpriceというカラムが閲覧できるtestユーザーを作っている。

このようにして作った特権はphpMyAdminを見ると次のように記録されていることがわかる。


MySQLデータベースのdbテーブル


MySQLデータベースのtables_privテーブル

MySQLデータベースのcolumns_privテーブル

このユーザーをshowコマンドで見ると次のようになっている。

mysql> show grants for 'test'@'localhost';
+-------------------------------------------------------------+
| Grants for test@localhost |
+-------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test'@'localhost' |
| GRANT SELECT (price) ON `ykacc`.`pro` TO 'test'@'localhost' |
+-------------------------------------------------------------+
2 rows in set (0.00 sec)

『USAGEという権限は「何も権限がない」という意味で、ユーザーのエントリがmysql.userテーブルにあって、権限が何も許可されていない場合に表示される権限です。』とMySQL徹底入門第二版に書かれているが、要するにユーザー登録がされている、という意味。

ユーザーの権限を見る

mysql> show grants for 'userName'@'localhost';

 

ユーザーを削除する (4.1ではいきなりdrop文が使えないので次の手順に従う)

mysql> REVOKE all on *.* from 'userName'@'localhost'; <---最初にユーザーの権限を剥奪する
mysql> DROP USER 'userName'@'localhost';

解説によっては上記コマンドを実行した後、mysql> FLUSH PRIVILEGES;をしなければその変更は反映されない、とあるがGRANT、REVOKE、SET PASSWORDを行った場合、FLUSH...が自動的に実行される。

登録したユーザーを見る

mysql> select host,user,password from mysql.user;

+-----------+-------+-------------------------------------------+
| host      | user   | password |
+-----------+-------+-------------------------------------------+
| localhost   | root   | 4afd3bd8403af22a                     |
| %        | root   | 4afd3bd8403af22a                     |
+-----------+-------+-------------------------------------------+
2 rows in set (0.00 sec)

接続の承認
MySQLサーバーに接続すると、まずサーバー接続の許可判定が行われる。

身元の確認は、 user テーブルのスコープフィールド(Host, User, Password) を使用して行われる。
スコープフィールドの意味は次の通り。

  • Host の値はホスト名か IP アドレスか 「localhost」。
  • Host にはワイルドカード文字のパーセント(%) とアンダーバー(_) が使用可能。
  • Host に % を設定すると、全てのホストにマッチする。 Host を空にすると、% と同じになる。これらの値は、どんなホストもサーバーに接続できるということになる。
  • ワイルドカード文字は User 項目に設定できないが、 User 項目を空(ブランク)にすることはでる。空文字は全ての名前にマッチする。これはユーザー名がない状態で接続してきたものに適用され、クライアントがユーザー名を明記しない限り、匿名ユーザー(名前がブランク)として扱われる。全てのアクセスのチェックに空文字のユーザー名が使用される事を意味する。
  • Password 項目は空にできる。その場合、パスワードなして接続できることになる。

Hostの値 Userの値 Connections matched by entry
www.rfs.jp sv sv, www.rfs.jp から接続
www.rfs.jp '' www.rfs.jp から接続してくる全てのユーザー
% sv sv, 全てのホストから接続
% '' 全てのホストから接続してくる全ユーザー
%.rfs.jp sv sv, rfs.jp ドメイン内の全てのホストからの接続
x.y.% sv sv, x.y.net, x.y.com,x.y.edu, などからの接続
144.155.166.177 sv sv, IP address が 144.155.166.177 のホストからの接続
144.155.166.% sv sv, 144.155.166 class C subnet 内の全てのホストからの接続

144.155.166.somewhere.com というホスト名で接続しようとする攻撃に対し、MySQL は数字やドットで始まるホスト名を拒否している。もし 1.2.foo.com のような名前のホストを持っている場合、許可テーブルの Hostには絶対にマッチしない。 IPアドレスのみ、IP のワイルドカードにマッチする事になる。

 

 

MySQLが動いているかどうかshellで確認する

[root@vsp root]# ps axf | grep mysqld

or

[root@vsp root]# mysqladmin -uroot ping

or

[westhost][~]$ mysqladmin version

or

[westhost][~]$ mysqladmin variables

psコマンドの場合、
10324 pts/0 S 0:00 \_ grep mysqld
19024 ? S 0:00 /bin/sh /usr/bin/safe_mysqld --defaults-file=/etc/my.cnf
19296 ? S 0:00 \_ /usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking

などと返ってくる。
mysqladminコマンドの場合、動いていればmysqld is aliveと返ってくる。

 

MySQLをリスタートする

[root@vsp root]# /etc/rc.d/init.d/mysqld restart

これは自分が使っているサーバーの設定。

 

MySQLの基本的なコマンド1

データベースを作る。

mysql> CREATE DATABASE bank;

 

作業するデータベースを選択する。

mysql> USE bank;
Database changed

 

テーブルを作る。

mysql> CREATE TABLE customer
(name_f
VARCHAR(16) CHARACTER SET utf8,
id_f INT
);

 

 

MySQLの基本的なコマンド2

データベースの一覧を見る。

mysql> SHOW DATABASES;

 

テーブルの一覧を見る。(USE bank;の後、)

mysql> SHOW TABLES;

 

テーブルのカラム名とデータ型を見る。

mysql> SHOW COLUMNS FROM customer;

 

キャラクタセットとCollationの関係

バージョン4.1からはCollationという属性が各テーブルやカラムに付属する。
カラムを定義する際にVARCHAR(16) CHARACTER SET utf8などとしてキャラクタセットを設定しても、なぜかphpMyAdminではその設定を見ることができない。
SSHでその設定を見るには、USE bank;などでそのデータベースを選択しshow create table t \Gを実行すると、

mysql> show create table t \G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`name` varchar(10) character set utf8 default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1

 

などと、キャラクタセットの設定を見ることができる。

上記のカラム`name` をphpMyAdminで見ると、Collationに勝手に"utf8_general_ci"が設定されていることがわかる。
キャラクタセットに、utf8 を選択して、Collationに utf8_general_ci は指定できない。では、キャラクタセットとは何かというと、character encodingとして理解するべきらしい。

このテストにおいて、カラム`name`のCollationである"utf8_general_ci"を"latin1_general_ci"に変更して、SSHのshow create table t \Gで見るとどうなるかというと、

mysql> show create table t \G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`name` varchar(10) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1

となり、キャラクタセットをLatin1にしたのと同じ結果になっていることがわかる。

Default options
Default options are read from the following files in the given order:
/etc/my.cnf /var/lib/mysql/my.cnf ~/.my.cnf
The following groups are read: mysql client
The following options may be given as the first argument:
--print-defaults Print the program argument list and exit
--no-defaults Don't read default options from any options file
--defaults-file=# Only read default options from the given file #
--defaults-extra-file=# Read this file after the global files are read

Possible variables for option --set-variable (-O) are:
connect_timeout current value: 0
max_allowed_packet current value: 16777216
net_buffer_length current value: 16384
select_limit current value: 1000
max_join_size current value: 1000000
[root@ki root]#

-------------------------------
[root@ki etc]# cat my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

[mysql.server]
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

-------------------------------
You can try my config. I use this on all my servers and it just works perfectly and keeps MySQL usage in terms of CPU down to a minimum & helps speed up queries.


Code:
[mysqld]
max_connections = 500
key_buffer = 32M
myisam_sort_buffer_size = 64M
join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 2M
table_cache = 1024
thread_cache_size = 64
wait_timeout = 1800
connect_timeout = 10
max_allowed_packet = 16M
max_connect_errors = 10
query_cache_limit = 1M
query_cache_size = 16M
query_cache_type = 1
skip-innodb

[mysqld_safe]
open_files_limit = 8192

[mysqldump]
quick
max_allowed_packet = 16M

[myisamchk]
key_buffer = 64M
sort_buffer = 64M
read_buffer = 16M
write_buffer = 16M7

Example 1 Apollo

mysql> status
--------------
mysql Ver 11.18 Distrib 3.23.58, for redhat-linux-gnu (i386)

Connection id: 135
Current database:
Current user: root@localhost
Current pager: stdout
Using outfile: ''
Server version: 3.23.58
Protocol version: 10
Connection: Localhost via UNIX socket
Client characterset: latin1
Server characterset: latin1
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 2 days 10 hours 47 min 30 sec

Threads: 1 Questions: 473 Slow queries: 0 Opens: 14 Flush tables: 1 Open tables: 8 Queries per second avg: 0.002

 

 

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set=latin1
set-variable = interactive_timeout=14400
set-variable = wait_timeout=14400

[mysql.server]
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[root@ki root]#


 

Example 2 VPS

mysql> status
--------------
mysql Ver 12.22 Distrib 4.0.27, for pc-linux-gnu (i686)

Connection id: 1938
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Server version: 4.0.27-standard
Protocol version: 10
Connection: Localhost via UNIX socket
Client characterset: latin1
Server characterset: sjis
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 2 days 13 hours 54 min 19 sec

 

root@vps [~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set=sjis

[mysql.server]
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
root@vps [~]#

 

Example 3

ysql Ver 14.7 Distrib 4.1.19, for portbld-freebsd4.7 (i386) using readline 5.1

Connection id: 31
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: more
Using outfile: ''
Using delimiter: ;
Server version: 4.1.19
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: ujis
Db characterset: ujis
Client characterset: ujis
Conn. characterset: ujis
UNIX socket: /tmp/mysql.sock
Uptime: 14 hours 48 min 3 sec

v6248 /etc# cat /etc/my.cnf
[mysqld]
max_connections=30

default-character-set = ujis

[client]
default-character-set = ujis

[mysqldump]
default-character-set = ujis

[mysql]
default-character-set = ujis

 

Example 4 WestHosting

mysql> status
--------------
mysql Ver 14.7 Distrib 4.1.9, for pc-linux-gnu (i686)

Connection id: 3
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: less
Using outfile: ''
Using delimiter: ;
Server version: 4.1.9-standard-log
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 37 min 37 sec

Last login: Fri Jun 23 10:57:50 2006 from 58x81x166x10.ap58.ftth.ucom.ne.jp
[fiftyjapan][~]$ cat /etc/my.cnf
[client]
password = 2025De
port = 3306
user = root
socket = /var/lib/mysql/mysql.sock
[mysqld]
port = 3306
user = fiftyjapan
bind-address = 208.131.134.96
socket = /var/lib/mysql/mysql.sock
pid-file = /var/run/mysqld/mysqld.pid
skip-locking
skip-innodb
#Added by HostDirector Plugin Installer -- Don't remove -- begin
#skip-networking
#Added by HostDirector Plugin Installer -- Don't remove -- end
set-variable = key_buffer=16M
set-variable = max_allowed_packet=1M
set-variable = thread_stack=128K
log = /dev/null
[mysqldump]
quick
set-variable = max_allowed_packet=16M
[mysql]
no-auto-rehash
[isamchk]
set-variable = key_buffer=16M


 

Example 5 A2 Hosting

mysql> status
--------------
mysql Ver 14.7 Distrib 4.1.20, for unknown-linux-gnu (x86_64) using readline 4.3

Connection id: 247613
Current database:
Current user: twinknob@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 4.1.20-standard
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 4 days 21 hours 1 min 19 sec

Threads: 5 Questions: 6996524 Slow queries: 1 Opens: 41066 Flush tables: 1 Open tables: 256 Queries per second avg: 16.608

twinknob
bodegefr

twinknob@a2s11 [~]# cat /etc/my.cnf
# Example MySQL config file for large systems.
#
# This is for a large system with memory = 512M where the system runs mainly
# MySQL.
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /var/lib/mysql) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 256M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 8M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache = 8
query_cache_size= 32M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 4
set-variable = max_connections=350
safe-show-database
log-error=/var/log/mysql.error.log
log-warnings
ft_min_word_len=3
wait_timeout=300
connect_timeout=300

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
#log-bin

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id = 1

# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
# the syntax is:
#
# CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
# MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
# where you replace <host>, <user>, <password> by quoted strings and
# <port> by the master's port number (3306 by default).
#
# Example:
#
# CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
# MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
# start replication for the first time (even unsuccessfully, for example
# if you mistyped the password in master-password and the slave fails to
# connect), the slave will create a master.info file, and any later
# change in this file to the variables' values below will be ignored and
# overridden by the content of the master.info file, unless you shutdown
# the slave server, delete master.info and restart the slaver server.
# For that reason, you may want to leave the lines below untouched
# (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id = 2
#
# The replication master for this slave - required
#master-host = <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user = <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password = <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port = <port>
#
# binary logging - not required for slaves, but recommended
#log-bin

# Point the following paths to different dedicated disks
#tmpdir = /tmp/
#log-update = /path-to-dedicated-directory/hostname

# Uncomment the following if you are using BDB tables
#bdb_cache_size = 64M
#bdb_max_lock = 100000

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql/
#innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 256M
#innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 64M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
connect_timeout=200


[isamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
twinknob@a2s11 [~]#


 

Example 6 West Host

[fjapan][~]$ cat /etc/my.cnf
[client]
password = 1458Sa
port = 3306
user = root
socket = /var/lib/mysql/mysql.sock

[mysqld]
port = 3306
user = fjapan
bind-address = 208.131.134.96
socket = /var/lib/mysql/mysql.sock
pid-file = /var/run/mysqld/mysqld.pid
skip-locking
skip-innodb
#Added by HostDirector Plugin Installer -- Don't remove -- begin
#skip-networking
#Added by HostDirector Plugin Installer -- Don't remove -- end
set-variable = key_buffer=16M
set-variable = max_allowed_packet=1M
set-variable = thread_stack=128K
log = /dev/null

[mysqldump]
quick
set-variable = max_allowed_packet=16M

[mysql]
no-auto-rehash

[isamchk]
set-variable = key_buffer=16M


 


 
... to db: 'users' user: 'josh' See 項4.10.1. 「エラーログ」 。 以下が発生したと考えられます。 クライアントプログラムが終了前に mysql_close() を呼び出さなかった。 クライアントが何の要求もせずに、 wait_timeout または interactive_timeout より多くの時間スリープ状態であった。 See 項4.6.8.4. 「 SHOW VARIABLES 」 。 クライアントプログラムが、転送中に突然終了した。 ... 以下の場合、サーバ変数 Aborted_connects の値が増えます。 接続パケットに正しい情報が含まれていない場合 ユーザにデータベースに接続する権限がない場合 ユーザが間違ったパスワードを使用した場合 接続パケットの取得に、 connect_timeout で指定されている秒数より多く要した場合 See 項4.6.8.4. 「 SHOW VARIABLES 」 。 上記のことは、不正ユーザがデータベースに侵入しようとしている可能性を示している。
 
その他

ルートユーザーのパスワードの変更

% passwd root <Enter>
Changing local password for root.
New password:変更後の新しいパスワードを入力 <Enter>
Retype new password:確認のため新パスワードを再入力 <Enter>
passwd: updating the database...
passwd: done ←パスワードの変更完了メッセージ

 

ルート権限で、一般ユーザのパスワードを変更する

% passwd servit <Enter>
Changing local password for servit.
New password:新しいパスワードを入力 <Enter>
Retype new password:確認のため新しいパスワードを再入力 <Enter>
passwd: updating the database...
passwd: done ←パスワードの変更完了メッセージ

SUコマンドの使い方

% Admin ~> su root <Enter>
Password:ルートユーザパスワードを入力 <Enter>
↑入力するパスワードは画面上には表示されませんが、認識されている。

% Admin /home/Admin#

ここで、ユーザ確認に「whoami」コマンドを入力してみる。

% Admin /home/Admin# whoami <Enter>
root
↑ルートユーザにユーザ変更が完了している

 

特定ユーザーによるMySQLへのログイン

% Admin# mysql -u root -p
Password:ルートユーザパスワードを入力 <Enter>
↑入力するパスワードは画面上には表示されないが、認識されている。

mysql> とプロンプトが出れば成功。