grafanaを試してみた

CloudwatchをGrafana+Graphiteで見るようにしたら幸せになった件を見たらカッコよかったので試してみた

AWS上にt1.nanoインスタンス(Amazon Linux)を作成し、ここにgrafanaを入れてみる。

Redhat系とはいえ、初めてAmazon Linuxも触ったのでOSの設定も少し入っています。

まずはawscliをインストールする。

pythonのバージョンを確認したら、2.7.10だったので、pipは最初から入っていたが、

/usr/local/bin/pip にPATHが通って居なかったので、まずはPATHを通します。


修正が終わったらsource /root/.bash_profileを忘れずに。

次は、awscliのインストール。


で、やっとgrafanaのインストール。

grafanaはRPMで配っていたので、さくっと。


grafanaを起動する前に、awsのAPIに繋ぐ為の認証情報を設定する。

awscliの認証ファイルは、~/.aws/に保存されるがgrafanaの場合は/usr/share/grafana/.awsに同じファイルを複製してあげればいい。


ここまでやって、grafanaを起動。
初期ポートは3000
アカウント:admin
パスワード:admin
grafana_login.jpg
ログイン後、左上のアイコンをクリックし、DataSourceを選択。
CloudWatchを選択し、接続情報を設定する。

grafana_datasource.jpg

グラフの表示、並べ替えなどはもう少し勉強してから書きます。
grafana_grafh.jpg

トレースフラグを付けてデッドロックを記録する

SQL Serverにはトレースフラグを言うものを付けて、特定のエラーを記録する方法がある。
デットロックを後追いするにはいいかもしれない。

[code]
— 現在のトレースフラグ確認
DBCC TRACESTATUS (1204, 1222)
GO

— 結果
TraceFlag Status Global Session
1204 0 0 0 1222 0 0 0

— トレースフラグ設定
DBCC TRACEON (1204, 1222,-1)
GO

— 結果
TraceFlag Status Global Session
1204 1 1 0 1222 1 1 0

— トレースフラグ設定を消す場合
DBCC TRACEOFF (1204, 1222,-1)
GO
[/code]
カッコ内の番号は、MSサイトを参照

上記はオンラインで変更できるパラメータだが、起動時から有効にするには
SQL Server Configuration Managerで、

[code]
-T1204 -T1222
[/code]

を追加する。

SQLConfigurationManager.png

#error “Unrecognized SSL Toolkit!”

apacheのmod_sslを後から追加しようとしたら、こんなエラーに遭遇

