ラベル MySQL の投稿を表示しています。 すべての投稿を表示
ラベル MySQL の投稿を表示しています。 すべての投稿を表示

2015年1月7日水曜日

MySQL予約語のググらビリティーが低いので自分用リンク

更新日 2017-09-10

MySQL 予約語


Keywords and Reserved Words in MySQL 5.5

Keywords and Reserved Words in MySQL 5.6

Keywords and Reserved Words in MySQL 5.7

Keywords and Reserved Words in MySQL 8.0


以下リンク切れのため削除 (2017-09-10)
MySQL 5.7 予約語
http://dev.mysql.com/doc/refman/5.7/en/reserved-words.html

MySQL 5.6 予約語
http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

MySQL 5.5 予約語<
http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

MySQL 5.1 予約語
http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

MySQL 5.0 予約語
http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

MySQL 3.23/4.0/4.1 予約語
http://dev.mysql.com/doc/refman/4.1/en/reserved-words.html

2014年1月23日木曜日

Vagrant環境でMySQL5.6が起動しない?

VagrantでCentOS6.5でMySQLインストールしても起動しない・・・、
MySQL5.6だから?とかmy.cnfの設定がダメ?とかいろいろ考えすぎましたが、
デフォルトでも起動しないためそんなことはないようです。
ログには Cannot allocate memory・・・・と、
空きメモリーあるんだけどなと思いつつもinnodb_buffer_pool_sizeを小さくしてもダメでした。
[Note] InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
[ERROR] InnoDB: Cannot allocate memory for the buffer pool
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

対策

メモリー(物理)を増やすほど富豪ではなかったのでswap領域を追加してみることにしました。

swap領域の確認

swapon -s
Filename    Type  Size Used Priority
確かにありません・・・。

スワップ領域作成

容量は環境に合わせて適宜変更してください。
sudo dd if=/dev/zero of=/swapfile bs=1024k count=512
sudo mkswap /swapfile
sudo swapon /swapfile
sudo chown root:root /swapfile
sudo chmod 0600 /swapfile

再起動しても反映されるように修正

sudo vi /etc/fstab
# 次の行を追記
/swapfile swap swap defaults 0 0 

OSのスワップの利用頻度を低くする

できるだけスワップしない用に設定する(0〜100) 100の方が多くスワップ領域を使用する
vi /etc/sysctl.conf
vm.swappiness=10
sysctl -p 

これで無事にMySQL5.6が起動したのでいろいろ検証できます。
ちなみにPHPでもワーニング出ていたのが解消しました。
 PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/gd.so' - libvpx.so.0: cannot map zero-fill pages: Cannot allocate memory in Unknown on line 0
ここにもさりげなくCannot allocate memoryが。
ワーニング?・・・レベルなのかな・・・

2011年12月11日日曜日

CentOS 6.1でまだまだLAMP環境 OSインストール編



Webサービスを構築するソフトウェアは、LAMP(Linux, Apache, MySQL, Perl or PHP or Python)がよく使われていますが、最近は、LAMP以外のプログラミング言語、データベース、KVS、キャッシュなどの様々な技術を用いることも多くなり、ここ数年で選択肢がかなり広がった印象があります。

nginxやnode.jsのように、イベント駆動やノンブロキッキングの処理に注目があつまっていたり、
HTML5を用いたリアルタイムWebなど新しい技術なしでは実装が難しいというのも理由かもしれません。

そんな状況で、LAMPという言葉自体はもう古いものですが、中身は古くなったというよりは、安定してかつ新しい機能やライブラリーも増えてより便利になったという印象です。また、他が注目されているとはいえ、まだまだ多くのWebサービスを支えている技術はLAMPであるのもまた事実です。これまでのノウハウが活用できるというのもメリットですぐにやめられない理由の1つだと思います。

そんな当たり前の技術となったLAMPですが、CentOS 6.1がリリースされたタイミングなので、
最近のバージョンで、LAMP構成のサーバを作成してみようと思います。
これからWebエンジニアを目指す人でも、クラウドの時代でも、最低限知っておいて損はないと思います。

