MySQL ダンプデータから行単位の抜き出し

間違えて削除した行を復旧するため、ダンプのバックアップデータから特定の行を抜き出すことになった。

条件が簡単なら、mysqldumpだけでもできる。

必要ならダンプデータを別環境にインポートし、
mysqldump -t -u user –where “xxx = xxx” database_name table_name > dump.sql

そして、書き出したファイルをインポート。

***

今回は子テーブルも削除されていてSQLを使いたいので、新しいテーブルにデータをコピーしそのテーブルを書き出すことに。

・(必要なら)ダンプデータを別環境にインポート

・スキーマコピー
create table AA like A

・データコピー
insert into AA select * from A where exists (
select * from B where A.ID = B.ID);
このような感じ(AテーブルをAAテーブルに書き出す時、Bテーブルに特定の値が含まれているかどうか)

・データ書き出し
mysqldump -t -u user database_name tmp_tbl > dump.sql
(Workbenchなら、Server>DataExportから)

・書き出したファイルでテーブル名などを修正してインポート。

CentOS(ConoHa) 初期設定 LAMP

久しぶりにConoHaにてCentOSのインスタンスを作成。

コントロールパネル

インスタンス作成時、SSH Keyだけ作成し、その他はデフォルトのまま。

左側メニューのサーバー>インスタンスのネームタグ
クリックすると詳細が見れるので、IPアドレスを確認する。

公開鍵で、TeraTermとWinSCPで接続できるように設定する。

Ubuntu セキュリティ関連設定

Apache

インストールされているか
yum list installed | grep httpd

インストール
yum -y install httpd

状態
service httpd status

起動(初期設定ではスタートアップしない)
service httpd start
OR
systemctl start httpd

スタートアップ設定
systemctl enable httpd

パス
/var/www/html
/etc/httpd/conf/httpd.conf

ファイアーウォール設定
firewall-cmd –add-service=http –permanent
firewall-cmd –reload

PHP

・インストール

何が入っているか確認する場合。
yum list installed | grep php

PHP関連のパッケージを削除する場合。
yum remove php-*

個別で何が入るか。

yum -y install php
php.x86_64
php-cli.x86_64
php-common.x86_64
php-fpm.x86_64

yum -y install php-devel
php-devel.x86_64

yum -y install php-pdo
php-pdo.x86_64

yum -y install php-gd
php-gd.x86_64

yum -y install php-mbstring
php-mbstring.x86_64

yum -y install php-mysqlnd
php-mysqlnd.x86_64

yum install php-json
php-json.x86_64

実際は、
yum -y install php php-devel php-pdo php-gd php-mbstring php-mysqlnd
のようにする。

必要な場合下記等も追加。
php-xml.x86_64
php-xmlrpc.x86_64
php-pecl-mcrypt.x86_64
php-pecl-mysql.x86_64

・Apacheの再起動

systemctl restart httpd

MySQL

・MariaDBの削除
sudo yum remove mariadb-libs
sudo rm -rf /var/lib/mysql

・リポジトリの追加
sudo rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

・MySQLのインストール
sudo yum install mysql-community-server

・バージョン確認
mysqld –version

・起動
sudo systemctl start mysqld.service

・自動起動
sudo systemctl enable mysqld.service

・rootのパスワード設定

pass=$(head /dev/urandom | tr -dc a-km-np-z2-9 | head -c 13); sudo mysql -u root -e “alter user root@localhost identified by ‘${pass}'”; echo $pass;

・文字コード変更

/etc/my.cnf
の中で以下のように修正。

[mysqld]
character-set-server = utf8
default_password_lifetime = 0

再起動
sudo systemctl restart mysqld.service

・MySQL Workbench

基本的に操作はWorkbenchから。

今回は外部にポート開けていないので、SSHポートフォワーディングで接続。

・Connection Method:Standard TCP/IP over SSH
・SSH Hostname:サーバーIPアドレス
・SSH User:root
・SSH Key File:鍵ファイル
・MySQL Hostname:127.0.0.1
・MySQL Server Port:3306
・Username:root
・Password:MySQLのrootパスワード

このような感じ。

WordPress

cd /var/www/html
sudo curl -LO http://ja.wordpress.org/latest-ja.tar.gz
sudo tar xzf latest-ja.tar.gz
sudo mv wordpress blog
cd blog
sudo cp wp-config-sample.php wp-config.php
sudo vim wp-config.php

