動かざることバグの如し

近づきたいよ 君の理想に

mysql

MySQLのレプリケーションでLast_SQL_Errno: 1594

MySQLでレプリケーションを構築している際、スレーブノードのリレーログ解析中にエラー番号1594が発生し、レプリケーションプロセスが中断される問題について、対処策を提案します。 このエラーの発生は、マスターサーバのバイナリログが破損、スレーブサー…

MySQLでテーブルの文字コードをutf8mb4に一括変更する

環境 MySQL utf8mb4に変更する ALTER TABLE posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; utf8に戻す ALTER TABLE posts CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

UbuntuでMariaDBを複数起動させる方法(systemd編)

環境 Ubuntu 22.04 MariaDB 10.8 やりたいこと 1つのサーバーで複数のMariaDBを起動させたい。とはいえ全部のポートが3306だとコンフリクトしてしまうので ポート番号 データ格納場所 プロセスファイル、ソケットファイル ログパス は別々にしたい 調べてみ…

MySQL公式のKubernetesパッケージ「mysql-operator」をインストール

環境 Kubernetes 1.24 mysql-operatorとは Kubernetes上でデータベースを動かすのは結構難しいらしく、独自のCRD実装したオペレーターでインストールすることが一般的っぽい。 そこでMySQL公式がMySQL Operatorを出しているのだが、2022年5月についにGAにな…

Sequel Aceでソケット接続するとエラーになる

環境 Mac OS Monterey Sequel Ace 3.4.4 症状 Sequel Proの後継アプリのSequel Ace。バグが治ってたり、機能が増えていたりと使わない理由がまったくないのだが、1つだけ問題がある。 ソケット接続ができないのである。 例えば以下のように接続しようとする…

Node.jsのMySQLでAsync/Awaitで接続する

環境 Nodejs 12 やりたいこと Nodejsを使ってMySQLに接続したい。今どきのasync / awaitを使っていい感じに書きたい。というかコールバック書きたくない インストール 有名なのは mysql なのだが、mysql2というのもある。 すごく昔にsidorares/nodejs-mysql-…

MySQLでToo many connectionsの原因クエリ特定の対処法

