一般権限 (非root) でMySQLをインストールする方法

あるレンタルサーバーで、WordPress のインストールをすることになった。

WordPress を入れるためには、MySQL サーバを入れる必要がある。

しかし、そのサーバーでは管理者権限 (root 権限) は与えられていなかった。

これは、一般権限で MySQL サーバをインストールする方法の備忘録である。

スポンサーリンク
レクタングル(大)

OS の特定

適切な MySQL サーバを入れるためには、まず OS を特定する必要がある。

サーバは Red Hat 6.1 x86_64 のようだ。

なお、システムには既に MySQL がインストールされている。

また、以下のコマンドの結果から、他のユーザが既に mysqld を動かしていることが分かる。

これから、各自のホームディレクトリにインストールして動かせば良いようだ、と推測が付く。

MySQL のダウンロード・解凍

Community Server の Linux Generic が必要

MySQL の無料バージョンは Community Server というエディションになる。

http://dev.mysql.com/downloads/mysql/ からダウンロードができ、執筆時点での最新版は 5.7.12 である。

Red Hat Enterprise Linux 用のダウンロードは rpm 形式となっているが、これは管理者権限で yum コマンドによるインストールを行うことを想定している。

今回、管理者権限はないので Linux – Generic からバイナリファイルを落としてきて入れる必要がある。(下記図の赤丸参照)

※一部サイトでは、一般権限でのインストールにはソースコードからのコンパイルが必要と書いてあるが、上記の汎用バイナリファイルを使えば、コンパイルは不要である。

community-server

wget でダウンロード

上記の64ビット版の tar ファイルのダウンロードは、以下のようなリンクとなっている。

ここをクリックすると、ダウンロード用のページに飛ぶが、その下の方に No thanks, just start my download. というリンクがあるので、このリンクアドレスを wget に渡せばよい。

解凍し mysql シンボリックリンク作成

これは以下の2つの tar.gz ファイルを含んでいる。

1番目の tar.gz ファイルを解凍すると mysql-5.7.12-linux-glibc2.5-x86_64 というディレクトリができる。

今後の利便のため、これに mysql というシンボリックリンクを張る。

初期化作業(インストール)

以下の作業は、mysql というディレクトリに cd して、そこで実行する。

–initialize オプション

公式ドキュメントによれば、MySQL 5.7.7 以降は mysqld –initialize を使って初期化を行えと書かれている。