[code]
# /usr/local/apache2/bin/apxs -i -a -c -I/usr/local/openssl/include/openssl mod_ssl.c
/usr/local/apache-2.2.31/build/libtool –silent –mode=compile gcc -prefer-pic -DLINUX -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I/usr/local/apache-2.2.31/include -I/usr/local/apache-2.2.31/include -I/usr/local/apache-2.2.31/include -I/usr/local/openssl/include/openssl -c -o mod_ssl.lo mod_ssl.c && touch mod_ssl.slo
ssl_private.h:60 から include されたファイル中,
mod_ssl.c:27 から:
ssl_toolkit_compat.h:267:2: error: #error "Unrecognized SSL Toolkit!"
In file included from ssl_private.h:86,
from mod_ssl.c:27:
~中略~
ssl_private.h:644: error: declaration for parameter ‘ssl_init_Child’ but no such parameter
mod_ssl.c:572: error: expected ‘{‘ at end of input
apxs:Error: Command failed with rc=65536
[/code]

調べたら、そもそもopensslのソースインストールが失敗してた。
改めて、opensslのインストールをしたけど、こっちもエラーでインストールできない。

[code]
make[2]: Entering directory `/usr/local/src/openssl-1.0.2g’
[ -z "" ] || gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,–noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -Iinclude \
-DFINGERPRINT_PREMAIN_DSO_LOAD -o fips_premain_dso \
fips_premain.c fipscanister.o \
libcrypto.a -ldl -lz
make[3]: Entering directory `/usr/local/src/openssl-1.0.2g’
make[4]: Entering directory `/usr/local/src/openssl-1.0.2g’
/usr/bin/ld: libcrypto.a(rsaz_exp.o): relocation R_X86_64_32 against `.rodata’ can not be used when making a shared object; recompile with -fPIC
libcrypto.a(rsaz_exp.o): could not read symbols: Bad value
collect2: ld returned 1 exit status
make[4]: *** [link_a.gnu] Error 1
make[4]: Leaving directory `/usr/local/src/openssl-1.0.2g’
make[3]: *** [do_linux-shared] Error 2
make[3]: Leaving directory `/usr/local/src/openssl-1.0.2g’
make[2]: *** [libcrypto.so.1.0.0] Error 2
make[2]: Leaving directory `/usr/local/src/openssl-1.0.2g’
make[1]: *** [shared] エラー 2
make[1]: ディレクトリ `/usr/local/src/openssl-1.0.2g/crypto’ から出ます
make: *** [build_crypto] エラー 1
[/code]

このエラーを解決するには、configオプションに、-fPICを付けてあげる
[code]
./config -fPIC –prefix=/usr/local/openssl-1.0.2g shared zlib
make
make install
[/code]

で、もう一度「/usr/local/apache2/bin/apxs -i -a -c -I/usr/local/openssl/include/openssl mod_ssl.c」を実行したけど、まだ同じエラーが出る。
ldconfigは実行済みなのに・・・

再度ググって、こちらのページを見つけた。元RX-7乗りの適当な日々
同じことやったら通った!
[code]
/usr/local/apache2/bin/apxs -c -i -a -D HAVE_OPENSSL=1 *.c -lcrypto -lssl
[/code]

mysqld.sockが作成出来ない

mysqld.sockの場所をRPM標準の/var/lib/mysql/mysqld.sockから/tmp/mysqld.sockに変更したらmysqlが起動しなくなった件

/var/log/mysqld.logを見ると、
[code]
2016-04-27 19:04:34 19904 [ERROR] Can’t start server : Bind on unix socket: Permission denied
2016-04-27 19:04:34 19904 [ERROR] Do you already have another mysqld server running on socket: /tmp/mysql.sock ?
2016-04-27 19:04:34 19904 [ERROR] Aborting
[/code]が記録されていた。

Permission denied?
/tmpディレクトリのパーミッションも777なのに?

su -c “touch /tmp/mysql” mysql
でファイル作れるよ?

調べた結果、/var/log/audit/audit.logに以下のログを発見。
原因はselinuxだった。

[code]
type=AVC msg=audit(1461749417.909:7600470): avc: denied { module_request } for pid=22742 comm="mysqld" kmod="net-pf-10" scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:system_r:kernel_t:s0 tclass=system
type=SYSCALL msg=audit(1461749417.909:7600470): arch=c000003e syscall=41 success=no exit=-97 a0=a a1=1 a2=0 a3=7fff608ad190 items=0 ppid=22480 pid=22742 auid=528 uid=27 gid=27 euid=27 suid=27 fsuid=27 egid=27 sgid=27 fsgid=27 tty=pts15 ses=695500 comm="mysqld" exe="/usr/sbin/mysqld" subj=unconfined_u:system_r:mysqld_t:s0 key=(null)
type=AVC msg=audit(1461749417.911:7600471): avc: denied { create } for pid=22742 comm="mysqld" name="mysql.sock" scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=unconfined_u:object_r:tmp_t:s0 tclass=sock_file
type=SYSCALL msg=audit(1461749417.911:7600471): arch=c000003e syscall=49 success=no exit=-13 a0=c a1=7fff608ad1e0 a2=6e a3=0 items=0 ppid=22480 pid=22742 auid=528 uid=27 gid=27 euid=27 suid=27 fsuid=27 egid=27 sgid=27 fsgid=27 tty=pts15 ses=695500 comm="mysqld" exe="/usr/sbin/mysqld" subj=unconfined_u:system_r:mysqld_t:s0 key=(null)
type=AVC msg=audit(1461749433.190:7600472): avc: denied { module_request } for pid=24545 comm="mysqld" kmod="net-pf-10" scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:system_r:kernel_t:s0 tclass=system
[/code]

setenforce 0を実行後、mysqldの起動が出来るようになった。

/etc/sysconfig/selinuxをみると、SELINUX=disabled
になっているので、誰かが手動で有効にしていたんだろう。

windows用カスタムインストールメディアを作成する

サーバーに新規にWindowsをインストールする時、Windows標準のドライバではデバイスを認識しない事がある。

RAIDカードのドライバが合わなければインストールすら出来ないし、
インストール出来たとしても、NICドライバが合わなければ、USBメモリ等にドライバを入れておいて後からインストールする等、めんどくさいです。

Windowsのインストールメディアを元に、
・RAIDドライバの追加
・NICドライバの追加
・Windowsサービスの有効化(SNMPサービスなど)
を行ったカスタムインストールメディアを作る事が出来たので、素人がハマった箇所をメモします。

基本的な手順は、
http://www.vwnet.jp/Windows/WS12R2/AddDriver/AddDriver2ISO.htm
https://msdn.microsoft.com/ja-jp/library/hh825099.aspx
などを見て下さい。

作った環境は以下になります。
クライアント: Windows 10
メディア  : Windows Server 2008 R2
サーバー  : DELL PowerEdge R720
RAIDカード : PERC H710P Mini
ネットワーク: Intel(R) 10G 2P X520 Adapter 、Intel(R) GbE 4P I350-t rNDC

ハマった箇所(1)ドライバファイルの在り処
DELLのドライバは、実行ファイル形式(exe)で提供されています。
そのままでは追加が出来ないので、ドライバーファイルだけに抜き出します。

http://www.dell.com/support/home/jp/ja/jpdhs1/Drivers/DriversDetails?driverId=XYPYC&fileId=3481042880&osCode=WS8R2&productCode=poweredge-r720&languageCode=jp&categoryId=SF


http://www.dell.com/support/home/us/en/19/Drivers/DriversDetails?driverId=W205T
からドライバファイルをダウンロードし解凍します。※Windows標準機能で解凍できました。

<< RAIDカード >>
SAS-RAID_Driver_XYPYC_WN64_6.803.21.00_A07.EXEを解凍します。
解凍後、SAS-RAID_Driver_XYPYC_WN64_6.803.21.00_A07\payload\にドライバーファイルがあります。

<< ネットワークカード >>
SAS-RAID_Firmware_F9M2Y_WN64_21.3.2-0005_A07.EXEを解凍します。
解凍されたフォルダを見ると、Winx64.pkgというファイルがあるので、これも解凍します。
解凍後、Network_Driver_W205T_WN64_17.0.0_A00\Winx64\Winx64にドライバー群があります。
今回のネットワークカードに必要なドライバーは、PRO1000とPROXGBの2つになります。

ハマった箇所(2) boot.wim と install.wim
各サイトを流し読みしていて気付くのが遅れてしまい、無駄に時間を使ってしまったので。
細かいとこは分かりませんが、以下の認識で間違っていないと思う。
boot.wim   ・・・ RAIDカードなどのWindowsのインストールに必須のドライバーを追加
install.wim ・・・ ネットワークカードなど、後からでもいいドライバーの追加、Windows機能のデフォルト値変更、レジストリ変更もここ

indexを適切に指定しないと間違った場所にドライバを追加してしまう事になる為、
必ず
Dism /Get-WimInfo /WimFile:”インストールメディアのPATH\sources\boot.wim”
Dism /Get-WimInfo /WimFile:”インストールメディアのPATH\sources\install.wim”
を実行して、indexを確認してください。

レジストリ変更と、アプリケーション追加は試していないので、試したら追記します。

続きを読む windows用カスタムインストールメディアを作成する

ジョブを設定を一括で変更する

とりあえず、沢山あるログシッピングのLSCopyとLSRestoreジョブの失敗時のアラートを飛ばしたい。
DBメールの設定と、オペレーターの設定は先に済ませておく。

[code]
USE msdb
GO
declare @job_copy nvarchar(50)
declare @job_restore nvarchar(50)
DECLARE C1_LSCOPY CURSOR FOR
SELECT name FROM dbo.sysjobs where name LIKE ‘LSCopy%’
DECLARE C1_LSRESTORE CURSOR FOR
SELECT name FROM dbo.sysjobs where name LIKE ‘LSRestore%’
OPEN C1_LSCOPY
FETCH NEXT FROM C1_LSCOPY INTO @job_copy
WHILE (@@FETCH_STATUS = 0)
BEGIN
EXEC dbo.sp_update_job @job_name = @job_copy,
@notify_level_email=2,
@notify_email_operator_name=N’Admin’;
FETCH NEXT FROM C1_LSCOPY INTO @job_copy
END
OPEN C1_LSRESTORE
FETCH NEXT FROM C1_LSRESTORE INTO @job_restore
WHILE (@@FETCH_STATUS = 0)
BEGIN
EXEC dbo.sp_update_job @job_name = @job_restore,
@notify_level_email=2,
@notify_email_operator_name=N’Admin’;
FETCH NEXT FROM C1_LSRESTORE INTO @job_restore
END
CLOSE C1_LSCOPY
CLOSE C1_LSRESTORE
DEALLOCATE C1_LSCOPY
DEALLOCATE C1_LSRESTORE
GO
[/code]

SQL Serverのslowqueryを監視する

前回覚えたSQL Serverの条件分岐を使って、nagios/icinga用のSlowQuery監視スクリプトを書いてみた。

前提として、こちらを参考に、SlowQuery取得の設定が必要。

NRPE経由で監視する場合は、MAX_PACKETBUFFER_LENGTH等の値の変更をしたら幸せになれます。

[bash]
#!/bin/bash
CMDNAME=`basename $0`
while getopts h:u:p:c:w: OPT
do
case $OPT in
"h" ) FLG_H="TRUE" ; VALUE_H="$OPTARG" ;;
"u" ) FLG_U="TRUE" ; VALUE_U="$OPTARG" ;;
"p" ) FLG_P="TRUE" ; VALUE_P="$OPTARG" ;;
"w" ) FLG_W="TRUE" ; VALUE_W="$OPTARG" ;;
"c" ) FLG_C="TRUE" ; VALUE_C="$OPTARG" ;;
* ) echo "Usage: $CMDNAME [-h HOST_NAME] [-u User] [-p PASS] [-c warnning] [-c critical]" 1&gt;&amp;2
exit 1 ;;
esac
done
_HOST=$VALUE_H
_USER=$VALUE_U
_PASS=$VALUE_P
_WARN=$VALUE_W
_CRIT=$VALUE_C
# 何分前の以降に出たSLOW LOGを対象とする
_TIMESTAMP=’00:05′
#echo "$_HOST, $_USER, $_PASS, $_WARN, $_CRIT"
export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc
export FREETDSCONF=/etc/freetds/freetds.conf
# ここからT-SQL処理
TDSVER=8.0 /usr/local/freetds/bin/tsql -H $_HOST -p 1433 -U $_USER -P $_PASS &lt;&lt; _EOF &gt; /tmp/${_HOST}_slowlog.tmp
DECLARE @VERSION_FULL nvarchar(max);
DECLARE @VERSION int;
SET @VERSION_FULL = (SELECT convert (nvarchar(max),SERVERPROPERTY(‘productversion’)));
SET @VERSION = substring(@VERSION_FULL, 1, 2)
DECLARE @DATE VARCHAR(16);
SET @DATE = (select CONVERT(VARCHAR,GETDATE()-‘$_TIMESTAMP’,120));
IF @VERSION = 10
BEGIN
SELECT REPLACE((
SELECT
DATEADD(hour,9 , CAST(event_data as XML).value(‘(/event/@timestamp)[1]’, ‘datetime’)) AS timestamp,
DB_NAME(CAST(event_data as XML).value(‘(/event/action[@name="database_id"]/value)[1]’, ‘sysname’)) AS database_name,
CAST(event_data as XML).value(‘(/event/action[@name="sql_text"]/value)[1]’, ‘nvarchar(max)’) AS sql_text,
CAST(event_data as XML).value(‘(/event/data[@name="duration"]/value)[1]’, ‘bigint’) AS duration,
CAST(event_data as XML).value(‘(/event/data[@name="cpu"]/value)[1]’, ‘bigint’) AS cpu_time
FOR XML PATH (”)), ‘ ‘, ‘ ‘) AS RESULT
from sys.fn_xe_file_target_read_file(
‘C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\Highload_Query*.xel’,
‘C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\Highload_Query*.xem’ ,
NULL,
NULL)
where DATEADD(hour,9 , CAST(event_data as XML).value(‘(/event/@timestamp)[1]’, ‘datetime’)) &gt;= @DATE
END
ELSE
BEGIN
IF @VERSION = 11
BEGIN
SELECT
DATEADD(hour,9 , CAST(event_data as XML).value(‘(/event/@timestamp)[1]’, ‘datetime’)) AS timestamp,
DB_NAME(CAST(event_data as XML).value(‘(/event/action[@name="database_id"]/value)[1]’, ‘sysname’)) AS database_name,
CAST(event_data as XML).value(‘(/event/data[@name="batch_text"]/value)[1]’, ‘nvarchar(max)’) AS batch_textt,
CAST(event_data as XML).value(‘(/event/data[@name="duration"]/value)[1]’, ‘bigint’) AS duration,
CAST(event_data as XML).value(‘(/event/data[@name="cpu_time"]/value)[1]’, ‘bigint’) AS cpu_time
from sys.fn_xe_file_target_read_file(
‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\Highload_Query*.xel’,
NULL,
NULL,
NULL)
where DATEADD(hour,9 , CAST(event_data as XML).value(‘(/event/@timestamp)[1]’, ‘datetime’)) &gt;= @DATE;
END;
GO
quit
_EOF
IFS_BACKUP=$IFS
IFS=$’\n’
_TIME=(`cat /tmp/${_HOST}_slowlog.tmp | sed -n -e ‘s/.*\(.*\)&lt;\/timestamp&gt;.*/"\1"/p’`)
_DBNAME=(`cat /tmp/${_HOST}_slowlog.tmp | sed -n -e ‘s/.*\(.*\)&lt;\/database_name&gt;.*/"\1"/p’`)
_CPUTIME=(`cat /tmp/${_HOST}_slowlog.tmp |sed -n -e ‘s/.*\(.*\)&lt;\/cpu_time&gt;.*/"\1"/p’`)
_DURATION=(`cat /tmp/${_HOST}_slowlog.tmp | sed -n -e ‘s/.*\(.*\)&lt;\/duration&gt;.*/"\1"/p’`)
_QUERY=(`cat /tmp/${_HOST}_slowlog.tmp | tr ‘\n’ ‘ ‘| sed -e ‘s/&lt;\/cpu_time&gt;/&lt;\/cpu_time&gt;\n/g’| sed -n -e ‘s/.*\(.*\)&lt;\/sql_text&gt;.*/"\1"\n/p’`)
func_message (){
for (( i=0; $i&lt;`echo ${#_TIME[@]}`; i++ ));
do
echo "———-"
echo "TIME: ${_TIME[$i]}"
echo "DBNAME: ${_DBNAME[$i]}"
echo "CPU_TIME: ${_CPUTIME[$i]} ms"
echo "DURATION: ${_DURATION[$i]} us"
echo "${_QUERY[$i]}"
done
IFS=$IFS_BACKUP
}
# check
if [ $_CRIT -le `echo ${#_TIME[@]}` ]
then
echo "CRIT: SlowQuery is `echo ${#_TIME[@]}` | SlowQuerys=`echo ${#_TIME[@]}`;$_WARN;$_CRIT"
func_message
exit 2
elif [ $_WARN -le `echo ${#_TIME[@]}` ]
then
echo "WARN: SlowQuery is `echo ${#_TIME[@]}` | SlowQuerys=`echo ${#_TIME[@]}`;$_WARN;$_CRIT"
func_message
exit 1
elif [ $_WARN -gt `echo ${#_TIME[@]}` ]
then
echo "OK: SlowQuery is `echo ${#_TIME[@]}` | SlowQuerys=`echo ${#_TIME[@]}`;$_WARN;$_CRIT"
exit 0
else
echo "status unknown"
exit 3
fi
[/bash]

