Category: MYSQL

4月 20 2011

MysqlへSSLで接続する

my.confの[client]と[mysql]のところへsslの設定を追記
ssl-ca ssl-cert ssl-keyのパスはOpenSSL設定でSSL設定した場合

# vi /etc/my.cnf

[client]
ssl-ca = /etc/pki/CA/cacert.pem
ssl-cert = /usr/local/ssl/cert-ca.pem
ssl-key = /usr/local/ssl/server.key

[mysqld]
ssl-ca = /etc/pki/CA/cacert.pem
ssl-cert = /usr/local/ssl/cert-ca.pem
ssl-key = /usr/local/ssl/server.key

Mysqlを再起動

# service mysqld restart
mysqld を停止中:                [  OK  ]
mysqld を起動中:                [  OK  ]

MysqlでSSLへの対応確認

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

mysql>  SHOW VARIABLES LIKE '%ssl%';
+---------------+----------------------------+
| Variable_name | Value                      |
+---------------+----------------------------+
| have_openssl  | YES                        |
| have_ssl      | YES                        |
| ssl_ca        | /etc/pki/CA/cacert.pem     |
| ssl_capath    |                            |
| ssl_cert      | /usr/local/ssl/cert-ca.pem |
| ssl_cipher    |                            |
| ssl_key       | /usr/local/ssl/server.key  |
+---------------+----------------------------+

have_opensslとhave_sslがYESならOK!もしDISABLEDならパスが違う。

OKならSSL通信できてるか確認。

mysql> SHOW STATUS LIKE 'Ssl_cipher';
+---------------+--------------------+
| Variable_name | Value              |
+---------------+--------------------+
| Ssl_cipher    | DHE-RSA-AES256-SHA |
+---------------+-------------------

Ssl_cipherの値が空でなければSSL通信ができているようである。

《参考サイト》
MySQLサーバにSSLで接続する
MySQL 5.0で容易になったSSLによる暗号化通信

4月 14 2011

MySQL ユーザー管理

ユーザー追加
権利   ALL PRIVILEGES 全権
ユーザー   admin 
データーベース  dbA
ホスト    % 無制限
パスワード  *****

mysql> GRANT ALL PRIVILEGES ON dbA.* TO 'admin'@'%' IDENTIFIED BY '*****';

権限の種類
all — 全ての権限を与える。ALL PRIVIREGES または、ALL
usage — 全ての権限を与えない
create — テーブルを作成する権限を付与する
alter — テーブルを変更する権限を付与する
drop — テーブルを削除する権限を付与する
index — インデックスを作成/削除する権限を付与する
Select,Update,Insert,Delete テーブル操作

パスワードの変更

mysql> SET PASSWORD FOR ユーザー@"ホスト"=PASSWORD('パスワード');

ユーザー削除
ユーザー   admin 
ホスト    % 

DELETE FROM mysql.user WHERE user='admin' AND host='%';
4月 09 2011

libmysqlclient.so.16がない・・・・

CentOs5.5 Mysql5.5 php5.3の環境でphpMyAdminを使いたくインストールすると・・・・php-mysqlのインストールでエラーが

# yum --enablerepo=remi install php-mysql
....................
Missing Dependency: libmysqlclient.so.16 is needed by package php-mysql-5.3.6-1.el5.remi.i386

libmysqlclient.so.16がないと怒られた

yumでインストールできるようだ。。。。。。

#  yum --enablerepo=remi-test install mysqlclient16

《参考サイト》
mysqlclient16のインストール

4月 06 2011

Mysql my.cnfの設定

接続関係

port   = 3306
socket  = /var/lib/mysql/mysql.sock
skip-external-locking

#文字コード
character-set-server = utf8

#名前解決しない 外部ネットワークから接続しない時は設定したほうが良い
skip-name-resolve

#同時接続最大数 デフォルト100
max_connections = 100

#接続ごとに作成されるスレッドをキャッシュ max_connectionsの3分の1程度が推奨
thread_cache_size = 30

#同時に実行するスレッド数
thread_concurrency = 8

#休眠中のコネクションを切る デフォルトは1時間 60(1分)ほどで十分のようだ
wait_timeout = 60

メモリ関係

#検索に使われるインデックスをバッファに保存するメモリ 全メモリの30-40%程度とか
key_buffer_size = 256M 

