かきスタンプ

福岡でフリーランスの物流系のエンジニアやってます。

MySQL起動時のエラー:Can't connect to local MySQL server through socket

【 環境:Amazon Linux AMI 2016.09.0 (HVM) 】

MySQL起動時に時々、以下のようなエラーが出てた。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

MySQLデーモンの再起動で解決可。コマンドは以下。

sudo /etc/init.d/mysqld restart

mysql.sock は、サーバがローカルクライアントと通信する時に使用するファイルで、接続時に自動生成される模様。 デーモンが異常終了するか、socketファイルが異常を起こした場合に発生するみたい。 デーモンの起動確認は「service --status-all」か「ps aux」あたりで。

EC2を使っていて、AMIをシャットダウンせずにインスタンスを停止させると、高確率で発生する。 ブラウザから「停止」を選択させるのではなく、ちゃんとシャットダウンさせる習慣をつけておこう。

再起動だけでは解決できないケースもあり、その場合は以下で。

sudo touch /var/lib/mysql/mysql.sock
sudo chown mysql:mysql /var/lib/mysql
sudo /etc/init.d/mysqld restart

参考サイト様

ubuntu:サービス確認

サービスの稼働状態を確認

service --status-all
 
【状態】
[+] - サービス稼働中
[-] - サービス停止中
[?] - サービスの状態を判断できない

Cent OS で実行すると、随分見え方が異なる。
PIDまで確認できる分、そっちの方が良さげ。 また、chkconfigで、稼働・停止時などのサービスの状態を確認できるが、ubuntuには無いっぽい。 代替案として以下のコマンドがあった。

ランレベル単位でのサービス起動確認

sysv-rc-conf

無ければ、apt-get install sysv-rc-conf でインストール。

Oracle:デフォルト設定のパスワード有効期限切れ対策

Oracle11g以降は、パスワードの有効期限がデフォルトで180日となっています。 そのままにしておくと、180日経過後に突然ログインできなくなるので、パスワードの有効期限を延ばす(もしくは無期限に設定する)必要があります。

以下、SYSDBAで実行。

パスワード有効期限確認方法

select * from dba_profiles where resource_name = 'PASSWORD_LIFE_TIME'

パスワード有効期限を無期限に変更

alter profile default limit password_life_time unlimited

既に有効期限が過ぎていた場合、アカウントロックがかかっているので、その場合は一度パスワードを変更した後、ロックを解除する。

パスワード変更

alter user <user_name> identified by <new_password> 

アカウントロック解除

alter user <user_name> account unlock

ちなみにMySQLにも同様の機能が搭載されたが、「(管理者の意図に反して、ある日突然接続ができなくなるなんて)バグじゃねえか!」 という意見があり、廃止される見込みらしいです。(Oracle社で開催されたMySQL勉強会で聞いたネタ)

だよね。俺もそっちが正しいと思う。

Oracle:テーブルのみをエクスポート

Oracleでテーブルのみをエクスポートする方法。

expを使う場合

 exp user/pass@net_service_name TABLES=% FILE=filename.dmp 

expdpを使う場合

expdp \"user/pass@net_service_name AS SYSDBA\" DIRECTORY=dump_save_directory DUMPFILE=filename.dmp TABLES=schema_name.%

※SCHEMASオプションを付けるとエラーとなります。

インデックスや制約情報も合わせて取ってくれます。

Windows:復元ポイントについて

Windows 8 が入っているノーパソの調子が悪くなり、調査とパッチ当てに結構時間使った。何が原因かは知らんが、定期的に復元ポイント作っておくように心がけておこうと思った。

復元ポイント作成&復元

Windows 7、8、10】

コントロールパネル→システム→システムの保護→作成

 

【XP】

すべてのプログラム→アクセサリ→システムツール→システムの復元

作成したファイルはそのままで、環境だけを元に戻してくれる。 

何かしらのツールをインストールする前には復元ポイントを作っておく事にしよう。

サービスパックの復元もできるみたいで、XPで試したところ、SP3→SP2に戻す事も可能でした。というか、アップデートする時に、自動で復元ポイントを作ってくるので、別に行儀の悪いやり方ではないと思われます。

ちなみに「コントロールパネル→プログラムの追加と削除」にてサービスパックをアンインストールすると、アップデートした時点の復元ポイントが自動で削除されます。

どちらを使うかはお好みで。

Oracle:表領域ごとの使用量、使用率、空き容量を表示

Oracleにて、表領域ごとの使用量、使用率、空き容量を表示するSQLを書いてみた。

SQL

select 
    DBA_DATA_FILES.TABLESPACE_NAME
   ,min(DBA_DATA_FILES.BYTES)/1024/1024  as  "現サイズ(MB)"
   ,round(min(DBA_DATA_FILES.BYTES)/(1024*1024) - sum(DBA_FREE_SPACE.BYTES)/ (1024 *1024),2)  as  "使用量(MB)"
   ,round( (min(DBA_DATA_FILES.BYTES)/(1024 *1024) - sum(DBA_FREE_SPACE.BYTES)/(1024 *1024))/ (min(DBA_DATA_FILES.BYTES)/1024/1024) *100,2)  as  "使用率(%)"
   ,round(sum(DBA_FREE_SPACE.BYTES)/(1024 *1024),2) "空き容量(MB)"
from 
    DBA_DATA_FILES
   ,DBA_FREE_SPACE
where  1=1
  and  DBA_DATA_FILES.FILE_ID = DBA_FREE_SPACE.FILE_ID
group by 
    DBA_DATA_FILES.TABLESPACE_NAME
order by 1

実行結果例

NAME SIZE(MB) 使用量(MB) 使用率(%) 空き(MB)
TABLESPACE01 4103.3 2899.2 70.66 1204
TABLESPACE02 730 676.5 92.68 53.44
TABLESPACE03 370 361.3 97.65 8.69

 

SQL plusで実行したい場合は、1行あたりの表示文字数を変更。

 set linesize 500

など。 

Oracle:どんなSQLが過去に発行されたか追跡

過去に発行されたSQLを表示

select * from v$sqlstats

 これだけだと、誰が実行したか(ユーザ、マシンなど)がわからないので、合わせて知りたい場合はセッション情報と結びつける。

セッション確認

select * from v$session

 v$sqlstats.sq_id と v$session.sql_id は結びつく。