ときたま、既存のPostgreSQL環境でテーブルやビューの作成時のSQLを確認することがある。 MySQLとかだと「SHOW CREATE ~」で確認できるのだけど、PostgreSQLでテーブル定義文を確認する場合はSQLからは確認ができず、pg_dumpでバックアップデータを取得してCREATE TABLEを抽出することで対応する。

pg_dump DB名 -s -t テーブル名 | awk '/^CREATE TABLE/,/^)/'
-bash-4.2$ pg_dump test_db -s -t test_table --schema-only | awk '/^CRE...

集計結果で数字を見る際に桁数がよくわからないことが会ったので、SQLで集計出力時に3桁ごとにカンマ区切りで見やすく表示させる対応をしたので備忘で残しておく。 各DBごとにSQLの記述が異なるのでひとまずよく使用されるMariaDB、PostgreSQL、OracleDB、SQL Serverごとで調べてみることにした。

1. MySQL/MariaDBの場合

MySQL/MariaDBの場合、対象のカラムをformat()で指定することで桁区切りが行える。

select format(1234567,0);
MariaDB [test]> select format(12345...

MariaDBで手元のPC上で動作しているDBから、リモートサーバにssh越しにバックアップする必要があったので、備忘で残しておく。

mysqldump -u ユーザ名 -p パスワード DB名 | gzip | ssh リモートサーバ 'cat > ~/BackupPATH.sql.gz'
mysqldump --single-transaction -u ユーザ名 -p パスワード DB名 | gzip | ssh リモートサーバ 'cat > ~/BackupPATH.sql.gz' # オンラインバックアップ

sqlite3でテーブルの一覧を取得する場合、以下のようにコマンドを実行する。

.tables

もしくは

select name from sqlite_master where type='table';

で一覧が取得出来る。

sqlite> .table
TEST
sqlite> select name from sqlite_master where type='table';
TEST

テーブル...


Maxscaleについて調べていたところ、中継するSQL文の内容に応じて、指定したサーバにSQLを飛ばすように出来るフィルター機能(Named Server Filter)があるようなので、試してみる事にした。
なお、検証に用いたMaxscaleのバージョンは1.3.1を利用している。

今回は、SQL文に「five」という文字列があった場合は特定のサーバに行く、というような記述をしてみる。

●/etc/maxscale.cnf(Before)

[maxscale]
threads=4 # 同時処理数
log_messages=1
log_trace=1
logdir=/var...

Maxscaleで設定ファイル編集後reloadを行う

systemctlでMaxscaleを使っていると、どうもreloadが利用出来ない状態になっている事に気づく。
こうなると、設定ファイルを編集した後、またいちいちrestartしないといけないのかなぁ…と思っていたのだが、どうやらreloadは出来るようだ。

Maxscaleには管理コマンドであるmaxadminというコマンドがあるのだが、これでreloadが行えるのだ。
以下、reloadコマンド。

maxadmin -p mariadb reload config

ただし、サーバの追加・削除に使うにはちょっと怖い挙動をしている。
サーバを追加したり削除すると、どうも上手...


AWSでElastiCacheにRedisを使っているのだが、その死活監視について調べていたところ、どうもパフォーマンスなんかはDatadogで取得出来そうなんだけど、死活監視って形では用意されていないようだった。
で、redis-cliでなら簡易的なヘルスチェックが出来そうなので、それで当面は対応しようかと思ったので、その備忘。

やることは単純で、redis-cliでping実行して、それでredisが上がってる(PONGが返ってくる)ようなら正常終了(exitコードが0になる)するので、それで判断する。

redis-cli -h Redisサーバのホスト ping

...

MariaDBでmysqlコマンドを使ってSQLの結果をカラム無しの値のみ取得する

仕事で、SQLで取得した値に応じて処理を変えるようなスクリプトが必要になったのだが、その際に普通にコマンドを実行するとカラムも一緒に出力されてしまい、データとして扱いにくいという事があった。

mysql -u root test -e 'SQL文;'

[root@localhost log]# mysql -u root test -e 'select name from test where num = 2;'
+--------+
| name   |
+--------+
| TEST-2 |
+--------+