大阪で話した内容とほぼ一緒なのですが、、、MySQL Shell を試してみました。 OSC 2017 Okinawa MySQL の高可用性構成比較 と新機能 Group Replication from Satoshi Mitani OSC Hokkaido も参加したので、これで南は沖縄から北は北海道まで行ったと言える・・・!
MySQL 5.6と同じ方法でMySQL 5.7を起動しようとしたら何も言わずに黙って終了してしまって少しだけハマったのでメモ。
MySQL 5.6では次のようにして起動してました。
# /usr/local/mysql-5.6/bin/mysqld --no-defaults --user=mysql
--basedir=/usr/local/mysql-5.6 --skip-networking --socket=/tmp/mysql56.sock
--log-error=/tmp/my56.err > /tmp/my56.err 2>&1
log-error をつけていても、最初の数行が標準エラー出力に出ちゃうので、log-error と同じファイルにリダイレクトするようにしていました。
同じようにしてMySQL 5.7を起動してみたら、すぐに終了してしまって、しかもエラーを何も出力しません。
# /usr/local/mysql-5.7/bin/mysqld --no-defaults --user=mysql
--basedir=/usr/local/mysql-5.7 --skip-networking --socket=/tmp/mysql57.sock
--log-error=/tmp/my57.err > …[さらに読む]
InnoDB Clusterを構築すると、MySQL Routerの設定ファイルが自動的に作成されます。基本的にはTTLによって構成はキャッシュされますが、metadata cache componentが常にMySQLに接続していて、Group Replicationの状況をモニタリングしています。それにより、構成変更や障害発生時には自動的に検知してアプリケーションを適切なデータベースに振り分けてくれます。
【以下、マニュアル抜粋】
MySQL Router keeps a cached list of the online MySQL servers, or
the topology and state of the configured InnoDB cluster.
Initially, the list is loaded from Router’s configuration file
when Router is started. This list was generated with InnoDB
cluster servers when Router was bootstrapped using the –bootstrap
option.
To keep the cache updated, the metadata cache component keeps an open connection to one of …
[さらに読む]免責事項
この記事はMorgan Tocker氏によるMySQL Server Blogの投稿「MySQL 8.0: Retiring Support for the Query Cache」(2017/5/30)をユーザが翻訳したものであり、Oracle公式の文書ではありません。
MySQLのクエリーキャッシュはパフォーマンスを改善するためにあるが、それは重大なスケーラビリティー上の問題を抱えていて、深刻なボトルネックに簡単になってしまいかねない。
…
[さらに読む]MySQL5.7で約20程のJSON関数が追加されていましたが、MySQL8.0においても更に追加でJSON関数が加えられているので、基本的な動作のみを確認しています。JSON_ARRAYAGG(), JSON_OBJECTAGG(),JSON_PRETTY()
MySQL5.7 JSON関数マニュアル
https://dev.mysql.com/doc/refman/5.7/en/json-functions.html
MySQL5.7のJSONの概要に関しては、こちらにて資料がダウンロード可能です。https://www.mysql.com/jp/why-mysql/presentations/mysql-json-201701-ja/
まだ、MySQL8.0はDMRなので、これからまだ仕様が変わる部分がある事はご了承ください。
確認バージョン
mysql> select now(),@@version; …[さらに読む]
こんなん使ってます。
-- [前提となるテーブル]
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(i1 int not null primary key, v2 varchar(20))
engine = innodb;
-- [利用するストアドプロシジャ2: 1万件ごとにコミット処理あり]
drop procedure if exists test_insert_commit;
delimiter $
create procedure test_insert_commit(v_max int)
begin
declare v_id int default 0;
repeat
set v_id = v_id + 1;
insert into t1 values(v_id, v_id);
if (mod(v_id,10000) = 0) then commit;
end if;
until v_id >= v_max
end repeat;
end$
delimiter ;
JUGEMテーマ:コンピュータ
免責事項
この記事はChaithra Gopalareddy氏によるMySQL Server Blogの投稿「MySQL 8.0: GROUPING function」(2017/5/2)をユーザが翻訳したものであり、Oracle公式の文書ではありません。
MySQL 8.0.1からサーバーがSQLのGROUPING関数をサポートするようになりました。GROUP関数は、(ROLLUP操作によって生成される)超集約行(super-aggregate row)のすべての値を表すNULLであるか、通常行のNULLかを区別して利用できます。
はじめに
MySQLサーバーはGROUP BY拡張のROLLUPをしばらくサポートしてきました。ここにGROUP …
MySQLで生成されるbinログはlessでみてもバイナリログなので自分では解読できない
なのでmysqlbinlogコマンドで見る。 下記は自分の環境5.7.18で試した結果
$ /usr/local/mysql5718/bin/mysqlbinlog mysql-bin.000004 SET @@SESSION.GTID_NEXT= '627024f4-2645-11e7-b811-001a4a5718c0:12'/*!*/; # at 1538 #170530 0:50:09 server id 33083 end_log_pos 1680 CRC32 0x4ec4a13b Query thread_id=18 exec_time=0 error_code=0 use `fuki`/*!*/; SET TIMESTAMP=1496073009/*!*/; create table fuki.user_master ( user_id int, user_name varchar(256)) /*!*/; # at 1680 #170530 0:50:47 server id 33083 end_log_pos 1745 CRC32 0x04caa6e8 GTID last_committed=6 sequence_number=7 SET @@SESSION.GTID_NEXT= '627024f4-2645-11e7-b811-001a4a5718c0:13'/*!*/; # at 1745 #170530 0:50:44 server id 33083 end_log_pos 1824 CRC32 0xd6d6771f Query …[さらに読む]
TL;DR
- トランザクション分離レベルが
REPEATABLE-READの場合、SELECT .. FOR UPDATEやSELECT .. LOCK IN SHARE MODEとロックなしのSELECTの結果が違うことがある。 - 仕様らしい => 漢(オトコ)のコンピュータ道: InnoDBのREPEATABLE READにおけるLocking Readについての注意点
ドキュメント探してみたけどほんのちょっとだけしか書いてないような気がする。 SELECT … LOCK IN SHARE MODE は、 これらの行のいずれかがコミットされていない別のトランザクションによって変更された場合、クエリーはそのトランザクションが終了するまで待機してから、最新の値を使用します。 …
[さらに読む]