しがないエンジニアのブログ

技術的な内容をメモ代わりにつらつら

mysqlで指定したtableを削除する方法

mysql -h ホスト名 -u ユーザ名 -pパスワード -D test_database -e 'show tables' -s | egrep 'test' | xargs -I '@@' echo mysql -h ホスト名 -u ユーザ名 -pパスワード -D "test_database -e 'DROP TABLE @@'"

参考
mysql - MySQLでテーブルを全て、または正規表現で指定して削除する方法 - スタック・オーバーフロー

キャッシュについてのあれこれ

弊プロジェクトでは3種類のキャッシュを利用していて、違いがわからなかったので調査したものをまとめました

memcached

key-value store型のキャッシュ
主にRDBMSにおけるクエリの結果などを保存しておく
揮発性が高い?

0001-01.png
from: http://gihyo.jp/dev/feature/01/memcached/0001

キャッシュクリア方法

/etc/init.d/memcached restart

CDN(Content Delivery Network)

様々なところにサーバを配置して、ネットワーク的に(≒物理的に)距離が近いサーバからキャッシュを取得する
これによって、

  • 地域によってレスポンスが遅くなるような状況を防ぐ
  • 処理の負荷分散

を実現する

キャッシュクリア方法

webページで操作して削除
弊pjではcurlコマンドを叩くことでcui上で操作している

APCU(Alternative Php Cache(APC) User cache)

APCがAPCuとZend OPcacheに取って代わられたワケ - Qiita
PHPのキャッシュ
webサーバ(apache, nginxなど)にキャッシュが保存される

キャッシュクリア方法

gracefulをする

# apache
service httpd graceful
/etc/init.d/httpd graceful

# nginx
service nginx graceful
/etc/init.d/nginx graceful

「/etc/init.d/xxx start」と「service xxx start」の違い
service xxxを使ったほうがよさげ?

APCUはwebサーバ上にあるので、restartすると一時的にサーバに接続できなくなってしまう
なので、かわりにgracefulを利用する

※gracefulの仕組み

すべての子プロセスの処理後に、再起動命令を走らせる
その後、親プロセスは設定ファイルの再読込を実行
これにより、サーバーがダウンすることなく、あたかも生きたまま設定の反映ができるようになる

補足:apache, nginx 

webサーバのOSS
webサーバとして利用するマシンにインストールして、ホスティングを行う
昔はapacheが主流だったが、最近(2016くらいから?)はnginxも主流になりつつある
apache, nginxを再起動したら、apucキャッシュは削除される

ApacheとNginxについて比較 - Qiita

twitterのOAuth認証ではまったこと

最近twitter APIを使ってOAuth認証しようとしたら、以下のようなエラーが出てハマった。

Callback URL not approved for this client application.

これは、callback URLが間違ってるよみたいなこと
2018.6.13以降はちゃんと対応させないとだめになった
なので、アプリ登録したページから、以下のcallback URLを設定
https://developer.twitter.com/en/apps

f:id:turgure:20180907222004p:plain

その後、ソースを変更

twitter.getOAuthRequestToken("app://");

AndroidManifest.xmlも設定してたら変更

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="app" />
</intent-filter>

これでヨシ


参考URL