まずは、CentOS 6.1のインストールから


  • CentOS 6.1 インストール事前準備

  • CentOS 6.1 インストール(最小構成)

  • よく使うコマンドのインストールと環境構築

  • sshの鍵作成

  • LAN以外からの22番ポート(ssh)へアクセスを不可にする

  • この手順でインストールしたモジュール(依存関係も含む)




CentOS 6.1 インストール事前準備



▼ファイルをダウンロードする
http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.1/isos/x86_64/CentOS-6.1-x86_64-bin-DVD1.iso
http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.1/isos/x86_64/CentOS-6.1-x86_64-bin-DVD2.iso
※以下の作業で必要なのは、CentOS-6.1-x86_64-bin-DVD1.isoのみ

▼ダウンロードしたファイルをDVD-Rに焼く
Macの場合は、標準のディスクユーティリティで作成可能
1. [アプリケーション]→[ユーティリティ]→[ディスクユーティリ]を開く
2. [ディスクを作成]をクリック
3. ダウンロードした[CentOS-6.1-x86_64-bin-DVD1.iso]を選択して[ディスクを作成]ボタンをクリック
4. DVD-Rをセットする
5. [ディスクを作成]ボタンをクリック

しばらく待てばできあがり。
必要であれば、[CentOS-6.1-x86_64-bin-DVD2.iso]も同様の手順で焼く



CentOS 6.1 インストール(最小構成)




▼インストールメディアから起動
1. サーバ電源ON
2. 先ほど焼いたメディア(DVD)をサーバにセットする
3. DVDから起動したら[Enter]キーを押す
※DVDで起動しない場合は、BIOSの設定変更が必要

4. Install or upgrade an existing systemを選択して[Enter]キーを押す
5. [SKIP]を選択して[Enter]キーを押す
※事前にDVDをチェック済みなので。メディアをチェックしたい場合はそのまま[OK]をクリック
6. [Next]を選択してクリック

▼インストールする言語の選択
7. [Japanese]を選択して[Next]をクリック
8. [日本語]を選択して[次へ]をクリック

▼インストールするストレージデバイスの選択
9. [基本ストレージデバイス]を選択して[次へ]をクリック
10. [新規インストール]を選択して[次へ]をクリック

▼ホスト名の設定(適宜変更してください)
11. ホスト名を入力して同じ画面の[ネットワークの設定]をクリック
例 sv.example.local

▼ネットワークの設定(適宜変更してください)
12. [有線]タブの[System eth0]を選択して[編集...]ボタンをクリック
13. [自動接続する]にチェックをつける

サーバ用途なのであまりないと思いますが、[DHCP]を使用する場合は14-16の手順は不要

14. [IPv4のセッティング]タブをクリックする
15. 方式を[自動(DHCP)]から[手動]に変更する
16. [追加]ボタンをクリックして次の項目を入力する


設定例 (環境にあわせて変更してください)
アドレス : 192.168.1.100
ネットマスク : 24 (または255.255.255.0)
ゲートウェイ : 192.168.1.1
DNSサーバ : 8.8.8.8 (例 Google Public DNS)
ドメインを検索:example.local


17. [適用]ボタンをクリック
18. [閉じる]ボタンをクリック
19. [次へ]をクリック

▼時間の設定(適宜変更してください)
20. [アジア/東京]を選択する
21. [システムクロックでUTCを使用]のチェックを外す
22. [次へ]をクリック