以下を設定

define(‘DB_NAME’, ‘wpd’);
define(‘DB_USER’, ‘wpd_user’);
define(‘DB_PASSWORD’, ‘+6xya6=)RKn2+6xya6=)RKn2’);

apache用

sudo chown -R apache:apache /var/www/html/blog

最終処理

http://192.168.102.6/blog/wp-admin/install.php
にアクセス。

Visual Studio WebDeploy

今回はVPN環境で
サーバー:192.168.20.1
クライアント:192.168.20.3
となっている

サーバー側

・WebDeployをインストーラーから、完全でインストール

servermanager>管理>役割と機能の追加>役割ベースまたは機能ベースのインストール
IIS>管理ツール>管理サービス
IIS>Webサーバー>アプリケーション開発
ASP.NET 4.7
の2つインストールする。

inetmgr>サイトインスタンス(Default Web Site)右クリック>展開
・Web配置による発行の有効化

接続するためのURL
を保存しておく

inetmgr>サーバーインスタンス>管理サービス
・リモート接続を有効にする
・Windows資格情報のみ
・IPアドレスを指定(192.168.20.1)
を選択し、開始する。

firewall.cpl>詳細設定>受信の規則>新しい規則
ポート:8172/TCP
スコープ:192.168.20.0/24

クライアント側

インスタンス右クリック>発行>IIS>Web配置
を選択する。

・サーバー:https://192.168.20.1:8172/msdeploy.axd
(接続するためのURLのホスト部をVPNのIPアドレスに変更)

・サイト名:Default Web Site/app
(サーバー側と合わせる)

・ユーザー名、パスワードはWindowsユーザー

Windows ユーザー関連

ファイル名を指定して実行

・ユーザーアカウント
netplwiz
control userpasswords2

・ローカルユーザーとグループ
lusrmgr.msc

・ユーザーアカウント(コントロールパネル)
control userpasswords

コマンド

・ユーザーネーム確認
cmd>echo %username%
cmd>whoami

PowerShell

・ユーザー一覧
ps>Get-WmiObject Win32_UserAccount

・別ユーザーで実行
ps>Start-Process -FilePath ‘Powershell.exe’ -Credential ‘xxx’

コマンド(net user)

・ユーザー一覧
net user

・ユーザー情報
nset user xxx

・ユーザー追加 (ここではusrを追加)
net user usr /add

・パスワード設定
net user usr 1234

・ユーザー削除
net user usr /delete

・ゲストユーザーの有効化
net user guest / active:yes

コマンド(net localgroup)

・管理者グループ追加
net localgroup administrators usr /add

・グループ一覧
net localgroup

・グループの情報
net localgroup “xxx”

ビルトインアカウント

・SYSTEM
・LOCAL SERVICE
・NETWORK SERVICE

3つともビルトインアカウントで、OSがプロセスを起動するのに利用。
SYSTEMはAdministratorsグループと同等、残り2つはUsersグループと同等。

・ALL APPLICATION PACKAGES
・制限されたすべてのアプリケーションパッケージ

ストアアプリ(AppContainer)用のグループ。

・CREATOR OWNER

仮想ユーザであり、実際に作成したユーザーに対する権限を与える。

・TrustedInstaller

システムで重要なファイルを管理するためのグループ。

アクセス許可の継承

フォルダ右クリック>プロパティ>セキュリティ
グレーになっているチェックは上位フォルダからの継承。

基本的には上位フォルダの権限を継承していて、例えば別の場所で作成したフォルダでも移動すれば、移動先の権限が適用される。

フォルダ右クリック>プロパティ>セキュリティ>詳細設定>アクセス許可

・継承の無効化

上位フォルダから継承しているアクセス許可を削除する。全てのアクセス許可を削除か、現在継承しているアクセス許可を変換して現在のオブジェクトに適用する。

・子オブジェクトのアクセス許可エントリすべてを …

チェックすると、現在の設定を下位フォルダに再度継承させる。
(常チェックされているわけではなくチェックしたときに1度実行する)

C# Byte配列を16進数文字列へ

 

Visual Studio 名前変更

ソリューション名&プロジェクト名を変更する方法メモ。

