$30 off During Our Annual Pro Sale. View Details »

MySQLを学ぶ技術

 MySQLを学ぶ技術

2020/01/17 DevelopersNight 01
https://gmo.connpass.com/event/160796/

yoku0825
PRO

January 17, 2020
Tweet

More Decks by yoku0825

Other Decks in Technology

Transcript

  1. MySQLを学ぶ技術
    はんなり豆腐は如何にしてMySQLを学んだか(仮)
    2020/01/17
    yoku0825
    DevelopersNight 01

    View Slide

  2. 免責事項
    生存バイアスがめちゃめちゃかかってると思います
    ところどころCMが入ります
    1/60

    View Slide

  3. \こんばんは/
    yoku0825@とある企業のDBA
    オラクれない

    ポスグれない

    マイエスキューエる

    生息域
    Twitter: @yoku0825

    Blog: 日々の覚書

    日本MySQLユーザ会

    MySQL Casual

    2/60

    View Slide

  4. \こんばんは/
    yoku0825@ とある企業のDBA GMOメディア
    オラクれない

    ポスグれない

    マイエスキューエる

    生息域
    Twitter: @yoku0825

    Blog: 日々の覚書

    日本MySQLユーザ会

    MySQL Casual

    GMO Media, Inc.

    3/60

    View Slide

  5. TL;DR
    ドキュメントを読もう
    エラーメッセージを読もう
    試そう
    知識をアップデートしよう
    4/60

    View Slide

  6. TL;DR
    ドキュメントを読もう
    エラーメッセージを読もう
    試そう
    知識をアップデートしよう
    5/60

    View Slide

  7. ドキュメントを読もう
    MySQL :: MySQL Documentation
    6/60

    View Slide

  8. ドキュメントを読もう
    MySQL :: MySQL Documentation
    7/60

    View Slide

  9. ドキュメントを読もう
    MySQL :: MySQL Documentation
    8/60

    View Slide

  10. ドキュメントを読もう
    取っ掛かりとしてはMySQL 5.6の日本語版
    PDFならスマホでも読める
    これを一通り読んでればたぶんMySQL 5.7の認定試験も通る
    一通り #とは

    9/60

    View Slide

  11. ドキュメントを読もう
    …と思ったら
    10/60

    View Slide

  12. ( ゚д゚)
    11/60

    View Slide

  13. ドキュメントを読もう
    MySQL Bugs: #98232: MySQL 5.6 Japanese Doc PDF is broken
    12/60

    View Slide

  14. ドキュメントを読もう
    「暗記しよう」とは言ってない
    MySQL 5.6日本語版はA4で3482ページ :-P

    人間、「こんなのあったようななかったような」というのは調べられるけれども、
    存在すら知らないものを検索だけでたどり着くのは(まだ)難しい
    13/60

    View Slide

  15. ドキュメントを読もう
    MySQL 5.6日本語版は「MySQL 5.6.23まで」
    MySQL 5.6.23は2015/2/2 :-P

    MySQL 5.6の情報でさえ日本語情報を鵜呑みにするのは危険

    日本語で調べて、URLから「自分が本当に調べたいバージョンの英語版リファレン
    ス」に飛ぶ
    MySQL :: MySQL 5.6 リファレンスマニュアル :: 14.11 InnoDB とオンライン DDL
    https://dev.mysql.com/doc/refman/5.6/ja/innodb-online-ddl.html

    MySQL :: MySQL 8.0 Reference Manual :: 15.12 InnoDB and Online DDL
    https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl.html

    14/60

    View Slide

  16. ドキュメントを読もう
    リファレンスマニュアル本編の他に “What Is New” と “Release Notes”
    MySQL :: MySQL 8.0 Reference Manual :: 1.4 What Is New in MySQL 8.0

    MySQL :: MySQL 8.0 Release Notes

    15/60

    View Slide

  17. What Is New
    MySQLのバージョン番号は、本当はずっと “メジャーバージョン.マイナーバー
    ジョン.バージョン番号”
    “メジャーバージョン.マイナーバージョン” の2桁を取って “リリースシリーズ” と読んでいる
    MySQL :: MySQL 8.0 Reference Manual :: 2.1.1 Which MySQL Version and Distribution to Install

    ドキュメントは “リリースシリーズ” 単位で分冊
    実質 “リリースシリーズ” がメジャーバージョンみたいな感じ( だった )
    今はメンテナンスリリースにリリースシリーズ変更ばりの新機能をぶち込んできやがる…

    リリースシリーズをまたいだ新機能や非互換のリストはここに多くが含まれている
    簡単な説明と、本編へのハイパーリンクが含まれているのでインデックスとして便利

    16/60

    View Slide

  18. Release Notes
    開発初期はそのバージョンで実装された新機能が載ったりするけど、一般リリース
    以降はバグフィックスノートが主 ( のはずなんだけどなぁ )
    MySQL 8.0系は 何故か メンテナンスリリースで機能が増えるので、粒度が小さい
    “What Is New” みたいになってる…
    バグフィックスノートには対応するバグ番号が載ったりもする
    自分でレポートしたのが載ってるとテンション上がる

    5桁のバグ番号は オープンなバグトラッキングシステム のもの、8桁のバグ番号は開発者の内
    部BTSのもの

    17/60

    View Slide

  19. ドキュメントを読もう
    ドキュメントは適宜更新される
    ドキュメントに誤りが見つかった時

    新しい機能が追加された時

    18/60

    View Slide

  20. ドキュメントを読もう
    ドキュメントは適宜更新される
    ドキュメントに誤りが見つかった時
    バグトラッキングシステム には「Category: Docs」がある
    ドキュメントの間違いもレポートすればMySQLへの貢献

    新しい機能が追加された時

    19/60

    View Slide

  21. ドキュメントを読もう
    mysql> HELP START SLAVE;
    Name: 'START SLAVE'
    Description:
    Syntax:
    START SLAVE [thread_types] [until_option] [connection_options] [channel_option]
    thread_types:
    [thread_type [, thread_type] ... ]
    thread_type:
    IO_THREAD | SQL_THREAD
    ..
    URL: http://dev.mysql.com/doc/refman/8.0/en/start-slave.html
    MySQLのHELP構文ってやつ - そろばんのしょ(第3版第2刷)
    20/60

    View Slide

  22. ドキュメントを読もう
    σ(゚∀゚ ) しばらく実機を使って半年とかしてから取説を全部読むのが好きな人
    「おう、お前そんな機能あったのな」というのに出会えるのが楽しい
    タフな基礎体力をつける一番の近道だと思う(個人差があります)
    21/60

    View Slide

  23. TL;DR
    ドキュメントを読もう
    エラーメッセージを読もう
    試そう
    知識をアップデートしよう
    22/60

    View Slide

  24. エラーメッセージを読もう
    2018-07-12T00:00:46.520037+09:00 9 [ERROR] [MY-010584] [Repl] Slave SQL for channel '': E
    rror 'You have an error in your SQL syntax; check the manual that corresponds to your MyS
    QL server version for the right syntax to use near 'rank, app_id ) VALUES ( 1, 0, 1,
    8660 )' at line 1' on query. Default database: 'xxx'. Query: 'REPLACE INTO t1 ( ki
    nd, genre, rank, id ) VALUES ( 1, 0, 1, 8660 )', Error_code: MY-001064
    23/60

    View Slide

  25. エラーメッセージを読もう
    Slave SQL for channel ‘’: Error
    You have an error in your SQL syntax; check the manual that corresponds
    to your MySQL server version for the right syntax to use near
    24/60

    View Slide

  26. エラーメッセージを読もう
    Slave SQL for channel ‘’: Error
    ’’ (空文字列) というチャンネルのSQLスレッドでなんかエラーが起きた

    You have an error in your SQL syntax; check the manual that corresponds
    to your MySQL server version for the right syntax to use near
    SQL構文にエラーがあります。近くで使用する正しい構文については、MySQLサーバーのバー
    ジョンに対応するマニュアルを確認してください
    translated by Google翻訳

    25/60

    View Slide

  27. エラーメッセージを読もう
    Slave SQL for channel ‘’: Error
    ’’ (空文字列) というチャンネルのSQLスレッドでなんかエラーが起きた
    チャンネル .. マルチソースレプリケーション実装(5.7)以降に導入された概念でデフォルトは ‘’ (空文字列)
    SQLスレッド .. レプリケーションスレーブで動作するスレッド、SQLを実行する役割がある。対義語(?)はI/Oス
    レッド

    You have an error in your SQL syntax; check the manual that corresponds
    to your MySQL server version for the right syntax to use near
    SQL構文にエラーがあります。近くで使用する正しい構文については、MySQLサーバーのバー
    ジョンに対応するマニュアルを確認してください
    translated by Google翻訳

    26/60

    View Slide

  28. エラーメッセージを読もう
    用語は押さえておく必要がある
    英語版ドキュメントに一通り目を通して(とまでは言わない、3割くらい対訳っぽく参照したこ
    とがあればなんとなくわかる希ガス) 分からない単語を逐次調べていれば だいたい一度はあた
    ると思う

    一応用語集もあるからここに載ってればきっとMySQL用語
    MySQL :: MySQL 8.0 Reference Manual :: MySQL Glossary

    27/60

    View Slide

  29. エラーメッセージを読もう
    2020-01-15T11:45:24.621792+09:00 0 [ERROR] [MY-010520] [Server] Invalid (old?) table or d
    atabase name 'user_info#p#pmax'
    28/60

    View Slide

  30. エラーメッセージを読もう
    Invalid (old?) table or database name
    無効な(古い?)テーブルまたはデータベース名
    translated by Google翻訳

    29/60

    View Slide

  31. エラーメッセージを読もう
    読んで、意味を何となく理解して初めて、「いや、それは違う」と言える
    無効な名前じゃない、だって8.0.13とそれ以前はちゃんと動いてたんだから

    MySQL Bugs: #94519: Wrong messages in error-log when using partition with lower-
    case-table-names=1

    30/60

    View Slide

  32. エラーメッセージを読もう
    2019-05-10T17:24:32.227759+09:00 225846 [Warning] [MY-010897] [Repl] Storing MySQL user n
    ame or password information in the master info repository is not secure and is therefore
    not recommended. Please consider using the USER and PASSWORD connection options for START
    SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
    31/60

    View Slide

  33. エラーメッセージを読もう
    MySQLのユーザー名またはパスワード情報をマスター情報リポジトリに保存する
    ことは安全ではないため、お勧めしません。 START SLAVEのUSERおよび
    PASSWORD接続オプションの使用を検討してください。 詳細については、
    MySQLマニュアルの「START SLAVE Syntax」を参照してください。
    translated by Google翻訳

    32/60

    View Slide

  34. Google翻訳
    すごい
    33/60

    View Slide

  35. エラーメッセージを読もう
    2018-07-12T00:00:46.520037+09:00 9 [ERROR] [MY-010584] [Repl] Slave SQL for channel '': E
    rror 'You have an error in your SQL syntax; check the manual that corresponds to your MyS
    QL server version for the right syntax to use near 'rank, app_id ) VALUES ( 1, 0, 1,
    8660 )' at line 1' on query. Default database: 'xxx'. Query: 'REPLACE INTO t1 ( ki
    nd, genre, rank, id ) VALUES ( 1, 0, 1, 8660 )', Error_code: MY-001064
    事象である “MySQL レプリケーション 止まる” だと原因が多すぎてググラビリ
    ティは低い
    “MySQL シンタックスエラー レプリケーション” だと一発でたどり着けた
    MySQL :: MySQL 5.6 リファレンスマニュアル :: 17.4.1.25 レプリケーションと予約語

    ちなみにこれ RANK が予約語になった影響で転けたやーつ

    34/60

    View Slide

  36. エラーメッセージを読もう
    2018-07-12T00:00:46.520037+09:00 9 [ERROR] [MY-010584] [Repl] Slave SQL for channel '': E
    rror 'You have an error in your SQL syntax; check the manual that corresponds to your MyS
    QL server version for the right syntax to use near 'rank, app_id ) VALUES ( 1, 0, 1,
    8660 )' at line 1' on query. Default database: 'xxx'. Query: 'REPLACE INTO t1 ( ki
    nd, genre, rank, id ) VALUES ( 1, 0, 1, 8660 )', Error_code: MY-001064
    エラー番号は案外情報が欠落するのでググるにはやりにくい
    MY-* 形式のメッセージが出るようになったのは8.0から
    運良く8.0を使って同じエラーを踏んだ人が日本語で情報を書いていることに期待できるかどうか

    1064 はシンタックスエラーの方のエラー番号で、 10584 の方がスレーブでエラーが発生したエ
    ラー番号(SQLスレッドとI/Oスレッドの区別はない)
    二種類混じってることにぱっと見気付けるかどうか…

    35/60

    View Slide

  37. ワーニングも読もう
    mysql80 11> CREATE DATABASE d2 CHARSET utf8;
    Query OK, 1 row affected, 1 warning (0.11 sec)
    mysql80 11> SHOW WARNINGS;
    +---------+------+-----------------------------------------------------------------------
    -----------------------------------------------------------------------------------------
    -------------+
    | Level | Code | Message
    |
    +---------+------+-----------------------------------------------------------------------
    -----------------------------------------------------------------------------------------
    -------------+
    | Warning | 3719 | 'utf8' is currently an alias for the character set UTF8MB3, but will b
    e an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be
    unambiguous. |
    +---------+------+-----------------------------------------------------------------------
    -----------------------------------------------------------------------------------------
    -------------+
    1 row in set (0.00 sec)
    36/60

    View Slide

  38. ワーニングも読もう
    ‘utf8’ is currently an alias for the character set UTF8MB3, but will be an
    alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in
    order to be unambiguous.
    「utf8」は現在、文字セットUTF8MB3のエイリアスですが、将来のリリースではUTF8MB4の
    エイリアスになります。 明確にするためにUTF8MB4の使用を検討してください
    translated by Google翻訳

    37/60

    View Slide

  39. ワーニングも読もう
    mysql80 11> CREATE DATABASE d3 CHARSET utf8mb3;
    Query OK, 1 row affected, 1 warning (0.01 sec)
    mysql80 11> SHOW WARNINGS;
    +---------+------+-----------------------------------------------------------------------
    ----------------------+
    | Level | Code | Message
    |
    +---------+------+-----------------------------------------------------------------------
    ----------------------+
    | Warning | 1287 | 'utf8mb3' is deprecated and will be removed in a future release. Pleas
    e use utf8mb4 instead |
    +---------+------+-----------------------------------------------------------------------
    ----------------------+
    1 row in set (0.00 sec)
    38/60

    View Slide

  40. ワーニングも読もう
    ‘utf8mb3’ is deprecated and will be removed in a future release. Please use
    utf8mb4 instead
    「utf8mb3」は非推奨であり、将来のリリースで削除される予定です。 代わりにutf8mb4を使
    用してください
    translated by Google翻訳

    39/60

    View Slide

  41. ワーニングも読もう
    ワーニングメッセージはクエリーを実行した直後だけしか参照できない
    アプリケーションから実行したクエリーのワーニングはアプリケーションが他のクエリーを実
    行する前に SHOW WARNINGS を押し込んでやらないといけない

    人口に膾炙しているORMでそこまで面倒を見てくれるものなのかどうか謎

    40/60

    View Slide

  42. エラーメッセージを読もう
    怖くないよ、Google翻訳があれば
    なくても怖くはないけど(当方英検3級)
    ※感じ方には個人差があります

    「たったそれだけ」のことだけれど、エラーメッセージを読んだり理解しようとし
    ない人は多い
    41/60

    View Slide

  43. TL;DR
    ドキュメントを読もう
    エラーメッセージを読もう
    試そう
    知識をアップデートしよう
    42/60

    View Slide

  44. 試そう
    ex. “information_schema.tables の data_length + index_length と実際の .ibd
    ファイルはどれくらい違いがありますか?”
    $ ll /usr/mysql/8.0.19/data/sbtest/sbtest1.ibd -h
    -rw-r----- 1 yoku0825 yoku0825 29M Jan 17 12:41 /usr/mysql/8.0.19/data/sbtest/sbtest1.ibd
    mysql80 19> SELECT table_schema, table_name, format_bytes(data_length + index_length) AS
    size FROM information_schema.tables WHERE table_schema = 'sbtest';
    +--------------+------------+-----------+
    | TABLE_SCHEMA | TABLE_NAME | size |
    +--------------+------------+-----------+
    | sbtest | sbtest1 | 23.06 MiB |
    +--------------+------------+-----------+
    1 row in set (0.01 sec)
    43/60

    View Slide

  45. 試そう
    ex. “information_schema.tables の data_length + index_length と実際の .ibd
    ファイルはどれくらい違いがありますか?”
    $ ll /usr/mysql/8.0.19/data/sbtest/sbtest*.ibd -h
    -rw-r----- 1 yoku0825 yoku0825 29M Jan 17 12:42 /usr/mysql/8.0.19/data/sbtest/sbtest1.ibd
    -rw-r----- 1 yoku0825 yoku0825 29M Jan 17 12:43 /usr/mysql/8.0.19/data/sbtest/sbtest2.ibd
    -rw-r----- 1 yoku0825 yoku0825 29M Jan 17 12:43 /usr/mysql/8.0.19/data/sbtest/sbtest3.ibd
    mysql80 21> SELECT table_schema, table_name, format_bytes(data_length + index_length) AS size
    FROM information_schema.tables WHERE table_schema = 'sbtest';
    +--------------+------------+-----------+
    | TABLE_SCHEMA | TABLE_NAME | size |
    +--------------+------------+-----------+
    | sbtest | sbtest1 | 23.06 MiB |
    | sbtest | sbtest2 | 23.06 MiB |
    | sbtest | sbtest3 | 16.00 KiB |
    +--------------+------------+-----------+
    3 rows in set (0.01 sec)
    44/60

    View Slide

  46. 試そう
    ex. “information_schema.tables の data_length + index_length と実際の .ibd
    ファイルはどれくらい違いがありますか?”
    mysql80 21> ANALYZE TABLE sbtest.sbtest3;
    +----------------+---------+----------+----------+
    | Table | Op | Msg_type | Msg_text |
    +----------------+---------+----------+----------+
    | sbtest.sbtest3 | analyze | status | OK |
    +----------------+---------+----------+----------+
    1 row in set (0.04 sec)
    mysql80 21> SELECT table_schema, table_name, format_bytes(data_length + index_length) AS size
    FROM information_schema.tables WHERE table_schema = 'sbtest';
    +--------------+------------+-----------+
    | TABLE_SCHEMA | TABLE_NAME | size |
    +--------------+------------+-----------+
    | sbtest | sbtest1 | 23.06 MiB |
    | sbtest | sbtest2 | 23.06 MiB |
    | sbtest | sbtest3 | 23.06 MiB |
    +--------------+------------+-----------+
    3 rows in set (0.00 sec)
    45/60

    View Slide

  47. 試そう
    ex. “information_schema.tables の data_length + index_length と実際の .ibd
    ファイルはどれくらい違いがありますか?”
    $ ll /usr/mysql/8.0.19/data/sbtest/sbtest*.ibd -h
    -rw-r----- 1 yoku0825 yoku0825 240M Jan 17 12:45 /usr/mysql/8.0.19/data/sbtest/sbtest1.ib
    d
    mysql80 23> SELECT table_schema, table_name, format_bytes(data_length + index_length) AS
    size FROM information_schema.tables WHERE table_schema = 'sbtest';
    +--------------+------------+------------+
    | TABLE_SCHEMA | TABLE_NAME | size |
    +--------------+------------+------------+
    | sbtest | sbtest1 | 214.70 MiB |
    +--------------+------------+------------+
    1 row in set (0.04 sec)
    46/60

    View Slide

  48. 試そう
    ex. “information_schema.tables の data_length + index_length と実際の .ibd
    ファイルはどれくらい違いがありますか?”
    このケースだと2割くらい?

    ただし ANALYZE TABLE 前のようなよくわからない状態になったりもする
    これはInnoDBの統計情報を更新するスレッドがバックグラウンドで非同期で動いているからなんですがそれは置い
    ておいて

    47/60

    View Slide

  49. 試そう
    Not “information_schema.tables の data_length + index_length と実際
    の .ibdファイルはどれくらい違いがありますか?”
    But “information_schema.tables の data_length + index_length と実際
    の .ibdファイルの違いはどこを見ればわかりますか?”
    48/60

    View Slide

  50. 試そう
    $ ll /usr/mysql/8.0.19/data/sbtest/sbtest*.ibd -h
    -rw-r----- 1 yoku0825 yoku0825 29M Jan 17 14:11 /usr/mysql/8.0.19/data/sbtest/sbtest1.ibd
    -rw-r----- 1 yoku0825 yoku0825 29M Jan 17 14:12 /usr/mysql/8.0.19/data/sbtest/sbtest2.ibd
    -rw-r----- 1 yoku0825 yoku0825 29M Jan 17 14:12 /usr/mysql/8.0.19/data/sbtest/sbtest3.ibd
    mysql80 27> ANALYZE TABLE sbtest.sbtest2;
    +----------------+---------+----------+----------+
    | Table | Op | Msg_type | Msg_text |
    +----------------+---------+----------+----------+
    | sbtest.sbtest2 | analyze | status | OK |
    +----------------+---------+----------+----------+
    1 row in set (0.01 sec)
    mysql80 26> SELECT table_schema, table_name, format_bytes(data_length + index_length) AS size FROM information_sche
    ma.tables WHERE table_schema = 'sbtest';
    +--------------+------------+-----------+
    | TABLE_SCHEMA | TABLE_NAME | size |
    +--------------+------------+-----------+
    | sbtest | sbtest1 | 23.06 MiB |
    | sbtest | sbtest2 | 32.00 KiB |
    | sbtest | sbtest3 | 23.06 MiB |
    +--------------+------------+-----------+
    3 rows in set (0.01 sec)
    49/60

    View Slide

  51. 試そう
    mysql80 28> SELECT COUNT(*) FROM sbtest.sbtest2;
    +----------+
    | COUNT(*) |
    +----------+
    | 0 |
    +----------+
    1 row in set (0.00 sec)
    mysql80 28> SELECT table_schema, table_name, format_bytes(data_length + index_length + da
    ta_free) AS size FROM information_schema.tables WHERE table_schema = 'sbtest';
    +--------------+------------+-----------+
    | TABLE_SCHEMA | TABLE_NAME | size |
    +--------------+------------+-----------+
    | sbtest | sbtest1 | 25.06 MiB |
    | sbtest | sbtest2 | 25.03 MiB |
    | sbtest | sbtest3 | 25.06 MiB |
    +--------------+------------+-----------+
    3 rows in set (0.00 sec)
    50/60

    View Slide

  52. 試そう
    問題の解答はキャッシュみたいなもの
    状況が変わればキャッシュを更新しないといけない
    キャッシングももちろん良いことだけど、キャッシュの再構築方法を押さえるのも
    もっと良い
    51/60

    View Slide

  53. 試そう
    最低限、すぐに触れて自分の好きにできる mysqld が必要
    Linuxの方が( mysqld の外側から取れる)情報(のノウハウ)は多いからLinuxの方が良い気はする

    そういう用途ではパッケージもの(rpm, dpkg)が便利だと思う
    MySQL :: Download MySQL Yum Repository

    MySQL :: Download MySQL APT Repository

    52/60

    View Slide

  54. 試そう
    外側から得られる情報が少なくても良ければWindows, Dockerでも十分
    MySQL :: Download MySQL Installer

    mysql/mysql-server - Docker Hub

    53/60

    View Slide

  55. TL;DR
    ドキュメントを読もう
    エラーメッセージを読もう
    試そう
    知識をアップデートしよう
    54/60

    View Slide

  56. 知識をアップデートしよう
    机上の理論から実践への飛躍
    What Is New のように、「新しいバージョンの知識」
    MySQL 5.6日本語ドキュメントをベースにしてその次に行く候補
    55/60

    View Slide

  57. 知識をアップデートしよう
    詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド (NEXT
    ONE) | 奥野 幹也 |本 | 通販 | Amazon
    実践ハイパフォーマンスMySQL 第3版 | Baron Schwartz, Peter Zaitsev, Vadim
    Tkachenko, 菊池 研自, 株式会社クイープ |本 | 通販 | Amazon
    SQLアンチパターン | Bill Karwin, 和田 卓人, 和田 省二, 児島 修 |本 | 通販 |
    Amazon
    56/60

    View Slide

  58. 知識をアップデートしよう
    Yoshiaki Yamasaki(@yyamasaki1)さん / Twitter
    私市智美 Tomomi Kisaichi(@kisaichi)さん / Twitter
    lefred(@lefred)さん / Twitter
    57/60

    View Slide

  59. 知識をアップデートしよう
    MySQL Casual - connpass
    Join mysql-casual on Slack!

    MySQL Weekly
    58/60

    View Slide

  60. One more things
    英語でググろう
    ブログを書こう
    59/60

    View Slide

  61. Any Questions
    and/or
    Suggestions?
    60/60

    View Slide