*MySQL [#m93eeef6]

RIGHT:更新日 &lastmod();

**MySQLのインストール [#r0532473]

MySQLのソースを[[ここ:http://dev.mysql.com/downloads/]]の下のほうの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  <---(1)

(1)でコピーするファイルについて

|ファイル名|使用用途|
|my-small.cnf|64MB以下のメモリを搭載したPC|
|my-medium.cnf|128MB以下のメモリを搭載したPC|
|my-large.cnf|512MB以下のメモリを搭載したPC|
|my-huge.cnf|1GB〜2GB以下のメモリを搭載したPC|
|my-innodb-heavy-4G.cnf|4GBのメモリとInnoDBで作成されたデータベースによって構築されたPC|

**データベースの初期化 [#y9e7af00]

以下データベースコマンドを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

**起動 [#xb063eb2]

 # /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     |
 +-----------+

***パラメータの指定 [#i813e443]
たとえば、MySQLの最大接続数を上げるには、mysqldにオプション「--set variable=max_connections=コネクション数」としていするか

/etc/my.cnfの

 [mysqld]
 max_connections = 120

に追加する。

**MySQLの停止 [#rd1407e2]

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

**MySQLを動かす [#m3fb10c4]

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にログイン [#fcdf759e]
 # 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ユーザ名になる

***パスワードの変更 [#t3f987d7]

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

***ユーザ削除 [#c26fa3a9]

 ユーザ削除は権限を剥奪後削除する

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

***権限を剥奪(revoke) [#o92faa99]

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

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

***登録ユーザの削除 [#h9f110d9]

 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';

**データベースの作成 [#t7e8056b]

 # /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)

**データベースのバックアップ/リストア [#kbb23c61]

***データベースのバックアップ [#q7130506]

 # /usr/local/bin/mysqldump -u root -p --default-character-set=latin1 mytest > mytest.out
 
 EUCのときは--default-character-set=ujisに,UTF8は utf8にする。

***データベースのリストア [#f22863ed]

 先に必要なら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


**データベースの削除 [#nd1143e0]
 # /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

***ネットワーク上から接続許可するには [#c39a52ac]

 $ /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サーバーの全設定情報(変数やステータス)の表示 [#aeb41972]

 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サーバーの全設定情報(変数)の設定 [#a27848f1]
/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;

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

**簡単なチューニング [#efa8a39e]

 key_buffer_size

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

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

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

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

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

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

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

***my.cnfのパラメータ [#g8476955]

|パラメータ名|設定内容|
|port = 3306|起動ポート番号|
|key_buffer = 256M|検索に使われるインデックスをバッファに保存する際のメモリサイズを設定します。メモリに余裕がある場合はより沢山指定|
|max_allowed_packet = 1M|入力データ保持の最大バッファサイズを設定。画像などの大きなデータを挿入する場合は、この制限に引っ掛かる可能性がある.|
|table_cache = 256|頻繁なアクセスに対して使うデータキャッシュを設定。これによってディスクのI/O負荷を減らす。|
|sort_buffer_size = 1M|並べ替えのバッファサイズを設定。値を大きくすることで ORDER BY や GROUP BY といった並べ替えクエリーの速度を上げる。|
|read_buffer_size = 1M|読み込みのバッファサイズを設定。値を大きくすることでインデックスを含まないクエリーの実行速度を上げる。|
|myisam_sort_buffer_size = 64M|MyISAMで使用する並べ替えのバッファサイズを設定。|
|thread_cache = 8|スレッド生成のキャッシュサイズを設定。クライアントからの接続を受けると、スレッドが生成され、そのスレッドがクライアントのSQL分を処理。クライアントの接続が多い場合に有効。|
|query_cache_size= 16M|クエリのキャッシュサイズを設定。同じクエリを何度も実行する場合に有効。|
|thread_concurrency = 8|同時に実行するスレッド数を指定。|
|join_buffer_size = 131072|完全結合(インデックスを使用しない場合)のバッファサイズを設定。インデックスが使用できない場合に有効。|

**参考 [#ncd66820]

[[MySQLクイック・リファレンス:http://www.bitscope.co.jp/tep/MySQL/quickMySQL.html#id_757_]]

[[MySQLの変数:http://www.limy.org/program/db/mysql/mysql_variables.html]] 
--------------------------------------------------------------------------------
RIGHT:[[元ページ:https://wwwism.dyndns.org/hp/linux/mysql.htm]]

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