macOSにMongoDBインストールしてmongoコマンド実行

環境

MacOS 13.5

インストール
$ brew install mongodb-community
$ brew install mongodb-community-shell
※〜-shellをインストールしないとmongoコマンドが使えない模様

mongo起動$ brew services stop mongodb-community

mongo停止
$ brew services start mongodb-community

mongoシェル
$ mongo                                                                         
MongoDB shell version v5.0.17

Redisのデータを画面で簡易的に操作できるphpRedisAdminをCentOS7+nginxにインストール

いままでphpスクリプトで、redisのデータをいじっていましたが、

さすがに大変なので、GUIで確認できるツールがないかと探したらありました。

phpMyAdminならぬ、phpRedisAdmin

簡易的にRedisのデータを確認・変更・削除したいなら便利かも!

で、早速インストール方法

こちらの環境で導入した際のメモ ..φ(..)メモメモ

  • CentOS7
  • nginx + php-fpm

おおもとのドキュメントはこちら(こっちみればええやん汗)

https://github.com/erikdubbelboer/phpRedisAdmin

1. ソースを落とす


git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git cd phpRedisAdmin git clone https://github.com/nrk/predis.git vendor

当たり前かもだけど、vendorもcloneしてね

2. あとはドキュメンルートに設定して、ブラウザから見れるようにと、アクセス制限

下記は、/etc/nginx/conf.d/〜〜.conf等に設定


server { listen 80; server_name phpredisadmin.hogehoge.com; root /usr/share/nginx/hoge/; index index.html index.htm index.php; location /phpRedisAdmin { allow アクセス元IP; deny all; } }

SQLite3の.sqlite3ファイル操作中の挙動メモ

最近ゲームサーバーのランキングデータを、

簡単に扱えるSQLite3を使って運用した際に、びっくりした挙動もメモ。

即席で作ったのでベタソース2枚のみw

構成

  • SQLite3のsqlite3ファイルをマスター用とスレーブ(読み取り専用)用の2つ用意し、
  • Redisをキャッシュ&集計処理用として利用をしていて。

下記のようなアクセスが秒間で数十あり。


// redisから現在のスコア取得 $currentScore = $redis->hGet('score', $_user); // SQliteで現在順位を取得 $pdo = new PDO('sqlite:db.sqlite3', "", ""); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare("SELECT * FROM rankTable order by abs( ? - score) limit 1"); $stmt->execute([$currentScore]); $searchRank = $stmt->fetch();

毎回ソートとする集計はさすがに重いので、

下記のようなバッチソースをcronで一定間隔で集計。


// sqlite3ファイル上書きコピー if( copy($MasterDbFile, $ReadDbFile) ){ echo "db 上書きOK"; }else{ alertPush("sqlitecopy エラー"); }

このsqlite3ファイル、、毎回copyで上書きしている、、、!!!!
なのに、ReadDbFileのsqlite3ファイルへの接続は、、、

なんと生きているんす、、!!!

普通にselectで検索できちゃってます。。!

コピー中にアクセスしてもエラーにならない、、ロック処理みたいのがはたらいるのかな。。特に意識せずにやってけど、、

実際数十万のスコアデータランキングを格安(月額1000円未満の1台)サーバーでやって一度もエラーになっていませんでした(今のところ)wすごい

MySQL 『ロック関連』の入門メモ

たまにしか使わないので、よく忘れてしまうMySQLのロック処理。

この機会メモ!

mysqldump 時にread lock (読み込みのみ許可)をする際は、下記オプションをつける。


mysqldump -u root -p --lock-all-tables -A > dump20110120.sql

「–lock-all-tables」 = FLUSH TABLES WITH READ LOCKと同じ。(全テーブルをreadロック)

テーブルをreadロック


mysql> LOCK TABLES friends READ; READロックを取得

mysql> LOCK TABLES friends WRITE; WRITEロックを取得

mysql> LOCK TABLES table_a READ, table_b WRITE; 複数のテーブルを同時にロック