プロジェクト>xxxのプロパティ>アプリケーション
・アセンブリ名
・規定の名前空間
・アセンブリ情報の必要な部分を変更

オブジェクトをバイナリシリアルで書き出したデータを名前変更後も利用する場合、名前を変更しても問題がないか確認したほうがいい。アセンブリ名が変わるとエラーになる。

ソリューションエクスプローラ>ソリューション右クリック
・名前の変更

ソリューションエクスプローラ>プロジェクト右クリック
・名前の変更

*.sln
をテキストエディタで開き、
xxx\xxx.csproj
の部分を変更し、実際のフォルダ名もあわせて変更する。

名前の変更とは関係ないが、忘れがちな部分。

・pdbファイルを生成しない
プロジェクト>xxxのプロパティ>ビルド
構成でReleaseを選択し、詳細を開き、デバッグ情報を無しに変更。

あと、.vsフォルダを削除しておく。

C# 別スレッドからコントロールにアクセス

あるいは、ラムダ式をMethodInvokerにキャストする。

・Invoke()の考え方として、Invoke()を呼び出したフォームに対して
別スレッドから操作をするメソッドを渡す。

・Invoke()の呼び出し方としては、複数回コントロールにアクセスする場合、Invokeの中ではなく、Invokeを複数回呼び出すような形にする。

・スレッドが別かどうか確認する場合(Controlにアクセスして大丈夫かと考える)
Control.InvokeRequired

 

Ubuntu MySQLバックアップ(cron,rsync)

cron

以下の3つの方法がある。

***

cd /etc/cron.d

拡張子がないファイルを直接保存する。
rootで644にする。

・記述方法

分 時 日 月 曜日 実行ユーザ 実行コマンド
となる。

(-)ハイフンでつなげて範囲を指定することもできるし、(,)カンマで区切って複数指定することもできる。(*)アスタリスクは全ての範囲という意味。

指定した数字は間隔ではなく、その数字と同じ値のときに実行されるという意味。間隔は(/)スラッシュで指定できる。

日と曜日については、2つとも(*)アスタリスクなら毎日。どちらか指定があればその指定した日となる。2つとも指定があればいずれかに当てはまる日となる。

指定がない場合の実行間隔は1分。例えば、 * */1 * * * とすると、(時=/1)は1時間ごとだが、(分=*)が1分ごと(*は全範囲)という意味なので、1分ごとになる。1時間ごとにしたい場合、0 * * * * のようにすればOK。ちなみに、(/)スラッシュを削除しただけの場合どうなるかというと、* 1 * * * となり、(時=1)なので、1時だけと思いがちだが、(分=*)が1分ごとなので、1:00から1:59まで1分ごとに実行されてしまう。

状態確認
sudo systemctl status cron

ログ確認
journalctl -e -u cron
uオプション:サービス指定
eオプション:最新のみ表示

***

/var/spool/cron/ユーザー名

ユーザー単位で管理される。
コマンドで管理する。

・基本コマンド

一覧
crontab -l

設定がなければ、crontab -e
で作成。

削除
crontab -r

編集
crontab -e

ユーザーの指定は不要。

***

/etc/crontab

root権限で管理される。

以下のファイルを変更すると反映される。

毎時実行
/etc/cron.hourly 
毎日実行
/etc/cron.daily
毎週実行
/etc/cron.weekly
毎月
/etc/cron.monthly

***

・タイムゾーン設定

sudo timedatectl set-timezone Asia/Tokyo
確認の場合、
sudo timedatectl
変更したら、
sudo systemctl restart cron

rsync

rsync オプション コピー元 コピー先
コピー元の最後に/があるとフォルダの中身だけ、/がないとフォルダ自身も含めてとなる。同期先の/は関係ない。

共有にバックアップでフルアクセスにしたい場合、
rsync -p –chmod=a+rwx -r src dst
chmodとpが必要でハマった。

送信元に無いファイルを削除、特定のファイルを除外する場合、
–exclude=’xxx’ –delete

・rsync + ssh

転送先で鍵作成
sudo ssh-keygen -t rsa

ファイル名を聞かれるのでidとする。パスフレーズも聞かれるが指定しない。

秘密鍵:id、公開鍵:id.pubが生成される。