#ORDER BYやGROUP BYのときに使われるメモリ上の領域
sort_buffer_size = 1M

#インデックスを用いないテーブル結合のときに使われるメモリ上の領域
join_buffer_size = 256K 

#インデックスを指定しないSELECTなどで利用(MyISAM)
read_buffer_size = 1M 

#キーを指定しないORDER BYなどで利用(MyISAM)
read_rnd_buffer_size = 4M

#CREATE INDEX ALTER INDEX等でインデックスのソートに使用とかあまりいらしい
myisam_sort_buffer_size = 1M 

#入力データ保持の最大バッファサイズ 最大16M 画像を保存するときは大きめに
max_allowed_packet = 1M

#メモリ領域内で生成される一時テーブルのサイズGROUP BYの処理などで頻繁に使用
tmp_table_size = 32M

#クエリーキャッシュのサイズ クエリの結果をメモリに保持
query_cache_size= 128M
#1回のクエリについてキャッシュすることが出来る最大値
query_cache_limit = 4M

#接続バッファと結果バッファの初期サイズ
#必要に応じて max_allowed_packet で設定した値まで大きくなる
net_buffer_length = 16K

#テーブルキャッシュのサイズ 頻繁なアクセスをキャッシュ
table_open_cache = 256

log レプリケーション関連

# 遅いクエリ(1秒以上)をログファイルに記録する
slow_query_log=ON
slow_query_log_file=mysql-slow.log
long_query_time=1

# インデックスを使用しないクエリもスロークエリログに記録する
log-queries-not-using-indexes

# バイナリログの保存先 レプリケーションに必要
log-bin = logbin

# バイナリログのtype
binlog_format = mixed

# ID masterとslaveでこの値を変える
server-id = 1

innodb 関連

#ディレクトリの設定
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/

#InnoDBのデータやインデックスをキャッシュするメモリ領域 搭載メモリの70~80%
innodb_buffer_pool_size = 256M

#InnoDBの内部データなどを保持する領域
innodb_additional_mem_pool_size = 20M

#InnoDBの更新ログを記録するメモリ領域
innodb_log_buffer_size = 8M

#InnoDBの更新ログを記録するディスク上のファイル innodb_buffer_pool_size の25%程度?
#innodb_buffer_pool_size < innodb_log_file_size×innodb_log_files_in_groupになるように
innodb_log_file_size = 64M
innodb_log_files_in_group = 2

#flush logの設定 1ディスク、2メモリ、0なし
#レプリケーションをした場合はスレーブでは2にしても良いようだ
innodb_flush_log_at_trx_commit = 1

設定がすんだら5分でできる、MySQLのメモリ関係のチューニング!からダウンロードしたmymemcheckでチェック。。。。
するとエラーが・・・・・・・・・・・・・・・・

Can't locate Readonly.pm  in @INC ........
Can't locate UNIVERSAL/require.pm in @INC ..........

Readonly.pmがない???
そこでperlのモジュールをインストール

Mysqlを起動・・・・・・ 失敗

# service mysqld start
MySQL Daemon failed to start.
mysqld を起動中:                                           [失敗]

前のデータが残ってるみたい・・・・

# rm -rf /var/lib/mysql

データを削除したらOK

《参考サイト》
MySQLのパラメータ調整
Results tagged “my.cnf”
mysqlを高速化したいときのチューニング方法
MySQLのチューニング
my.cnfの設定例
5分でできる、MySQLのメモリ関係のチューニング!
[MySQL] パフォーマンス関連メモ

4月 06 2011

Mysqlが起動しない

remiなどでMysqlを新しくした時Mysqlが起動しない

 # service mysqld start
MySQL Daemon failed to start.
mysqld を起動中:                          [失敗]

以前のバージョンが邪魔しているみたいです。なので削除して再インストール

# yum remove mysql mysql-server
# rm -fr /var/lib/mysql/
# rm -fr /usr/share/mysql/
# yum --enablerepo=remi-test --disablerepo=base,updates install mysql mysql-server

これで

# service mysqld start
mysqld を起動中:                     [  OK  ]

Mysql5.5にした場合は /etc/my.cnfのcharacter-setを変更する

#default-character-set=utf8
character-set-server = utf8

《参考サイト》
さくらの VPSで mysql が起動しない