最低限
ごちゃごちゃ書くと論点を見失うのでシンプルに書きます。
続きを読むある程度のセキュリティはちゃんと意識した上で、シェルスクリプトを Webブラウザ 上から叩くときなどに便利です。
が、Docker 上の Apache(PHP)だと「実行できたりできなかったり」する。原因は分からない。完全に実行できないなら調べようもあるとは思うが……。
ハマっている時間もないので、Docker ではやらないことにしました*1。
こんな感じ。
[Fri Mar 10 02:41:17.459441 2017] [:error] [pid 26519] [client 192.168.160.102:57781] PHP Warning: shell_exec(): Unable to execute '/bin/echo hello' in /var/www/html/hogehoge/exec.php on line 6
シェルスクリプトなどは実行権限を適切に設定することを忘れずに。あと、パスも適切に書くことも忘れずに*2。
まずはインストールしましょう。
db.addUser()
はdeprecatedです。ダメです。db.createUser()
を使いましょう。role
とかdb
とかは適切なものを。
> use admin > db.createUser( { user: "username", pwd: "password", roles: [{ role: "userAdminAnyDatabase", db: "admin"}] } ) Successfully added user: { "user" : "username", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
/etc/mongodb.conf
のauth
がコメントアウトされていますので、コメントを外してtrue
にしましょう。そうしたら再起動です。
auth = true
認証しないでshow collections
するとエラーが返ってくれば設定はうまくいってます。
$ mongo MongoDB shell version: 2.6.10 connecting to: test > use admin switched to db admin > show collections 2017-03-05T21:46:47.182+0900 error: { "$err" : "not authorized for query on admin.system.namespaces", "code" : 13 } at src/mongo/shell/query.js:131
では、認証してみて再度show collections
しましょう。
> db.auth( "username", "password" ) 1 > show collections; system.indexes system.users system.version
無事認証できました。
今さら説明の必要はないと思いますが、データをいい感じに流してくプロダクトです。
この Embulk で 100万件 規模の大量のデータを MySQL に流し込もうとすると以下のようなエラーが出てしまいました。
The total number of locks exceeds the lock table size
どうしたものかと。
MySQL のinnodb_buffer_pool_size
のサイズを大きくしたら問題なくなりました。Ubuntu 16.04 LTS の場合ですと/etc/mysql/mysql.conf.d/mysqld.cnf
に例えば以下のように書き加えれば OK です*1。再起動を忘れないようにしましょう。
innodb_buffer_pool_size = 512000000
ちなみにこのエラーが出るのはModes
がinsert
のときです(merge
でも出るかも)。このモードのときは、一度テンポラリのテーブルを作ってそれから流し込みをするためです。insert_direct
だと起きないです。
*1:ちょっと大きすぎな気もしますがメモリに余裕があるのでこの数値です