【MySQL】レンタルサーバーのMySQLがロックされたときの対処方法

レンタルサーバーのMySQLのロックを解除してほしいという依頼を受け対応したので備忘録として残します。

Xサーバーのレンタルサーバー上のMySQLで
複数のテーブルを紐づけたUPDATE文を実行したところ、
結果が返ってこず、対象のテーブルのデータを更新しようとすると

というエラーで更新できなくなったとのこと。
また、レンタルサーバーのMySQLを再起動する方法は用意されていないとのことで、ロックを解除する必要があります。

以下の手順でロックを解除しました。

1.サーバーにSSHで接続する

専用サーバーやVPSでなくてもSSH接続できるレンタルサーバーが増えています。
今回のサーバーは「Xサーバー」のレンタルサーバーですが、SSH接続が用意されていました。

2.コマンドでMySQLにログインする

でパスワードを入力してログインします。
対象のデータベースだけの権限を持っているユーザーでOKです。

3.データベースを選択する

4.プロセス一覧を表示する

実行中のプロセスが一覧で表示されますので、
ロックの原因となっているSQLの「Id」欄をメモします。

5.プロセスをkillする

以上です。

その後、適切にインデックスを追加したことで
ロックすることもなくなりました。

【AlmaLinux9】opendkimのインストールで「nothing provides libmilter.so、nothing provides libmemcached.so」が出たら

以下のようなエラーが出たら

CRBリポジトリを有効化します。

再度dnf installでインストールできました。

GMOペイメントのAPIで3Dセキュア2.0を導入

2025年3月末までにECサイトへ3Dセキュア2.0の導入が義務付けられるらしいです。
カード決済の導入方式によっては、そこそこ工数のかかるシステム改修が必要です。
未対応のサイトがたくさん出てそうですね。

私のところにも3Dセキュア導入の見積依頼がいくつか来ました。
決済代行業者や導入方式によって実装方法は大きく変わってきますが、
ユーザー・ECサイト・決済代行業者・3DSサーバーの4者間の情報の流れはだいたい同じです。
なので、一度実装すると、二度目からは必要な作業を把握するのは早くなります。

直近で実装したのは、
GMOペイメントのAPIで実装されていたサブスクのシステムで、
新規申込み時に3Dセキュアを導入したいというものでした。

サブスクなので新規申込み時には決済はありません。
ユーザー登録とクレジットカード登録があるだけでした。

具体的には、

SaveMember.idPass(ユーザー登録)

SaveCard.idPass(カード登録)

で終わりです。

ここに3Dセキュア2.0を導入するためには、
決済処理の一種である「有効性チェック」を実行する必要があります。
有効性チェックは、実際に決済されるわけではなくカードの有効性チェックで使われます。
3Dセキュア認証では決済処理を伴わせる必要があるため、
カード登録時に3Dセキュア認証をさせるためにはこの有効性チェックを使用します。
(GMOペイメントの担当者もこの方法を指示してきました)

有効性チェック実行後、レスポンスとして3Dセキュアの認証URLが返ってくるのでリダイレクトします。
3Dセキュア認証後、コールバックで帰ってきたら「3Dセキュア2.0認証後決済実行」「ユーザー登録」「決済後カード登録」
という流れになります。

具体的には、

EntryTran.idPass(取引登録(有効性チェック))

ExecTran.idPass(決済実行(有効性チェック))

3Dセキュアのサーバへリダイレクト(3Dセキュア認証)

コールバックURLに戻ってくる

SecureTran2.idPass(3Dセキュア2.0認証後決済実行)

SaveMenber.idPass(ユーザー登録)

TradedCard.idPass(決済後カード登録)

【GoogleマップAPI】fitBounds実行時に特定の方向だけパディングする

GoogleマップのJavaScript APIを使ったマップツールの修正依頼が来ました。

Googleマップで複数のマーカーを設置した際に、
すべてのマーカーが表示されるように自動で表示領域や縮尺をいい感じに調整してくれる

というメソッドがあります。

第一引数にマーカーの座標を入れてやるだけ(説明は割愛)なので
とても簡単で重宝するメソッドなのですが、

とあるシステムで、マップに重なる形で左側にスライド式の開閉メニューがあり、
普通にfitBoundsを実行すると一部のマーカーがメニューで隠れてしまうという問題がありました。

マーカーがメニューに隠れないようにしてほしいというのが今回の依頼なのですが、これは簡単に対応できます。
fitBoundsの第2引数でパディングを指定するだけです。

たとえば左メニューの幅が400pxだった場合は

とするだけで左に400pxパディングした形でfitBoundsが実行されるので
マーカーがメニューに隠れることがなくなります。

今回のシステムではメニュー幅は固定で、メニューの開閉状態だけ考慮すればよかったのでさらに簡単でした。

TinyMCEをカスタマイズ

久しぶりにTinyMCEをカスタマイズする案件があり、以下のカスタマイズを行いました。

bタグがstrongに変換されないようにする

見出しの選択肢をカスタマイズする

※見出しをツールバーに出すのは「formatselect」

下線をstyleではなくuで追加する

Bとは別でstrongボタンを作る

(ツールバーに「strong」を追加)

設定はすべて

の中に書きます。