termux および mariaDB をインストールしたスマホで、サーバー内のデータベースの最新テーブルを、自動的に取得するためのスクリプトです。
サーバー(リモート)の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`
スマホでデータベースを持ち運べるようになりました。