データベースをスマホに移殖する

termux および mariaDB をインストールしたスマホで、サーバー内のデータベースの最新テーブルを、自動的に取得するためのスクリプトです。

スマホ(ローカル)のローカルIP:127.0.0.1

サーバー(リモート)のIPアドレス:nnn.nnn.nnn.nnn

データベース名:ddddd(dddddは vocabulary と keyword という2つのテーブルを持っています。)

ユーザー名:サーバーのユーザー名、DBのユーザー名ともに uuuu

 

1)まずデーモンの二重起動を防ぐために、もしmysqldが走っていれば kill します。そして、mysqld&でバックグラウンドでデーモンを起動しなおします。デーモン起動とmysqlの起動が近い場合、しばしばエラーが発生しました。sleep文を挟んだり、デーモン起動と同期をとったりした方が良いかもしれません。

 

2)次に、ssh でサーバーに接続しmysqldumpを実行します。id_rsa.server という秘密鍵ファイルを用いてログインしています。

 

3)スマホの一時ファイルディレクトリ .../tmp へ、 scp を使用してダンプファイル *.sql をコピーします。

そして、mariaDB に対して *.sql を標準入力することによりテーブルを更新します。もしエラーが有ればエラーファイルに書き出されます。

 

4)エラーファイルが存在すれば termux:API の termux-notification に処理が移り、警告音とポップアップが表示されます。

 

5)最後に要らなくなったファイルを消去して、デーモンを kill して終了します。

#!/bin/bash
local_host="127.0.0.1"
remote_host="nnn.nnn.nnn.nnn"
DB="ddddd"
USER="uuuu"
error="/data/data/com.termux/files/home/error.txt"

# デーモンの初期化
kill `pgrep mysqld`
mysqld&

# データベース本体のダンプ
ssh ${remote_host} -l ${USER} -i ~/.ssh/id_rsa.server \
 "mysqldump ${DB} vocabulary > /home/user/work/DBback/vocabulary.sql;\
mysqldump ${DB} keyword > /home/user/work/DBback/keyword.sql"

# データベースのコピー
tmpdir="/data/data/com.termux/files/usr/tmp"
scp -i ~/.ssh/id_rsa.server \
 ${USER}@${remote_host}:/home/user/work/DBback/keyword.sql ${tmpdir}
scp -i ~/.ssh/id_rsa.server \
  ${USER}@${remote_host}:/home/user/work/DBback/vocabulary.sql ${tmpdir}

mysql -h ${local_host} -u ${USER} ${DB} < ${tmpdir}/keyword.sql 2> ${error}
mysql -h ${local_host} -u ${USER} ${DB} < ${tmpdir}/vocabulary.sql 2> ${error}

# エラー処理 if [ -s ${error} ] then cat ${error} |\ termux-notification \ -t "cn_copy.sh" --icon error exit fi # 終了処理 rm ${error}
rm ${tmpdir}/keyword.sql rm ${tmpdir}/vocabulary.sql kill `pgrep mysqld`

 

f:id:S_E_Hyphen:20201213160309j:plain

 

スマホでデータベースを持ち運べるようになりました。