使い方
./check_sqlserver_slowquery -h ホスト名orIPアドレス -u ユーザー名 -p パスワード -w ワーニング閾値 -c クリティカル閾値

閾値以下の場合は
OK: SlowQuery is 0 | SlowQuerys=0;3;4
とか表示される。

閾値以上の場合は
CRIT: SlowQuery is 6 | SlowQuerys=6;3;4
———-
TIME: “2016-01-08T10:42:00.427”
DBNAME: “hoge”
CPU_TIME: “3932” ms
DURATION: “4011259” us
“~~遅いクエリ~~”
———-
TIME: “2016-01-08T10:42:07.283”
DBNAME: “hoge”
CPU_TIME: “4431” ms
DURATION: “4481414” us
“~~遅いクエリ~~”

等が表示されます。

javeって何よ?

29日の18:00ぐらいから、CentOS7のVPSサーバーに繋がらなくなった。
再起動しても、5分ぐらい経つとSSHでの接続もタイムアウトになる。

プロセスを見てみると、/tmp/javeってのがCPUリソース食いまくってるのみたい。

[root@jhhk-family bin]# ps -auxf
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
(中略)
root 513 67.8 0.0 107076 1064 ? Ssl 18:46 2:52 /tmp/jave

netstatはこんな感じ

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name Timer
cp 0 55 182.163.72.51:59867 23.228.105.6:25000 ESTABLISHED 17759/jave on (0.20/0/0)

