MySQLの構築 | ヌキのさくらインターネットVPSでCentOSを構築

ヌキのさくらインターネットVPSでCentOSを構築

CA12年新卒のonukiが

さくらインターネットVPSで
CentOSを構築する手順をちまちまと更新していきたいなって思います。
切りのいいところでまた違うネタにしていこうかと思いますが
しばらくはVPSのお話です。

記事を書きながらの構築は結構時間がかかるw

初期設定からやるならこのブログの最初から読んでみてください。

間違え等ありましたら、コメントでガンガン突っ込んでください。


はい、今回はMySQLの構築です。
MySQLとはオラクルが開発するRDBMSであり
PostgreSQLとよく比較されるオープンソースである。
PostgreSQLに比べ機能が少ないけど、高速に動くというオープンソースで
このブログを構築しているambloやmixiなどみなさんの周りのサービスでも
採用されているオープンソースです。

MySQLがあると、MediaWikiというWikipediaで利用されているシステムを構築したり
wordpressというブログシステムなどいろんなシステムを利用することができます。
企業ではオリジナルのシステムをMySQL上に構築し
利用していることが多いです。

とりあえず、いつも通りyumでインストールしましょう

mysql-server:mysqlのサーバのパッケージ
mysql:mysqlクライアントパッケージ
mysql-devel:プログラムからmysqlに接続するために必要なパッケージ


# yum install mysql.x86_64 mysql-devel.x86_64 mysql-server.x86_64 php-mysql.x86_64
~省略~
Dependencies Resolved

====================================================================================================
Package Arch Version Repository Size
====================================================================================================
Installing:
mysql x86_64 5.0.77-4.el5_5.4 updates 4.8 M
mysql-devel x86_64 5.0.77-4.el5_5.4 updates 2.5 M
mysql-server x86_64 5.0.77-4.el5_5.4 updates 9.8 M
php-mysql x86_64 5.1.6-27.el5_5.3 updates 89 k
Installing for dependencies:
e2fsprogs-devel x86_64 1.39-23.el5_5.1 updates 633 k
keyutils-libs-devel x86_64 1.2-1.el5 base 27 k
krb5-devel x86_64 1.6.1-36.el5_5.6 updates 1.9 M
libselinux-devel x86_64 1.33.4-5.5.el5 base 149 k
libsepol-devel x86_64 1.15.2-3.el5 base 192 k
openssl-devel x86_64 0.9.8e-12.el5_5.7 updates 1.9 M
perl-DBD-MySQL x86_64 3.0007-2.el5 base 148 k
perl-DBI x86_64 1.52-2.el5 base 600 k
php-pdo x86_64 5.1.6-27.el5_5.3 updates 66 k

Transaction Summary
====================================================================================================
Install 13 Package(s)
Upgrade 0 Package(s)

Total download size: 23 M
~省略~


MySQL5.0と少し古いバージョンしかyumのレポジトリでは入りませんが
普通の運用程度であれば問題ありません。

これでインストール自体は終了です。
これからいろいろいじっていきます

# cp -p /etc/my.cnf /etc/my.cnf.org


設定ファイルのオリジナルファイルをコピーして取っておきます。

コピーを取ったので設定ファイルをいじります

# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

default-character-set=utf8 #追記
skip-character-set-client-handshake #追記 クライアントの文字コードに依存させない

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql] #追記
default-character-set = utf8 #追記 クライアントの文字コードを変更


簡単な設定も完了したのでMySQLを起動します。
MySQLのチューニングをする時はこの設定ファイルに書き込みます
SQL文でチューニングをしてもいいのですが、再起動すると
元の設定に戻ってしまうためここに設定を書きます。
今回はチューニングしない方向でいきます

# /etc/rc.d/init.d/mysqld start
Initializing MySQL database: Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h www17125u.sakura.ne.jp password 'new-password'


Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
[ OK ]
Starting MySQL: [ OK ]


一回目の起動にはこのようにメッセージが大量に流れます
赤文字で示したようにrootのパスワードを変更しろと言われます。
MySQLを起動したらまずはrootのパスワードを変更しましょう。
別にパスワードを変更しなくても運用はできますが、
一応セキュリティ上パスワードをかけましょう。
デフォルトではパスワードはありませんので、ノンパスでログインできてしまいます。

# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.77 Source distribution

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

mysql>

この青文字のようなものが出てきたらログイン成功です。
パスワードを変更します


mysql> set password for root@localhost=password('new_password');
Query OK, 0 rows affected (0.00 sec)

new_passwordの部分は自分で設定したパスワードにして下さい
これでパスワードなしではMySQLにログインできなくなりました。
確認してみましょう

$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.0.77 Source distribution

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

mysql>


このように-pを付けてパスワードを入力しないとログインできないように変わりました。
今度はユーザと新しくデータベースを作成してみましょう。
ユーザをonuki、DBをonukiDBとします

mysql> grant all on *.* to onuki@"localhost"identified by "new_passwd";
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges; #ユーザ情報の反映
Query OK, 0 rows affected (0.00 sec)

