Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Shooting a trouble of MySQL

Avatar for yoku0825 yoku0825
September 26, 2019

Shooting a trouble of MySQL

2019/09/26 db tech showcase Tokyo 2019 B8
https://www.db-tech-showcase.com/dbts/tokyo

Fixed wrong information in page 48 at 2019/10/02.

Avatar for yoku0825

yoku0825

September 26, 2019
Tweet

More Decks by yoku0825

Other Decks in Technology

Transcript

  1. SSHから DBサヌバヌに察する接続性を確認する OSのハングアップでは ping や TCP SYN , SNMP などは

    応答されおしたう ケヌスがあるので、 その埌の操䜜も兌ねお ssh が䞀番確実 ‐ DBサヌバヌでシェルが䜿えない堎合は成功した぀もりになっお飛ばすしかない ‐ $ ssh db-server .. 3/87
  2. HA甚のミドルりェアをなにがしか䜿っおいる堎合 MHA for MySQL, mikasafabric for MySQL, MMM, Orchestrator, ..

    この時点で そのサヌバヌの電源を萜ずす 方が二次被害が起こるリスクを枛らせる 死にかけのサヌバヌがフェむルオヌバヌプロセスを噛んじゃっおフェむルオヌバヌが進たない ‐ 折角マスタヌのフェむルオヌバヌに成功したのに、旧マスタヌがゟンビのように生き続けおい お䞀郚サヌバヌはそちらに曞き蟌んでしたった ‐ ロヌドバランサヌの分散に入ったり倖れたりを繰り返しおサヌビスが䞍安定になった ‐ 5/87
  3. ロヌカルホストのMySQL接続ができない ERROR 2002 (HY000): Can't connect to local MySQL server

    through socket '/var/lib/mysql/my sql.sock' (2) ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111) ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (110) ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (4) ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: NO) ERROR 1040 (08004): Too many connections ERROR 3032 (HY000): The server is currently in offline mode etc.. 8/87
  4. ゚ラヌコヌドに泚目する ERROR 2002 (HY000): Can't connect to local MySQL server

    through socket '/var/lib/mysql/my sql.sock' (2) ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111) ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (110) ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (4) ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: NO) ERROR 1040 (08004): Too many connections ERROR 3032 (HY000): The server is currently in offline mode etc.. mysql コマンドラむンクラむアントが接続に倱敗した時の出力のフォヌマットは、 MySQLの゚ラヌコヌド + SQLSTATE + ゚ラヌメッセヌゞ + OSの゚ラヌコヌド SQLSTATEは切り分けには重芁でないので以降割愛 ‐ 9/87
  5. ゚ラヌコヌドに泚目する ERROR 2002 (HY000): Can't connect to local MySQL server

    through socket '/var/lib/mysql/my sql.sock' (2) MySQL゚ラヌコヌド: 2002 ゚ラヌメッセヌゞ: Can't connect to local MySQL server through socket '/var/ lib/mysql/mysql.sock' OS゚ラヌコヌド: 2 Linuxでは 2 = ENOENT = No such file or directory ‐ 10/87
  6. ゚ラヌコヌドに泚目する ERROR 2003 (HY000): Can't connect to MySQL server on

    '127.0.0.1' (111) MySQL゚ラヌコヌド: 2003 ゚ラヌメッセヌゞ: Can't connect to MySQL server on '127.0.0.1' OS゚ラヌコヌド: 111 Linuxでは 111 = ECONNREFUSED = Connection refused ‐ 11/87
  7. ゚ラヌコヌドに泚目する ERROR 2003 (HY000): Can't connect to MySQL server on

    '127.0.0.1' (110) MySQL゚ラヌコヌド: 2003 ゚ラヌメッセヌゞ: Can't connect to MySQL server on '127.0.0.1' OS゚ラヌコヌド: 110 Linuxでは 110 = ETIMEDOUT = Connection timed out ‐ 12/87
  8. ゚ラヌコヌドに泚目する ERROR 2003 (HY000): Can't connect to MySQL server on

    '127.0.0.1' (4) MySQL゚ラヌコヌド: 2003 ゚ラヌメッセヌゞ: Can't connect to MySQL server on '127.0.0.1' OS゚ラヌコヌド: 4 Linuxでは 4 = EINTR = Interrupted system call ‐ 13/87
  9. ゚ラヌコヌドに泚目する ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using

    password: NO) MySQL゚ラヌコヌド: 1045 ゚ラヌメッセヌゞ: Access denied for user 'root'@'127.0.0.1' (using password: NO) OS゚ラヌコヌド: なし 14/87
  10. ゚ラヌコヌドに泚目する ERROR 3032 (HY000): The server is currently in offline

    mode MySQL゚ラヌコヌド: 3032 ゚ラヌメッセヌゞ: The server is currently in offline mode OS゚ラヌコヌド: なし 16/87
  11. サヌバヌサむド゚ラヌ ERROR 1045 (28000): Access denied for user 'root'@'127.0.0.1' (using

    password: NO) MySQL゚ラヌコヌド: 1045 ゚ラヌメッセヌゞ: Access denied for user 'root'@'127.0.0.1' (using password: NO) OS゚ラヌコヌド: なし 20/87
  12. SHOW PROCESSLISTから読み解くもの mysql> SHOW PROCESSLIST; .. 4 rows in set

    (0.00 sec) 取り敢えず䞀発目はログが流れおも構わないので最埌の n rows in set を芋たしょ う それがほが レプリケヌション関連のスレッドやINSERT Delayedスレッド、むベントスケゞュヌラヌなどを含むが倧䜓は数が小さいので無芖しお構わない 珟圚の接続䞭接続 シヌケンス䞭のクラむアントコネクションも含むが、 max_connections ずかは接続 シヌケンス䞭のものも含むので問題ないはずのコネクションの数になる 23/87
  13. SHOW PROCESSLISTから読み解くもの mysql> SHOW PROCESSLIST; .. 4 rows in set

    (0.00 sec) n rows in set を芋た時に、 max_connections の倀に察しお䜙裕があるか ‐ 数回叩いおも平垞時ず比べお非垞に高い/䜎い倀をさたよっおいないか ‐ 24/87
  14. SHOW PROCESSLISTから曎に読み解くもの mysql> pager grep -v Sleep mysql> SHOW PROCESSLIST;

    .. 4 rows in set (0.00 sec) ざっずスリヌプ以倖の出力結果を芋た時に、 バックグラりンドスレッド以倖で Time が異様に倧きいク゚リヌはないか ‐ Info には実行䞭のク゚リヌが衚瀺されるが、䌌たようなク゚リヌが䞊んでいないか ‐ 26/87
  15. SHOW PROCESSLISTから曎に読み解くもの | 36 | root | localhost | mysqlslap

    | Query | 0 | Sending to client | SELECT intcol1, charcol1 FROM t1 | | 37 | root | localhost | mysqlslap | Query | 0 | waiting for handler commit | INSERT INTO t1 VALUES (73673339,'BN3152Gza4GW7atxJKACYwJqDbFynLxqc0kh30YTwgz3FktQ43XTrqJ4PQ25frn7kXh | | 38 | root | localhost | mysqlslap | Query | 0 | executing | SELECT intcol1, charcol1 FROM t1 | | 39 | root | localhost | mysqlslap | Query | 0 | Sending to client | SELECT intcol1, charcol1 FROM t1 | | 40 | root | localhost | mysqlslap | Query | 0 | Sending to client | SELECT intcol1, charcol1 FROM t1 | | 41 | root | localhost | mysqlslap | Query | 0 | Sending to client | SELECT intcol1, charcol1 FROM t1 | | 42 | root | localhost | mysqlslap | Query | 0 | Sending to client | SELECT intcol1, charcol1 FROM t1 | 27/87
  16. Infoに䌌たようなク゚リヌが䞊ぶ 特に INSERT, UPDATE, DELETE や SELECT .. FOR UPDATE

    の排他ロックを取るク゚ リヌ ロックの競合でなくずも、特定のペヌゞから呌び出されるク゚リヌが実はリ゜ヌス をそこそこ食っおいお  31/87
  17. Infoに䌌たようなク゚リヌが䞊ぶ 特に INSERT, UPDATE, DELETE や SELECT .. FOR UPDATE

    の 排他ロック を取るク゚ リヌ ロックの競合自䜓は「デヌタベヌスの敎合性」を保぀ために DBMSが備えた機胜 ‐ MySQL偎にもロック埅ちのタむムアりト䞻に innodb_lock_wait_timeout, デフォルト50秒 は蚭定できるが、 タむムアりトするたでの間APサヌバヌはコネクションを維持したたた埅たな くおはいけない ので、APサヌバヌはその間新たなリク゚ストを受け止め続けなくおはいけなく なる lock_wait_timeout, innodb_lock_wait_timeout を十分短く蚭定するか、APサヌバヌ偎でもタむムアりトを蚭定する か APサヌバヌ偎でタむムアりトした堎合、MySQLのコネクションをちゃんずクロヌズしおくれるかどうかは実装䟝存 ‐ ロックの競合でなくずも、特定のペヌゞから呌び出されるク゚リヌが実はリ゜ヌス をそこそこ食っおいお  32/87
  18. Infoに䌌たようなク゚リヌが䞊ぶ 特に INSERT, UPDATE, DELETE や SELECT .. FOR UPDATE

    の排他ロックを取るク゚ リヌ ロックの競合でなくずも、特定のペヌゞから呌び出されるク゚リヌが実はリ゜ヌス をそこそこ食っおいお  兞型的なパタヌンは「テヌブルスキャンあるいは倧量レコヌド」「バッファプヌルにデヌタが 乗り切っおいる」「テンポラリヌテヌブルを䜿っおいる」 ‐ リ゜ヌスに䜙裕がある間はそれなりの速床 で応答を返せるものの、䞀定以䞊のアクセスが集䞭 するずサチる ‐ 33/87
  19. SHOW PROCESSLISTから原因がわかるのなら  深く考える必芁のない単玔な参照で明らかに単発のク゚リヌならそのセッション を KILL すれば暫定埩旧するはず ただの SELECT に芋えおも実はそれがトランザクションの䞀郚で、 KILL

    したら倧 量ロヌルバックが走っお  APサヌバヌからのトラフィックに䟝存するならそのペヌゞぞのアクセスを止めない 限りは無限にク゚リヌが積もり続ける可胜性がある 34/87
  20. SHOW PROCESSLISTから原因がわかるのなら  深く考える必芁のない単玔な参照で明らかに単発のク゚リヌなら そのセッション を KILL すれば暫定埩旧するはず KILL QUERY で停止しおも

    トランザクションはロヌルバックされるずは限らない アプリケヌ ション䟝存 ‐ KILL で トランザクションごずロヌルバックしたずしおも、再実行はどうする か  ‐ ただの SELECT に芋えおも実はそれがトランザクションの䞀郚で、 KILL したら倧 量ロヌルバックが走っお  APサヌバヌからのトラフィックに䟝存するならそのペヌゞぞのアクセスを止めない 限りは無限にク゚リヌが積もり続ける可胜性がある 35/87
  21. SHOW PROCESSLISTから原因がわかるのなら  深く考える必芁のない単玔な参照で明らかに単発のク゚リヌならそのセッション を KILL すれば暫定埩旧するはず 単発の SELECT に芋えおも実はそれがトランザクションの䞀郚で、 KILL

    したら倧 量ロヌルバックが走る可胜性がある SHOW ENGINE INNODB STATUS TRANSACTIONSセクションの MySQL thread id %d ず突き合わせ お、 undo log entries の倀を確認する ‐ ロヌルバックは曎新よりも 重い 凊理なので、今埌の凊理の流れが芋通せるなら「埅った方が結 果的に埩旧が速い」こずは十分ある ‐ APサヌバヌからのトラフィックに䟝存するならそのペヌゞぞのアクセスを止めない 限りは無限にク゚リヌが積もり続ける可胜性がある 36/87
  22. SHOW ENGINE INNODB STATUSのTRANSACTIONSセクション mysql> SHOW ENGINE INNODB STATUS\G ..

    ------------ TRANSACTIONS ------------ Trx id counter 22588 Purge done for trx's n:o < 22588 undo n:o < 0 state: running but idle History list length 678 LIST OF TRANSACTIONS FOR EACH SESSION: ---TRANSACTION 0, not started MySQL thread id 2, OS thread handle 0x7f6bd0094700, query id 13 localhost root init show engine innodb status ---TRANSACTION 22275, ACTIVE 1397 sec rollback ROLLING BACK 542497 lock struct(s), heap size 64420280, 100542496 row lock(s), undo log entries 52 636267 MySQL thread id 1, OS thread handle 0x7f6bd00d5700, query id 8 localhost root init ROLLBACK -------- FILE I/O -------- .. 37/87
  23. SHOW PROCESSLISTから原因がわかるのなら  深く考える必芁のない単玔な参照で明らかに単発のク゚リヌならそのセッション を KILL すれば暫定埩旧するはず ただの SELECT に芋えおも実はそれがトランザクションの䞀郚で、 KILL

    したら倧 量ロヌルバックが走っお  APサヌバヌからのトラフィックに䟝存するならそのペヌゞぞのアクセスを止めない 限りは 無限にク゚リヌが積もり続ける可胜性が ある ワンラむナヌでそれっぜいク゚リヌを KILL し続けながら、AP偎ぞの修正がリリヌスされるの を埅ち続ける ‐ 38/87
  24. 切り分けは倧事 監芖の段階で切り分けたでざっくり枈たせられるようだず察応速床が䞊がる ytkit - Yoku-san no ToolKIT に yt-healthcheck ずしお実装・公開

    ‐ 長時間実行が続いおいるク゚リヌの監芖、 コネクション数 / max_connections の 割合の監芖、テヌブルの AUTOINC の倀のパヌセンテヌゞの監芖  およびそれらの閟倀に匕っ掛かった時の、 SHOW FULL PROCESSLIST や SHOW ENGINE INNODB STATUS の情報をファむルに出力しお保党しおおく機胜 ‐ 39/87
  25. mysqldプロセスが停止しおいた堎合 停止したmysqldを起動しおも良いか, あるいはスレヌブを昇栌させおも良いか 刀 断する MySQLにおける非同期レプリケヌションの敎合性レベルは 結果敎合性 正垞停止しなかった堎合のマスタヌずスレヌブのデヌタの敎合性は 自分で保蚌しなければならない ‐

    MySQLでは「耐障害性を萜ずしお曎新性胜を䞊げる」蚭定が可胜 ‐ マスタヌにせよスレヌブにせよ、デヌタの敎合性が担保できないのであればフルバックアップ からリストアするなり䜕なりが必芁 ‐ 停止した原因を探す 43/87
  26. mysqldプロセスが停止しおいた堎合 停止したmysqldを起動しおも良いか, あるいはスレヌブを昇栌させおも良いか 刀 断する MySQLにおける非同期レプリケヌションの敎合性レベルは結果敎合性 ‐ MySQLでは「 耐障害性を萜ずしお曎新性胜を䞊げる 」蚭定が可胜

    これらの蚭定を採甚しおいた堎合、「 萜ち方によっおは デヌタに䞍敎合が発生しおいる」 ‐ マスタヌにせよスレヌブにせよ、デヌタの敎合性が担保できないのであればフルバックアップ からリストアするなり䜕なりが必芁 ‐ 停止した原因を探す 44/87
  27. innodb_flush_log_at_trx_commit vs. mysqldクラッシュ 症状 = 1 = 0 = 2

    mysqldクラッシュ(*1) o x(*2) o OSパニック o x(*2) x(*2) H/W障害 o x(*2) x(*2) (*1) kill -9はここに含たれる (*2) x = 壊れおいる可胜性がある、壊れおいない可胜性もある、もちろんメディ ア障害を陀く 48/87
  28. mysqldプロセスが停止しおいた堎合 停止したmysqldを起動しおも良いか, あるいはスレヌブを昇栌させおも良いか刀断 する MySQLにおける非同期レプリケヌションの敎合性レベルは結果敎合性 ‐ MySQLでは「耐障害性を萜ずしお曎新性胜を䞊げる」蚭定が可胜 ‐ マスタヌにせよスレヌブにせよ、 デヌタの敎合性が担保できないのであればフルバックアップ

    からリストア するなり䜕なりが必芁 マスタヌずスレヌブのデヌタがズレればレプリケヌション゚ラヌの原因にもなるし、 特定のサヌバヌから読み取った時だけ特定のナヌザヌの蚘録がない なんお「 埌日じゃ思い付くのも難しい 」障害 の原因になり埗る ‐ 停止した原因を探す 49/87
  29. マスタヌのバむナリログ末尟が欠損するず mysql> SHOW SLAVE STATUS\G .. Last_IO_Errno: 1236 Last_IO_Error: Got

    fatal error 1236 from master when reading data from binary log: 'C lient requested master to start replication from impossible position; the first event 'my sql-bin.003583' at 45997491, the last event read from './mysql-bin.003583' at 4, the last byte read from './mysql-bin.003583' at 4.'.. 52/87
  30. mysqldの異垞終了で䞀貫性が損なわれる可胜性のあるもの レプリケヌションスレヌブ線 master_info_repository = FILE (*泚) ‐ sync_master_info <> 1

    (*泚) ‐ relay_log_info_repository = FILE ‐ リレヌログ - master_info - relay_log_info - ストレヌゞ゚ンゞン間の敎合性 (*泚) ‐ マスタヌで binlog_format = STATEMENT の時のテンポラリヌファむル ‐ 53/87
  31. mysqldの異垞終了で䞀貫性が損なわれる可胜性のあるもの レプリケヌション スレヌブ ç·š master_info_repository = FILE (*泚) MySQL 5.7ずそれ以前のデフォルト

    ‐ sync_master_info <> 1 (*泚) MySQL 8.0.17珟圚もデフォルト ‐ relay_log_info_repository = FILE MySQL 5.7ずそれ以前のデフォルト ‐ リレヌログ - master_info - relay_log_info - ストレヌゞ゚ンゞン間の敎合性 (*泚) 蚭定によ らず垞に ‐ マスタヌで binlog_format = STATEMENT の時のテンポラリヌファむル MySQL 5.6ずそれ以前 のデフォルト ‐ 54/87
  32. mysqldの異垞終了で䞀貫性が損なわれる可胜性のあるもの (*泚) master_info ずリレヌログの䞀貫性を期埅せず、 垞に relay_log_info だけ を信甚しお master_info を再蚭定しリレヌログを再受信する

    relay_log_recovery ずいうパラメヌタヌで䞀貫性を担保するこずができる ただし relay_log_info - ストレヌゞ゚ンゞン間の敎合性は担保しなければならないため、 スト レヌゞ゚ンゞンがInnoDB であるこずず relay_log_info_repository = TABLE は必須 ‐ 55/87
  33. リレヌログ - master_info - relay_log_info - ストレヌゞ゚ンゞン間の敎合性 が厩れるず mysql> SHOW

    SLAVE STATUS\G .. Last_SQL_Errno: 1032 Last_SQL_Error: Could not execute Delete_rows event on table test.t; Can't find record i n 't', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql -bin.000002, end_log_pos 333 .. 56/87
  34. mysqldが停止しおいないけれどロヌカルホストからも接続できないような堎 合 ps auxwww | grep mysqld で出力はあるけど接続できない mysqld_safe ず芋間違えないように 

    ‐ プロセスの起動時刻が異様に最近= プロセスが再起動を繰り返しおいるパタヌンも ‐ 接続はできたけどなんかすぐ切断される タむムアりトが非垞に短く蚭定されおいお、ク゚リヌの間隔がサヌバヌ偎タむムアりトに匕っ かかっおいる ‐ 非垞に短い間隔でmysqldがダりンしおいる ‐ 63/87
  35. mysqld_safe is NOT mysqld $ ps auxww | grep mysqld

    yoku0825 2997 0.0 0.0 113316 0 ? S Sep19 0:00 /bin/sh /usr/mysql/8.0.1 7/bin/mysqld_safe --server-id=1080 --basedir=/usr/mysql/8.0.17 --socket=/usr/mysql/8.0.17 /data/mysql.sock --port=64080 --pid-file=/usr/mysql/8.0.17/data/mysql.pid --datadir=/usr/ mysql/8.0.17/data yoku0825 3652 22.5 16.7 1790848 169524 ? Sl Sep19 1673:44 /usr/mysql/8.0.17/bin/m ysqld --basedir=/usr/mysql/8.0.17 --datadir=/usr/mysql/8.0.17/data --plugin-dir=/usr/mysq l/8.0.17/lib/plugin --server-id=1080 --log-error=error.log --pid-file=/usr/mysql/8.0.17/d ata/mysql.pid --socket=/usr/mysql/8.0.17/data/mysql.sock --port=64080 yoku0825 3881 0.0 0.0 112716 964 pts/1 S+ 19:28 0:00 grep --color=auto mysql 64/87
  36. mysqld_safe is NOT mysqld mysqld_safe は䞭でmysqldを呌ぶシェルスクリプト 環境倉数の面倒ずかulimitの面倒ずかumaskの面倒ずか芋おくれたりする ‐ mysqld が萜ちるず

    mysqld_safe がそれを怜知しお起動しなおす = mysqld プロセ スは䜕床でも蘇るさ デヌタの砎損で mysqld が異垞終了 ‐ mysqld_safe  ザオリク ‐ デヌタの砎損で mysqld が異垞終了 ‐ mysqld_safe  ザオリク ‐ デヌタの砎損で略 ‐ 65/87
  37. mysqld_safeの止め方 mysqld が正垞終了しおももちろん止たる mysqld を正垞終了できない時には kill しお止めるしかないんだけど、 mysqld_safe は kill

    -15 や kill -1 を無芖するので泚意 ‐ trap '' 1 2 3 15 # we shouldn't let anyone kill us trap '' 13 # not even SIGPIPE https://github.com/mysql/mysql-server/blob/mysql-8.0.17/scripts/ mysqld_safe.sh#L36-L37 66/87
  38. mysqldが现かく再起動を繰り返しおいる堎合 mysqld_safe から起動されおいるのであれば mysqld_safe をkillしたずころ、 systemd から起動されおいるのであれば systemctl stop mysqld

    したずころの次の クラッシュでそれ以䞊再起動しなくなる mysqld_safe そのものはDBMS機胜を提䟛しないので奜きなだけ kill -9 で止められるし、肝 心の mysqld は既にクラッシュを繰り返しおるんだし ずいう状態 ‐ もうこのサヌバヌのdatadirはアテにならないしたくないので、基本的には 「生きおいるスレヌブ(堎合によっおはマスタヌ)からデヌタをコピヌしおくる」た たは「最近のフルバックアップずバむナリヌログから最新のデヌタを埩元」 えっ スレヌブもないしバックアップも取っおない ‐ 67/87
  39. mysqldが现かく再起動を繰り返しおいる堎合 最䜎限゚ラヌログ ( /var/log/mysqld.log, /var/lib/mysql/hostname.err あたり) は保党するべき 真面目にコアファむルを解析するのでなければデヌタディレクトリヌの保党は芁らない気もす る my.cnf

    に core-file を指定しおいた堎合、コアファむルはデヌタディレクトリヌに吐こうずする 解析する気もなく「ないよりはあった方が 」みたいなノリでコアファむルを吐かせるならディスクの空き容量に泚 意を  abrtd が 悪さをしお ちょっかいをかけお /var/spool/abrt に吐き出したり、あるいは勝手にコアファむルを消され るこずもある ‐ 69/87
  40. mysqldが现かく再起動を繰り返しおいる堎合 スレヌブの堎合はリレヌログ、バむナリヌログあたりを保党しおおくず、曎新が 問題だった堎合の再珟が倚少容易に ずはいえ、「条件さえ揃えば同じク゚リヌで必ず萜ちる」のであれば、他のスレヌブもきっず いっぱい萜ちおるから阿錻叫喚になっお既に原因に気が付いおいる気もする ‐ クラッシュしおいる時点で relay_log_info_repository= FILE の

    relay_log.info はあおになら ないし、 relay_log_info_repository= TABLE の堎合 mysql/slave_relay_log_info.ibd を人間 が読むのは぀らいず思う log_slave_updates が蚭定されおいれば、「バむナリヌログにはSQLが実行された埌にのみ蚘録される」こずを利甚 しおリレヌログず差分を取るのが確実な気がする ‐ 70/87
  41. 雑な゚ラヌログの読み取り方(党景) 190618 2:06:02 - mysqld got signal 11 ; This

    could be because you hit a bug. It is also possible that this binary or one of the libraries it was linked against is corrupt, improperly built, or misconfigured. This error can also be caused by malfunctioning hardware. We will try our best to scrape up some info that will hopefully help diagnose the problem, but since we have already crashed, something is definitely wrong and this may fail. key_buffer_size=8388608 read_buffer_size=2097152 max_used_connections=11 max_threads=500 thread_count=10 connection_count=10 It is possible that mysqld could use up to key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 5133883 K bytes of memory Hope that's ok; if not, decrease some variables in the equation. Thread pointer: 0x72b8550 Attempting backtrace. You can use the following information to find out where mysqld died. If you see no messages after this, something went terribly wrong... stack_bottom = 0x7f3f608e6e68 thread_stack 0x30000 /tools/mysql/bin/mysqld(my_print_stacktrace+0x39)[0x798989] /tools/mysql/bin/mysqld(handle_segfault+0x380)[0x4fde40] /lib64/libpthread.so.0[0x3ca3a0f710] /tools/mysql/bin/mysqld(hp_movelink+0xb)[0x918a5b] /tools/mysql/bin/mysqld(hp_write_key+0x22e)[0x91ba0e] /tools/mysql/bin/mysqld(heap_write+0x9b)[0x91bdcb] /tools/mysql/bin/mysqld(_ZN7ha_heap9write_rowEPh+0x43)[0x917d13] /tools/mysql/bin/mysqld(_ZN7handler12ha_write_rowEPh+0x5c)[0x66db2c] /tools/mysql/bin/mysqld[0x5a41e4] /tools/mysql/bin/mysqld[0x59283b] /tools/mysql/bin/mysqld(_Z10sub_selectP4JOINP13st_join_tableb+0x86)[0x597ec6] /tools/mysql/bin/mysqld[0x59d6dd] /tools/mysql/bin/mysqld(_ZN4JOIN4execEv+0x4ef)[0x5b139f] /tools/mysql/bin/mysqld(_ZN18st_select_lex_unit4execEv+0x1f1)[0x5deea1] /tools/mysql/bin/mysqld(_Z21mysql_derived_fillingP3THDP3LEXP10TABLE_LIST+0x168)[0x559b88] /tools/mysql/bin/mysqld(_Z20mysql_handle_derivedP3LEXPFbP3THDS0_P10TABLE_LISTE+0x69)[0x559989] /tools/mysql/bin/mysqld(_Z20open_and_lock_tablesP3THDP10TABLE_LISTbjP19Prelocking_strategy+0x125)[0x541955] /tools/mysql/bin/mysqld[0x5715c5] /tools/mysql/bin/mysqld(_Z21mysql_execute_commandP3THD+0x226a)[0x576c4a] /tools/mysql/bin/mysqld(_Z11mysql_parseP3THDPcjP12Parser_state+0x15a)[0x5790ba] /tools/mysql/bin/mysqld(_Z16dispatch_command19enum_server_commandP3THDPcj+0x1321)[0x57ac31] /tools/mysql/bin/mysqld(_Z24do_handle_one_connectionP3THD+0x167)[0x60f0b7] /tools/mysql/bin/mysqld(handle_one_connection+0x54)[0x60f124] /lib64/libpthread.so.0[0x3ca3a079d1] /lib64/libc.so.6(clone+0x6d)[0x3ca32e88fd] Trying to get some variables. Some pointers may be invalid and cause the dump to abort. Query (0x7f3f20004c00): SELECT dst_ip, SUM(total_stream) AS total_stream, SUM(up_stream) AS up_stream, SUM(down_stream) AS down_stream FROM ( SELECT dst_ip, SUM(oct_upstream + oct_downstream) AS total_stream, SUM(oct_upstream) AS up_stream, SUM(oct_downstream) AS down_stream FROM t_monitor_user_app_if_zone_critical_60min_0 _1560556800 WHERE timestamp >= 1560708343 AND timestamp <= 1560794743 AND src_user = 0 GROUP BY dst_ip UNION ALL SELECT dst_ip, SUM(oct_upstream + oct_downstream) AS total_stream, SUM(oct_upstream) AS up_stream, SUM(oct_downstream) AS down_stream FROM t_monitor_user_app_if_zone_critical_60min_0_1560643200 WHERE timestamp >= 1560708343 AND timestamp <= 1560794743 AND src_user = 0 GROUP BY dst_ip UNION ALL SELECT dst_ip, SUM(oct_upstream + oct_downstream) AS total_stream, SUM(oct_upstream) AS up_stream, SUM(oct_downstream) AS down_stream FROM t_monitor_user_app_if_zone_critical_60min_0_1560729600 WHERE timestamp >= 1560708343 AND timestam p <= 1560794743 AND src_user = 0 GROUP BY dst_ip UNION AL Connection ID (thread ID): 350 Status: NOT_KILLED https://bugs.mysql.com/bug.php?id=95932 71/87
  42. 雑な゚ラヌログの読み取り方(1) スタックトレヌスからなんずなくシンボルの名前で察する .. stack_bottom = 0x7f3f608e6e68 thread_stack 0x30000 /tools/mysql/bin/mysqld(my_print_stacktrace+0x39)[0x798989] /tools/mysql/bin/mysqld(handle_segfault+0x380)[0x4fde40]

    /lib64/libpthread.so.0[0x3ca3a0f710] /tools/mysql/bin/mysqld(hp_movelink+0xb)[0x918a5b] /tools/mysql/bin/mysqld(hp_write_key+0x22e)[0x91ba0e] /tools/mysql/bin/mysqld(heap_write+0x9b)[0x91bdcb] /tools/mysql/bin/mysqld(_ZN7ha_heap9write_rowEPh+0x43)[0x917d13] /tools/mysql/bin/mysqld(_ZN7handler12ha_write_rowEPh+0x5c)[0x66db2c] /tools/mysql/bin/mysqld[0x5a41e4] /tools/mysql/bin/mysqld[0x59283b] /tools/mysql/bin/mysqld(_Z10sub_selectP4JOINP13st_join_tableb+0x86)[0x597ec6] /tools/mysql/bin/mysqld[0x59d6dd] /tools/mysql/bin/mysqld(_ZN4JOIN4execEv+0x4ef)[0x5b139f] /tools/mysql/bin/mysqld(_ZN18st_select_lex_unit4execEv+0x1f1)[0x5deea1] /tools/mysql/bin/mysqld(_Z21mysql_derived_fillingP3THDP3LEXP10TABLE_LIST+0x168)[0x559b88] /tools/mysql/bin/mysqld(_Z20mysql_handle_derivedP3LEXPFbP3THDS0_P10TABLE_LISTE+0x69)[0x559989] /tools/mysql/bin/mysqld(_Z20open_and_lock_tablesP3THDP10TABLE_LISTbjP19Prelocking_strategy+0x125)[0x541955] /tools/mysql/bin/mysqld[0x5715c5] /tools/mysql/bin/mysqld(_Z21mysql_execute_commandP3THD+0x226a)[0x576c4a] /tools/mysql/bin/mysqld(_Z11mysql_parseP3THDPcjP12Parser_state+0x15a)[0x5790ba] /tools/mysql/bin/mysqld(_Z16dispatch_command19enum_server_commandP3THDPcj+0x1321)[0x57ac31] /tools/mysql/bin/mysqld(_Z24do_handle_one_connectionP3THD+0x167)[0x60f0b7] /tools/mysql/bin/mysqld(handle_one_connection+0x54)[0x60f124] /lib64/libpthread.so.0[0x3ca3a079d1] /lib64/libc.so.6(clone+0x6d)[0x3ca32e88fd] .. 72/87
  43. 雑な゚ラヌログの読み取り方(2) ク゚リヌが盎接の原因の堎合、圓該のク゚リヌがここに珟れるこずも珟れないこ ずもある ここに衚瀺されおいない, 衚瀺が切り詰められおいるけど党郚知りたい堎合はコアファむル解析 ‐ Trying to get some

    variables. Some pointers may be invalid and cause the dump to abort. Query (0x7f3f20004c00): SELECT dst_ip, SUM(total_stream) AS total_stream, SUM(up_stream) AS up_s tream, SUM(down_stream) AS down_stream FROM ( SELECT dst_ip, SUM(oct_upstream + oct_downstream ) AS total_stream, SUM(oct_upstream) AS up_stream, SUM(oct_downstream) AS down_stream FROM t_mon itor_user_app_if_zone_critical_60min_0_1560556800 WHERE timestamp >= 1560708343 AND timestamp <= 1560794743 AND src_user = 0 GROUP BY dst_ip UNION ALL SELECT dst_ip, SUM(oct_upstream + oct _downstream) AS total_stream, SUM(oct_upstream) AS up_stream, SUM(oct_downstream) AS down_stream FROM t_monitor_user_app_if_zone_critical_60min_0_1560643200 WHERE timestamp >= 1560708343 AND ti mestamp <= 1560794743 AND src_user = 0 GROUP BY dst_ip UNION ALL SELECT dst_ip, SUM(oct_ups tream + oct_downstream) AS total_stream, SUM(oct_upstream) AS up_stream, SUM(oct_downstream) AS d own_stream FROM t_monitor_user_app_if_zone_critical_60min_0_1560729600 WHERE timestamp >= 156070 8343 AND timestamp <= 1560794743 AND src_user = 0 GROUP BY dst_ip UNION AL Connection ID (thread ID): 350 Status: NOT_KILLED 73/87
  44. 雑な゚ラヌログの読み取り方(3) これは単なる「ハヌドコヌドされた決たり文句」なのであたり真に受けない 蚈算匏が今曎MyISAMなのも叀いたたで曎新されおいない以倖に深い意味はないはず ‐ This could be because you hit

    a bug. It is also possible that this binary or one of the libraries it was linked against is corrupt, improperly built, or misconfigured. This error can also be caused by malfunctioning hardware. We will try our best to scrape up some info that will hopefully help diagnose the problem, but since we have already crashed, something is definitely wrong and this may fail. key_buffer_size=8388608 read_buffer_size=2097152 max_used_connections=11 max_threads=500 thread_count=10 connection_count=10 It is possible that mysqld could use up to key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 5133883 K bytes of memory Hope that's ok; if not, decrease some variables in the equation. 74/87
  45. 雑な゚ラヌログの読み取り方(4) そもそも゚ラヌログの末尟再起動しちゃっおいるならクラッシュリカバリヌの手 前あたりに↑っぜい出力が䞀切ない堎合 くだんのログは「 mysqld がSIGSEGV, SIGABRT, SIGILLあたりのシグナルをトラップした」時 に出力されるので、 ‐

    「トラップされないシグナル」぀たりSIGKILLで停止された時はシグナルハンドラヌを通らな い = ゚ラヌログが䞀切出ない ‐ SIGKILLを叩くものずいえばテンパったDBAかOOM Killerくらいだず思う ずいう蚳で「゚ラヌログが出おいない」 = 「 /var/log/messages あたりにOOM Killerのログは 出おいないか」ず類掚できる ‐ ゚ラヌログファむルの茉っおいるストレヌゞが壊れおいる可胜性も埮レ存には埮レ存 ‐ 75/87
  46. pt-ioprofile $ pt-ioprofile --cell=sizes --profile-pid $(pidof mysqld) --run-time=5 .. total

    read pread64 pwrite64 write fdatasync fsync lseek f ilename 117571976835 249992 0 0 249992 0 0 1175714768 51 /data/mysql/mysql-relay.012339 2981888 0 0 2981888 0 0 0 0 / data/mysql/xb_doublewrite 1045504 0 0 1045504 0 0 0 0 / data/mysql/ib_logfile0 405000 0 0 0 405000 0 0 0 / data/mysql/master.info 311296 0 311296 0 0 0 0 0 / data/mysql/some_table.ibd 165654 0 0 0 165654 0 0 0 / data/mysql/mysql-bin.005418 0 0 0 0 0 0 0 0 / data/mysql/undo002 .. 80/87
  47. mysqldが刺さっおいるかどうかを調べる方法 デンゞャヌゟヌン ストレヌゞには曞いおないけどなんかやたらCPUをぶん回しおいる時は strace も 有効 perf top -p $(pidof

    mysqld) だず抜象的過ぎおわからないような時に ‐ ただし慣れおいないず膚倧なノむズに時間ばかり浪費させられるのでよしなに  ‐ strace のオプションはお奜みでどうぞ ‐ $ sudo strace -ff -o mysqld_trace -tt -p $(pidof mysqld) .. 81/87
  48. mysqldが刺さっおいるかは調べられないけれど将来の力になるかも知れない 方法 デンゞャヌゟヌン pt-pmp を䜿うず gdb の thread apply all

    bt をサマリヌしお衚瀺しおくれる 䞭身は gdb ず awk でやっおるだけなので、やっぱりアタッチ䞭は動きも止たる ‐ 面癜いし勉匷になるこずは確かなんだけど、埩旧を急いでいる時にやるかずいうず埮劙それ なら gdb で党郚出力させおおけばいいんじゃないか感 ‐ 83/87
  49. mysqldが刺さっおいるかは調べられないけれど将来の力になるかも知れない 方法 $ sudo pt-pmp --pid $(pidof mysqld) 291 pthread_cond_wait@@GLIBC_2.3.2,one_thread_per_connection_end,handle_one_connection

    57 read,my_real_read,my_net_read,do_command,handle_one_connection,start_thread 26 pthread_cond_wait@@GLIBC_2.3.2,os_event_wait_low,os_aio_simulated_handle,fil_aio_wait,io_handler_thread,start_thread 3 pthread_cond_wait@@GLIBC_2.3.2,os_event_wait_low,srv_purge_worker_thread 1 select,os_thread_sleep,srv_purge_thread 1 select,os_thread_sleep,srv_master_thread 1 select,os_thread_sleep,srv_lock_timeout_and_monitor_thread 1 select,os_thread_sleep,srv_error_monitor_thread 1 select,handle_connections_sockets,main,select 1 read,vio_read_buff,my_real_read,my_net_read,cli_safe_read,handle_slave_io 1 pthread_cond_wait@@GLIBC_2.3.2,os_event_wait_low,sync_array_wait_event,rw_lock_s_lock_spin,buf_page_get_gen,btr_cur_search_to_nth_level,row_search_for_mysql,h a_innodb::index_read,handler::index_read_idx_map,join_read_const,join_read_const_table,make_join_statistics,JOIN::optimize,mysql_select,handle_select,execute_sqlc om_select,mysql_execute_command,mysql_parse,dispatch_command,do_command,handle_one_connection 1 pread64,os_file_pread,os_file_read,fil_io,buf_read_page_low,buf_read_page,buf_page_get_gen,btr_cur_search_to_nth_level,row_search_index_entry,row_upd_step,row _update_for_mysql,ha_innodb::delete_row,handler::ha_delete_row,mysql_delete,mysql_execute_command,mysql_parse,Query_log_event::do_apply_event,apply_event_and_upda te_pos,handle_slave_sql 1 pread64,os_file_pread,os_file_read,fil_io,buf_read_page_low,buf_read_page,buf_page_get_gen,btr_cur_search_to_nth_level,row_search_for_mysql,ha_innodb::index_r ead,handler::index_read_idx_map,join_read_const,join_read_const_table,make_join_statistics,JOIN::optimize,mysql_select,handle_select,execute_sqlcom_select,mysql_e xecute_command,mysql_parse,dispatch_command,do_command,handle_one_connection 1 do_sigwait,sigwait,signal_hand 84/87
  50. mysqldを止める kill -15 で死んでくれるこずを祈る 本圓に深いずころで刺さっおるなら単に無芖されるだけ ‐ kill -15 は正垞終了シヌケンスをトリガヌする mysqladmin

    shutdown も最終的には同じ関数 に行き぀くので、これで終了しおくれればめっけもの ‐ シャットダりンシヌケンスが始たっおくれればその埌のクラむアントからの芁求には ERROR: 1053 Server shutdown in progress. が返るようになるので、䞊手くすればリ゜ヌスが枯枇し きっおいおも正垞にシャットダりンが終了するただし正垞終了シヌケンスはgraceful shutdownなので、埌続が来なくなったからずいっおリ゜ヌスを即解攟できずにシャットダりン できないケヌスはある ‐ それでもダメなら  kill -9 しかる埌、「 mysqld を起動しおいいのかどうか」の刀定に進む ‐ 85/87