環境 MySQL 5.6以降 症状 max_connectionsの設定を大きくしているのにもかかわらず、なんらか悪いSQLが走ってしまってテーブルがロックしてしていまい「Too many connections」エラーになる。 対応方法 まずは焦らずロックの原因になってしまっているSQLを(…

mysqlslapでMySQLサーバーの負荷テストをサクッと行う

環境 MySQL 5.6 実はMariaDBにも同じコマンドが入っていたので仕様同じで使えるはず やりたいこと MySQLサーバーの負荷テストを「手軽」に行いたい やれやれまたツールの選定作業か、、と思って探していたらどうも公式がツールを「mysqlslap」という名前で出…

RailsでMySQLのストレージエンジンを指定する方法

環境 Rails 5.2 やりたいこと RailsのMySQLでMyISAMを使いたい。が、指定しないとInnoDBになってしまう。RailsだとマイグレーションスキーマのCreate tableに毎回書かなきゃいけなくて面倒。 かといってMySQL側でデフォルトでセットしようにも [mysqld] defa…

MySQLでテーブルごとのデータ量確認するSQL

環境 MySQL 5.7 やりたいこと どのテーブルが容量喰ってるのか調査したい SQL SELECT table_name "Table", engine,table_rows "Table Rows", ( data_length + index_length ) / 1024 / 1024 / 1024 "Data (GB)", ( data_free )/ 1024 / 1024 / 1024 "Free Sp…

innoDBのデータベースがぶっ壊れたときの対応メモ

/var/lib/mysqlのib_logfile0、ib_logfile1、ibdata1は生命線になる xxxx.frmとxxxx.ibdもとっておくこと 復活手順 同一DBに同じスキーマのテーブルを作成(別テーブル名で可) ALTER TABLE example_table DISCARD TABLESPACE;を実行 example_table.ibdが消…

MySQLで複数カラムのマージして出現回数をカウントしたい

やりたいこと 例えばdata1、data2、data3のカラムがあってそれぞれのカラムを合体して文字の出現回数を調べたい テーブル CREATE TABLE `hoge` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `data1` varchar(255) NOT NULL, `data2` varchar(255) NOT …

MySQLでSleepのコネクションを一発で殺す方法

MySQLでSleep状態のコネクションを一気に開放したくなるときってありますよね?(ない まぁ主にRailsたんが勝手にコネクションプーリング張ってDBの接続数圧迫してしまってるときに減らす目的だが 環境 MySQLサーバー 手順 まず対象のDBにログインして selec…

MySQLで特定のテーブルを除外してインポートする方法

結論 できないが、頑張ればできる( 環境 MySQL 5.7 やりたいこと 例えばの話。 mysqldump sample > data.sqlでsampleデータベースをダンプしたファイルをインポートしたい。しかし、postsテーブルが巨大すぎてインポートできないから一旦他のテーブルだけイ…

MySQLで取得した結果をCSVに出力する

自分用メモ INTO OUTFILEを使う場合 MySQLサーバーがオンプレミスの場合はこっち SELECT * FROM users INTO OUTFILE '/tmp/users.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'; スクリプト経由で出力する場合 クラウドのサーバーだと権限的にI…

mysqlcheckで壊れたDBの修復を試みる

変なタイミングでサーバーがクラッシュすると、MySQLのデータもおかしくなる時がある。 Table 'xxxx' is marked as crashed and should be repaired Incorrect key file for table '/tmp/#sql_******'; try to repair it とかがそれ。そんな時にmysqlcheckコ…

MySQLでバルクアップデートをする

MySQLでもbulk update ・・・的なことをしたかった話。 普通にアップデートするだけだと UPDATE users SET yatin = 'taro' WHERE id = 1; UPDATE users SET yatin = 'hanako' WHERE id = 2; て書くが、1レコードごとに1クエリ走ってしまい、5万行を一括で…

MySQLでJSON型から取得したデータを加工できない件

問題点 MySQL5.7からはJSON型をサポートしており、JSON型のカラムから「〜の要素よこせ」ってSQL送るとJSONの中から、その要素のデータのみを取得できる。それ自体はけっこう便利なのだが、そのデータを加工しようとしたらコケたのでメモ JSON_EXTRACTを使っ…

MySQLでn分前, n時間前, n日後の日時を取得する

MySQLではプログラミング言語のように日時に四則演算子である、+や-を使って計算することができる。あとはどのくらいの期間の指定にINTERVALを使ってあげればおk 確認環境 MySQL 5.7 1時間前の日時を取得する SELECT NOW() - INTERVAL 1 HOUR; 7日後の日時…

TokuDBをMyISAMに一発で変換する

とてもじゃないけどALTER TABLEできないようであれば、mysqldumpしてそのファイルを置き換えてあげれば良い sed mydata.sql -e 's/TokuDB/MyISAM/g' -e $'s/`compression`=\'tokudb_zlib\'//g' > mydata_converted.sql 完全にバッドノウハウ

MariaDBでJSON型を使う

使いたい人生だった Qittaのとある記事みてMySQL5.7から追加されたJSON型で遊んでみたくなった。さっそく手元のDBで試そうと思ったら You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the rig…

MySQLでuse DBが遅いときは-Aをつけろ

ってMySQL様から言われるんだよね。こうやって mysql> use hogehoge Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A 普通 mysql> use hoeghoge -A って思うじゃん?…

PHP + utf8mb4のMySQLにDB接続ができないとき

環境 CentOS 6 PHP 7.1 (ただし5系でも確認できた MariaDB 10.1 MySQLに接続できない PHPからPDO経由でMySQLへ接続しようとしてもうまくいかない。 PDOException: SQLSTATE[HY000] [102] Can't initialize character set utf8mb4 (path: /usr/share/mysql/ch…

MySQLのバイナリログを安全に削除する方法

バイナリログは ファイルで言う/var/lib/mysql/mysql-bin*で、いわゆるDBの更新ログ これをもとにリカバリとかできるのだが、今回不必要なDBサーバーにバイナリログを書き出す設定にしてしまったので削除したいというメモ 直接削除するのはダメなの? rm -rf…

MySQLの圧縮機能 COMPRESSEDを試す

環境 ubuntu server 16.04 MariaDB 10 検証に使ったデータはTwitterのサンプルストリーミングから取得したデータを使用 testdata1 未圧縮 testdata2 中身はtestdata1と同じだが圧縮済み 圧縮が使えるように設定 まずは設定を確認 MariaDB [(none)]> show var…

MySQLの「Sending data」はクライアントへのデータ転送である

MySQLでshow processlistを眺めていたときに「Sending Data」に結構時間を取られていたので調べると以下の記事が出てきた。 tsurugeek.hatenablog.jp 「データの読み込みとフィルタリング」ということだ。 「Sending data」はクライアントへのデータ転送では…

MySQLで正しくrootユーザーのパスワードを変更する方法

Qiitaの上位に載ってるやつが適当だったので仕方ないのでMySQLの公式ドキュメントから SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypassword');

MySQLのデータベースを完全に初期化する

全削除 $ sudo su # cd /var/lib/mysql; rm -rf * 初期設定 一発版 mysql_install_db --datadir=/var/lib/mysql --user=mysql 旧版 # usermod -s /bin/bash mysql # su - mysql $ mysql_install_db --datadir=/var/lib/mysql # usermod -s /sbin/nologin mys…

もはやブラックボックス化しているMySQLのauto_incrementを紐解く

メッチャ役に立つauto_incrementの話 from kitakoh www.slideshare.net