<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>さくらたんどっとびーず &#187; 開発環境</title>
	<atom:link href="http://sakuratan.biz/archives/category/%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83/feed" rel="self" type="application/rss+xml" />
	<link>http://sakuratan.biz</link>
	<description>モロモロ工事中です</description>
	<lastBuildDate>Sun, 25 Jun 2023 12:51:51 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>mysqlのibdataが原因でディスクフルになったときに復旧方法</title>
		<link>http://sakuratan.biz/archives/4536</link>
		<comments>http://sakuratan.biz/archives/4536#comments</comments>
		<pubDate>Sat, 27 Aug 2011 08:32:11 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[開発環境]]></category>
		<category><![CDATA[InnoDB]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=4536</guid>
		<description><![CDATA[さっきまで落ちてたsakuratan.bizです。どーもすみません。 原因は MySQL の InnoDB が使用する ibdata ファイルがディスクを食いつぶしてディスクフルになってたためでした。 ibdata はテーブルスペースを保存するファイルで、CentOS ですとデフォルトで /var/lib/mysql/ibdata1 に作成されます。MySQL のデフォルトでは ibdata が自... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/4536">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>さっきまで落ちてたsakuratan.bizです。どーもすみません。</p>
<p>原因は MySQL の InnoDB が使用する ibdata ファイルがディスクを食いつぶしてディスクフルになってたためでした。</p>
<p>ibdata はテーブルスペースを保存するファイルで、CentOS ですとデフォルトで /var/lib/mysql/ibdata1 に作成されます。MySQL のデフォルトでは ibdata が自動で拡張されていく設定になっていますので、放っておくとどんどんファイルサイズがでかくなって、さくらの VPS とかですと結構あっさりディスクフルになりました。</p>
<p>とりあえず復旧できたんで手順とか残しときます。同じようにトラブった方は参考程度にどうぞ。</p>
<p style="margin-top:3em">まず ibdata1 がディスクを食いつぶしているので、復旧するにはこれを消すとかファイルを小さく必要があります。</p>
<p> ファイルサイズを小さくする方法は調べたらいっぱいでてきますので（<a href="http://dev.mysql.com/doc/refman/5.1/ja/adding-and-removing.html">13.5.7 InnoDB データとログ ファイルの追加と削除</a> とか <a href="http://bitwalker.dtiblog.com/blog-entry-162.html">ibdata1 のサイズを減らす手順</a> とか <a href="http://d.hatena.ne.jp/masayuki14/20100308/1268039336">ibdata1のサイズを減らす方法</a>とか）、概要だけ引用しますと、</p>
<blockquote>
<ol>
<li>全ての InnoDB テーブルをダンプする為に mysqldump を利用してください。</li>
<li>サーバを停止してください。</li>
<li>全ての存在するテーブルスペース ファイルを削除してください。</li>
<li>新しいテーブルスペースを設定してください。</li>
<li>サーバを再起動してください。</li>
<li>ダンプ ファイルをインポートしてください。</li>
</ol>
<p><cite><a href="http://dev.mysql.com/doc/refman/5.1/ja/adding-and-removing.html">MySQL :: MySQL 5.1 リファレンスマニュアル :: 13.5.7 InnoDB データとログ ファイルの追加と削除</a></cite>
</ol>
</blockquote>
<p>という感じだったりします。要はバックアップ取ってテーブルスペースを作り直せということのようです。</p>
<p>ただまあディスクフルしてるんでサーバ上に mysqldump のダンプファイルなんか置けないので、ssh 経由で mysqldump を実行することにしました。↓のように ssh を起動することで、ネットワーク越しにコマンドを実行して mysqldump の出力をローカルに直接保存できます。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #c20cb9; font-weight: bold;">who</span><span style="color: #000000; font-weight: bold;">@</span>domain \<br />
mysqldump <span style="color: #660033;">-v</span> <span style="color: #660033;">-u</span> DBUSER \<br />
<span style="color: #660033;">--default-character-set</span>=binary <span style="color: #660033;">-p</span> DBNAME \<br />
TABLE1 TABLE2 ... &nbsp;<span style="color: #000000; font-weight: bold;">|</span> \<br />
<span style="color: #c20cb9; font-weight: bold;">gzip</span> <span style="color: #000000; font-weight: bold;">&gt;</span> mysql.dump</div></div>
<p>それとコマンドを実行する前にサーバ上のサービスをできるだけ止めてある程度作業用のメモリの確保して、ついでに不要なファイルをできるだけ削除しておいた方が良いと思います。メモリかスワップか何が原因か調べてる暇も無かったので詳細は不明ですが、リソースが足らないと mysqldump がテーブル構造を読み込む際にエラーを出します。</p>
<p>今回はリストアする必要が無いテーブルが何個かありましたのでダンプする対象をテーブル単位で指定していますが、全部リストアする場合はデータベース単位で指定してもらえばよろしいかと思います。運用形態によっては mysqldump に &#8211;single-transaction オプションを指定してもらった方が良いかもしれません（とりあえずウチんとこでは不要だったので指定してませんが）。</p>
<p style="margin-top:2em">ダンプできたら mysql を止めてから ibdata1 と ib_logfile0 と ib_logfile1 を消します。他のサイトだとリネームした方が良いとか書いてますがそんな余裕無いのでいきなりマジ削除しました。最悪データ全部豚でもいーや、の覚悟でどうぞw</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql<br />
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-f</span> ibdata1 ib_logfile<span style="color: #7a0874; font-weight: bold;">&#91;</span>01<span style="color: #7a0874; font-weight: bold;">&#93;</span></div></div>
<p>/etc/my.cnf に ibdata1 のサイズ制限と innodb_file_per_table を加えてからmysqld を再起動して回復しましたよ、という感じです。</p>
<div class="codecolorer-container sql dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">innodb_data_file_path<span style="color: #66cc66;">=</span>ibdata1:10M:autoextend:<span style="color: #993333; font-weight: bold;">MAX</span>:100M<br />
innodb_file_per_table</div></div>
<p>innodb_file_per_table を指定すると、各テーブルの中身は共有テーブルスペースでは無く個別のファイルに保存されるようになるのですが、こっちのファイルも放置しておくと大きくなっていきますので、定期的に ALTER TABLE を実行してデフラグする必要があります。（詳しくは <a href="http://dev.mysql.com/doc/refman/5.1/ja/innodb-file-defragmenting.html">13.5.14.3 テーブルのデフラグメント化</a> とか <a href="http://cl.pocari.org/2006-07-07-2.html">拡張され続ける InnoDB のデータファイルのサイズを小さくする方法</a> とかをご覧ください。）</p>
<div class="codecolorer-container sql dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> table1 ENGINE<span style="color: #66cc66;">=</span>InnoDB;</div></div>
<p style="margin-top:3em">個別に ALTER TABLE 実行するのも面倒なので、全ての InnoDB テーブルに対して ALTER TABLE を実行するスクリプトも書いてみました。よろしければどうぞ。</p>
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">import</span> MySQLdb<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; conn <span style="color: #66cc66;">=</span> MySQLdb.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">user</span><span style="color: #66cc66;">=</span><span style="color: #483d8b;">'root'</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; cur <span style="color: #66cc66;">=</span> conn.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; cur.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'SHOW DATABASES'</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; databases <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>database <span style="color: #ff7700;font-weight:bold;">for</span> database<span style="color: #66cc66;">,</span> <span style="color: #ff7700;font-weight:bold;">in</span> cur <span style="color: #ff7700;font-weight:bold;">if</span> database <span style="color: #66cc66;">!=</span> <span style="color: #483d8b;">'mysql'</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; cur.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; conn.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> database <span style="color: #ff7700;font-weight:bold;">in</span> databases:<br />
&nbsp; &nbsp; &nbsp; &nbsp; conn <span style="color: #66cc66;">=</span> MySQLdb.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">user</span><span style="color: #66cc66;">=</span><span style="color: #483d8b;">'root'</span><span style="color: #66cc66;">,</span> db<span style="color: #66cc66;">=</span>database<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cur1 <span style="color: #66cc66;">=</span> conn.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cur1.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'SHOW TABLE STATUS'</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> t <span style="color: #ff7700;font-weight:bold;">in</span> cur1:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tablename <span style="color: #66cc66;">=</span> t<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; engine <span style="color: #66cc66;">=</span> t<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> engine <span style="color: #ff7700;font-weight:bold;">and</span> engine.<span style="color: black;">lower</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'innodb'</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Defrag %s.%s'</span> % <span style="color: black;">&#40;</span>database<span style="color: #66cc66;">,</span> tablename<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cur2 <span style="color: #66cc66;">=</span> conn.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cur2.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'ALTER TABLE %s ENGINE=INNODB'</span> % tablename<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cur2.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cur1.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; conn.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'__main__'</span>:<br />
&nbsp; &nbsp; main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></div>
<p>MySQL にパスワード無しで root ログインできる前提でスクリプト書いてますので、その辺の設定変えている方は適当に改造して使ってください。</p>
]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/4536/feed</wfw:commentRss>
		<slash:comments>208</slash:comments>
		</item>
		<item>
		<title>Unixのターミナルからビープ音を鳴らす方法</title>
		<link>http://sakuratan.biz/archives/4013</link>
		<comments>http://sakuratan.biz/archives/4013#comments</comments>
		<pubDate>Thu, 14 Apr 2011 06:29:09 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[開発環境]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ターミナル]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=4013</guid>
		<description><![CDATA[先日30分ぐらいかかるスクリプトを実行していたのですが、終わったらビープ音で通知してくれると便利かなーと思って調べてみました。 ビープ音の文字コードは 0&#215;7 まず基本的なこととして、ASCII コードの 0&#215;7 は BEL となっており、（デバイス的に）適当なベル音を鳴らす文字コードとなっています。 つまり 0&#215;7 を出力したらビープ音が鳴るってことです。 シェルか... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/4013">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>先日30分ぐらいかかるスクリプトを実行していたのですが、終わったらビープ音で通知してくれると便利かなーと思って調べてみました。</p>
<h3>ビープ音の文字コードは 0&#215;7</h3>
<p>まず基本的なこととして、ASCII コードの 0&#215;7 は BEL となっており、（デバイス的に）適当なベル音を鳴らす文字コードとなっています。</p>
<p>つまり 0&#215;7 を出力したらビープ音が鳴るってことです。</p>
<h3>シェルから鳴らす</h3>
<p>シェルから鳴らす場合、echo コマンドを使います。コマンドラインから 0&#215;7 を指定するにはコントロールシーケンス ^G を入力します。</p>
<p>一般的なターミナルでは [CTRL]+v [CTRL]+g を連続して入力するとコントロールシーケンス ^G が入力できます。文字列 &#8220;^G&#8221; を入力しても鳴りませんので注意してください。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #7a0874; font-weight: bold;">echo</span> ^G</div></div>
<p>printf コマンドがインストールされている環境では、以下のようにビープ音を鳴らすこともできます。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">printf</span> <span style="color: #ff0000;">'\007'</span></div></div>
<h3>プログラミング言語から鳴らす</h3>
<p>0&#215;07 が出力できれば良いので、基本的にどのプログラミング言語からでもビープ音を鳴らすことができます。</p>
<p>代表的な LL 言語で鳴らす方法は以下のようになります。</p>
<div class="codecolorer-container perl dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="perl codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># perl</span><br />
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\0</span>07&quot;</span><span style="color: #339933;">;</span></div></div>
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;"># python</span><br />
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\0</span>07&quot;</span></div></div>
<div class="codecolorer-container ruby dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;"># ruby</span><br />
<span style="color:#CC0066; font-weight:bold;">print</span> <span style="color:#996600;">&quot;<span style="color:#000099;">\0</span>07&quot;</span></div></div>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;<span style="color: #660099; font-weight: bold;">\007</span>&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>全部いっしょとか言わないのw</p>
<p>んでわ。</p>
]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/4013/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>さくらの VPS に WordPress をインスコする手順</title>
		<link>http://sakuratan.biz/archives/2550</link>
		<comments>http://sakuratan.biz/archives/2550#comments</comments>
		<pubDate>Sat, 14 Aug 2010 09:09:33 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[開発環境]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[さくらのVPS]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=2550</guid>
		<description><![CDATA[さくらの VPS に WordPress をインスコしてみますたので手順メモっときます。えーと、さくらの VPS の設定ダダ流しの続きで書いてますのでよく分からんところは先に元記事を見てください。 1. mysql をインスコする mysql は yum のパッケージを使います。root から mysql.x86_64、mysql-devel.x86_64、mysql-server.x86_64 ... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/2550">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>さくらの VPS に WordPress をインスコしてみますたので手順メモっときます。えーと、<a href="http://sakuratan.biz/archives/2492">さくらの VPS の設定ダダ流し</a>の続きで書いてますのでよく分からんところは先に元記事を見てください。</p>
<h3>1. mysql をインスコする</h3>
<p>mysql は yum のパッケージを使います。root から mysql.x86_64、mysql-devel.x86_64、mysql-server.x86_64 あたりをインスコしてください。</p>
<pre>
# yum install mysql.x86_64 mysql-devel.x86_64 mysql-server.x86_64
</pre>
<p>rc スクリプトが /etc/rc.d/init.d/mysqld に作成されますので起動します。</p>
<pre>
# /etc/rc.d/init.d/mysqld start
</pre>
<p>chkconfig でリブート時に mysqld が起動するように設定して mysql のインスコは終わりす。データベースの設定は後でします。</p>
<pre>
checkconfig --level 345 mysqld
</pre>
<h3>2. PHP を mysql モジュール付きでインスコしなおす</h3>
<p><a href="http://sakuratan.biz/archives/2492">前の記事</a>書いたときは、WordPress 使うとか考えて無かったので mysql モジュールを PHP に付けてコンパイルしてなかったので、configure からやり直します。また WordPress を動かすには zlib も必要ですので一緒に configure しなおします。</p>
<p>mysql-devel.x86_64 パッケージをインスコした後で、以下のようにリビルドしてください。</p>
<pre>
$ ./configure --with-libdir=lib64 --with-apxs2=/usr/sbin/apxs \
--with-mysql --with-mysqli --with-zlib-dir
# make
# make install
</pre>
<h3>3. WordPress 用にデータベースを作る</h3>
<p>共用鯖じゃないのでデータベースは WordPress 用に作ります。root で mysql にログインして以下のコマンドを実行します。</p>
<pre>
# mysql
mysql&gt; create database DBNAME default charset utf8;
mysql&gt; grant all on DBNAME.* to ''@localhost;
mysql&gt; revoke ALTER on DBNAME.* from  ''@localhost;
</pre>
<p>コマンドを実行する際は、DBNAME にはちゃんとしたデータベース名を指定してください。</p>
<p>この例では、新しく作ったデータベースには localhost からなら誰でもユーザー／パスワード無しでログインできるようにしています。mysqld 自体を外部から mysql に直接接続できるよう設定していませんし、<a href="http://sakuratan.biz/archives/2492">前の記事</a>で設定したパケットフィルタが mysql のポートを閉じてますので、ssh 等でシェルアカウントでログインしない限りデータベースにも入れませんので（アプリのバグとか除く）、通常これで問題無いと思います。</p>
<p>よりセキュアに仕上げたい方はユーザー／パスワード設定する等ご自由にどぞ。</p>
<h3>4. WordPress をインスコする</h3>
<p>WordPress のインスコ自体は普通ですので、<a href="http://ja.wordpress.org/">公式サイト</a>とか見てください。</p>
]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/2550/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>さくらの VPS の設定ダダ流し</title>
		<link>http://sakuratan.biz/archives/2492</link>
		<comments>http://sakuratan.biz/archives/2492#comments</comments>
		<pubDate>Sun, 08 Aug 2010 08:37:15 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[開発環境]]></category>
		<category><![CDATA[さくらの VPS]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=2492</guid>
		<description><![CDATA[さくらインターネットの VPS ベータ版に申し込んだのですが、このままだと放置したままベータテストが終わっちゃうような気がしたので、サーバの設定するついでにメモ残すことにしました。とりあえず用途が決まってないので思いついた順で作業してます。ということでダダ流しっすw やった作業は、パケットフィルタ（iptables）の設定、Apache2 のインスコと設定、Python-2.6.5 をソースからイ... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/2492">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>さくらインターネットの VPS ベータ版に申し込んだのですが、このままだと放置したままベータテストが終わっちゃうような気がしたので、サーバの設定するついでにメモ残すことにしました。とりあえず用途が決まってないので思いついた順で作業してます。ということでダダ流しっすw</p>
<p>やった作業は、パケットフィルタ（iptables）の設定、Apache2 のインスコと設定、Python-2.6.5 をソースからインスコ、PHP-5.2.14 をソースからインスコ、とそれに付随する作業です。</p>
<h3>1. まずぶっ壊れたときにどうしたら良いか調べる</h3>
<p>VPS とか言っても、普通に全権限があるリモートサーバですので、設定とか間違ったときにどこまで対処できるか調べとかないと色々まずいす。</p>
<p>とりあえずさくらインターネットから来たメールには、</p>
<blockquote><p>
《VPSコントロールパネルについて》</p>
<p>  VPSコントロールパネルでは、仮想サーバのリセットやリモート<br />
  コンソールでの接続、OSの再インストールを行っていただけます。</p>
<p>  VPSコントロールパネルは、会員メニュー内リンクからご利用いただけます。
</p></blockquote>
<p>とか書いてあるんですが、会員メニューが重いのもあって VPS コントロールパネルにたどり着くのにちょいちょい時間がかかってしまいましたが、[会員メニュー]→[契約情報]→[無料サービスの確認]から開けます。契約したら有料サービスの確認に移るんでしょうけど。</p>
<p><a href="http://sakuratan.biz/blog/wp-content/uploads/2010/08/sakuravps.jpg"><img src="http://sakuratan.biz/blog/wp-content/uploads/2010/08/sakuravps-300x170.jpg" alt="" title="VPS コントロールパネル" width="300" height="170" class="alignnone size-medium wp-image-2493" /></a></p>
<p>VPS コンパネはさくらのデフォルトで激重です。普通の鯖のコンパネと違ってちょっと今風デザインになってますが、ぶっちゃけ微妙な感じす。まあコンパネなんでデザインとかどうでもいいすが。</p>
<p>サイドメニューからリモートコンソールを選ぶとシリアル接続でサーバにログインできますので、なんか設定に失敗して ssh とかで外部からログインできなくなったときはここから直せます。ほんでもダメなら最悪 OS の再インストールからやり直すことになります。</p>
<h3>2. ログイン用ユーザーを作って ssh から root ログインできなくする</h3>
<p>root ログインできるままですとクラッキングの良い対象になりますので、外からログインする用のユーザーを作ります。</p>
<pre>
# useradd -m USER
# passwd USER
</pre>
<p>実際にコマンド入力するときは、USER 部分をユーザー名にしてください。</p>
<p>ユーザーを追加したら、そのユーザーで外部から ssh でログインできるか確認します。ログインできたら root で外部からログインできなくします。/etc/ssh/sshd_config に以下の設定を加えます。</p>
<pre>
PermitRootLogin no
</pre>
<p>コメントアウトされた PermitRootLogin が元からありますのでその辺に追加します。追加したら sshd をリスタートします。</p>
<pre>
# cd /etc/init.d/sshd restart
</pre>
<p>リスタートした時点で root で ssh にログインすることはできなくなりますので、設定漏れとかパスワードちゃんと控えたかとか確認してからリスタートした方が無難です。</p>
<p>後から設定間違ってたとか気づいたら VPS コンパネから root でログインしてください。（コンパネは ssh じゃありませんので、ここまでした設定には影響されません。）</p>
<p>ちなみにログイン用ユーザー作っただけですとセキュリティ的にはちょっと弱いですので、もっとセキュアにしたい方は ssh のパスワード認証を無効にして秘密鍵認証のみ有効にした方が良いと思います。説明面倒くさいのでその辺については割愛しますが、興味ある人は ggrks です。</p>
<p>最後に sudo 経由で root としてコマンド実行できるようにします。まず /etc/sudores の以下の行がコメントアウトされていると思いますので、コメント（#）を外します。visudo コマンドは入ってないっぽいので直接 vi で編集です。</p>
<pre>
%wheel  ALL=(ALL)       ALL
</pre>
<p>んでから /etc/group を開いて wheel グループに追加したユーザーを足します。usermod コマンドとかでいじくってもいいですが面倒なのでこっちも vi で直接編集しますた。</p>
<pre>
wheel:x:10:root,USER
</pre>
<p>なお以下の説明では、通常ユーザーでの作業のプロンプトを $、root での作業を # で書いています。前後に su とか sudo 入れて書いてませんが、実際にコマンド実行する時は必要ですのであしからず。</p>
<h3>3. パケットフィルタを設定する</h3>
<p>不要な攻撃受けたく無いのでパケットフィルタを設定します。（今んとこ大したデータ置くつもりも無いのでそんなセキュアにするつもりないですが一応。）</p>
<p>まず root でログインして（ログイン用ユーザーでログインしてから root に su して）、iptables コマンドでパケットフィルタの状態を確認します。デフォルトだとこんな感じになってると思います。</p>
<pre>
# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
</pre>
<p>今回のサーバは Web サーバとしてしか使うつもり無いので、パケットフィルタで 22番 (ssh) と 80番 (http) 以外のポートは外からは閉じます。（ssl を使う場合は 443 番ポートも開ける必要があります。）</p>
<p>まず iptables 初期化用のスクリプトを作ります。</p>
<pre>
#!/bin/sh

iptables -F
iptables -X

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 192.168.0.0/16 -j DROP

# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
</pre>
<p>このスクリプトでは icmp パケットに応答しないように設定しています。ping 通したい人はコメントアウトしてるそれ用に設定してください。</p>
<p>スクリプトができたらおもむろに実行します。スクリプトとして実行しないと（上のスクリプトを全部直接コマンド入力した場合） iptables -P INPUT DROP を実行した時点でサーバへの入力がすべてパケットフィルタにひっかかっちゃってにっちもさっちもいかなくなりますのでご注意ください。</p>
<p>とりあえず上のスクリプトを iptables-init.sh として保存したということで話を進めます。スクリプトに続けて iptables -L を実行し、パケットフィルタの状態を確認します。</p>
<pre>
# sh iptables-init.sh
# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
DROP       all  --  10.0.0.0/8           anywhere
DROP       all  --  172.16.0.0/12        anywhere
DROP       all  --  192.168.0.0/16       anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
</pre>
<p>確認できたら、現在のフィルタがシステムリブート時に同じ設定で有効になるように iptables-save コマンドを使って /etc/sysconfig/iptables に保存します。</p>
<pre>
# iptables-save > /etc/sysconfig/iptables
</pre>
<p>保存したら、保存した内容でパケットフィルタが有効になるように iptables スクリプトをリスタートします。</p>
<pre>
# /etc/rc.d/init.d/iptables restart
</pre>
<p>最後に chkconfig でリブート時に iptables が起動するように設定します。（たぶんこの設定はデフォルトで有効になってると思うんですが、作業始める前にその辺確認するの忘れてたのでよく分かりません＞＜暇だったら自分で調べてね、とw）</p>
<pre>
# chkconfig --level 2345 iptables on
</pre>
<h3>4. Apache2 をインスコする</h3>
<p>まず yum で Apache がインスコ済みか確認します。</p>
<pre>
# yum list installed | httpd
</pre>
<p>何も表示されんと思います。表示されたらインスコ済みです。yum list でインストール可能なパッケージの一覧表示、yum list installed でインストール済みのパッケージ一覧表示です。</p>
<p>インスコされてない前提で話進めます。</p>
<pre>
# yum install httpd.x86_64
</pre>
<p>で、インスコされました。Apache を動かします。</p>
<pre>
# /etc/rc.d/init.d/httpd start
</pre>
<p>ブラウザから IP アドレス指定で VPS にアクセスすると Apache 2 Test Page が表示されると思います。</p>
<p>表示できるのを確認したら、リブート時に起動するように chkconfig します。</p>
<pre>
chkconfig --level 345 httpd on
</pre>
<h3>5. Python-2.6 をインスコする</h3>
<p>とりあえずポックンは Pythonistan なので Python 入れます。</p>
<p>元から Python は入っているのですが、バージョン 2.4.3 とか使い物にならんぐらい古い感じなので（だから Cent OS 嫌いやねん(*´・ω・)(・ω・｀*)ﾌﾞｰ） Python-2.6 をソースからビルドしてインスコします。（stable は 2.7 なんすが、テスト環境と合わんのでw）</p>
<p>まずソースを wget でダウンロードします。</p>
<pre>
$ wget 'http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tgz'
</pre>
<p>てけとーにビルドします。特に問題無く終わると思います。</p>
<pre>
$ tar xvzf Python-2.6.5.tgz
$ ./configure
$ make
# make install
</pre>
<p>で、/usr/local/bin/python に 2.6 がインスコされます。あとで mod_python 入れる予定ですが今日はパスしますたw</p>
<h3>6. PHP をインスコする</h3>
<p>あった方が便利なので PHP もインスコします。yum からインスコしても良いのですが、バージョン古いので Python と同じくソースからインスコします。なお PHP はデフォルトでは入っていません。</p>
<p>ということでソースをダウンロードします。</p>
<pre>
$ wget 'http://www.php.net/distributions/php-5.2.14.tar.gz'
</pre>
<p>当然 Apache の SAPI として動かしますので、apxs が入ってるか先に調べます。</p>
<pre>
$ ls /usr/sbin/apxs*
ls: /usr/sbin/apxs*: No such file or directory
</pre>
<p>無さそうですので先に httpd-devel をインスコします。</p>
<pre>
# yum install httpd-devel.x86_64
</pre>
<p>ビルドします。</p>
<pre>
$ tar xvzf php-5.2.14.tar.gz
$ cd php-5.2.14
$ ./configure --with-apxs2=/usr/sbin/apxs
...
configure: error: xml2-config not found. Please check your libxml2 installation.
</pre>
<p>おおっとエラーだ。インド人を右に！！</p>
<p>とりあえず libxml2 が無いっぽいので、libxml2-devel.x86_64 をインスコします。</p>
<pre>
# yum install libxml2-devel.x86_64
</pre>
<p>再度 php の configure を実行します。</p>
<pre>
$ ./configure --with-apxs2=/usr/sbin/apxs
...
Thank you for using PHP.
</pre>
<p>おkのようですのでビルドしてからインスコします。</p>
<pre>
$ make
# make install
</pre>
<p>SAPI モジュールは /usr/lib64/httpd/modules/libphp5.so にインスコされます。/etc/httpd/conf/httpd.conf はインスコ時にかってに更新されますので Apache をリブートしたら有効になります。</p>
<pre>
# /etc/rc.d/init.d/httpd restart
</pre>
<p>なんか PHP のモジュールが色々足らん気もしますが、その辺は適当に足してください。</p>
<p>おしまい</p>
]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/2492/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>github アカウントを取ってからのメモ</title>
		<link>http://sakuratan.biz/archives/953</link>
		<comments>http://sakuratan.biz/archives/953#comments</comments>
		<pubDate>Sun, 28 Jun 2009 01:01:24 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[github]]></category>
		<category><![CDATA[開発環境]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=953</guid>
		<description><![CDATA[前から github にアカウント取りたいと思ってたのね。ソース置いたりするのに便利そうだし。でも何か git の使い方覚えたりとか色々と面倒っぽかったので延ばし延ばしにしてたのね。 で、やっと重い腰あげてアカウント取ってみたの。そしたらやっぱり色々と大変だったんでとりあえずメモっときます。 アカウントを取る時点では ssh 公開鍵は要らない。リポジトリを作る段階で要る。 ssh 公開鍵の作り方等... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/953">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>前から <a href="http://github.com/">github</a> にアカウント取りたいと思ってたのね。ソース置いたりするのに便利そうだし。でも何か git の使い方覚えたりとか色々と面倒っぽかったので延ばし延ばしにしてたのね。</p>
<p>で、やっと重い腰あげてアカウント取ってみたの。そしたらやっぱり色々と大変だったんでとりあえずメモっときます。</p>
<ol>
<li>アカウントを取る時点では ssh 公開鍵は要らない。リポジトリを作る段階で要る。
<p>ssh 公開鍵の作り方等については、<a href="http://github.com/guides/providing-your-ssh-key">http://github.com/guides/providing-your-ssh-key</a> と <a href="http://github.com/guides/addressing-authentication-problems-with-ssh">http://github.com/guides/addressing-authentication-problems-with-ssh</a> を最低限見といた方がいい。作り方知らない人は他の資料も見といた方がいいと思います。</li>
<li>*NIX 系のユーザはアカウント取ってから github で何かする前に、github 専用のユーザをローカルに追加しといた方が無難。特に git の使い方をマスターしてない人にお薦めします。</li>
<li>github のアカウントにアバター用の画像を設定するには <a href="http://ja.gravatar.com/">Gravatar</a> を使用する必要があり、そっちにもアカウント作る必要があります。
<p>Gravatar にアカウントが無い状態で github にアカウントを作ると、自動的に Gravatar にもアカウントが作成されるっぽい（<a href="http://wordpress.com/">wordpress.com</a> にアカウント作った時かもしんないけど、とりあえず登録した記憶の無いアカウントが Gravatar にあったw）。同じ状態になったら Gravatar のパスワード再申請を行ってログインすればいいと思います。</li>
<li>ssh-keygen で ssh 公開鍵を作成するときは、-C と -f オプションを付けといた方がいいかもしんない。
<pre>$ ssh-keygen USERNAME -C git@github.com -f git@github.com</pre>
<p>とオプション指定すると、~/.ssh/git@github.com と ~/.ssh/git@github.com.pub が作成され、git@github.com.pub 中のコメントが git@github.com になる。コメントの意味が分からない人は git@github.com.pub を開けば分かるはず。</p>
<p>ついでに ~/.ssh/config を以下の内容で作成しておくと、git@github.com へのログイン時には ~/.ssh/git@github.com が自動的に認証に使われるようになる（当然他のアカウント用の鍵も同じ方法で作成しとけば認証鍵の振り分けが行われる）。</p>
<pre>IdentityFile ~/.ssh/identity
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/%r@%h</pre>
</li>
<li>ssh 公開鍵を github に登録したら、以下のコマンドで認証できるか確認できる。
<pre>$ ssh -v git@github.com</pre>
</li>
<li>リポジトリを作ると、こんな感じで次に何をしたらいいかを丁寧に教えてくれるので良く読む。
<p><img src="http://sakuratan.biz/blog/wp-content/uploads/2009/06/git.png" alt="git" title="git" width="450" height="522" class="alignnone size-full wp-image-955 capture" /></p>
<p>ここに書かれてる Next Step が終わったら <b>Continue リンクを必ずクリックする必要がある</b>らしい。何でクリックする必要があるかは色々調べてる最中にどっかのブログにそういう風に書かれてたからとしか答えられないんだけど（どのブログか忘れちゃったw）、たぶん master ブランチが出来ないんじゃないかと思われ。</li>
<li>clone したローカルリポジトリをコミットしたら、git push で github にうpする。</li>
<li>UTF-8 ならコミットログに日本語を使える。ただし github のリポジトリの Network ページでは日本語は表示されない。
<p>vim ユーザーはこんな設定を .vimrc に足しとけばいい思います。</p>
<pre>autocmd FileType gitcommit setlocal fileencoding=utf-8</pre>
</li>
<li>github の Download 機能で作成されるアーカイブは、配布用には使えないと思う。</li>
<li>github の Wiki は、入力テキストを UTF-8 じゃなくて ISO-8859-1 として処理してるっぽい。日本語の入力自体はできるけど、意図しない場所でリンクになったりしてちょっと使えないような感じ。</li>
<li><strike>アップローダが使えなかった。さくらの環境の問題だと思うけど、Flash アップローダ使う必要無いんじゃない？と思った。</strike><br />
訂正：さくらの環境だとアップローダに Description を入力できなかった。</li>
<li>リポジトリは消せるらしい。<a href="http://github.com/guides/how-do-i-delete-a-repository">http://github.com/guides/how-do-i-delete-a-repository</a> 参照。</li>
<li>分からないことがあったら、とりあえず <a href="http://github.com/guides/home">http://github.com/guides/home</a> を見る。</li>
</ol>
<p><img src="http://sakuratan.biz/blog/wp-content/plugins/sakura-icons/icon4.png" width="160" height="160" border="0" style="border:0;float:left" /><br />
<strike>Wiki とアップローダ使えないのは致命的かもしんないわ…</strike><br />
訂正：Wiki 使えないぐらい別に問題ないわww<br />
<br clear="left" /></p>
<p>ちなみにさくらの github アカウントはこちら。</p>
<blockquote><p>
<a href="http://github.com/sakuratan/">sakuratan&#8217;s Profile &#8211; GitHub</a>
</p></blockquote>
<p>とりあえず今後ソースを公開するときはこれ使っていく予定です。</p>
<p>さくら</p>
<p>P.S. 記事公開後にアップローダが動くことが判明したので訂正しました。</p>
]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/953/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>さくらインターネット共有サーバ専用バックアップスクリプト</title>
		<link>http://sakuratan.biz/archives/866</link>
		<comments>http://sakuratan.biz/archives/866#comments</comments>
		<pubDate>Fri, 29 May 2009 10:37:32 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[開発環境]]></category>
		<category><![CDATA[さくらインターネット]]></category>
		<category><![CDATA[バックアップ]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=866</guid>
		<description><![CDATA[さくらです♡こんばんわ☆彡 ちょっと前にさくらインターネットで稼働中の鯖を撤去するとかふざけたミスがあったでしょ。幸いさくらはトラブルに巻き込まれなかったんだけど、何か起こる前にバックアップをしなきゃと思ったのね。なんで今日はさくらインターネットの共有サーバ専用バックアップスクリプトを作ってみました！！ とりあえずスクリプトはこっからダウンロードできまふw シェルスクリプトでっすww sakura... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/866">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>さくらです♡こんばんわ☆彡</p>
<p>ちょっと前にさくらインターネットで<a href="http://support.sakura.ad.jp/page/news/20090403-003.news">稼働中の鯖を撤去するとかふざけたミス</a>があったでしょ。幸いさくらはトラブルに巻き込まれなかったんだけど、何か起こる前にバックアップをしなきゃと思ったのね。なんで今日はさくらインターネットの共有サーバ専用バックアップスクリプトを作ってみました！！</p>
<p>とりあえずスクリプトはこっからダウンロードできまふw<br />
シェルスクリプトでっすww</p>
<blockquote><p>
<a href='http://sakuratan.biz/blog/wp-content/uploads/2009/05/sakurabackup.sh'>sakurabackup.sh</a>
</p></blockquote>
<p>いつも通りの MIT ライセンスだから煮るなり焼くなり好きにしてもらって構わないわよ〜</p>
<h2>設定</h2>
<p>スクリプトをダウンロードしたら、まずサーバの設定をスクリプトに書き込むの。ファイルをエディタで開いて以下のあたりを編集してね。ちなみにスクリプトの文字コードは ISO-2022-JP になってるから、メモ帳とかで開いたら文字化けすると思うわよ。</p>
<pre># バックアップファイル名。
# デフォルトは backup-YYYY-MM-DD.tar.gz になってます。
BACKUP_FILENAME=&quot;backup-`date '+%Y-%m-%d'`.tar.gz&quot;

# バックアップ対象のディレクトリとかファイルとか。
BACKUP_TARGETS=&quot;www&quot;

# MySQL のバックアップをするなら yes、しないなら no。
MYSQLDUMP=&quot;yes&quot;

# MySQL アカウント。上からユーザ名、パスワード、ホスト名、データベース名れす。
# 大文字部分を自分のアカウントのに変えてね。
MYSQLDUMP_USER=&quot;USERNAME&quot;
MYSQLDUMP_PASSWORD=&quot;PASSWORD&quot;
MYSQLDUMP_HOST=&quot;HOSTNAME&quot;
MYSQLDUMP_DBNAME=&quot;DBNAME&quot;

# MySQL のバックアップファイル名。
# 最終的にこのファイルも BACKUP_FILENAME にバックアップされますので
# 一時ファイル名みたいなものと思ってください。
MYSQLDUMP_FILENAME=&quot;mysql.dump&quot;

# mysqldump コマンド。
# MySQL4 を使ってる場合は mysqldump-4.0 に変更すること。
MYSQLDUMP_COMMAND=&quot;/usr/local/bin/mysqldump&quot;</pre>
<p>とりあえず設定しないといけないのは MySQL 関係の部分ね。一応さくらも WordPress 使ってるんで MySQL のバックアップをデフォルトで有効にしてあるの。そのままで良かったら MySQL のアカウントを設定してね。MySQL のバックアップが不要なら MYSQLDUMP=&#8221;no&#8221; に変えるだけで (アカウントとかは設定しなくて) OK よ。</p>
<p>自分でプログラムをインスコしてる人は BACKUP_TARGETS に適当にディレクトリとかファイルを足してもらったら、それもバックアップ対象になるわ。</p>
<p>設定が終わったらサーバの適当なディレクトリにアップロードしてね。vi とか使える人は先にアップしてからサーバ上で設定してもらってもいいわよ。とりあえず $HOME/sakurabackup.sh に置いたということで話を進めるわね。</p>
<h2>バックアップ</h2>
<p>ファイルをアップしたら ssh か telnet でサーバにログインしてスクリプトを実行するの。</p>
<pre>$ nice sh sakurabackup.sh</pre>
<p>これで BACKUP_FILENAME (デフォルトだと backup-YYYY-MM-DD.tar.gz) にバックアップファイルが出来上がるわ。後は sftp か ftp でバックアップファイルをダウンロードしたらバックアップ完了よ。</p>
<p>データ量にもよりますが、全部で5分程度の簡単なお仕事ですwww</p>
<p>あと一つ注意しとくけど、それなりに重いから注意っていうかちゃんと見ながら動かした方がいいと思うわよ。</p>
<h2>リストア</h2>
<p>tar と mysqldump でバックアップファイル作ってるだけだから、$HOME でバックアップファイルを展開して、mysql でダンプを戻せばリストアできる<strong>はず</strong>よ。</p>
<pre>$ tar xvzf backup-2009-05-29.tar.gz
$ mysql DBNAME < mysql.dump</pre>
<p><strong>はず</strong>っていうのは、サーバの設定とかがバックアップ時と同じならこれで戻るって意味。<strong>サーバが飛んだ時は</strong>たぶんサーバの一部が前と変わってるだろうから、自分で環境を色々いじくってる人は<strong>簡単には戻らない</strong>と考えといた方がいいと思うわよ。</p>
<p>いずれにしてもちゃんと戻ってるか確認しつつ作業する必要があるわね。そういう意味では今回説明した方法は、*NIX とか MySQL の基本的な操作方法を知ってる人向けかもね。でもバックアップなんてそんなものよ。やり方分かんなかったらサーバの使い方を覚えるか、もっと良さげなツールを自分で探すか、お金払って誰かにやってもらうことねww</p>
<p>さくら</p>
]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/866/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress をインストールしたさくらインターネットの共有鯖で MySQL4 から MySQL 5 に移行しつつ文字コードを EUC-JP から UTF-8 に変える方法</title>
		<link>http://sakuratan.biz/archives/577</link>
		<comments>http://sakuratan.biz/archives/577#comments</comments>
		<pubDate>Sun, 19 Apr 2009 17:18:28 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[開発環境]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[さくらインターネット]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=577</guid>
		<description><![CDATA[さくらです♪こんばんわ♡☆彡 やっとさくらの鯖も MySQL5.1 に対応したみたいだから移行してみたわ。 なんか WordPress も速くなるらしいし期待 ageage よね！ ついでにデータベースの文字コードを EUC-JP から UTF-8 に変更してみたの。 どこに書いてたか忘れてたけど、MySQL4 の UTF-8 はバグってるらしいって聞いてたから EUC-JP にしてたのね。でもト... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/577">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>さくらです♪こんばんわ♡☆彡</p>
<p>やっとさくらの鯖も MySQL5.1 に対応したみたいだから移行してみたわ。<br />
なんか WordPress も速くなるらしいし期待 ageage よね！</p>
<p>ついでにデータベースの文字コードを EUC-JP から UTF-8 に変更してみたの。<br />
どこに書いてたか忘れてたけど、MySQL4 の UTF-8 はバグってるらしいって聞いてたから EUC-JP にしてたのね。でもトラバが文字化けしたりする原因になってるっぽかったし、WordPress をもっとシャキシャキ動くようにしたいから前から UTF-8 に変更したかったんだけど、なんとなく伸び伸びになってたの。なんで今回一緒に片付けることにしたわ。</p>
<p>同じことしたい人も他にいるかもしれないから、やり方まとめとくわね。<br />
まず最初に全体的な流れを説明するわ。</p>
<ol>
<li>データベースのダンプを作成する</li>
<li>MySQL4 データベースを削除する</li>
<li>MySQL5 データベースを再作成する</li>
<li>データベースダンプをリストアする</li>
<li>WordPress の設定を変更する</li>
</ol>
<p>MySQLAdmin とか使ってもできると思うんだけど、わざわざネットワークトラフィック使う意味があんまりないから全部鯖上のシェルで操作するやり方を説明してるわよ。先に <a href="http://sourceforge.jp/projects/ttssh2/">TeraTerm</a> とか何でもいいからターミナルエミュレータを用意しといてね。ターミナルは UTF-8 を強制的に表示できるやつが便利だと思うわよ。</p>
<p>あ…そうそう、一ついい忘れてたんだけど、MySQL5 が使えるかは共有 SSL が使えるかとセットになってるはずだから、コントロールパネルのドメイン設定とかで SSL が使えるか確認してから移行作業するかどうか検討してね♡</p>
<p>あと以下の作業を始める前に、WordPress の wp-config.php のデータベースパスワードをコメントアウトするとかして WordPress を一時停止しといた方がいいと思うわ。じゃ頑張って！！</p>
<h2>データベースのダンプを作成する</h2>
<p>ダンプってのは丸まんま取り出したデータって意味でとらえて貰って構わないわ。データベースダンプの場合、CREATE TABLE とかデータベースを再作成するのに必要なデータ一式ってことよ。</p>
<p>ダンプを取るには <a href="http://dev.mysql.com/doc/refman/4.1/ja/mysqldump.html">mysqldump</a> コマンドを使うの。普段はバックアップを取るのに使うやつね。</p>
<p>ちなみに今、さくらインターネットの共有鯖には MySQL4 用の mysqldump-4.0 と MySQL5 用の mysqldump がインスコされてるはずなの。当然今回は MySQL4 から MySQL5 に移行するんだから、mysqldump-4.0 を使うのよ。ターミナルで鯖にログオンしたらこんな感じで実行するの。</p>
<pre>$ cd [どっか]
$ mysqldump-4.0 -u [USER] -h [HOST] [DBNAME] -p > mysql.dump
Enter password:</pre>
<p>[どっか] はどっか適当なディレクトリのことよ。別に HOME でも構わないわ。<br />
[USER] はデータベースユーザー名、[HOST] はデータベースホスト名、[DBNAME] はデータベース名ね。データベース初期化したときにさくらインターネットから教えてもらってるはずよ。</p>
<p>コマンドを実行したらパスワード入力待ち状態になるからちゃんと入力して。入力したら mysql.dump ってファイルにデータベースダンプが取れるわ。後で使うから大事に取っとくのよ。</p>
<p>え？ユーザー名とかが分かんないですって？<br />
よく今まで使ってこれたわね…悪いけど付き合ってらんないわww</p>
<h2>MySQL4 データベースを削除する</h2>
<p>さくらインターネットのコントロールパネルの [データベースの設定] から [データベースを削除] ボタンを押せば消せるわ。このキャプチャの下の方にあるボタンよ。</p>
<p><img src="http://sakuratan.biz/blog/wp-content/uploads/2009/04/dropdb.png" alt="データベースの削除" title="データベースの削除" width="520" height="301" class="aligncenter size-full wp-image-578" style="border:solid 1px gray" /></p>
<p>消す前に深呼吸でもして、手抜かりが無いか確認した方がいいと思うわ。<br />
もう後戻りできないところに来てるの、ワタシ達…<br />
<strike>一緒に元気な赤ちゃん育てましょ！！</strike></p>
<h2>MySQL5 データベースを再作成する</h2>
<p>データベースを消したらそのまま新しいデータベースを作ればいいわ。MySQL のバージョンが選べるようになってるから MySQL5.1 を選ぶのよ。</p>
<p><img src="http://sakuratan.biz/blog/wp-content/uploads/2009/04/createdb.png" alt="データベースの作成" title="データベースの作成" width="522" height="155" class="aligncenter size-full wp-image-579" style="border:solid 1px gray" /></p>
<p>ついでにデータベースのパスワードを変えとくのもいいわね。</p>
<h2>データベースダンプをリストアする</h2>
<p>リストアってのはダンプを元に戻すってことね。<br />
ちょっと今回は文字コードを変更する関係で、リストアする前にデータベースのデフォルト文字セットを UTF-8 に変更したりしてるわよ。要らない人はその辺<strike>もっとさくらにザーメン</strike>飛ばしちゃって。</p>
<p>リストアするには <a href="http://dev.mysql.com/doc/refman/5.1/ja/mysql.html">mysql</a> コマンドでダンプファイルを読みこめばいいの。とりあえずターミナルに戻ってコマンドを実行してちょうだい。<br />
後でログとか見たかったら <a href="http://www.linux.or.jp/JM/html/util-linux/man1/script.1.html">script</a> コマンドを先に実行しといたらいいと思うわ。これしとくと、typescript ってファイルにコマンドと結果全部が保存されるの。</p>
<pre>$ script
Script started, output file is typescript
$ mysql -v -u [USER] -h [HOST] [DBNAME] -p</pre>
<p>mysql コマンドを -v 付きで実行してるのは、後で \. コマンドでダンプを読み込む際に実行したコマンドを表示させるためね。これするとメッセージが大量に表示されるようになるから、バカでかいダンプファイル作ってる人は -v 付けない方がいいと思うわよ。<br />
で、MySQL データベースにログオンしたらまず \s コマンドで文字セットを見て頂戴。こんな感じで全部 ujis になってるんじゃないかしら？</p>
<pre>mysql> \s
[省略]
Server characterset:    ujis
Db     characterset:    ujis
Client characterset:    ujis
Conn.  characterset:    ujis
[省略]</pre>
<p>ujis ってのは EUC-JP のことね。とりあえず utf8 になってなかったら alter database コマンドで文字セットを変えるの。</p>
<pre>mysql> alter database [DBNAME] character set utf8;</pre>
<p>[DBNAME] はデータベース名ね。さくらインターネットの共有鯖ならユーザー名と一緒になってると思うわ。実行したら \s コマンドで再確認してね。</p>
<pre>mysql>\s
[省略]
Server characterset:    ujis
Db     characterset:    utf8
Client characterset:    ujis
Conn.  characterset:    ujis
[省略]</pre>
<p>Db characterset が utf8 に変わってると思うわ。これを確認してから \C [CHARSET] コマンドでクライアントと接続文字セットも utf8 に変えるの。</p>
<pre>mysql> \C utf8
Charset changed</pre>
<p>これで Client characterset と Conn.  characterset も utf8 に変わるはずよ。\s で再確認してちょうだい。<br />
本当は Client characterset はターミナルの設定に合わせて指定しないといけないんだけど、その辺は行間を読んでよねww</p>
<p>文字セットの変更が終わったらダンプをリストアするわ。\. コマンドを実行しちゃって！</p>
<pre>mysql> \. mysql.dump
[省略]
Query OK, 1 row affected (0.00 sec)
mysql> \q
Bye
$ exit
Script done, output file is typescript</pre>
<p>リストアしたら mysql はすぐ終了しちゃってもいいわよ。シェルからも exit してるのは script コマンドを終了させるためね。exit の代わりにCtrl-D でもいいわよ。</p>
<p>暇だったらここで typescript ファイルを見てみるのもいいと思うわ。<br />
まあさくら程度ブログで記事書いてる人はデータベースも結構大きくなってる思うから、目視で検査するのは無理っぽいんだけどね。<br />
どっちにしろ作業ログなんか気休め程度に思っといた方がいいわよ。<br />
この時点で何か問題見つけてももうどうにもならないんだからwww</p>
<h2>WordPress の設定を変更する</h2>
<p>WordPress の設定で最小限必要なのは、データベースが新しいホストに変わってるはずだからそれを直すことね。後、データベース再作成のときにパスワード変えたりとかしてたらそれも直さないといけないわよ。</p>
<p>一応今回は WordPress の移行に関する説明だからこの辺の詳細は省略するわね。詳しく知りたい人は <a href="http://ja.wordpress.org/install/">ja.wordpress.org の インストールガイド</a> でも見てね。</p>
<p>とりあえずこれで「MySQL4 から MySQL5 への移行 + WordPress の再設定 + MySQL の文字コードを EUC-JP から UTF-8 にする」は完了よ！<br />
さくらのやり方を参考にして失敗しても知らないけど、やる気のある人はトライしてみて！！！</p>
<p>さくら</p>
]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/577/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