公開鍵の内容は転送先にある
.ssh/authorized_keys
に記載する必要があるので、
sudo cat id.pub >> .ssh/authorized_keys
もし、
.ssh配下にauthorized_keysがない場合は、
mv id.pub authorized_keys
などとしてもOK。作成した場合、パーミッション注意
chmod 600 authorized_keys

(すでに.ssh/authorized_keysがある場合、複数可なので追記する)

秘密鍵:idを転送元に持ってくる。ここではid.keyという名前にしておく。
必要な場合、
sudo chown root:root id.key
sudo chmod 400 id.key

転送元で以下のように実行すればOK。

sudo rsync -auz -e “ssh -i /home/ubuntu/id.key” /home/ubuntu/mysql/ ubuntu@転送先アドレス:/home/ubuntu/share

MySQLのバックアップ

・rsyncスクリプト

sudo vim /home/ubuntu/backup.sh
にファイルを作成する。

所有者rootでパーミッションは700
sudo chmod 700 /home/ubuntu/backup.sh

フォルダを作成する
mkdir /home/ubuntu/mysql

・cron設定

/etc/cron.d
の中に、
適当な名前でファイル作成、今回は
sudo vim /etc/cron.d/mysql_backup
とする。

所有者rootで、パーミッションは644(rw/r/r)

中には、
0 2 * * * root /home/ubuntu/backup.sh
と記入する。

起動しているかどうか
sudo systemctl status cron

手動バックアップの場合

mysqldump –single-transaction –skip-lock-tables -u ユーザー名 -pパスワード -h ホスト名 db名 > xxx_date +%Y%m%d.sql

Windows netstatコマンド

オプションなしで、
netstat
だけだとESTABLISHED(接続中)
のみ表示される。

・オプション

nオプション
ポート番号やアドレスなど出力が数値になる(表示が早くなる)

aオプション
ESTABLISHED以外やUPDなど全て表示する。

bオプション
実行ファイルを表示(vを併用するとdllも出力する)

例えばLISTENINGだけ表示したい場合。
netstat -a | find “LISTENING”

・状態

LISTENING
待受

ESTABLISHED
通信中

TIME_EAIT
終了処理中(こちら側から終了処理)

CLOSE_WAIT
終了処理中(相手側から終了処理)

・見方

表示は左から、プロトコル、ローカルアドレス、外部アドレス、状態

0.0.0.0 / IPv4
[::] / IPv6
全てのNICを意味する。

127.0.0.1 / IPv4
[::1] / IPv6
自分自身を指す。同一ホスト内だけで通信できる。

LISTENINGでのローカルアドレスの
0.0.0.0
は全てのNICで受付けるという意味。

LISTENINGでのローカルアドレスに
IPアドレスが指定されていれば、
そのIPアドレスでしか受付けないという意味。

LISTENINGでの外部アドレスの
0.0.0.0
はanyという意味なので、送信元を限定しないという意味。

ESTABLISHEDのときのローカルアドレス、外部アドレスは、
そのアドレス同士で接続しているという意味。

Windows Server(Indigo) 初期設定

IndigoでWindowsServerのインスタンスを立ち上げVPN接続してみる。

インスタンスを作成したらダッシュボードからインスタンスを起動し、ダッシュボードに表示されているIPアドレスと、インスタンス作成時に入力したパスワードで接続する。ユーザー名はadministrator。

Windows 初期設定

先ずAutoHotkeyと、Google日本語入力の設定をする。

セキュリティ

・管理者名変更

secpol.msc>ローカルポリシー>セキュリティオプション>アカウント: Administrator アカウント名の変更
Administratorからadministratoruser等に変更。

・リモートデスクトップのポート変更

HKEY_LOCAL_MACHINE>SYSTEM>CurrentControlSet>Control
Terminal Server>WinStations>RDP-Tcp
PortNumberを3389から変更する。
ここでは63389とした。

・接続をTCPのみに変更

gpedit.msc>コンピューターの構成>管理用テンプレート>Windowsコンポーネント>リモートデスクトップサービス>リモートデスクトップセッションホスト>接続>RDPトランスポートプロトコルの選択
有効にしてTCPのみを使用を選択する。

・ファイアーウォールに規則を追加

firewall.cpl>詳細設定>受信の規則>新しい規則>ポート>TCP>特定のローカルポート
63389
を入力し、接続を許可する。

再起動

