Contenu connexe Similaire à 光のMySQL 5.7 (14) 光のMySQL 5.715. MySQL 5.7の新機能
MySQL :: MySQL 5.7 Reference Manual :: 1.4 What Is
New in MySQL 5.7
MySQL :: MySQL 5.7 Release Notes
Complete list of new features in MySQL 5.7
MySQL 5.7の新機能完全リスト Yakst
⽇々の覚書: 5.7
14/85
17. show_compatibility_56= OFF問題 解決
p̲s.global̲status, p̲s.session̲status,
p̲s.global̲variables, p̲s.session̲variablesはSELECT権
限なしでSELECT可能に(i̲sと同じ扱い)
まあまあ悪くない解決策だと思う
MySQL Bugs: #77732: REGRESSION: replication fails
for insufficient privileges
16/85
20. 5.7のenforce̲gtid̲consistency
5.6はこれも起動時パラメーターだった
mysql57> SELECT @@enforce_gtid_consistency;
+----------------------------+
| @@enforce_gtid_consistency |
+----------------------------+
| WARN |
+----------------------------+
1 row in set (0.00 sec)
mysql57> CREATE TABLE t2 AS SELECT * FROM t1;
Query OK, 1 row affected, 1 warning (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 1
mysql57> SHOW WARNINGS;
+---------+------+---------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------+
| Warning | 1786 | Statement violates GTID consistency: CREATE TABLE ... SELECT. |
+---------+------+---------------------------------------------------------------+
1 row in set (0.00 sec)
ON̲PERMISSIVE以上のgtid̲modeではエラーになるステ
ートメントがワーニングで出⼒される。
19/85
27. ダイナミックレプリケーションフィルター
mysql57> CHANGE REPLICATION FILTER replicate_ignore_db= (mysql, p
erformance_schema);
ERROR 3017 (HY000): This operation cannot be performed with a run
ning slave sql thread; run STOP SLAVE SQL_THREAD first
mysql57> STOP SLAVE sql_thread;
mysql57> CHANGE REPLICATION FILTER replicate_ignore_db= (mysql, p
erformance_schema);
Query OK, 0 rows affected (0.00 sec)
mysql57> START SLAVE sql_thread;
26/85
30. ダイナミックレプリケーションフィルターその2
mysql57> STOP SLAVE sql_thread;
mysql57> CHANGE REPLICATION FILTER replicate_rewrite_db= ((d1, d2
), (d3, d4));
Query OK, 0 rows affected (0.00 sec)
mysql57> START SLAVE sql_thread;
--replicate-rewrite-dbのもともとの記法は”d1->d2”
全然違うじゃねーか
オプション記法だと2⾏書かないといけなかったのは⾏リテ
ラルの⾏リテラルで渡す
29/85
35. ALTER TABLE .. RENAME INDEX .. TO ..
俺得
メタデータの書き換えだけで対応
インデックスの名前はidx_col1_col2_col3派
mysql57> ALTER TABLE sbtest1 RENAME INDEX k_1 TO idx_k;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
34/85
41. UNDO log truncation
前提条件としてinnodb-undo-tablespaces= 2が必要
innodb-undo-tablespacesはibdata1を作成時に指定されてい
ないといけない
SET GLOBAL innodb_undo_log_truncate= 1で有効化
ちゃんとオンライン
でも常時有効化は無理(負荷かなりある)
mysql> SHOW GLOBAL VARIABLES LIKE '%undo%';
+--------------------------+----------+
| Variable_name | Value |
+--------------------------+----------+
| innodb_max_undo_log_size | 10485760 |
| innodb_undo_directory | . |
| innodb_undo_log_truncate | ON |
| innodb_undo_logs | 128 |
| innodb_undo_tablespaces | 2 |
+--------------------------+----------+
5 rows in set (0.00 sec)
40/85
46. サンプルテーブル
mysql57> SELECT tbl.name, idx.name, idx.index_id FROM information
_schema.INNODB_SYS_INDEXES AS idx INNER JOIN information_schema.I
NNODB_SYS_TABLES AS tbl USING(table_id) WHERE tbl.name= 'd1/t1';
+-------+---------+----------+
| name | name | index_id |
+-------+---------+----------+
| d1/t1 | PRIMARY | 75 |
| d1/t1 | md5 | 76 |
+-------+---------+----------+
2 rows in set (0.00 sec)
45/85
47. STORED generated column
mysql57> ALTER TABLE t1 ADD stored_sha256 varchar(64) AS (sha2(nu
m, 256)) STORED;
Query OK, 100000 rows affected (1.33 sec)
Records: 100000 Duplicates: 0 Warnings: 0
46/85
48. index with STORED generated column
mysql57> ALTER TABLE t1 ADD KEY (stored_sha256);
Query OK, 0 rows affected (0.44 sec)
Records: 0 Duplicates: 0 Warnings: 0
47/85
49. VIRTUAL generated column
mysql57> ALTER TABLE t1 ADD virtual_sha256 varchar(64) AS (sha2
(num, 256)) VIRTUAL;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
48/85
50. index with VIRTUAL generated column
mysql57> ALTER TABLE t1 ADD KEY (virtual_sha256);
Query OK, 0 rows affected (0.44 sec)
Records: 0 Duplicates: 0 Warnings: 0
49/85
54. 1テーブル複数トリガー
闇が⾒える
mysql57> CREATE TRIGGER before_insert_1 BEFORE INSERT ON t1 FOR EACH RO
W INSERT INTO t2 SET num = NEW.num, val = NEW.val;
Query OK, 0 rows affected (0.01 sec)
mysql57> CREATE TRIGGER before_insert_2 BEFORE INSERT ON t1 FOR EACH RO
W UPDATE t2 SET val = '残念だったな' WHERE num = NEW.num;
Query OK, 0 rows affected (0.00 sec)
mysql57> INSERT INTO t1 VALUES (1, 'one');
Query OK, 1 row affected (0.00 sec)
mysql57> SELECT * FROM t2;
+-----+--------------------+
| num | val |
+-----+--------------------+
| 1 | 残念だったな |
+-----+--------------------+
1 row in set (0.00 sec)
53/85
57. mysql p ump
--defer-table-indexesがデフォルト
--compress-outputオプション(lz4, zlib)
今のところ、--default-parallelismが2以上だと(=パラレ
ルダンプ, 暗黙のデフォルト2)--single-transactionが効か
ない
レプリケーション関連の情報は--master-info-repository=
TABLE, --relay-log-info-repository= TABLEが期待されてい
て、GTIDもmysql.gtid̲executedに依存している。
--userでmysql.*の中⾝をGRANTステートメントで出してく
れる
--watch-progress便利
56/85
58. --log-syslog
エラーログをloggerで出⼒する
基本的には両⽅書くみたいだけどmysqladmin debugの出⼒は
記録されなかった
Sep 11 16:51:48 host-133-130-53-106 mysqld[903]: Event Schedule
r: Loaded 0 events
Sep 11 16:51:48 host-133-130-53-106 mysqld[903]: /usr/mysql/5.7.
8/bin/mysqld: ready for connections.#012Version: '5.7.8-rc-log'
socket: '/usr/mysql/5.7.8/data/mysql.sock' port: 64057 Source d
istribution
Sep 11 16:52:41 host-133-130-53-106 mysqld[903]: Access denied fo
r user 'aaa'@'localhost' (using password: NO)
57/85
65. JSON data type
型制約違反の時のエラーコードがちょっと想定外
mysql57> CREATE TABLE t1 (num serial);
Query OK, 0 rows affected (0.02 sec)
mysql57> INSERT INTO t1 VALUES ('one');
ERROR 1366 (HY000): Incorrect integer value: 'one' for column 'nu
m' at row 1
mysql57> CREATE TABLE t2 (num serial, j json);
Query OK, 0 rows affected (0.02 sec)
mysql57> INSERT INTO t2 VALUES (1, 'aaa');
ERROR 3140 (22032): Invalid JSON text: "Invalid value." at positi
on 0 in value (or column) 'aaa'.
64/85
83. ALTER TABLE .. ADD COLUMN ..でオンラインだけどテーブ
ル再編成…︖
情報が錯綜してる
MySQL Bugs: #78347: innodb̲default̲row̲format:
Undesireable new behaviour
「再編成は起こらない、リリースノートの間違いだ」って論
調︖
中の⼈でも⾔ってることがちらほら違う。まだ様⼦⾒。
82/85