▼管理者パスワードの設定
23. [rootのパスワードと[確認]にパスワードを入力する
24. [次へ]をクリック

▼ディスク構成(適宜変更してください)
25. [すべての領域を使用する]を選択する
26. [パーティションのレイアウトをレビューまたは修正]を選択する
27. [次へ]をクリック
28. [lv_home]を選択して[削除]ボタンをクリック
29. [削除]ボタンをクリック
30. [lv_root]を選択して[編集]をクリック
31. サイズにし最大値を入力して[OK]ボタンをクリック
32. [次へ]ボタンをクリック
33. [変更をディスクに書き込む]ボタンをクリック
34. [次へ]をクリック

▼インストールオプションの選択(最小構成)
35. [Minimal]を選択して[次へ]をクリック
36. インストールが完了したら[再起動]ボタンをクリックする



よく使うコマンドのインストールと環境構築




ここからは外部(インターネットなど)からこのサーバへアクセスできない環境での作業を前提とする
▼セットアップ
ここからはリモートで作業する
ssh root@192.168.1.100
管理者用パスワードを入力してログインする

▼モジュールアップデート


yum -y update


▼SELinuxの無効化


setenforce 0

vi /etc/sysconfig/selinux
#SELINUX=enforcing
SELINUX=disabled

完全に無効化するには再起動が必要
reboot

再起動後にgetenforceコマンドでDisabledと表示されればOK


▼シェルをzshに変更する(zsh好きなら)


yum -y install zsh
chsh -s /bin/zsh

変更可能なシェル確認
chsh --list-shells


▼コピー関連コマンド(rsync, scp)のインストール


yum -y install \
rsync.x86_64 \
openssh-clients.x86_64


▼圧縮・解凍関連コマンド(unzip)のインストール


yum -y install \
unzip.x86_64


▼ネットワーク関連コマンド(dig, nslookup, whois, traceroute, tcpdump, telnet)のインストール


yum -y install \
bind-utils.x86_64 \
jwhois.x86_64 \
traceroute.x86_64 \
tcpdump.x86_64 \
telnet.x86_64


▼ソースのコンパイルに使用するモジュールのインストール


yum -y install \
autoconf.noarch \
automake.noarch \
cmake.x86_64 \
gcc.x86_64 \
gcc-c++.x86_64 \
make.x86_64 \
libtool.x86_64


あとはお好みで追加する。 wgetとか



sshの鍵作成




1. ssh-keygenコマンドを実行する
ssh-keygen -t rsa

下記のメッセージが表示される
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): [Enterキーを押す]
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): [パスフレーズを入力してEnterキーを押す]
Enter same passphrase again: [再度パスフレーズを入力してEnterキーを押す]
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

秘密鍵 : /root/.ssh/id_rsa
公開鍵 : /root/.ssh/id_rsa.pub

※scpコマンドなどで秘密鍵をリモートアクセスするPCに保存します。

3. 公開鍵authorized_keysに登録する
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

