2018年3月20日火曜日

MySQL 8.0.4rc

MySQL 8.0.4rcは、「 一般公開前のドラフト:2018-03-19 」としてリリースされました 。 

私は素早く覗いて、ここに私の印象を書き留めることにしました。 このリリースはしばらく話されていたので、これはいくつかの古いニュースですが、とにかく私の考えを追加しました。

私が気づいた最初のことは、更新されたmysqlクライアントを使うという簡単な問題でした。 私の古いバージョンはまだ私の道に残っていた

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded
簡単な修正と有効な最新のmysqlクライアントを使用していることを確認してください。 もちろん、認証プラグインをmysql_native_passwordに戻して変更するなど、他のオプションも存在しましたが、なぜセキュリティメソッドを使用するのか気にしないでください。 これはセキュリティの非常に優れた拡張です。このより安全な方法を使用して接続を取得しているときに接続の問題がある場合は、驚かないでください。


Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 8.0.4-rc-log

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

だから最初の非常にクールな強化...

mysql> show create table user\G
*************************** 1. row ***************************
テーブル:ユーザー
テーブルの作成:CREATE TABLE `user`(
`Host` char(60)COLLATE utf8_bin NOT NULL DEFAULT ''、
`User` char(32)COLLATE utf8_bin NOT NULL DEFAULT ''、
`Select_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Insert_priv` enum( 'N'、 'Y')CHARACTER SET utf8 NOT NULL DEFAULT 'N'、
`Update_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Delete_priv`列挙型( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Create_priv`列挙型( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Drop_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Reload_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Shutdown_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Process_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`File_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Grant_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`References_priv` enum( 'N'、 'Y')CHARACTER SET utf8 NOT NULL DEFAULT 'N'、
`Index_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Alter_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Show_db_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Super_priv` enum( 'N'、 'Y')CHARACTER SET utf8 NOT NULL DEFAULT 'N'、
`Create_tmp_table_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Lock_tables_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Execute_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Repl_slave_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Repl_client_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Create_view_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Show_view_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Create_routine_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Alter_routine_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Create_user_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Event_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Trigger_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Create_tablespace_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`ssl_type` enum( ''、 'ANY'、 'X509'、 'SPECIFIED')キャラクタセットutf8 NOT NULL DEFAULT ''、
`ssl_cipher` blobはNULLではありませんが、
`x509_issuer`ブロブはNULLではない、
`x509_subject` blob NOT NULL、
`max_questions` int(11)unsigned NOT NULL DEFAULT '0'、
`max_updates` int(11)unsigned NOT NULL DEFAULT '0'、
`max_connections` int(11)unsigned NOT NULL DEFAULT '0'、
`max_user_connections` int(11)unsigned NOT NULL DEFAULT '0'、
`plugin` char(64)COLLATE utf8_bin NOT NULL DEFAULT 'caching_sha2_password'、
`authentication_string`テキストCOLLATE utf8_bin、
`password_expired` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`password_last_changed`タイムスタンプNULL DEFAULT NULL、
`password_lifetime` smallint(5)符号なしDEFAULT NULL、
`account_locked`列挙型( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Create_role_priv` enum( 'N'、 'Y')キャラクタセットutf8 NOT NULL DEFAULT 'N'、
`Drop_role_priv` enum( 'N'、 'Y')文字セットutf8 NOT NULL DEFAULT 'N'、
`Password_reuse_history` smallint(5)unsigned DEFAULT NULL、
`Password_reuse_time` smallint(5)unsigned DEFAULT NULL、
PRIMARY KEY( `Host`、` User`)
)/ *!50100 TABLESPACE `mysql` * / ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin STATS_PERSISTENT = 0 COMMENT = 'ユーザーとグローバル特権'
1行セット(0.00秒)

YEPのユーザーテーブルはInnoDBであり、独自のTableSpaceを持っています。

新しいデータディクショナリを追加すると、Information_schemaの変更が通知されます。
したがって、単純な例として、Columnsテーブルは歴史的にビューではありませんでしたが、現在は変更されています。


mysql> show create table COLUMNS \G
*************************** 1. row ***************************
表示:列
ビューの作成:CREATE ALGORITHM = UNDEFINED DEFINER = `mysql.infoschema` @` localhost`

これは、information_schemaでのパフォーマンスを助けるために行われるように見えますが、クエリごとの一時テーブルの作成を削除してinformation_schemaにします。

ドキュメントの第14章でこれについて深く掘り下げて説明します。詳細は以下のURLを参照してください。
また、前述のデータディクショナリは、アトミックデータ定義言語(DDL)文またはアトミックDDLを持つことができます。


新しいMySQL 8.0インスタンスへのレプリケーションを設定する前にクエリを確認しないと、これはいくつかのトランザクションを呼び起こす可能性があります。 テーブルメンテナンスの取り扱いにどのような影響が及ぶかという理由で、私はそれを言います。 "If Exists"というクリーンなクエリを書くと、大きな問題にはなりません。 全体的に、データとロールバックのオプションを保護する、より多くのトランザクションベースの機能です。


リソース管理は非常に興味深く見えます.MySQL 8.0の新機能であるため、これに重点を置くためにはもっと時間をかけなければなりません。 全体的にグループを割り当て、クエリの優先度を設定する必要はなく、クエリの振る舞いやリソースの割り当て方法をグループ化することができます。

mysql> select @@version;
+------------+
| @@バージョン|
+ ------------ +
| 5.7.16-log |
+ ------------ +
1行セット(0.00秒)

mysql> desc INFORMATION_SCHEMA.RESOURCE_GROUPS;
ERROR 1109(42S02):information_schemaの 'RESOURCE_GROUPS'テーブルが不明です

mysql> select @@ version;
+ -------------- +
| @@バージョン|
+ -------------- +
| 8.0.4-rc-log |
+ -------------- +
1行セット(0.00秒)

mysql> desc INFORMATION_SCHEMA.RESOURCE_GROUPS;
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
| フィールド| タイプ| Null | キー| デフォルト| 余分な|
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
| RESOURCE_GROUP_NAME | varchar(64)| NO | | NULL | |
| RESOURCE_GROUP_TYPE | 列挙型( 'SYSTEM'、 'USER')| NO | | NULL | |
| RESOURCE_GROUP_ENABLED | tinyint(1)| NO | | NULL | |
| VCPU_IDS | ブロブ| はい | NULL | |
| THREAD_PRIORITY | int(11)| NO | | NULL | |
+ ------------------------ + ----------------------- + ------ + ----- + --------- + ------- +
5行セット(0.00秒)


InnoDBバッファプールのキャッシュに関する詳細は、現在使用可能なインデックスに関するものです。

mysql> desc INFORMATION_SCHEMA.INNODB_CACHED_INDEXES ;
+----------------+---------------------+------+-----+---------+-------+
| フィールド| タイプ| Null | キー| デフォルト| 余分な|
+ ---------------- + --------------------- + ------ + --- - + --------- + ------- +
| SPACE_ID | int(11)unsigned | NO | | | |
| INDEX_ID | bigint(21)署名なし| NO | | | |
| N_CACHED_PAGES | bigint(21)署名なし| NO | | | |
+ ---------------- + --------------------- + ------ + --- - + --------- + ------- +
3行セット(0.01秒)


InnoDBバッファプールを設定する方法が不明な場合は、log_sizesまたはflushメソッドを使用して、使用可能なメモリに基づいてMySQLを設定します。

innodb_dedicated_server

[mysqld]
innodb-dedicated-server=1

mysql> select @@ innodb_dedicated_server;
+ --------------------------- +
| | @ innodb_dedicated_server |
+ --------------------------- +
| 1 |
+ --------------------------- +

この単純なテストでは、innodb_buffer_pool_sizeを6GBに設定しています(デフォルトは128MBです)。

数多くのJSONの追加と、正規表現の変更が行われました。 どちらも有望です。

このリリース自体のレプリケーションの強化は、コンパクトバイナリ形式を使用したJSONドキュメントの部分的な更新のバイナリログをサポートするようになりました。

しかし、全体的に多くの機能が利用できます( ここではそのすべてを読むことができます )。そのうちの1つ(クライアントが明日持っていたがっています)は、チャネルごとの複製ファイルです。
私のテストインスタンスはすでにバイナリログを有効にしていましたが、デフォルトではTABLEとファイルベースのマスター&スレーブ情報がデフォルトでオンになっています。

全体的に、これはこのリリースでの最初の一見とそれに対する非常に高いレベルの考えであり、他にも多くの変更が存在することに留意してください。 このリリースに関する他のブログ投稿や、 マニュアルリリースノートを見ることも役立ちます。 管理、セキュリティ、レプリケーションの観点から非常に有望であるように見えるので、確かにダウンロードしてレビューしてください。

2018年3月14日水曜日

MySQLのチートシート

だから私はいつか私がすべきだと思ったように投稿した。 私はまだMySQLと関連するフォークと一緒に働いていてとても忙しく、私が思うようにブログを出していませんでした。 だから、私はそれに取り組むでしょう。 

先日、私はそれが一般的なVIチートシートリストだったので、私が愛していたウェブサイトを思い出しました。 あなたが知っている構文、あなたはそれが必要であることを知っていますが、それが正しいまで3回タイプします。 それはあなたがそれを見て右に入力されると、私はすでにそれを書いたと思った。 

だから私は、一般的なMySQLコマンドの単純なリストではなく、毎月50回タイプするか、手の後ろのように知っているべきですが、クライアントが私たちの肩を見ているときを忘れてしまいます。 
まずは.. 
私たちは新しいMySQL 5.7.6+サーバを設定し、ログインします。 
パスワードを変更する必要があります。 しかし、それはパスを設定しないでユーザーを変更することです。 
パスワードをそのままクリアテキストで読む方法を知りたい。 

ALTER USER 
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; 
パスワードを設定する 
SET PASSWORD FOR 'bob''@'localhost' = PASSWORD('cleartext password'); 

パージバイナリログ 
PURGE BINARY LOGS TO 'mysql-bin.010';
PURGE BINARY LOGS BEFORE '2008-04-02 00:00:00
PURGE BINARY LOGS BEFORE NOW() - interval 3 DAY;

MySQLダンプ 
# COMPACT WILL REMOVE DROP STATEMENTS
mysqldump --events --master-data=2 --routines --triggers --compact --all-databases > db.sql
mysqldump --events --master-data=2 --routines --triggers --all-databases > NAME.sql
mysqldump --opt --routines --triggers dbname > dbname.sql
mysqldump --opt --routines --triggers --no-create-info joomla jforms > dataonly.sql 

外部キーを一瞬オフにする 
SET GLOBAL foreign_key_checks=0; 



助成金をスキップする 
/usr/bin/mysqld_safe --defaults-file=/etc/mysql/my.cnf --skip-grant-tables
vi /etc/mysql/my.cnf
[mysqld]
skip-grant-tables


BinLogのレビュー 
--base64-output = DECODE-ROWS&--verbose 
mysqlbinlog --defaults-file=/home/anothermysqldba/.my.cnf --base64-output=DECODE-ROWS --verbose binlog.005862 > 005862.sql

MYSQLの安全なクライアント 
mysql_config_editor print --all
mysql_config_editor set --user=mysql --password --login-path=localhost --host=localhost
mysql --login-path=localhost -e 'SELECT NOW()';

スワップ 
sudo swapoff -a
To set the new value to 10: echo 10 | sudo tee /proc/sys/vm/swappiness
sudo swapon -a 

情報スキーマが遅い場合 
set global innodb_stats_on_metadata=0; 

AWS変数 
CALL mysql.rds_show_configuration;
> call mysql.rds_set_configuration('binlog retention hours', 24);
> call mysql.rds_set_configuration('slow_launch_time', 2);

列名が入っているテーブルを見つける 
SELECT TABLE_SCHEMA , TABLE_NAME , COLUMN_NAME FROM information_schema.COLUMNS WHERE COLUMN_NAME = 'fieldname' ; 
クライアントはTableAにあると言っていますが、50のデータベースがあります。 
SELECT TABLE_SCHEMA , TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = 'TableA' ; 

奴隷労働者を調整する 
Select @@slave_parallel_workers;
Stop Slave; Set GLOBAL slave_parallel_workers=5; Start Slave;

MySQLマルチ 
5.6>
To start both : mysqld_multi start 1,2
To check on status of both: mysqld_multi report 1,2
To check on status or other options you can use just one

5.7<
[mysqld1] BECOMES [mysqld@mysqld1]
systemctl start mysqld@mysqld1
systemctl start mysqld@mysqld2
systemctl start mysqld@mysqld3
systemctl start mysqld@mysqld4 
MySQLアップグレードシステムテーブルのみ 
mysql_upgrade --defaults-file=/home/ anothermysqldba /.my.cnf --upgrade-system-tables 

スキップ・レプリケーション・エラー 
STOP SLAVE; SET GLOBAL sql_slave_skip_counter =1; START SLAVE; SELECT SLEEP(1); SHOW SLAVE STATUS\G