テーブルのロックを解除する場合は、以下のようにする。


mysql> UNLOCK TABLES;

※ロック中は、挙動としてselectやupdateをした際に、ロックがはずれるまで応答をまつ。

MySQLを停止できないし、起動もできなくなった時のメモ

いきなり、MySQLを停止できないし、起動もできなくなった時のメモ

“SQLSTATE[HY000] [1040] Too many connections”

というエラーがでて調べてみた。


mysql> show full processlist;

するとmysqlのプロセスが大量に残っている。

max clientsの上限まで立っているエラーでした。

この方法はmysqlというよりは単にプロセスを殺して解決した際のメモなので、
参考程度でお願いします(^_^;)


# service mysqld stop mysqld を停止中: [ OK ]

となるが実際はまだ起動中


# /etc/init.d/mysqld status mysqld (pid 20022) を実行中...

いくたstopコマンドをうってもダメ。


# service mysqld start

では失敗となる。

CentOS6.5のプロセスを確認すると

# ps -xaf | grep mysql

mysqldプロセスが残っている。

思い切って、プロセスを削除


# kill 対象プロセスid

これでも消えない。

もういいやと思い、強制的にプロセス削除


# kill -9 対象プロセスID

さすがに停止した。

で、
service mysqld start

すると、、また失敗。

で、サーバーの容量を疑いました。
最近容量いっぱいで、不要ファイル削除したばっかだよな。。とおもいつつ、
確認してみるとまた、、、


# df -h

100%使いきってました。。汗

不要なファイルを削除して、

再度


# service mysqld start

成功しました!・・・あああ
とてつもなく初歩的

参考にさせて頂いたサイト
http://beyondjapan.com/blog/2016/03/mysql-stop-start-issues

php7にしたらphp7からRedisが呼び出せなくなった時のメモ

よくある下記からphpからredisを使えるようにする処理のところで、

$redis = new Redis();

こういうphpエラーがでる。

PHP message: PHP Fatal error:  Uncaught Error: Class 'Redis' not found in /usr/share/nginx〜

今回の環境構成は、

yumで、全てインストールできるようにこだわっていたのですが、
なぜかphp7からredisがよびだせず、ちなみに、コンソールで、
redis-cliなどでredisを動かすことはできている。。

php5系の時は普通に動いていたのですが、
php-redis等のモジュールを系を入れ替えしてためしてみると、

yum install --enablerepo=epel,remi-php70 php70-php-pecl-redis

ではだめでしたが、

yum install --enablerepo=epel,remi-php70 php-pecl-redis

で、無事php7からredisを呼び出せるようになった。。

依存関係ハマりやすい。

Cakephp3をCentOS7( php7 + php-fpm + nginx + MySQL )にインストールした際のメモ

大分出遅れた感がありますが、最近cakephp3のサービスを構築したので、
それを兼ねてメモ。

早速、cakephp3の公式サイトでインストール方法を確認。

http://book.cakephp.org/3.0/ja/installation.html

システム要件を確認すると。。。

システム要件
HTTPサーバー。例: Apache。mod_rewrite が推奨されますが、必須ではありません。
PHP 5.5.9 以上 (PHP 7 も含む)
PHP mbstring 拡張
PHP intl 拡張

…(PHP 7も含む)!

せっかくなので、速いとウワサのphp7に、php-fpmと、nginxの構成で、
yumでインストールしてみました!!

mac(yosemite)にmysqlクライアントのみインストール

ぐぐっても中々でてこなかったので、メモ。

macにmysql-clientのインストール。
macをmysqlサーバーまで起動してしまうと重くなりそうなので、
CUIで使えるmysql-clientだけインストール。

brewのインストール

homebrewを参考に

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brewがインストール済みなら、下記コマンドでmysqlのclientのみインストール

brew install mysql --client-only

これで下記コマンドなどで、データベース・サーバーにアクセス!

mysql -u dbuser -p -h 192.168.1.1