4. アクセス権を変更する
chmod -R 700 $HOME/.ssh
chmod -R 600 $HOME/.ssh/*

5. 鍵のみの認証に変更(パスワード認証を許可しない)
vi /etc/ssh/sshd_config
PasswordAuthentication no

6. sshdを再起動する
/etc/init.d/sshd restart

以後、秘密鍵を使用してログインします。



LAN以外からの22番ポート(ssh)へアクセスを不可にする




vi /etc/sysconfig/iptables

次のように修正して保存する
修正前
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

修正後
-A INPUT -s 192.168.1.0/24 -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

iptablesを再起動する
/etc/init.d/iptables restart



この手順でインストールしたモジュール(依存関係も含む)




▼シェルをzshに変更する(zsh好きなら)


  • zsh-4.3.10-4.1.el6.x86_64



▼コピー関連コマンド(rsync, scp)のインストール


  • libedit-2.11-4.20080712cvs.1.el6.x86_64

  • openssh-clients-5.3p1-52.el6_1.2.x86_64

  • rsync-3.0.6-5.el6_0.1.x86_64



▼圧縮・解凍関連コマンド(unzip)のインストール


  • unzip-6.0-1.el6.x86_64



▼ネットワーク関連コマンド(dig, nslookup, whois, traceroute, tcpdump, telnet)のインストール


  • libpcap-1.0.0-6.20091201git117cb5.el6.x86_64

  • bind-libs-9.7.3-2.el6_1.P3.3.x86_64

  • bind-utils-9.7.3-2.el6_1.P3.3.x86_64

  • tcpdump-4.0.0-3.20090921gitdf3cb4.1.el6.x86_64

  • traceroute-2.0.14-2.el6.x86_64

  • jwhois-4.0-19.el6.x86_64

  • telnet-0.17-47.el6.x86_64

▼ソースのコンパイルに使用するモジュールのインストール


  • xmlrpc-c-1.16.24-1200.1840.el6_1.4.x86_64

  • mpfr-2.4.1-6.el6.x86_64

  • cpp-4.4.5-6.el6.x86_64

  • xmlrpc-c-client-1.16.24-1200.1840.el6_1.4.x86_64

  • perl-Pod-Escapes-1.04-119.el6_1.1.x86_64

  • perl-libs-5.10.1-119.el6_1.1.x86_64

  • perl-Pod-Simple-3.13-119.el6_1.1.x86_64

  • perl-Module-Pluggable-3.90-119.el6_1.1.x86_64

  • perl-version-0.77-119.el6_1.1.x86_64

  • perl-5.10.1-119.el6_1.1.x86_64

  • autoconf-2.63-5.1.el6.noarch

  • automake-1.11.1-1.2.el6.noarch

  • libgomp-4.4.5-6.el6.x86_64

  • kernel-headers-2.6.32-131.21.1.el6.x86_64

  • glibc-headers-2.12-1.25.el6_1.3.x86_64

  • glibc-devel-2.12-1.25.el6_1.3.x86_64

  • ppl-0.10.2-11.el6.x86_64

  • cloog-ppl-0.15.7-1.2.el6.x86_64

  • gcc-4.4.5-6.el6.x86_64

  • libstdc++-devel-4.4.5-6.el6.x86_64

  • gcc-c++-4.4.5-6.el6.x86_64

  • libtool-2.2.6-15.5.el6.x86_64

  • cmake-2.6.4-5.el6.x86_64

  • make-3.81-19.el6.x86_64



次回は、MySQLをインストールします。




2011年11月12日土曜日

CentOS 6.1でまだまだLAMP環境 MySQL 5.5.19 インストール編



前回のCentOS 6.1のインストールに引き続き、
MySQL 5.5.19をインストールします。

今回のインストール手順と同じ処理を行うバッチを作成しました。
管理者権限があれば次の1行でインストールできます。
ご使用になられた場合の損害は一切責任を負いませんのでご了承ください。

curl http://dl.dropbox.com/u/30648910/install/mysql/mysql.sh | env MYSQL_VERSION=5.5.19 sh



MySQL 5.5.19をソースコードからインストール




▼インストールに必要なモジュール


yum -y install \
make.x86_64 \
cmake.x86_64 \
gcc.x86_64 \
gcc-c++.x86_64 \
ncurses.x86_64 \
ncurses-devel.x86_64 \
bison.x86_64 \
libaio-devel.x86_64

libaio-devel.x86_64を追加(2012/4/12)



▼mysqlアカウント追加


groupadd mysql
useradd -d /home/mysql -g mysql -r -s /sbin/nologin mysql


▼既存のファイルをリネーム


mv /etc/my.cnf /etc/my.cnf.bak
mv /usr/lib64/mysql /usr/lib64/mysql_bak


▼ソースコードをダウンロードして解凍


cd /usr/local/src
curl -o mysql-5.5.19.tar.gz http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.5/mysql-5.5.19.tar.gz
tar zxfv mysql-5.5.19.tar.gz
cd mysql-5.5.19


▼ビルドしてインストール(utf8mb4をDEFAULT_CHARSET)


cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
make
make install


▼MySQL初期化


mkdir /usr/local/mysql/etc
cd /usr/local/mysql
chown -R mysql:mysql .
./scripts/mysql_install_db --user=mysql --skip-name-resolve


▼my.cnf設置


cp /usr/local/src/mysql-5.5.19/support-files/my-medium.cnf /usr/local/mysql/etc/my.cnf
chown -R root .
chown -R mysql:mysql /usr/local/mysql/data
ln -s /usr/local/mysql/lib /usr/lib64/mysql
ldconfig


▼MySQL起動、停止、再起動


起動
/usr/local/mysql/support-files/mysql.server start
停止
/usr/local/mysql/support-files/mysql.server stop
再起動
/usr/local/mysql/support-files/mysql.server restart


▼パスの設定


bashの場合
vi $HOME/.bashrc
zshの場合
vi $HOME/.zshrc

次の2行を追記して保存する
PATH=$PATH:/usr/local/mysql/bin
export PATH

bashの場合
source $HOME/.bashrc

zshの場合
source $HOME/.zshrc
rehash

MySQLクライアントを起動して確認する
mysql


▼依存関係も含めインストールされるモジュール


make-3.81-19.el6.x86_64
cmake-2.6.4-5.el6.x86_64
gcc-4.4.5-6.el6.x86_64
gcc-c++-4.4.5-6.el6.x86_64
ncurses-5.7-3.20090208.el6.x86_64
pkgconfig-0.23-9.1.el6.x86_64
ncurses-devel-5.7-3.20090208.el6.x86_64
bison-2.4.1-5.el6.x86_64





2011年11月5日土曜日

今さら人には聞けないMySQLの話(いにしえのold-passwordsオプション for MySQL5.5)



Perl使いもお世話になっていると思われるphpMyAdminで
MySQLにログインできないことが・・・・あった・・・。


#2000 MySQL サーバにログインできません


というわけで接続確認したところ


<?php
$dbh = mysql_connect("127.0.0.1","ユーザー名","パスワード") or die(mysql_error());


このようなエラーメッセージが、以下抜粋


mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication.
Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password').
This will store a new, and more secure, hash value in mysql.user.
If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file


つまり、MySQL4.1以前の古い安全ではない認証では接続できないので、
old-passwordsオプション外して、パスワード再設定してよ!ってことらしい。
http://dev.mysql.com/doc/refman/5.5/en/old-client.html

それならold-passwordsオプションで起動できないようにしてほしいような気もするが。
起動はできるしパスワードも設定できるんだな。
MySQL4.0など古いDBのデータ移行やmy.cnfの設定引き継いだ場合は注意が必要です。

というか、old-passwordsオプション使ってたんだ・・・。




2011年10月26日水曜日

今さら人には聞けないMySQLの話(phpMyAdminでlocalhostのサーバ追加)

phpMyAdminに複数のDBを追加する場合の注意事項(ただし、localhost環境)
とくに、テスト環境など1台のサーバに複数のDBを準備することがよくあります。
そのため、標準のTCPポート番号(3306)以外にして複数登録するわけですが、
次の設定では、phpMyAdminから2つめのlocalhost:3307へ接続できません!
$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '3307';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
実は、ある意味パラメータには問題ありません。
では、なぜ接続できないかと言うと、
接続はできるのですが、localhost:3307を指定しても
localhost:3306に接続してしまうのです。

原因は、MySQLの仕様でした。
例 次のような構成の場合
/usr/local/mysql1 3306番ポートのインストールディレクトリ
/usr/local/mysql2 3307番ポートのインストールディレクトリ

これはコマンドでも同じことが言えます。
3306番ポートに接続してしまう
/usr/local/mysql1/bin/mysql -h localhost -u [ユーザー名] -P 3307 -p 3307番ポートに接続してしまう /usr/local/mysql2/bin/mysql -h localhost -u [ユーザー名] -P 3306 -p
つまり、コマンドの引数に指定したポート番号は無視され、各my.cnfに設定されたポート番号に接続されます。
3307番に接続したはずが、ポート番号確認すると3306に接続されています。
mysql> SHOW VARIABLES LIKE 'port';
 +---------------+-------+
 | Variable_name | Value |
 +---------------+-------+
 | port          | 3306 |
 +---------------+-------+
 1 row in set (0.00 sec)
これを回避する方法ですが、
実は、ホスト名が「localhost」以外なら問題ありません。
IPアドレスでもサーバのホスト名でもOKです。
つまり、DBとWebサーバが物理的に別になっている環境ならそもそも問題になりません。

回避策 IPアドレスの設定例

$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['host'] = '127.0.0.1'; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['extension'] = 'mysql'; $cfg['Servers'][$i]['AllowNoPassword'] = false; $i++; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['host'] = '127.0.0.1'; $cfg['Servers'][$i]['port'] = '3307'; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['extension'] = 'mysql'; $cfg['Servers'][$i]['AllowNoPassword'] = false;
これで3307番ポートのDBにも接続できます。
実はこれphpMyAdminのドキュメントに書いてあるんですよね。
Configuration
If you use localhost as the hostname,
MySQL ignores this port number and connects with the socket,
so if you want to connect to a port different from the default port,
use 127.0.0.1 or the real hostname in $cfg['Servers'][$i]['host'].