MySQL

更新日 2010-11-26 (金) 21:59:44

MySQLのインストール

MySQLのソースをここの下のほうのSource downloadsからDownload.

$ su
# /usr/sbin/useradd mysql

homeディレクトリを/usr/local/varに変更

$ tar zxvf mysql-4.1.12.tar.gz
$ cd mysql-4.1.12
$ ./configure --with-charset=ujis -with-extra-charsets=all \
--with-mysqld-user=mysql
--with-charset
デフォルトで使用される文字コードを指定します。EUCならujis、Shift-JISならsjis、UTF8ならutf8
--with-extra-charset
デフォルトで指定された文字コード以外をサポートしたい場合の指定です。
"--with-extra-charset=ujis,sjis,..."のように個別に指定できますが、
ここでは“all”とします。このオプションを指定することで、
makeをし直さずとも、異なる文字コードでサーバを起動することが可能
--with-mysqld-user
MySQLデーモンを起動するユーザーの指定
$ make
$ su
# make install
# cp support-files/my-medium.cnf /etc/my.cnf

データベースの初期化

以下データベースコマンドをrootで行っているがシステム関係以外は一般ユーザでもOK

# /usr/local/bin/mysql_install_db --user=mysql
Installing all prepared tables
Fill help tables

To start mysqld at boot time you have to copy support-files/mysql.server
to the right place for your system
(略)
he latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at https://order.mysql.com

# /usr/local/var(データベース保存先)のオーナを変更

# chown -R mysql.mysql /usr/local/var

起動

# /usr/local/bin/mysqld_safe --user=mysql --log &

動作確認

--logで/usr/local/var/(サーバ名).logでlogfileが作成される

以下のコマンドで結果が以下のようになればOK

# /usr/local/bin/mysqlshow
+-----------+
| Databases |
+-----------+
| mysql     |
| test      |
+-----------+

全てのDBを表示するには(rootのパスワード設定後は)

$ /usr/local/bin/mysqlshow -u root -p
Enter password:*****
+-----------+
| Databases |
+-----------+
| moodle    |
| mysql     |
| test      |
| xoops     |
+-----------+

パラメータの指定

たとえば、MySQLの最大接続数を上げるには、mysqldにオプション「--set variable=max_connections=コネクション数」としていするか

/etc/my.cnfの

[mysqld]
max_connections = 120

に追加する。

MySQLの停止

$ /usr/local/bin/mysqladmin -u root -p shutdown

MySQLを動かす

MySQLのroot のパスワード設定

$ /usr/local/bin/mysqladmin -u root password '******' <--(1)

上記のmysqladminでパスワードを設定したときは以下のコマンドでreloadする必要がある

$ /usr/local/bin/mysqladmin -u root -p reload
Enter password:
# mysql -u root -p
Enter password: <--1(1)のパスワードを入力
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18 to server version: 4.1.12

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
mysql> select host,user,password from mysql.user;
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *3620754A963ECB3D7296097F9DA00C1FA5476B03 |
| open2_06  | root |                                           |
| open2_06  |      |                                           |
| localhost |      |                                           |
+-----------+------+-------------------------------------------+
4 rows in set (0.00 sec)

rootでmysqlにログイン

# mysql -u root mysql

もうとつのrootのパスワードを設定(root@open2_06) SET PASSWORD 構文でパスワードの設定。

mysql> SET PASSWORD FOR root@open2_06 = PASSWORD('*****');
Query OK, 0 rows affected (0.00 sec) 
すべてのことが出来るspadminというユーザを登録(ローカルのみ)

mysql> GRANT ALL PRIVILEGES ON *.* TO spadmin@localhost IDENTIFIED BY 'mysql(パスワード)' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

リモートからもすべてのことが出来るには

mysql> GRANT ALL PRIVILEGES ON *.* TO spadmin@"%" IDENTIFIED BY 'mysql(パスワード)' WITH GRANT OPTION;
の追加が必要(リモートからの許可を与えるにはローカルも必要)

GRAN実行後は

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

を必ず実行

注)ユーザ名はmysql -uで指定しない限りloginユーザ名になる

パスワードの変更

mysql> SET PASSWORD FOR spadmin@localhost = PASSWORD('*******');
Query OK, 0 rows affected (0.00 sec)

ユーザ削除

ユーザ削除は権限を剥奪後削除する
$ /usr/local/bin/mysql -u root -p mytest

権限を剥奪(revoke)

revoke 権限 on データベース名.テーブル名 from ユーザ名@ホスト名;

mysql> revoke all on mytest.* from okada@'192.168.1.1';
Query OK, 0 rows affected (0.00 sec)

登録ユーザの削除

mysql> delete from mysql.user where host='192.168.1.1' and user='okada';

mysql> flush privileges;
or
mysql> DELETE FROM mysql.user WHERE user='okada';

データベースの作成

# /usr/local/bin/mysqladmin -u root -p create mytest

文字コードを指定してデータベースの作成

mysql> CREATE DATABASE hoge CHARACTER SET SJIS;

データベースの一覧

# /usr/local/bin/mysqlshow -u root -p
Enter password:
+-----------+
| Databases |
+-----------+
| mysql     |
| mytest    |
| test      |
+-----------+

データベースの削除

# /usr/local/bin/mysqladmin -u root -p drop (DB名)

or

mysql> drop database (DB名);
このコマンドだけではmysql.dbテーブルに残っているようなのでデータベースを完全に 削除するには
mysql> delete from mysql.db where Db='(DB名)';

テーブルの作成

