TL;DR
- hmatsu47 さんに MySQLのキーワードと予約語 の中で「ROLEは予約語じゃなくてキーワード」と教えてもらった
- 予約語とキーワードの違いは、
role_or_ident_keyword
にリストされているかどうか? (ちなみに5.7だと単にkeyword
ってリストになってる)
シンボルのリスト
-
SYM(ROLE)
がROLE_SYM
に割り当てられている
TL;DR
role_or_ident_keyword
にリストされているかどうか? (ちなみに5.7だと単に keyword
ってリストになってる)
シンボルのリスト
SYM(ROLE)
が ROLE_SYM
に割り当てられている
MySQL 5.7で InnoDB UNDO Log Truncation が追加されたものの、
innodb_undo_tablespaces
は mysqld
--initialize
の時に既に指定されていないといけなくて、一度ibdata1が初期化されてしまうと二度と変更できないという制約がありました。
こんなログが出て起動に失敗したりとか失敗したりとか失敗したりとか
2017-07-19T16:00:43.739980+09:00 0 [ERROR] InnoDB: Expected to open 2 undo tablespaces but was able to find only 0 undo tablespaces. Set the innodb_undo_tablespaces parameter to the correct value and retry. Suggested value is 0
ところで、 MySQL …
[さらに読む]
See also New monitoring replication features and more! |
MySQL High Availability
original_committed_timestampはマスターで実行された時のタイムスタンプが、immediate_commit_timestampはそのサーバーで実際に実行された時のタイムスタンプがそれぞれ入る。
単位はいずれもマイクロ秒。 マスターで実行した CREATE DATABASE d1
のバイナリーログ。
$ /usr/mysql/8.0.1/bin/mysqlbinlog master/data/mysql-bin.000002
..
#170428 17:54:25 server id 1 end_log_pos 226 CRC32 0xe0efd740 GTID last_committed=0 sequence_number=1 original_committed_timestamp=1493369665593157 immediate_commit_timestamp=1493369665593157
# original_commit_timestamp=1493369665593157 (2017-04-28 17:54:25.593157 JST)
# immediate_commit_timestamp=1493369665593157 …
[さらに読む]
MySQL 5.7とそれ以前で、「存在するテーブルと存在しないテーブルを一緒にDROP TABLE」しようとすると
mysql57> CREATE TABLE t1 (num int);
Query OK, 0 rows affected (0.01 sec)
mysql57> CREATE TABLE t3 (num int);
Query OK, 0 rows affected (0.01 sec)
mysql57> SHOW TABLES;
+--------------+
| Tables_in_d1 |
+--------------+
| t1 |
| t3 |
+--------------+
2 rows in set (0.00 sec)
mysql57> DROP TABLE t1, t2, t3;
ERROR 1051 (42S02): Unknown table 'd1.t2'
mysql57> SHOW TABLES;
Empty set (0.00 sec)
エラーにはなるけど消せるものは消える。 MySQL 8.0だと
mysql80> CREATE TABLE t1 (num int);
Query OK, 0 rows affected (0.01 sec)
mysql80> CREATE TABLE t3 (num int);
Query OK, 0 rows affected (0.01 sec)
mysql80> SHOW …
[さらに読む]
MySQL8.0からのパーティションについての確認
MySQL5.7からは、InnoDB Native
Partitioningがサポートされるようになり、多くパーティションを利用している環境で、メモリーの利用率を大幅に下げる事が出来るようになっている。
MySQL8.0からは、Partition Storage
Engineがディフォルトでロードされなくなるので注意を促す為に、MySQL5.7.17から”–disable-partition-engine-check”を設定して下さいというWarningがエラーログに出るようになっています。
yoku0825さんが速攻で確認して、ブログを書かれているので確認してみて下さい。
【InnoDB Native Partitioningに関して】
…
こんなやつのこと。
2017-04-18T23:54:08.224673+09:00 0 [Note] /usr/mysql/5.7.18/bin/mysqld: ready for connections.
Version: '5.7.18-log' socket: '/usr/mysql/5.7.18/data/mysql.sock' port: 64057 Source distribution
2017-04-18T23:54:08.224691+09:00 0 [Note] Executing 'SELECT * FROM INFORMATION_SCHEMA.TABLES;' to get a list of tables using the deprecated partition engine. You may use the startup option '--disable-partition-engine-check' to skip this check.
2017-04-18T23:54:08.224696+09:00 0 [Note] Beginning of list of non-natively partitioned tables
2017-04-18T23:54:08.316219+09:00 0 [Note] End of list of non-natively partitioned tables
MySQL 8.0.0 で完全になくなることが決まった(というか8.0.0の時点でもうない)
PARTITIONストレージエンジン
…
こんな、ORDER BY狙いのキーを使いたくなるクエリーがあるじゃろ?
mysql80> EXPLAIN SELECT Name, Language, Population, Percentage FROM CountryLanguage LEFT JOIN Country ON Country.Code= CountryLanguage.CountryCode WHERE Country.continent = 'Asia' ORDER BY Percentage LIMIT 5;
+----+-------------+-----------------+------------+------+------------------------------+---------+---------+--------------------+------+----------+----------------------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------------+------------+------+------------------------------+---------+---------+--------------------+------+----------+----------------------------------------------+
| 1 | SIMPLE | Country | NULL | ALL | …
[さらに読む]
TL;DR WITH ROLLUPの結果行をHAVING条件に書けるようすることができる。 それ以外の時には使わない。
MySQL :: MySQL 8.0 Reference Manual :: 13.20
Miscellaneous Functions 使い方。 そもそも WITH ROLLUP の使い方を知らないと楽しくもなんともないので WITH
ROLLUP
の説明から。 まずは WITH ROLLUP
なしバージョン(SUM関数を噛ませてるのはあとで WITH ROLLUP
した時のため)
mysql80> SELECT Continent, Name, SUM(Population) AS Population FROM country GROUP BY Continent, Name;
+---------------+----------------------------------------------+------------+
| Continent | Name …
[さらに読む]
Sushi = Beer ?! An introduction of UTF8 support in
MySQL 8.0 | MySQL Server Blog (ユーザーによる日本語訳: 寿司=ビール問題 : MySQL
8.0でのUTF8サポート入門 (MySQL Server Blogより) |
Yakst)で言及されていた日本語用の照合順序 utf8mb4_ja_0900_as_cs
。
MySQL 8.0.1 で実装されていたので試してみた。
mysql80> SHOW COLLATION LIKE 'utf8%ja%';
+-----------------------+---------+-----+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+-----------------------+---------+-----+---------+----------+---------+
| utf8mb4_ja_0900_as_cs | …
[さらに読む]
InnoDBログをcatしたら見知らぬibdファイルの名前が書いてあることに気が付いた。
mysql/character_sets.ibd
なるファイルに書き込みをしているようだが、
mysql80> SHOW TABLES FROM mysql LIKE '%char%';
Empty set (0.00 sec)
そんなテーブルは存在しない。
$ ll data/mysql/character_sets.ibd
-rw-r----- 1 yoku0825 yoku0825 163840 Apr 3 14:44 data/mysql/character_sets.ibd
ファイルは確かにある。 なんだこれ…? と思ってたら、なんか他にもいっぱいあった。
$ diff -y <(./use -sse "SHOW TABLES FROM mysql" | sort) <(ls data/mysql/*.ibd | perl -nle 's/.+\///; s/\.ibd//; print' | sort)
> catalogs
> character_sets
…
[さらに読む]