mstsc -v:xxx.xxx.xxx.xxx:63389
として接続してみてる。

VPNサーバー側

servermanager>役割と機能の追加>役割ベースまたは機能ベースのインストール>サーバープール画面はそのまま>リモートアクセス>機能の選択画面はそのまま>役割サービス
・DirectAccessにチェック。
・ルーティングにチェック。

servermanager>右上旗マーク>作業の開始ウィザードを表示する>VPNのみを展開します>ルーティングとリモートアクセスウィンドウ>左側サーバー右クリック>ルーティングとリモートアクセスの構成と有効化
カスタム構成をチェック。
・VPNアクセスをチェック。

servermanager>ツール>ルーティングとリモートアクセス>左側サーバー右クリック>プロパティ>セキュリティ
・カスタムIPsecポリシーをL2TP/IKEv2接続で許可するにチェック
・事前共有キーに適当な値を入力。

servermanager>ツール>ルーティングとリモートアクセス
>左側サーバー右クリック>すべてのタスク
・再起動をクリック。

servermanager>ツール>ルーティングとリモートアクセス
>左側サーバー右クリック>プロパティ>IPv4
・静的アドレスプールをチェック。
・適当の範囲を追加する。(192.168.20.1 – 192.168.20.5)

firewall.cpl>詳細設定>受信の規則>新しい規則>ポート>
・UDPをチェック
・特定のローカルポート:4500, 500, 1701
を追加し、接続を許可する。
・TCPをチェック
・特定のローカルポート:445
・スコープ:ローカル:192.168.20.1/リモート:192.168.20.0/24
を追加し、接続を許可する。

firewall.cpl>詳細設定>受信の規則>新しい規則>カスタム>すべてのプログラム
・プロトコルの種類:カスタム
・プロトコル番号:50
を追加する。(50はESP)

servermanager>ツール>コンピュータの管理>ローカルユーザーとグループ>ユーザー>該当のユーザーを右クリック>プロパティ>ダイヤルイン
リモートアクセス許可
・アクセスを許可をチェック。

 

firewall.cpl>詳細設定>受信の規則
から登録したもの以外全て無効化。

VPNクライアント側

Win10設定>ネットワークとインターネット>VPN>VPNを追加する
・VPNプロバイダー:Windows(ビルトイン)
・接続名:適当
・サーバー名またはアドレス:サーバーのIPアドレス
・VPNの種類:事前共有キーを使ったL2TP/IPsec
・サインイン情報の種類:ユーザー名とパスワード
・ユーザー名(オプション):サーバー側で作成したユーザー

上記作成されたネットワーク接続に対して、
ncpa.cpl>右クリック>プロパティ>ネットワーク
・インターネット プロトコル バージョン 6 (TCP/IPv6)のチェックを外す。
インターネット プロトコル バージョン 4 (TCP/IPv4)のプロパティ>詳細設定
・リモート ネットワークでデフォルトゲートウェイを使うのチェックを外す。

ActiveDirectory(サーバー)

使う場合。

servermanager>役割と機能の追加>役割ベースまたは機能ベースのインストール>サーバープールからサーバーを選択。
・Active Directory ドメイン サービス
を選択し、インストール

インストール進行状況の途中で、
・このサーバーをドメイン コントローラーに昇格する
をクリックする。

・新しいフォレストを追加する
を選択し、ルートドメイン名を追加する。
ad.sk-tech.jp

次の画面は機能そのまま、
フォレストの機能レベル、ドメインの機能レベル
・Windows Server 2016
・ドメインネーム システム(DNS) サーバー
をチェック
・グローバルカタログを
をチェック

パスワードを入力する。

基本的には以降はそのままで、最後にインストール。

・ユーザー作成

servermanager>ツール>ActiveDirectory>ユーザーとコンピュータ
・左側メニューUsersを選択し、
メニューボタンにある
現在のコンテナーに新しいユーザーを作成
を実行する。

姓名などあるが、とりあえずフルネームとユーザーログオン、パスワードを入力する。

ユーザーは次回ログオン時にパスワード変更が必要
のチェックを外す。

ログ

VPSなので、確認はしておいたほうがいい。

eventvwr>Windowsログ>セキュリティ
ログオン失敗
4625

eventvwr>カスタムビュー>サーバーの役割>RemoteAccess
リモート接続拒否
20271