YAPC::Asia
Tokyo 2015 お疲れ様でした!
2日目のライトニングトークでしゃべらせていただきました。
MySQL 5.7の罠があなたを狙っている from
yoku0825
ネタ的には 発掘するたび書き溜めてきたブログ記事 から
笑いが取れそうなものを 大事そうなもののみをピックアップして紹介した感じです。
知らないと致命傷、でも知ってれば予防できる(はず)
MySQL 5.7で不幸になる人が1人でも少なくなってくれることを願っています。
…
MySQL5.7において、JSON(JavaScript Object Notation)がサポートされていて、
様々な言語やアプリ間で、より簡単にデータの受け渡しが行えるようになりました。
ドキュメントをJSONフォーマットでデータベースに保存して、
様々なアプリケーションから呼び出して利用出来るなど、
汎用性と運用面での活用が出来るようになっています。
1) ネイティブのJSONデータ型
効率的なデータ処理と保管にネイティブ内部バイナリ形式をサポート。
2) 組み込みJSONファンクション
効率よくドキュメントを保存,検索,更新,操作する事を可能にします。
3) JSON コンパレーター
文書データを容易にSQLクエリと統合することが可能
4) Generated …
This is translation for my early post in Japanese.
As of MySQL 5.7.6, generated column was introduced as 5.7's new
feature.
I found that generated column could behave like CHECK
constraint.
Let's start :)
mysql57> CREATE TABLE t1 (num int primary key, val varchar(32)) Engine= InnoDB;
Query OK, 0 rows affected (0.03 sec)
mysql57> INSERT INTO t1 (num, val) VALUES (1, '2015-08-06');
Query OK, 1 row affected (0.01 sec)
mysql57> SELECT * FROM t1;
+-----+------------+
| num | val |
+-----+------------+
| 1 | 2015-08-06 |
+-----+------------+
1 row in set (0.00 sec)
First, there's the bad …
MySQL5.7.7RCの次のリリース、MySQL5.7.8が8月3日にリリースされました。
多くの機能追加や変更が行われています。RCの次のリリースですが、GAでは無いのでRC2という事になるかと思います。
RCにしては、少々機能追加が多いかと思いますが、色々と便利な機能が追加されています。
詳細は、以下のURLを参照下さい。
Changes in MySQL 5.7.8 (2015-08-03)
http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-8.html
—————————————
Backup Notes
Configuration Notes
JSON Notes
Optimizer Notes
Packaging Notes
Performance Schema Notes
Plugin Notes
Security Notes
Spatial Data Support
SQL Mode Notes
Functionality Added or …
generated columnそのものの説明はこのへんに。
日々の覚書: MySQL 5.7.6のgenerated
columnは関数インデックスの夢を見るか
というわけでやってみましょう。
mysql57> CREATE TABLE t1 (num int primary key, val varchar(32)) Engine= InnoDB;
Query OK, 0 rows affected (0.03 sec)
mysql57> INSERT INTO t1 (num, val) VALUES (1, '2015-08-06');
Query OK, 1 row affected (0.01 sec)
mysql57> SELECT * FROM t1;
+-----+------------+
| num | val |
+-----+------------+
| 1 | 2015-08-06 |
+-----+------------+
1 row in set (0.00 sec)
こんなテーブルがあったとするじゃろ?
mysql57> ALTER TABLE t1 ADD check_val datetime AS (CAST(val AS …[さらに読む]
というよりは、今までが「デフォルトで入っているつもりが入っていなかった」ので、そのバグをFIX、ということらしい。
The validate_password plugin was not installed by RPM packages
for platorms using systemd or SysV-style initialization scripts.
(Bug #18438833)MySQL :: MySQL 5.7 Release Notes :: Changes in
MySQL 5.7.8 (2015-08-03)
やったね! 初心者殺しの罠が一つ増えたよ! orz
validate_passwordプラグインについては5.6で導入された機能なので、日本語マニュアルが既にある。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 6.1.2.6
パスワード検証プラグイン
…
今までのInnoDB圧縮(ROW_FORMAT= Compress)は InnoDBテーブル圧縮 、新しいやつは InnoDBページ圧縮 としてドキュメントに載っている。
今までのInnoDBテーブル圧縮はzlibのみの対応で、圧縮後のデータの詰め直しなども全部InnoDB側で対応していた。そのデータの詰め直しをファイルシステム側に任せることで、CPUバウンドだった圧縮処理を軽く/圧縮効率を良くしよう、というアレだと認識している。
詳しくはこちら。 InnoDB Transparent PageIO Compression | MySQL
Server Blog
CentOS …
概要だけでベンチマークとかしてないです。あとななめ読みなので俺の興味のないところ(空間インデックスとか)はかっ飛ばしてます。
MySQL :: MySQL 5.7 Release Notes :: Changes in
MySQL 5.7.8 (Not yet released)
* innodb_adaptive_hash_index_parts
* Adaptive Hashのラッチを分割できるらしい。暗黙のデフォルトは8 (以前は1固定)
* Adaptive Hashが有効だと性能が劣化する書き込みバウンドのケースで効くか?
* …
日々の覚書: MySQL
5.7.6からSSL周りのセットアップが扱いやすくなった のmysql_ssl_rsa_setup
がそのまま/etc/init.d/mysqld
の中で呼ばれるようになった…というだけの話なんですが、理屈を知らないとエラーログが矛盾してそうに思えることになっていたので解説がてら。
# rpm -i mysql-community-server-5.7.8-0.3.rc.el5.x86_64.rpm mysql-community-common-5.7.8-0.3.rc.el5.x86_64.rpm mysql-community-client-5.7.8-0.3.rc.el5.x86_64.rpm mysql-5.7.8-0.3.rc.el5.x86_64.rpm mysql-community-libs-5.7.8-0.3.rc.el5.x86_64.rpm mysql-community-libs-compat-5.7.8-0.3.rc.el5.x86_64.rpm[さらに読む]
..
# less /var/log/mysqld.log
2015-07-15T07:44:47.363530Z 0 [Warning] InnoDB: New log files created, LSN=45790
2015-07-15T07:44:47.504281Z 0 [Warning] InnoDB: Creating foreign key …
my.cnfの[mysqld]セクションに require_secure_transport
と書いておくと、SSL接続を強要できるらしい。
MySQL :: MySQL 5.7 Reference Manual :: 5.1.4
Server System Variables
# service mysqld restart --require_secure_transport[さらに読む]
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
$ mysql -uroot
mysql> SELECT @@require_secure_transport;
+----------------------------+
| @@require_secure_transport |
+----------------------------+
| 1 |
+----------------------------+
1 row in …