pkillしても、すぐに上がってくるからKernel関係のプロセス?と思ったけど、ググッてもそんな情報無いし、とりあえず止めてもサービスには影響は無かったのでcrondで毎分pkill投げてる。


botとかで踏まれてる可能性もあるから、iptablesは固くした。
時間見てちゃんと調べよう。

14:27追記
以下の事をやられていたので、追加で対策。
1)/root/.ssh/の公開鍵のtimestampが変わっている
  作業用でrootログインを許可して鍵認証していたけど、authorized_keyの
timestampが昨日になっていた。
SSHのログインを禁止して、authorized_keyを削除

2)/tmp/色々のパーミッション変更
不正な実行ファイルは/tmp/javeだけど、/tmp下に関連しそうなファイルがあった。
  ———- 1 root root 73 12月 30 13:36 conf.n
———- 1 root root 5 12月 30 13:36 gates.lod
———- 1 root root 1223123 12月 30 14:32 jave
———- 1 root root 5 12月 30 13:36 moni.lod
javeと同様、単純に消しちゃうと再作成された為、全てのパーミッションを取り除く。
※ 上記の不正なファイル関連は、ファイルの存在のみ見ているみたいだったので、
パーミッション変更後にpkill /tmp/javeとすると、2度とjaveは起動しなくなった。