t_test.create
create table t_test (
  ID           int8,
  data2          int8,
  data3          varchar(64)
);
# /usr/local/bin/mysql -u root -p mytest < t_test.create
Enter password:

mysql> show fields from t_test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | bigint(20)  | YES  |     | NULL    |       |
| data2 | bigint(20)  | YES  |     | NULL    |       |
| data3 | varchar(64) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

テーブル一覧

# /usr/local/bin/mysql -u root -p mytest

mysql> SHOW TABLES;
+------------------+
| Tables_in_mytest |
+------------------+
| t_test           |
+------------------+
1 row in set (0.00 sec)

データの入力等(postgresqlと同じ)

mysql> insert into t_test values(1, 1001, 'JE2ISM');
Query OK, 1 row affected (0.00 sec)
mysql> select * from t_test;
+------+-------+--------+
| ID   | data2 | data3  |
+------+-------+--------+
|    1 |  1001 | JE2ISM |
|    2 |  1002 | JF2LYU |
+------+-------+--------+
2 rows in set (0.00 sec)

データベースのバックアップ/リストア

データベースのバックアップ

# /usr/local/bin/mysqldump -u root -p --default-character-set=latin1 mytest > mytest.out

EUCのときは--default-character-set=ujisに,UTF8は utf8にする。

データベースの削除

# /usr/local/bin/mysqladmin -u root -p drop mytest
Enter password:
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'mytest' database [y/N] y
Database "mytest" dropped

データベースのリストア

先に必要ならGRANTでユーザ等に許可を与える。
# /usr/local/bin/mysqladmin -u root -p create mytest
# /usr/local/bin/mysql -u root -p mytest < mytest.out

次のコマンドを実行

# /usr/local/bin/mysqladmin flush-privileges

ネットワーク上から接続許可するには

$ /usr/local/bin/mysql -u root -p

で接続し、許可するユーザ、パスワード、ネットワーク(ホスト)を指定する。

mysql> GRANT ALL PRIVILEGES ON mytest.* TO okada@'192.168.1.0/255.255.255.0'IDENTIFIED BY '*****' WITH GRANT OPTION;

mysql> flush privileges;

mysql>  select host,user,password from mysql.user;
+----------------------------+------------+------------------------------------ -------+
| host                       | user       | password                                  |
+----------------------------+------------+-------------------------------------------+
| localhost                  | root       | *B54F381EEBC80CBD7B9D80DB721541DE424E9F69 |
| uso5004.mie-chukyo-u.ac.jp | root       |                                           |  <---注)root@uso5004.mie-chukyo-u.ac.jpではパスワードなしで入れるので必ず削除しておく必ず削除しておく
| localhost                  |            |                                           | <---注)このようなレコードがあるとuser名がなんでもOKなので必ず削除しておく
| localhost                  | moodleuser | *20C964FC973C0C3D416BA874CB20742CF2145D1E |
| 192.168.1.0/255.255.255.0  | okada      | *3620754A963ECB3D7296097F9DA00C1FA5476B03 |  <---ここに接続許可が示される
+----------------------------+------------+-------------------------------------------+
6 rows in set (0.00 sec)

リモートから

以下のコマンドで接続

$ /usr/local/bin/mysql -u okada -p mytest -h 192.168.1.1 
Enter password:

MySQLサーバーの全設定情報(変数やステータス)の表示

mysql> show variables;
mysql> show variables like 'key%';

--------------------------+---------+
| Variable_name           | Value   |

--------------------------+---------+
| key_buffer_size         | 8388600 |
| key_cache_age_threshold |     300 |
| key_cache_block_size    |    1024 |
| key_cache_division_limit|     100 |

--------------------------+---------+
4 rows in set (0.00 sec)
mysql> SHOW STATUS like 'key%';

------------------------+-------+
| Variable_name         | Value |

------------------------+-------+
| Key_blocks_not_flushed|     0 |
| Key_blocks_unused     | 28971 |
| Key_blocks_used       |    24 |
| Key_read_requests     |   231 |
| Key_reads             |    24 |
| Key_write_requests    |     0 |
| Key_writes            |     0 |

------------------------+-------+
7 rows in set (0.00 sec)

**MySQLサーバーの全設定情報(変数)の設定

/etc/my.cnfに設定することも可能だが、直接セットしてもよい。

mysql> set Global key_buffer_size= 33554432;
Query OK, 0 rows affected (0.01 sec)
SET GLOBAL sort_buffer_size = 10 * 1024 * 1024;
SET SESSION sort_buffer_size = 10 * 1024 * 1024;

システム変数には、サーバ共通の値とセッション(接続)共通の値とあり、 前者を変更すると、その後開かれる全てのセッションに影響、後者を変更すると、現在のセッションでのみ影響

簡単なチューニング

key_buffer_size
インデックスブロック用に使用するバッファのサイズ。
インデックスを使う(つまりほとんど全ての)クエリは
この値によってパフォーマンスが大きく変わります。
よって、この値は可能な限り(もちろん稼動システムの許容範囲内で)

大きくすることが推奨されています。

適切なバッファサイズを求めるには、SHOW STATUS コマンドを利用します。

ここで表示された Key_read_requests が、キャッシュからのキーブロック読み取り要求回数です。

Key_reads は、ディスクからのキーブロック読み取り要求回数です。 つまり、Key_reads / Key_read_requests が「キャッシュミスレート」になります。

この値は0.01を下回ることが良いとされています。

このときキャッシュミスレートは1%以下です。

これを上回るようだったら、 インデックスブロックのバッファサイズを大きくすることを検討

参考

MySQLクイック・リファレンス

MySQLの変数


元ページ

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS