差分FTPを考える

WordPress(ワードプレス)のバックアップはデータベースのバックアップだけでは足りません。写真ファイルやプラグインもバックアップしたいところです。

さて、通常日次的なデータを他のサーバーにバックアップする場合、
tarでアーカイブして転送する、という方法が一般的です。

ところがこの方式はtarアーカイブするためのディスク容量とIOのリソースが必要です。
これが意外に馬鹿にならないです。

これを解決するためには、アーカイブせずにあるディレクトリ配下を全て転送することです。

しかしながらデフォルトのFTPコマンドでは*(アスタリスク)は使えませんし、ディレクトリの転送にも対応していません。

NCFTPコマンドを使えばディレクトリをそのまま転送することができます。

> put -R bar

試しにやってみましたが、とても便利だと感じました。

ところが、NCFTPで日次のバックアップをしようと考えた時、イマイチです。
なぜかといいますと、全てのファイルを転送してしまうからです。
出来たら、とあるディレクトリ配下のその日に更新されたファイルのみの転送をしたいところですよね。更新されたファイルがない日は何もしない、というのが理想です。

差分FTPを考える

実は昔一度作ったはずなのですが、紛失・・・。
というわけで作成したいと思います。

  1. 指定したディレクトリ配下のファイルリストを作る
  2. ファイルはcksumコマンドの実行結果を付与
  3. 前回のファイルリストと今回のフィアルリストを比べる
  4. ディレクトリリストを取得
  5. ディレクトリのみを送信先に作成する
  6. 変化のあるファイルのみを転送する

こんな動きでいいでしょう。

前回のファイルが存在しない場合は全てのファイルの転送となります。
また、日次実行前に削除されたファイルは転送先には残ってしまいます。が、これは仕様とします。

次回に続きます。

indiegalaの無料ゲームが何故かゲットできなかった件(Hrizon Shift)

indiegalaというサイトがあります。

https://www.indiegala.com
言わずと知れたsteamなどのゲームを安売りしているサイトです。鍵屋、とはちょっと違うようで、個人とのやり取りではありません。
ここで、たまにゲームが無料で配布されるのです。
と言うか知ってから毎日更新されています。もしかして毎日1つプレゼントされてるのでしょうか・・・?

今のところ3つもゲットしたのですが、一つゲットできませんでした。
どうも気になったのでこのことを書いておきます。

ライブラリに追加されない

9/17にHrizon Shiftというゲームが無料提供として公開されていました。

https://www.indiegala.com のストアの下の方に行くと
Mass GIVEWAY という表示があります。
そこのxボタンを押すと、Claim Free COPY というボタンが出てくるので、
これを押すと取得できるのです。

うまくいくとこんな画面が出ます。

ところがちっともライブラリに追加されません。
実はこの前にも他のゲームはゲットしているので間違いないはずです。
それでも何か間違っているのかと、3?4回は捜査をしたのですが、とうとう追加されず提供期限が終わってしまいました。

メール!

日本語対応はないでしょうが、少し気になったので、メールしてみました。返事は来るでしょうか ^^;

 

9月16日に[Hrizon Shift]が[Mass GIVEWAY]とあり
[Claim Free COPY]ボタンを押すと以下の表示が出ましたが、
待ってもライブラリに追加されませんでした。
[Please be patient, it may require up to 1 hour due to high traffic load.]
4?5回は試したのですが、駄目でした。
これはどういうことだったのでしょうか?

これを変換して、こんな感じで出してみました。

[Hrizon Shift]

Dear sales representative

[Hrizon Shift] is [Mass GIVEWAY] on September 16
When the [Claim Free COPY] button is pressed, the following display is displayed,
I did not add it to the library after waiting.

[Please be patient, it may require up to 1 hour due to high traffic load.]

I tried 4-5 times, but it was useless.

What was this like?

通じますかね 汗

何事も経験です!返事を待ちます!
——–
9/18 追記
返事が来ました。

Hi,

We are sorry but we have run out of keys for this giveaway.

Thank you.
こんにちは、

私たちは申し訳ありませんが、我々は、このプレゼントのためのキーが不足しています。

ありがとうございました。

ということでした。
期限内でもキーが尽きると上記のように画面が出てもキーが取得できないみたいです。
ま、無料なんだし文句言うなって感じかな・・・。

microSDカードリーダを買いました(2017)

カードリーダはいつの間にか増えていました。

一番左のタイプはいまだ見ると思います。
多分外装だけで、中身は違います。これは4GB以上を認識できません 笑
右から2番めのタイプがかなりオーソドックスなもので、今は逆にあまり見ませんね。
miniSD(知ってる?)、RS-MMC(知らない・・・)、xD(実物見たこと無い)
など、マイナーなメディアにも対応していますが、そもそも持っていないので意味はありません。本当に使えるかどうかも謎です 笑
で、今回買い足したのが一番右の100円ショップのカードリーダーです。
メモリースティックも読めますが、正直いらなかったです。
でもいま安いリーダーってこれくらいしか無いようです。amazonで見てみても売価は安くても手数料が500円!みたいのばかりなんですよね。

なぜ購入したかというと、一番常用していた左から2番めの「Dream Flash DF-CRW-1」が突然死したからです。著作権保護機能もついていたようですが、その機能は使ったことはありません。この機種の良かった点は省スペースで、USBのガイドすら無いので抜き差しにストレスがなかったことです。
意外と一番左のタイプのように、「これじゃ隣と干渉するだろうが!」という形状のリーダーが多いのです。隣の端子が使えなくなってしまいます。
一見新規購入のリーダーもこのタイプに見えるのですが・・・

こんな風にケーブルが伸びるタイプでなにげに干渉を回避しています。試しにラズパイでバックアップに使ってみましたが、問題なく終了しました。

ちゃんとしたのを買うなら

本来は、そろそろUSB3.0なリーダーを買いたいところですよね。
このような安めのリーダーだと最近のSDHCのハイスペックな性能をまったく発揮できません。でも、まあ、ラズパイ自体が対応していないので今のところ安物でも良いかもしれませんが、もしかするとラズパイ4で3.0に対応してくるかもしれませんね。

今だと、これが省スペースでいい感じ。ちょっと高めなので、今のところ必須アイテムってわけでもない(PCが対応してない・・・)ので、もう少し様子見ですけど・・・。

