動かざることバグの如し

近づきたいよ 君の理想に

mysql

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のauto_incrementを紐解く

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