mysql> create database onukiDB;
Query OK, 1 row affected (0.00 sec)

mysql> \q
Bye

DBとユーザの作成が完了したので確認をします。
今まではrootでログインしてましたが、onukiでログインしてデータベースが存在するか確認します。
MySQLからログアウトするには\qexitのどちらかでログアウトできます
作成したDBが使用できるかも確認しましょう

$ mysql -u onuki -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.0.77 Source distribution

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

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| onukiDB |
| test |
+--------------------+
4 rows in set (0.00 sec)

mysql> use onukiDB
Database changed
mysql> show tables;
Empty set (0.01 sec)

mysql> show databases like 'o%';
+---------------+
| Database (o%) |
+---------------+
| onukiDB |
+---------------+
1 row in set (0.00 sec)

mysql> show databases like 'on%';
+----------------+
| Database (on%) |
+----------------+
| onukiDB |
+----------------+
1 row in set (0.00 sec)


これで確認もすべてできました。
DBを確認するにはshow databasesですが、DBが増えてくると確認するのにも
一苦労してしまいます。そのためgrepに近いものがSQL文にはあります。
like文で後方に文字列を指定してあげるとその文字列から始まる
DBだけを表示してくれます。

ユーザを作成する時に今回はallで作成しましたが、
ユーザ毎に権限を与えることができます。

ALL:すべての権限を設定出来るユーザを追加

ALTER:ALTER TABLE(テーブル変更)の使用を許可

CREATE:CREATE TABLE(テーブル作成) の使用を許可

CREATE TEMPORARY TABLES:CREATE TEMPORARY TABLE(一時テーブルの作成) の使用を許可

DROP:DROP TABLE(テーブルの削除) の使用を許可

INDEX:CREATE INDEX(インデックス作成) および DROP INDEX(インデックス削除) の使用を許可

LOCK TABLES:SELECT 権限を持つテーブルで LOCK TABLES(テーブルのロック) の使用を許可

PROCESS:SHOW FULL PROCESSLIST の使用を許可

REPLICATION CLIENT:スレーブおよびマスタのサーバーを知る権利を付与

REPLICATION SLAVE:レプリケーションのスレーブに必要(マスタからバイナリログを読み取るため)

SHOW DATABASES:SHOW DATABASES によりすべてのデータベースが表示される

SHUTDOWN:mysqladmin shutdown の使用を許可


このように権限を指定してユーザを作成することもできるので
レプリケーション監視用のユーザなんかは
REPLICATION CLIENT、REPLICATION SLAVEだけあれば十分ですよね
そのように用途に合わせてユーザを作成するのがベストだと思います。
今回は権限をallで作成しましたが、使用しないユーザなので
権限を削除しましょう。

MySQLにrootでログインし直しましょう

mysql> revoke all privileges on *.* from onuki@"localhost" identified by "new_password" ;
Query OK, 0 rows affected (0.00 sec)


revoke文を使うことでユーザの権限を剥奪することができます。
やったね!w

次はMySQLのバックアップの取り方です。
簡単に言うと2通りありまして、一般的なものはmysqldumpを取る方法です。
もう一つはデータ自体をそのままコピーしてしまうものです。
mysqldumpを取ると、そのdumpが実行されている間DBは停止してしまいます。
そのためサービスが停止してしまうことがありますのでご注意を。

すべてのDBのバックアップを取る場合
$ mysqldump -u root -p -x --all-databases > mysqldump_all.sql

一部のDBをバックアップ取る場合
$ mysqldump -u root -p onukiDB > dump_onuki.sql #onukiDBの部分は取りたいDB名を指定する

ファイルをそのままバックアップ取る場合
$ cp -p /var/lib/mysql/* /opt/backup


このようにバックアップを取ります。
dumpの良いところは簡単に復元ができるというところです。

DB全部を復元する時
$ mysql -u root -p < dump_all.sql

指定したDBのみを復元する場合
$ mysql -u root -p onukiDB < dump_onuki.sql


こうするとdumpを取った物をそのまま復元が可能となります。

tableの作成・削除とかmysqladminとか他にもいろいろあるのですが
今回長文になってしまい疲れたので
今度にしますwwww
次回はMediaWikiのインストールとかMySQLを使った物になると思います。

こんな簡単にwikiが作れるんだってびっくりしますよ!
pukiwikiなんかもっと簡単!

MySQLでmecabとかを使用するならyumのレポジトリを追加しなければなりません。
groongaレポジトリを追加しましょう
# wget http://packages.groonga.org/centos/groonga-repository-1.0.0-0.noarch.rpm
# rpm -Uvh groonga-repository-1.0.0-0.noarch.rpm
Preparing... ########################################### [100%]
1:groonga-repository ########################################### [100%]


とりあえず準備もできたのでこれで一旦やめておきます

さ~って次回はいつ書くことやら・・・・・

エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド/奥野 幹也

¥3,465
Amazon.co.jp