ラジコの録音、東京の放送を取得する一案(9 WEBアプリ

WEBアプリはPerlで簡単に組みました。
単に、mp3フォルダの中身をテーブル組にするだけのものです。
やってみるとわかりますが、ラジオって毎日だったりするのでどんどん溜まっていきます 汗
その為、デリートボタンを各録音ファイルの横に表示するようにしています。
クリックするとunlink(削除)します。削除をCGIから実行するのは結構危険なので、dustとか言うフォルダを作っておいて単に移動させるようにしても良いかもしれません。
実際の削除は時々ログインして自分で消すようにするのです。

#!/usr/bin/perl
use strict;
use CGI;
use Storable qw(nstore retrieve);

my $debug;

my $q=new CGI;
my @param=$q->param;
my %HASH;
for (@param){
$HASH{$_}=$q->param($_);
    $debug.=qq($_ , $HASH{$_} | );
}

my $mes;
if ( -f "./mp3/" . $HASH{'del'} ){
    unlink "./mp3/$HASH{'del'}";
    $mes=qq(./mp3/$HASH{'del'} を削除しました。);
}elsif( $HASH{'del'} ne "" ){
    $mes=qq($HASH{'del'} がありません。);
}

opendir DIR, "mp3";
my @files =
reverse( grep ( /mp3|aac/, readdir DIR ));
close DIR;
#フィルタ
if ( $HASH{'a'} ne "" ){
    @files = grep /$HASH{'a'}/i , @files;
}
my $src;
for my $var (@files){
    $src.=qq(<tr><td><a href="./mp3/$var">$var</a></td><td><button onclick='test("$var")' style="WIDTH:50px; HEIGHT: 20px">del</button></td></tr>\n);
}

if ( -d "debug.flg" ){
    $debug=$debug . "\n<hr>\n";
}else{
    $debug="";
}
print "Content-type: text/html\n\n";
print <<HTML;
<html lang="ja">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
  <title></title>
<script type="text/javascript">
<!--
function test(msg){
  var element = document.getElementById("1");
  element.value = msg;
}
function ReloadAddr(){
  window.location.reload(); //ページをリロード
}
-->
</script>
</head>
<body>$debug
$mes
<form action="rj.cgi" method="post">
  <input type="text" name="del" size="30" id="1"><input type="submit" value="削除">
  <button onclick='ReloadAddr' style="WIDTH:50px; HEIGHT: 20px">reload</button>
  <a href="#endjump">一番下へ</a>
</form>
<table border="1" cellpadding="0">
$src
</table>
<form action="rj.cgi" method="get">
  <input type="text" name="a" size="30" value=$HASH{'a'}>
  <input type="submit" value="フィルタ"><a name="endjump"><a href="#top">TOP.</a></a>
  <input type="reset" value="riset">
</form>
</body>
</html>
HTML

ラジコの録音、東京の放送を取得する一案(8 録音スクリプト

サーバー接続してトークンを取得して録音するスクリプトを作ります。

大部分はネットから拾ってきたコードです。色々手を入れています。
とくに「get torken from server」の部分です。
ここで、クライアントを使って、サーバーにトークンを取りに行っています。

クライアントはこちら↓
サーバークライアントを試す

あと一部「mp3」と書いてありますが、aacのママとしています。
この方が音質もよくファイルサイズも小さいからです。これは知った時驚きました。
ファイルサイズは約3分の1で、しかもエンコードする時間も不要です。

また出力先を別で指定しているのは、
webアプリで簡単に視聴できるようにするためです。

#!/bin/sh

# TBS:TBSラジオ
# QRR:文化放送
# LFR:ニッポン放送
# NSB:ラジオNIKKEI
# INT:INTER FM
# FMT:TOKYO FM
# FMJ:J-WAVE
# JORF:ラジオ日本
# BAYFM78:bayfm78
# NACK5:NACK5
# YFM:FMヨコハマ

if [ $# -eq 3 ]; then
  OUTFILEPREFIX=$1
  RECTIMEMIN=$2
  CHANNEL=$3
else
  echo "usage : $0 OUTFILEPREFIX RECTIMEMIN CHANNEL"
  exit 1
fi

OUTFILEPREFIX=$1
RECTIMEMIN=$2
CHANNEL=$3

RTMPDUMP=/usr/local/bin/rtmpdump
FFMPEG=/usr/bin/ffmpeg
MP3PATH=[mp3を吐き出したいディレクトリ]

OUTFILEBASEPATH=[処理を実行するディレクトリ]
OUTFILENAME=${OUTFILEBASEPATH}/${OUTFILEPREFIX}_`date +%Y-%m-%d`
FLVFILEEXT=".flv"
AACFILEEXT=".aac"
MP3FILEEXT=".mp3"

MARGINTIMEMIN=1
RECTIME=`expr ${RECTIMEMIN} \* 60 + ${MARGINTIMEMIN} \* 2 \* 30`

# 30sec wait
echo "===== `date` Wait 30sec. ====="
for f1 in 2 1 0
do
  for f2 in 9 8 7 6 5 4 3 2 1 0
  do
    echo -n "$f1$f2\r"
    sleep 1
  done
done
echo `date` Start.

#開始時刻
START=`date +%s` 

cd ${OUTFILEBASEPATH}

playerurl=http://radiko.jp/player/swf/player_3.0.0.01.swf
playerfile=./player.swf
keyfile=./authkey.png

#
# get player
#
if [ ! -f $playerfile ]; then
  wget -q -O $playerfile $playerurl

  if [ $? -ne 0 ]; then
    echo "failed get player"
    exit 1
  fi
fi

#
# get keydata (need swftools)
#
if [ ! -f $keyfile ]; then
  swfextract -b 14 $playerfile -o $keyfile

  if [ ! -f $keyfile ]; then
    echo "failed get keydata"
    exit 1
  fi
fi

#
# get torken from server
#
CRIENT=`./client.pl $CHANNEL`
echo $CRIENT
authtoken=`echo $CRIENT| cut -d ' ' -f2`

#
# rtmpdump
#
RETRYCOUNT=0
while :
do
  ${RTMPDUMP} -v \
              -r "rtmpe://f-radiko.smartstream.ne.jp" \
              --playpath "simul-stream.stream" \
              --app "${CHANNEL}/_definst_" \
              -W $playerurl \
              -C S:"" -C S:"" -C S:"" -C S:$authtoken \
              --live \
              --flv ${OUTFILENAME}${FLVFILEEXT} \
              --stop ${RECTIME}
  RET=$?
  #録音終了
  END=`date +%s`
  SS=`expr ${END} - ${START}`
  if [ $SS -gt `expr $RECTIME - 30` ] ; then
      echo "OK... " $SS " > " $RECTIME "(-30)"
      
  else
      echo "NG... " $SS " <= " $RECTIME "(-30)" NOKORI=`expr $RECTIME - $SS` echo ./simple_rec_radiko.sh $OUTFILEPREFIX $NOKORI $CHANNEL # ------- echo *------------------- RECOVERY START ------------------------* echo *------------------- RECOVERY START -----`date`-------------* >> err.log 2>&1
      ./mail_err.sh
      ./simple_rec_radiko.sh $OUTFILEPREFIX $NOKORI $CHANNEL >> err.log 2>&1 &
      echo *------------------- RECOVERY E N D -----`date`-------------*
  fi

  if [ $RET -ne 1 -o `wc -c ${OUTFILENAME}${FLVFILEEXT} | awk '{print $1}'` -ge 10240 ]; then
    echo RETURN ... $RET 
    echo `wc -c ${OUTFILENAME}${FLVFILEEXT} | awk '{print $1}'`
    break
  elif [ ${RETRYCOUNT} -ge 5 ]; then
    echo "failed rtmpdump"
    exit 1
  else
    RETRYCOUNT=`expr ${RETRYCOUNT} + 1`
  fi
done

echo `date` MP3 Encode Start.

${FFMPEG} -y -i "${OUTFILENAME}${FLVFILEEXT}" -vn -acodec copy "${OUTFILENAME}${AACFILEEXT}"
# ${FFMPEG} -y -i "${OUTFILENAME}${FLVFILEEXT}" -acodec libmp3lame -ab 128k "${OUTFILENAME}${MP3FILEEXT}"

echo `date` MP3 Encode E n d.

# mv ${OUTFILENAME}${MP3FILEEXT}   ${MP3PATH}
mv ${OUTFILENAME}${AACFILEEXT}   ${MP3PATH}

rm -f ${OUTFILENAME}${FLVFILEEXT}

echo "===== `date` E n d. ====="

ラジコの録音、東京の放送を取得する一案(7 サーバーを常時起動させるには

これで万事解決と思いたいですが、
サーバーが起動していないと、このスクリプトは動作しないです。
通常はバックグラウンドで起動させればずっと動いているはずです。
が、さくらインターネットのベーシックプランでは、あまり長い間プロセスが動いているとkillされてしまいます。
?一度暴走させて、「すべてのスクリプトを止めた」というメールが来てひやりとしました^^;?

また、長時間起動しっぱなしの時、プロセスは残っているのに返答がない、という状況が起きました。
それほどのリソースを食うスクリプトではないですが、何か対策は必要です。

起動スクリプト

こんな感じで作ってみました。

#!/bin/sh
export PATH=/home/xxxx/perl5/bin:/home/xxxx/local/bin:$PATH

# server running check.
ST=`ps ax|grep server|grep -v grep`
# running...0 stop...1
RUN=$?

#PID
PID=`echo $ST| cut -d ' ' -f1`

Msg(){
    echo `date '+%Y/%m/%d %H:%M:%S'`	$1
}

if [ $# -eq 0 ];then
    # Status
    if [ $RUN -eq 0 ] ;then
        Msg "running.($PID)"
    else
        Msg "stop." 
    fi
    #
else
    if [ $1 = "start" ] ;then
        Msg "to start." 
        if [ $RUN -eq 0 ] ;then
            Msg "already running.($PID)"
        else
            ./server_token.pl &
        fi
        
    elif [ $1 = "stop" ] ;then
        Msg "to stop." 
        if [ $RUN -eq 0 ] ;then
            kill $PID
        else
            Msg "already stop.($PID)"
        fi
    elif [ $1 = "restart" ] ;then
        Msg "restart." 
        if [ $RUN -eq 0 ] ;then
            kill $PID
            Msg "stop."
            sleep 1
            ./server_token.pl &
        else
            Msg "already stop.($PID)"
            ./server_token.pl &
        fi
    else
        echo "usage : $0 [start|stop|restart]"
    fi
fi

まずexportコマンドでユーザーディレクトリにモジュールをインストールしてあるパスを設定します。

サーバーが起動しているかどうかは、psコマンドでserverという文字列があるかどうかで確認しています。
もちろんserverという名前を含む別プロセスがあると誤作動します。ここは注意が必要です。

引数が0の場合にはstatusとなります。PIDか停止しているかを表示して終わります。

あとはstart、stop、resutartに応じて動作します。
起動するときには
./server_token.pl &
のようにしてバックグラウンド起動しています。

restartは録音を失敗したくない番組の5分前に実行しています。

startは落ちている場合に起動する、という動作になっているので、5分おきに起動しています。

どちらもcrontabにて設定をしてあります。

 

ラジコの録音、東京の放送を取得する一案(6 サーバークライアントを試す

感覚的にはWEBサーバーを介したほうが簡単そうです。
けど、今回はソケットを使います。勉強のためです。

とはいえ、あまり時間を書けて1からやっても仕方ないので、
文明の利器、検索を使います 笑

ものすごく有用なページがヒット。

ソケットによる通信を行う

このサンプルをつかわせてもらいましょ。

動作検証

こういうときは、とりあえず、コードを借りてきて自分の環境で動作させてみます。

サーバー起動

クライアント起動

”Hello”とサーバーに送信

”Hello”をサーバーで受取、”echo:Hello”と返す

サーバーからの応答”echo:Hello”を表示

という流れです。
クライアントから何か文字列を送り、サーバーはそれに対して加工してクライアントに返しています。
これを改造すれば、

クライアントから「局ID」を送信し、トークンをサーバーから受信する

ということが簡単にできそうですね。

サーバーはこのようにしました。

#!/usr/bin/perl

use strict;
use warnings;
use Socket;
use Fcntl qw(:flock);

# 2. 受付用ソケット情報の作成
my $local_port = 9000;

#ロック
open  LOCK , "+>" , "./serverlock.${local_port}";
if ( flock LOCK ,LOCK_EX|LOCK_NB ){
    print "OK LOCK!\n";
}else{
    print "NG LOCK!$!\n";
    exit ;
}

# サーバ
# 1. 受付用ソケットの作成
my $sock_receive;
socket($sock_receive, PF_INET, SOCK_STREAM, getprotobyname( 'tcp' ))
  or die "Cannot create socket: $!";

my $pack_addr = sockaddr_in($local_port, INADDR_ANY);

# 3. 受付用ソケットと受付用ソケット情報を結びつける
bind($sock_receive, $pack_addr)
  or die "Cannot bind: $!";

# 4. 接続を受け付ける準備をする。
listen($sock_receive, SOMAXCONN)
  or die "Cannot listen: $!";

# 5. 接続を受け付けて応答する。
my $sock_client; # クライアントとの通信用のソケット

while (accept( $sock_client, $sock_receive )) {
  my $content;
  
  # クライアントからのデータの読み込み
  while (my $line = <$sock_client>) {
    $content .= $line;
  }

  my $ret=`./token_radiko.sh $content`;
  
  # クライアントへのデータの書き込み
  print $sock_client "$ret";
  close $sock_client;
}

一応ロック機構を付けました。なくても良いかもしれません。
そして、返却文字列を前述したトークン取得のシェルスクリプトにしました。

トークンだけ取得

 

クライアントはこんな感じ

#!/usr/bin/perl

use strict;
use Socket;

my $CH="";
if (@ARGV == 1){
    $CH=$ARGV[0];
    }else{
        print "usage : ./$0 [CHANNEL]\n";
        exit 1;
}

# クライアント
# 1. ソケットの作成
my $sock;
socket($sock, PF_INET, SOCK_STREAM, getprotobyname('tcp' ))
or die "Cannot create socket: $!";

# 2. ソケット情報の作成
# 接続先のホスト名
my $remote_host = 'domein.com';
my $packed_remote_host = inet_aton($remote_host)
or die "Cannot pack $remote_host: $!";

# 接続先のポート番号
my $remote_port = 9000;

# ホスト名とポート番号をパック
my $sock_addr = sockaddr_in($remote_port, $packed_remote_host)
or die "Cannot pack $remote_host:$remote_port: $!";

# 3. ソケットを使って接続
connect($sock, $sock_addr)
or die "Cannot connect $remote_host:$remote_port: $!";

# 4. データの書き込み
# 書き込みバッファリングをしない。
my $old_handle = select $sock;
$| = 1;
select $old_handle;

print $sock $CH;

# 書き込みを終了する
shutdown $sock, 1;

# 5. データの読み込み
my $cnt=0;
while (my $line = <$sock>) {
    print "$cnt $line";
    $cnt++;
}

# 6. ソケットを閉じる
close $sock;

チャンネルIDを引数にして実行するだけです。
これでクライアントにいながら、さくらインターネットで取得したトークンだけを得られます。

ラジコの録音、東京の放送を取得する一案(5 さくらインターネットでトークンを得る

トークンをさくらインターネットで取得すれば東京の放送を録音できそうです。
しかしいくつかモジュールが足りません。
ですが、ホームディレクトリにインストールすることで解決できます。

swftoolsのインストール

http://www.swftools.org/download.htmlから最新版をダウンロードします。

最新版は 2013-04-09の swftools-2013-04-09-1007.tar.gzのようでしたが、
私は一つ前のにしました。
最新版も結構前ですから、2013年版でも問題ないと思います。

$ wget http://www.swftools.org/swftools-0.9.2.tar.gz

コンパイルします。

$ ./configure --prefix=$home/local
$ gmake
$ gmake install

 

makeだと通らなかったので、gmakeを使いました。

base64のインストール

最新版はエラーに成ってしまいました。
よって古いバージョンにしました。
最新版でも成功するなら良いと思います。

ダウンロードします。

$ wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.10.tar.gz

解凍してコンパイル。

$ tar zxfv ~/download/coreutils-8.10.tar.gz
$ cd coreutils-8.10/
$ ./configure --prefix=$home/local
$ make
$ make install

 

これでOKです。

多分設定してあると思いますが$homeを確認してから実行するようにしてください。

echo $home

 

ワードプレスのリストア後のドメイン変更

mysqlのデータベース上のドメインを移行先のドメインに変更しないと正常に動作しません。
予め設定でドメインを変更すればいいのかもしれませんが、
突然ドメインが使えなくなったり、既に変更が可能ではない状態では困ってしまいます。

データベース上のデータをいじってドメインを変更する

CGIをダウンロードします。

こちら
Database Search and Replace Script in PHP

私がダウンロードしたのは
Search-Replace-DB-3-1-0-emaildownloads.zip
でした。
ダウンロードのリンクはサイトにはなくって、メールを登録すると
後からメールにダウンロードリンクが送られてくる形式です。
ちょっとスパムが心配ではありますが、私はメインのアドレスを書いちゃいました。もうめんどくさくて・・・。

これを解凍して、当該ワードプレスのフォルダの中に入れます。
それでWEBからアクセスするとこんな画面が出ます。

どういう仕組なのか、databaseの欄ははじめから入っていました。直下のフォルダだと設定を読み込むのかな??

  • name・・・データベース名
  • user・・・データベースのユーザー名
  • pass・・・データベースのパスワード
  • host・・・データベースのホスト名

ポート番号はデフォルトです。

重要なのは一番上のreplaceの部分です。
左側に元のドメイン、右側に新しいドメインを書きます。

私の場合は「m-ynko.azi2.com」「res.azi2.com」と書きました。
regexは正規表現のオプションですが、とくに必要ないと思います。

actionの「update detail」を押してみます。何も変化がないように思います・・・

次に「dry run」を押します。

こんな風に対象が出てきます。
さらに「live run」をおします。

これで、うまく成功していれば、データベースの書き換えが完了します。

多分、新しいドメインでアクセスすればワードプレスのWEBページが表示されるはずです。

写真やプラグインやテーマ

データベースだけを復旧しても写真もプラグインもテーマも復活しません。
ファイルがない!、というエラーがたくさん出ます。
これを移行するには単にファイルを移せばいいだけです。

wp-contentのなかの

  • themes
  • plugins
  • uploads

をコピーするだけ。
はじめはコピーだけで認識されるのか不安でしたが、
管理はデータベースの中でやっているようなので、単にファイルを戻しただけで復活しました。
ちょっと自由度の低さを感じましたが、移行という意味ではやりやすいかもしれませんね。

 

WordPressワードプレスのリストア

バックアップファイルからリストアしてみます。

まずは、新規にインストール

おさらいも兼ねて、まずは新規にインストールを行います。

まずはドメインの設定ですが、今回は実験ですのでサブドメインにしました。

res.azi2.com というドメインを www/restore というパスに設定しました。

次に新規でデータベースを作ります。***_restore としました。

www/restore というフォルダを作ってWordPressをインストールします。

$ mkdir restore
$ cd restore/

ワードプレス本体をダウンロードします。

$ wget?https://ja.wordpress.org/wordpress-4.8.1-ja.tar.gz

解凍します。

$ tar -zxvf wordpress-4.8.1-ja.tar.gz

restoreの直下に中身を移動させます。

$ mv -i wordpress/* .

webからアクセスします。

http://restore.azi2.com

あとは指示に従えばインストールは完了します。

DBのリストア

バックアップしたsqlファイルからリストアします。

mysql -h mysql***.db.sakura.ne.jp -uアカウント -pパスワード データベース名 < dump.sql

800文字程度の記事が100以上ありますが、一瞬で終了します。
この時、他のデータベースの上書きは絶対にしてはいけません!上書きするので消えますよ。
コマンドを実行するときは一度エディタに書き出してよく確認してから実行すること。
また、他のデータベースもすべてバックアップを行ってから実行するのが万全です。

さて、これで、リストアできた・・・はずなのですが、そうは行きませんでした。
先程のres.azi2.comに接続しても真っ白い画面になってしまいつながりません。
仕方ないので、http://res.azi2.com/wp-login.php に直接アクセスすると・・・
なんと、もとのhttp://m-ynko.azi2.comに飛ばされてしまいます。
設定そのものがデータベースに書かれてしまっているため、移行前にドメイン設定を変えるか、移行先に同じドメインで移行するなら、これでOKです。

しかし今回の場合は別ドメインへのリストアなので、もうひと工夫必要となります。