MySQLパスワードをmysql_config_editorで設定している場合、crontab経由で、shファイルを実行したときだけ、mysqldump結果のファイルサイズが0になるのですが
環境
・CentOS
・MySQL 5.6 … パスワードはmysql_config_editorで設定
・Linuxユーザ名 … test
下記コマンドを実行したら、期待した通りファイルが作成されるのですが、
sh hoge.sh
▼hoge.sh
mysqldump --single-transaction -u データベースユーザ名 データベース名 >
/home/test/バックアップディレクトリ名/ファイル名
crontab経由で、shファイルを実行したら、サイズが0のファイルが作成され、dumpデータが取得できません
・cronのエラーメールも送られてきません(cronエラーではないから?)
1 15 * * * root /bin/bash /home/test/hoge.sh
権限関連が原因のような気もするのですが、rootで実行したら何でもいけるわけではないのでしょうか?
ls -la
-rwxrwxrwx 1 test test 270 1月 19 14:52 2017 hoge.sh
追記
・その後、色々試した結果、shファイルに記述しているコマンド内のmysqldumpにpオプションを付与すれば、crontab経由からも正常にファイル取得できることがわかりました
・しかし、mysql_config_editorを使用することで、コマンドからパスワード指定しなくてもログインできるよう設定しているのですが、この方式ではcrontab経由から、データ取得できないのでしょうか?
・mysqldumpエラーをファイル出力しようと思い、「-r ファイル名」としたのですが、取得できませんでした
再追記
・現状をようやく確認できました(cron以前の問題?)
・hoge.shをtestユーザとして直接実行すると、正常動作します
・hoge.shをrootユーザとして直接実行すると、下記エラー発生
mysqldump: Got error: 1045: Access denied for user 'test'@'localhost'
(using password: NO) when trying to connect
・hoge.shのdumpコマンドにパスワードを付与してcron経由で(rootユーザとして)実行すると、正常動作します
・mysqlテーブルを「select * from user;」すると、rootユーザもtestユーザもいます。パスワードは同じです
$ mysql_config_editor print --all
[test]
user = test
password = *****
host = localhost
[mysqldump]
user = root
password = *****
[root]
user = root
password = *****
host = localhost
そもそも根本的なことが分かっていないのですが、shの実行権限が何であれ、MySQLにはsh内のmysqldumpコマンドで記述したデータベースユーザ名でアクセスするわけではないのでしょうか?「mysqldump -u データベースユーザ名」