きんときんの技術メモ

日々の業務で学んだ技術を中心に書きます。CentOS7で作業すること多め。

【MySQL】mysql、mysqldumpコマンドメモ

mysqlで使うコマンドを忘れやすいのでメモ。

mysqlコマンド

オプション 説明
-u ユーザ名
-p パスワード
-d データベース名
-e 直接SQL実行

<例>

※パスワードに記号がない場合

 mysql -uhoge -phogehoge hogdb

 

※パスワードに「| 」などの記号がある場合

 mysql -uhoge -p'hoge|hoge' hogdb

 ⇒パイプ処理と判別されてしまうため、シングルクォートで囲みエスケープする。

 

■mysqldmpコマンド

オプション 説明
-u ユーザ名
-p パスワード
-h ホスト名
-B(database) データベース指定
-A(all) データベース全て
-d(no-data) 定義のみ

<例>

 mysqldump -uhoge -phogehoge hogdb > /tmp/hogdb_`date "+%Y%m%d_%H%M%S"`.sql

 

 

 

【MySQL】unsigned auto_incrementについて

テーブルカラムを定義する時、IDなどの主キーにはunsigned、auto_incrementを付けるのが良い。

auto_increment:レコードが追加されたとき、自動的に付与される(インクリメントされる)

unsigned:正の数のみ設定できるようにする

     intの場合、通常は-2147483648~2147483647までの数字を格納できるが、

     unsignedにすることによって、0~4294967295まで格納できるようになる。

 

テーブルをcreateする場合、以下のように書く。

create table hoge (
id int(10) unsigned auto_increment primary key

name varchar(50)
)

 

これで、idに各属性が付与される。

また、insertする場合、自動的に付与されるため、idは設定しなくてもよい。

insert into hoge(name) values('ほげ');

【PHP】cakePHPで嵌ったこと

PHPアプリケーションを「/var/www/html/」へ配置した。

httpd.confでDocumentRoot変更、apache実行ユーザ、グループの変更をした。

最初のログイン画面は表示される。

しかし、次のページに遷移するとなぜか404が返却されてしまう。。

 

調べに調べて解決できた答えが以下。

httpd.confを以下の通り直した。

 

<Directory />
 AllowOverride none
 Require all denied
</Directory>

↓↓↓↓↓↓

<Directory />
 AllowOverride all
 Require all denied
</Directory>

 

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride none

↓↓↓↓↓↓

AllowOverride all

 

どうやら、 DocumentRoot に対して .htaccess による設定の上書きを許可するように設定出来てなかったらしい。(デフォルトのままだった)

最後に「systemctl restart httpd」にてApacheを再起動を忘れずに・・。

 

 

【Oracle】マテリアライズドビューの自動更新

先日、マテリアライズド・ビューを触れたので、書き残す。

そもそもマテリアライズド・ビューとはなんだろうか?

 

 通常のビューとは異なり、データを半永続的に保持する。

 あるビューを頻繁に参照する場合に使用する事が多い。

 都度、データ検索、抽出しないため、処理の高速化が期待できる。

 

 上記の通り、半永続的にデータを保持するため、ある一定のタイミングでビューを更新する必要がある。

手動で実行する方法もあるが、面倒なので、自動で実行させるようにしたい。

以下のSQLを流すことで、毎日0時に実行させることができた。

 

ALTER MATERIALIZED VIEW [スキーマ名].[マテビュー名] REFRESH START WITH TO_DATE('2018-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS') NEXT trunc(sysdate, 'DD') + 1 + 00/24;

 

BEGIN dbms_mview.refresh('[スキーマ名].[マテビュー名]', 'c'); END;

 

また、以下のSQLで確認した。

select last_date,last_sec,next_date,next_sec,interval,what from dba_jobs WHERE SCHEMA_USER = '[スキーマ名]';