mysqlでカラムを削除しようとしたら、エラーが出て削除できなかった。
phpmyadmin で削除を実行すると以下のエラー
---------------------------------------------------------------------------------------
#1034 - 表'テーブル名'の索引ファイル(key file)の内容が不正です。修復を試行してください。
---------------------------------------------------------------------------------------
指示通り phpmyadmin で修復を試行するも、innodb では修復できないという内容が返ってきて変化なし。
ターミナルから削除してみるもやはりエラー。
エラー内容
---------------------------------------------------------------------------------------
Incorrect key file for table~
---------------------------------------------------------------------------------------
データの破損時に出るエラーらしいが、ディスク容量不足でも起こるとわかった。
カラムを削除するとき ALTER TABLE ~ が実行されるらしいが、このSQLは対象のテーブルを内部でコピーするので、テーブルと同じ容量以上の空きが必要らしい。
mysqlの空き容量を調べる。
---------------------------------------------------------------------------------------
df -h /var/lib/mysql;
---------------------------------------------------------------------------------------
結果
---------------------------------------------------------------------------------------
Filesystem Size Used Avail Use% Mounted on
/dev/vda3 97G 90G 1.9G 99% /
---------------------------------------------------------------------------------------
容量を99%利用していた。
扶養テーブルを削除したらエラーは出なくなった。
念のため、データが破損していないかのエラーチェックも行った。
---------------------------------------------------------------------------------------
check table テーブル名 quick
---------------------------------------------------------------------------------------
カテゴリー:mysql
他のデスクトップPCやスマホからの wifi には問題なし。
以下、解決策。
●イーサネットの省電力設定を無効にする
「電源の管理」タブ → 「電力の節約のために、コンピュータでこのデバイスの電源をオフにできるようにする」を OFF
イーサネットの各種設定を見直す
●「詳細設定」タブで次の設定を ”無効” に変更
・Advanced EEE
・NSオフロード
・受信側スケーリング
・グリーンイーサネット
・省電力型イーサネット(EEE)
下記ページの情報
https://tomokatsu.hatenablog.com/entry/2021/11/05/201044
カテゴリー:Windowsトラブルシューティング, 未分類
CentOS6.8 で let's encrypt の自動更新が出来なくなった。
自動更新に必要な certbot-auto というプログラムが Python 3.5 以上を必要としているが、サポート期限切れである CentOS6.8 では現在 Python 3.4 までしかインストールできないようだ。
SSL証明書の更新ができないと困るので、一時的にlet's encrypt から さくらのSSL に乗り換えることにした。
さくらのSSL(990円) のSSL証明書はマルチドメインに対応していないので、ドメインの数だけ証明書の発行が必要になる。
参考:
https://www.idcf.jp/rentalserver/user-support/knowledge/ssl/sni.html
最初に必要なことはCSRの作成
SSL証明書の発行に必要なCSRのつくり方
openssl が必要なのでインストールされているか確認
--------------------------------------------
openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
--------------------------------------------
OK
秘密鍵を置くディレクトリに移動。
/etc/ssl というフォルダがあったのでその中に sakurassl-sslkey というディレクトリを作ってそこに保存した。
移動
--------------------------------------------
cd /etc/ssl/sakurassl-sslkey
--------------------------------------------
OpenSSL のコマンドで RSA 暗号方式の秘密鍵を作成する場合
--------------------------------------------
openssl genrsa コマンドを利用
--------------------------------------------
秘密鍵ファイルの生成
--------------------------------------------
openssl genrsa -out ○○○.key 2048
--------------------------------------------
これで秘密鍵ができる
CSR生成
--------------------------------------------
openssl req -new -key ○○○.key -out ○○○.csr
--------------------------------------------
openssl genrsa -out wwwexamplecom.key 2048
openssl genrsa -des3 2048 > www.*****.jp.key
必須項目(他は空欄でいい)
--------------------------------------------------------------
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Aichi
Locality Name (eg, city) [Default City]:Nagoya
Organization Name (eg, company) [Default Company Ltd]:Nomu
Common Name (eg, your name or your server's hostname) []:利用するドメイン
--------------------------------------------------------------
入力が終わるとCSRができる。
これを使ってさくらのSSLの証明書を購入。
SSLの証明書を完了させるにはドメインの所有者確認があるので、以下のURLに認証ファイルをアップロードする。
http://example.com/.well-known/pki-validation/[ランダムな文字列].txt
購入後メールで証明書が届くのでサーバーにアップロードして
/etc/httpd/conf.d/vhost-le-ssl.conf ファイルを書き換える。
↑vhost-le-ssl の le はレッツエンクリプトの意味だと思う。
レッツエンクリプトをインストール時に作られたファイルを流用したことになる。
書き換える値は三つ
--------------------------------------------------------------------------------
SSLCertificateFile /etc/pki/tls/certs/localhost.crt ← 秘密鍵のファイルを指定
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key ← サーバー証明書のファイルを指定
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt ← 中間証明書のファイルを指定(中間証明書が無い場合は省略可)
--------------------------------------------------------------------------------
構文チェック
---------------------------------------------------
httpd -t
---------------------------------------------------
apache 再起動
---------------------------------------------------
service httpd restart
---------------------------------------------------
証明書が更新されていることを確認。
カテゴリー:CentOS
let's encrypt を cron で更新した際に飛んでくるメールにエラー(WARNING)が記載されていた。
-------------------------------------------------------------------------
WARNING: couldn't find Python 3.5+ to check for updates.
Skipping upgrade because new OS dependencies may need to be installed.
To upgrade to a newer version, please run this script again manually so you can
approve changes or with --non-interactive on the command line to automatically
install any required packages.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/hyogen.info.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certs are not due for renewal yet:
/etc/letsencrypt/live/hyogen.info/fullchain.pem expires on 2022-08-06 (skipped)
No renewals were attempted.
No hooks were run.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-------------------------------------------------------------------------
Python 3.5+ が見つからないとのこと。
いつからエラーが出ていたか過去のメールを調べてみたら2020年1月の時点でエラーが確認できた。
一年五か月前からエラーが出てはいるが、証明書の有効期限は更新されている。
メールにしたがって manually(手動)で更新して見る。
-------------------------------------------------------------------------
/var/myshellscript/lets_encrypt_renew.sh
-------------------------------------------------------------------------
もしくは
-------------------------------------------------------------------------
# sudo /root/certbot-auto renew --post-hook "sudo service httpd restart"
-------------------------------------------------------------------------
centos-release-scl(10:7-4.el6.centos)と centos-release-scl-rh(2-4.el6.centos)がインストールできないとエラーが出る
-------------------------------------------------------------------------
===================================================
パッケージ アーキテクチャ バージョン リポジトリー 容量
===================================================
インストールしています:
centos-release-scl noarch 10:7-4.el6.centos extras 12 k
依存性関連でのインストールをします。:
centos-release-scl-rh noarch 2-4.el6.centos extras 12 k
トランザクションの要約
===================================================
インストール 2 パッケージ
総ダウンロード容量: 24 k
インストール済み容量: 39 k
パッケージをダウンロードしています:
http://vault.centos.org/6.8/extras/x86_64/Packages/centos-release-scl-7-4.el6.centos.noarch.rpm: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
他のミラーを試します。
To address this issue please refer to the below knowledge base article
https://access.redhat.com/articles/1320623
If above article doesn't help to resolve this issue please open a ticket with Red Hat Support.
http://vault.centos.org/6.8/extras/x86_64/Packages/centos-release-scl-rh-2-4.el6.centos.noarch.rpm: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
他のミラーを試します。
パッケージのダウンロードでエラー:
10:centos-release-scl-7-4.el6.centos.noarch: failure: Packages/centos-release-scl-7-4.el6.centos.noarch.rpm from extras: [Errno 256] No more mirrors to try.
centos-release-scl-rh-2-4.el6.centos.noarch: failure: Packages/centos-release-scl-rh-2-4.el6.centos.noarch.rpm from extras: [Errno 256] No more mirrors to try.
Could not enable SCL. Aborting bootstrap!
-------------------------------------------------------------------------
centos-release-scl と centos-release-scl-rh の該当バージョンがインストールされていないのか確認
-------------------------------------------------------------------------
yum list installed | grep centos
-------------------------------------------------------------------------
該当なし。
インストールはできるのか確認。
-------------------------------------------------------------------------
yum list | grep centos
-------------------------------------------------------------------------
インストール可能な一覧には含まれている
-------------------------------------------------------------------------
centos-release-gluster7.noarch 1.0-1.el6.centos extras
centos-release-scl.noarch 10:7-4.el6.centos extras
centos-release-scl-rh.noarch 2-4.el6.centos extras
centos-release-storage-common.noarch 1-2.el6.centos extras
-------------------------------------------------------------------------
しかしインストールはできない。
http://vault.centos.org/6.8/extras/x86_64/Packages/centos-release-scl-rh-2-4.el6.centos.noarch.rpm にブラウザでアクセスしてみると
centOS6.8 には centos-release-scl-7-3.el6.centos.noarch.rpm しか提供されていない。
centOS6.10 には 7-4 があった。
カテゴリー:CentOS, Python
利用しているメーラー(MTA)の確認
----------------------------------
alternatives --display mta
----------------------------------
postfixを利用している場合は下記の結果になる
----------------------------------
リンクは現在 /usr/sbin/sendmail.postfix を指しています
----------------------------------
sendmaiを利用している場合は下記の結果になる
----------------------------------
リンクは現在 /usr/sbin/sendmail.sendmai を指しています
----------------------------------
メールログの場所
---------------------
/var/log/maillog
---------------------
カテゴリー:CentOS
webhookで受信したデータから特定の情報を取り出す覚書
PHPでの書き方
//customer_id を使ってメールアドレスを取得
$customer = \Stripe\Customer::retrieve($customer_id);
$customer_email = $customer->email;
カテゴリー:PHP, stripe
stripe で webhook の動作テストとして、サブスクリプションの支払いエラーを出す手順
1.stripe の dashboard をテストモードにして顧客を作成。
2.顧客のクレジットカード番号は以下のものを登録
4000 0000 0000 0341
stripe の document(組み込みをテストする)
3.この顧客でサブスクリプションを作成
charge.failed イベントが発生する。charge.failed をリッスンしておけば webhook で通知が受け取れる。
カテゴリー:stripe
ipアドレス別でサーバーに接続している数を調べるコマンド
-----------------------------------------------------------
netstat -tan | awk '{print $5}' | cut -d : -f1 | sort -n | uniq -c | sort -n
-----------------------------------------------------------
オプションの説明
a → すべてのネットワーク接続を表示する
n → DSN逆引きを行わない(ipアドレスで表示)
t → TCPのみを表示する
awk '{print $5}' → 5フィールド目を取り出す
cut -d : -f1 → デリミタ(区切り文字)「:」を指定。フィールド1を取り出す
sort -n → データを文字ではなく、数値として並び変える。次のuniq が隣り合った行しか比較しないので必要
uniq -c → 各行の前に出現回数を出力する。隣り合った行しか比較しない
sort -n → データを文字ではなく、数値として並び変える。出現回数順に並べ替える
カテゴリー:linux
現在の設定を確認
--------------------------------------------
# sysctl vm.panic_on_oom kernel.panic
vm.panic_on_oom = 0
kernel.panic = 0
--------------------------------------------
vm.panic_on_oom
OOM Killer が実行される際に、カーネルパニックを起こさせるかを制御するパラメータ
0 → カーネルパニックしない
1 → カーネルパニックする。但し cgroup 制限により物理メモリがまだ残っている場合にはカーネルパニックしない。
2 → 必ずカーネルパニックする
カーネルパニックとは、オペレーティングシステム(OS)のカーネル部分において、何らかの理由で致命的なエラーが発生し、安全に復旧することができなくなった状態。
kernel.panic = 0 → なにもしない
kernel.panic = 30 → 30秒後にリブート
--------------------------------------------
sysctl -a | grep vm.over
--------------------------------------------
現状
--------------------------------------------
vm.overcommit_memory=1
vm.panic_on_oom=1
kernel.panic=10
--------------------------------------------
vm.overcommit_memory:オーバーコミットするかどうかの設定
vm.overcommit_memory = 0 → オーバーコミット有効。実メモリの大きさまで割り当てる。
vm.overcommit_memory = 1 → オーバーコミット有効。実メモリ以上に割り当てる。
sysctl.conf を下記のように変更
#oom になったらカーネルパニックにさせてサーバーを再起動
--------------------------------
vm.overcommit_memory=1
vm.panic_on_oom=1
#15秒後に再起動
kernel.panic=15
--------------------------------
設定を反映
--------------------------------
sysctl -p
--------------------------------
カテゴリー:CentOS, サーバートラブル・つながらない, サーバー設定
monit を導入する
ダウンロードできるか確認
-----------------------------------
yum list available | grep monit
-----------------------------------
monit をインストール
-----------------------------------
yum install monit
-----------------------------------
設定ファイルをいじるので原本をコピー
-----------------------------------
cp -p /etc/monit.conf /etc/monit.conf_org
-----------------------------------
※centOS7.x系では設定ファイル名は monitrc
起動しているか(monitの状態確認)
-----------------------------------
monit summary
-----------------------------------
もしくは
-----------------------------------
monit status
-----------------------------------
結果:起動していない
-----------------------------------
Monit: the monit daemon is not running
-----------------------------------
monit を起動させる(centOS6.x系)
-----------------------------------
service monit start
-----------------------------------
monit を起動させる(centOS7.x系)
-----------------------------------
systemctl start monit
-----------------------------------
設定ファイルの編集
-----------------------------------
vi /etc/monit.conf
-----------------------------------
monit のログ(デフォルト)
-----------------------------------
cat /var/log/monit
-----------------------------------
monit.conf を見ると、include /etc/monit.d/ 以下のファイルがインクルードされているのが分かる
-----------------------------------
# Include all files from /etc/monit.d/
include /etc/monit.d/*
-----------------------------------
監視対象のデーモンは /etc/monit.d/ に個別にファイルを作ればいい。
crond の監視をする場合、下記の内容で crond.conf というファイル名にして /etc/monit.d の直下に置く
-----------------------------------
check process crond with pidfile /var/run/crond.pid
start program = "/etc/init.d/crond start"
stop program = "/etc/init.d/crond stop"
if 5 restarts within 5 cycles then unmonitor
-----------------------------------
mysqldはこれ
-----------------------------------
check process mysqld with pidfile /var/run/mysqld/mysqld.pid
start program = "/etc/init.d/mysqld start"
stop program = "/etc/init.d/mysqld stop"
if 5 restarts within 5 cycles then unmonitor
-----------------------------------
httpd(apache)はこれ
-----------------------------------
check process httpd with pidfile /var/run/httpd/httpd.pid
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if 5 restarts within 5 cycles then unmonitor
-----------------------------------
メールの設定。monit.conf に書く
-----------------------------------
#yahooメールの送信サーバーを指定
set mailserver localhost
#アラートメールの内容
set mail-format {
from: monit@example.com
subject: $HOST : $SERVICE - $EVENT
message: Monit
ACTION : $ACTION
SERVICE : $SERVICE
at $DATE on $HOST.
DESCRIPTION : $DESCRIPTION
}
#送信先
set alert 自分のメール@yahoo.co.jp
-----------------------------------
個別設定ファイルを作ったらシンタックスのチェックも忘れずに
-----------------------------------
monit -t
-----------------------------------
シンタックスに問題なければ設定を反映
-----------------------------------
monit reload
-----------------------------------
サーバーが起動した際に monit も自動起動するか確認
-----------------------------------
# chkconfig --list monit
monit 0:off 1:off 2:off 3:off 4:off 5:off 6:off
-----------------------------------
run level 3 ~ 5 が on になっていれば自動起動する。↑これでは起動しない。
ちなみに mysqld の run level を確認すると 3~ 5 が on になっていた。
----------------------------------
#chkconfig --list mysqld
mysqld 0:off 1:off 2:off 3:on 4:on 5:on 6:off
---------------------------------
monit を自動起動に設定する
---------------------------------
chkconfig monit on
---------------------------------
スクリプトにより unmonitor になった場合に monitor に戻すとき
-----------------------------------
monit monitor all
-----------------------------------
一時的に unmonitor するとき
-----------------------------------
monit unmonitor crond
もしくは
monit unmonitor all
-----------------------------------
一度 unmonitor になると自動で戻らないので cron で定期的に戻す
-----------------------------------
#60分ごとに unmonit をリフレッシュ
*/60 * * * * /usr/bin/monit monitor all
-----------------------------------
マニュアルを開く
-----------------------------------
man monit
-----------------------------------
カテゴリー:CentOS, サーバートラブル・つながらない