2839 件中 1 - 10 件を表示
次の 10 件 »
ConoHaの上でひたすらMySQLをビルドする 2021

このエントリは ConoHa Advent Calendar 2021 と MySQL Advent Calendar 2021 の1日目の記事です。

ついに6回目を迎えた、「定点観測っぽく1GBのVPSでひたすらビルドするシリーズ」、最近のMySQLのビルドにはパワーが必要ですね。

[さらに読む]
MySQL Pluginの作成

MySQL8.0以降

MySQLでは、自分でプラグインを作成して、機能拡張する事が可能です。

詳細は

  • ここでは、Integer TimeStampを作成しています。
  • MySQL のヘッダファイルをincludeしてコードを作成
  • コンパイルして作成された、*.soをpluginディレクトリーにコピー
  • 作成したモジュールを指定してcreate functionで関数を作成
[root@ip-192-168-2-30 src]# vim inttime.c 
[root@ip-192-168-2-30 src]$ cat inttime.c 
#include <mysql.h>
#include <sys/time.h>

bool inttime_init(UDF_INIT *initid,UDF_ARGS *args, char *message) {
  return 0;
}

void inttime_deinit(UDF_INIT *initid) {};

unsigned long int inttime(UDF_INIT *initid, UDF_ARGS *args, char *result,
                          unsigned long  *length, char *is_null, char *error)
{
  struct timeval tv; …
[さらに読む]
今日は、 optimizer trace 便利らしいので使ってみたの日。

目次

[さらに読む]
MySQL Shell のパラレルテーブルインポートの実装がスマートだった件

MySQL Shell のパラレルテーブルインポートの実装が興味深かった

MySQL Shell のパラレルテーブルインポート

MySQL Shell 8.0.17 で導入された MySQL Shell パラレルテーブルインポートユーティリティ util.importTable() は、大規模なデータファイルの MySQL リレーショナルテーブルへの高速データインポートを提供します。 このユーティリティは、入力データファイルを分析してチャンクに配布し、パラレル接続を使用してチャンクをターゲット …

[さらに読む]
MySQL の認証プロトコル

認証がプラグイン化された最近のMySQL(5.5くらい?)の認証時のプロトコルをちゃんと理解してなかったので調べてみた。

基本的にはこんな感じ

クライアントが接続するとサーバー(mysqld)から次の内容のパケットが送られる:

  • プロトコルバージョン: 現在のところ "10"
  • サーバーバージョン: "8.0.27" とか
  • スレッドID
  • パスワードハッシュ化のためのデータ(チャレンジ)
  • サーバーの機能(ケイパビリティ)
  • サーバーのデフォルト文字コード(collation)
  • 認証方式: caching_sha2_password とか

それの応答としてクライアントが次のパケットを送る:

  • クライアントフラグ
[さらに読む]
今日は、MySQL8.0.27のバイナリの変更について調べてみたの日。

目次

[さらに読む]
PHPカンファレンス2021に参加しました…のポエム

PHP Conference Japan 2021 に参加しました。


参加といっても家族との兼ね合いだったりで、正直「自分のセッション以外はほぼほぼ不参加」でした(´・ω・`)


「オンラインxx」の「xx」が終わった瞬間に現実(?)に引き戻される感があるので、来年はオフラインでやれる状態になっていると良いですね。。


----


最初は応募しよう応募しようと思いつつ、 転職 もしたばっかで案外忙しい…と諦めていたんですが、アディショナルタイムのツイートを見ていてもたってもいられなくなり、結局応募しました。


[さらに読む]
LEFT JOINのONに書くかWHEREに書くかで結果セットが変わるやつのサンプル

TL;DR

  • リテラルと比較する条件のこと
    • INNER JOINならONでもWHEREでもどっちでも同じ結果になる、マッチしない行は影も形も出てこない
    • OUTER JOINならONに書いた時は「それにマッチしなければNULL詰めの行が返る」、WHEREに書いた場合は「それにマッチしない行は表示されない(= INNER JOINと一緒)」
  • LEFT JOINの左右どちらのテーブルでもこうなるのはちょっと面白い(?)
    • ゆっくり考えればわかるんだけど、2度見してしまった。。
CREATE TABLE t1 (num int);
INSERT INTO t1 VALUES (1), (2), (3);

-- INNER JOIN で WHERE
SELECT * FROM t1 JOIN t1 AS t2
ON t1.num = t2.num
WHERE t2.num IN (1, 3);
+------+------+
| num | num |
+------+------+
| …
[さらに読む]
「MySQLのフェイルオーバーテストをする」と聞いてぼんやり思ったこと

TL;DR

  • 負荷をかけながらフェイルオーバーテストをするなら、負荷クライアント側で「どの書き込みが成功したのか」のログは必ず取っておく
    • でないと、フェイルオーバー起因でデータロストが発生するのかしないのかのチェックができない

フェイルオーバーシナリオ

スイッチオーバー(手動での切り替え)を含めてざっと思いつくのはこれくらい。

  1. スイッチオーバー
  2. mysqldの正常終了
  3. mysqldの異常終了、特に、mysqld_safeやsystemdがmysqldを再起動させてしまう環境
  4. mysqldのハングアップ
  5. カーネルパニック
  6. ファイルシステムのハングアップ
  7. 電プチ

スイッチオーバー

[さらに読む]
MY-001192 Can't execute the given command because you have active locked tables or an active transaction に出会った

他にも出る要因はあるはずだけど、今回は「トランザクション中に SET GLOBAL read_only = 1 」をやろうとして出た。
珍しかったので記念パピコ。

mysql80 25> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql80 25> SET GLOBAL read_only = 1;
ERROR 1192 (HY000): Can't execute the given command because you have active locked tables or an active transaction

実際には BEGIN で始めたわけじゃなくて、迂闊に autocommit = 0を指定したら出た。

2839 件中 1 - 10 件を表示
次の 10 件 »