でも、root取られていたので他にも悪さしている箇所があるかも。
ログも信用出来なくなったので、年明けに再構築しないと、、、

  

SQL Serverのversionによって処理を分けたい場合

SQL Serverのversionによって処理を分けたい場合
もうちょっと細かいversionで分けられると思うけど、
今はSQL Server 2008 か 2012 か 2014 かぐらいで分けれれば問題ない。

[code]declare @VERSION_FULL nvarchar(max);
declare @VERSION int;
SET @VERSION_FULL = (SELECT convert (nvarchar(max),SERVERPROPERTY(‘productversion’)));
SET @VERSION = substring(@VERSION_FULL, 1, 2)
IF @VERSION = 10
— SQL SERVER 2008での処理
BEGIN
PRINT ‘2008’;
END
ELSE
BEGIN
IF @VERSION = 11
— SQL SERVER 2012での処理
PRINT ‘2012’;
ELSE
— SQL SERVER 2014での処理
PRINT ‘2014’;
END ;
GO
[/code]

redisデータベースの複製

rdbファイルの複製ではなく、db10 → db18とかに複製する方法。

[code]source_host=localhost
source_port=xxxx
source_db=10
target_host=localhost
target_port=xxxx
target_db=18
redis-cli -p $source_port -n $source_db keys \* | while read key; do echo "Copying $key"; \
redis-cli –raw -h $source_host -p $source_port -n $source_db DUMP "$key" | \
head -c -1|redis-cli -x -h $target_host -p $target_port -n $target_db RESTORE "$key" 0; done
[/code]