※ 以前は bin/mysql_install_db というコマンドだったが、現在は非推奨である。実行すると [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld –initialize という警告が表示されてしまう。

しかし、上記のように /usr/local/mysql-5.5.18 ディレクトリ以下のファイルを読み込もうとして、失敗してしまう。

※ 上記のコマンドを実行したとき、ELF binary type “0” not known. などのエラーが出て実行できない場合は、Linux のバイナリファイルの実行を禁止している FreeBSD の可能性がある(さくらのレンタルサーバなど)。

–basedir オプション

–basedir オプションで自身のディレクトリを指定してあげる必要があるようだ。

このエラーは、utf8_general_ci という COLLATION (ソート順) が、latin1 という CHARACTER SET (文字コード) に対しては無効ですよ、というメッセージである。

–character-set-server=utf8 オプション

対処方法は –character-set-server=utf8 オプションによりサーバ文字コードに UTF8 を指定してあげることだ。

今度は InnoDB に関するエラーが出た。

MySQL 5.5 以降では、デフォルトのストレージエンジンが InnoDB (MyISAM と違いトランザクション機能をサポート) になっている。

上記のエラーは、Linux のネイティヴ AIO (非同期 I/O) のコンテキストを作成する io_setup() というシステムコールが失敗したことを示す。

–innodb_use_native_aio=0 オプション

このエラーは my.cnf に innodb_use_native_aio = 0 という設定を行って AIO を無効化することで回避できるという情報があった。

オプションとして渡す場合は、–innodb_use_native_aio=0 を指定すればよい。

こうしてようやく初期化に成功し、root アカウントのパスワードが生成された。

このパスワードを書き留めておくとよい。

オプションを設定ファイル my.cnf で与える時の注意

基本的に MySQL のオプションは、コマンドラインでも指定できるし、設定ファイル (通常は my.cnf という名前) で指定することもできる (それは上記のインストールプロセスにおいても同様である) 。

設定ファイルが読み込まれる場所は、デフォルトで以下の順となっている (mysqld –help 参照)。

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • /usr/local/mysql/etc/my.cnf
  • ~/.my.cnf

上記の場所に設定ファイルを作成してもよいが、できれば –basedir ディレクトリに置きたいはずである。

この場合、my.cnf を –basedir ディレクトリに作り (以下のコマンドでひな形を作成)、

ファイルを開いて以下のように記述を行う。

そして、その設定ファイルのパスを指定してインストールを実行すればよい。

ここで重要なのは、–defaults-file は –initialize の前に指定しなければならない点である。

インストールプロセスをやり直す方法

なお、上記のインストールプロセスは、–basedir オプションで指定したディレクトリ下の data ディレクトリにデータベースや hosthoge.err 等の諸々のファイルを生成するためのものだ。

そのため、data ディレクトリを削除すれば、インストールプロセスを最初からやり直すことができる

MySQL サーバの起動

推奨される mysqld_safe コマンド

サーバの起動方法は、https://dev.mysql.com/doc/refman/5.7/en/mysqld-safe.html に書かれているとおり、./bin/mysqld という本体プログラムを直接起動するのではなく、./bin/mysqld_safe コマンドの使用が推奨されている。

mysqld_safe は mysqld を起動する際、エラーが発生すると mysqld の再起動を試みたり、エラーログに記録したりといった安全機能を提供する。

なお、https://dev.mysql.com/doc/refman/5.7/en/starting-server.html に書かれているが、root ユーザで MySQL を起動する場合は –user オプションで動作させるユーザアカウントを指定するが、非 root ユーザで起動する場合はこのオプションは不要だ。

とりあえず起動を試みる

運用時は mysqld_safe & のように最後にアンパサンドを付けてバックグラウンドで起動させるが、まずはフォアグラウンドで起動を試してみる (ここでは上記の ~/mysql/my.cnf はないものと仮定)。

上記のエラーを見ると、ログやデータベースは basedir 直下の data ディレクトリから読もうとしているが、ソケットファイル(サーバが同じマシン上のクライアントと通信するためのファイル)はシステム共通のディレクトリから読もうとしている。

念のためエラーログ (./data/hosthoge.err) を見てみる。

上記は COLLATION ‘utf8_general_ci’ is not valid for CHARACTER SET ‘latin1’ という前節と同じエラーである。

要するに、前節と同じ –character-set-server=utf8 や –innodb_use_native_aio=0 オプションを mysqld_safe にも指定してあげる必要がある (基本的に、mysqld_safe に指定したコマンドラインオプションはそのまま mysqld にも渡される) 。

しかし、上記のコマンドを実行すると、ポートが使用中であるという新しいエラーが出てしまった。

–port オプションと –socket オプションの設定

このエラーは、3306 というデフォルトポート (別のマシンから MySQL に接続するための TCP/IP ポート) がすでに使われているのが原因だ。

他のユーザが一般権限で立ち上げた MySQL の使用ポートとぶつからないようにしないといけない。

上記のコマンドにより使用されているでポートを確認したところ、55000 なら使われていないようだったので、これを –port オプションで指定する。

さらに、ローカルマシーン上のクライアントが接続できるようにするためには、UNIX ソケットファイルが必要なので、このパスを –socket オプションで指定する。

結局、以下のコマンドでサーバが無事に起動した。

これは my.cnf に以下のように設定して mysqld_safe を実行することと等価である。

クライアントからの接続

クライアントからの接続には、mysql というコマンドを使用する。

このコマンドのオプション一覧は https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html に掲載されている。

必要なのは、–port と  –socket オプションだ。

無事に接続できたので、データベース一覧を表示するコマンドを打ってみる。

root アカウントのパスワード変更を求められるので、以下のコマンドで変更する。

パスワードの変更が完了すると、MySQL のコマンドが打てるようになる。

これで、無事に一般権限で MySQL のインストールが無事に完了した!

スポンサーリンク
レクタングル(大)
レクタングル(大)
  • このエントリーをはてなブックマークに追加

コメント

  1. MySQL初心者 より:

    一般権限でWordPressを入れようとして、まさに同じところで難航していたので本当に助かりました!ありがとうございます。

    ところで、もしご存知でしたら教えて頂きたい事があります。
    上記の手順は済んで無事WordPressまで導入できましたが、本家のサーバが定期停電等でダウンした場合、復帰時にMySQLサーバは手動でまた起動してあげないと落ちたままになりますでしょうか?MySQLの自動起動設定は皆Root権限ありきの説明かなと思われたので…
    不勉強で恐縮です、よろしくお願いいたします。

コメントをどうぞ

メールアドレスが公開されることはありません。