日本MySQLユーザ会会
2020-11-25
とみたまさひろ
https://mysql-params.tmtms.net
MySQLのバージョン間の差分を見れる
mysqld
のコマンドラインパラメータの値mysql
のコマンドラインパラメータの値Vue.jsの練習にMySQLのパラメータを表示するページを作ってみた。バージョン間の比較もできる。とりあえず手元にあったバージョンだけ。 / “MySQL Parameters” https://t.co/0DXP9Oz1l2
— とみたまさひろ🍣🍺 (@tmtms) February 21, 2018
Vue.js(ヴュージェイエス)またはVueは、Webアプリケーションにおけるユーザーインターフェイスを構築するための、オープンソースのJavaScriptフレームワークである。他のJavaScriptライブラリを使用するプロジェクトへの導入において、容易になるように設計されている。一方で高機能なシングルページアプリケーション(SPA)を構築することも可能である。
バージョン情報
{
"8.0.22": "json/8.0.22.json",
"8.0.21": "json/8.0.21.json",
"8.0.20": "json/8.0.20.json",
...
}
mysqld の 8.0.22 のパラメータと値
{
"abort-slave-event-count": "0",
"activate-all-roles-on-login": "FALSE",
"admin-address": "(No default value)",
...
}
メニューからバージョンが選択されたときに
JSON を取得して JavaScript でテーブルを作成
差分表示も JavaScript で JSON の差分を確認
サーバーサイドは静的コンテンツだけなので
GitHub Pages でホスティング
メニューからバージョンを選択したときに URL を変更
↓↑
URL を変更したときにバージョンの選択状態を変更
自前で history.pushState
とかでやってるけど Vue のルーティングを使うともっと簡単にできそうな気がする
Linux Generic 64bit バイナリを使用
mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz
インストール先は /usr/local/mysql
に統一
ホスト名は hostname
に統一
ちゃんと初期設定しないとちゃんと表示できない
scripts/mysql_install_db --no-defaults
bin/mysqld --initialize
mysqld --help -v
Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
------------------------------------------------------------ -------------
abort-slave-event-count 0
activate-all-roles-on-login FALSE
admin-address (No default value)
admin-port 33062
admin-ssl TRUE
admin-ssl-ca (No default value)
admin-ssl-capath (No default value)
admin-ssl-cert (No default value)
admin-ssl-cipher (No default value)
admin-ssl-crl (No default value)
admin-ssl-crlpath (No default value)
...
mysqld --help -v
と show variables
は異なるので
それぞれ出力
DESC mysql.user;
Field Type Null Key Default Extra
Host char(255) NO PRI
User char(32) NO PRI
Select_priv enum('N','Y') NO N
Insert_priv enum('N','Y') NO N
Update_priv enum('N','Y') NO N
Delete_priv enum('N','Y') NO N
Create_priv enum('N','Y') NO N
Drop_priv enum('N','Y') NO N
Reload_priv enum('N','Y') NO N
...
xxxx_priv
から xxxx
を取得
DESC mysql.proxies_priv;
Field Type Null Key Default Extra
Host char(255) NO PRI
User char(32) NO PRI
Proxied_host char(255) NO PRI
Proxied_user char(32) NO PRI
With_grant tinyint(1) NO 0
Grantor varchar(288) NO MUL
結果は見てなくて PROXY
権の有無を確認してるだけ
CREATE USER test IDENTIFIED BY "xxxxxx";
GRANT ALL ON *.* TO test WITH GRANT OPTION;
SHOW GRANTS FOR test;
8.0 なら DESC mysql.user
の代わりにこれだけでいい
5.7
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' WITH GRANT OPTION
8.0
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `test`@`%` WITH GRANT OPTION
GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,GROUP_REPLICATION_ADMIN,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* TO `test`@`%` WITH GRANT OPTION
最初は help functions
から
mysql> help functions
You asked for help about help category: "Functions"
For more information, type 'help <item>', where <item> is one of the following
categories:
Aggregate Functions and Modifiers
Bit Functions
Cast Functions and Operators
Comparison Operators
Control Flow Functions
Date and Time Functions
...
mysql> help Aggregate Functions and Modifiers
You asked for help about help category: "Aggregate Functions and Modifiers"
For more information, type 'help <item>', where <item> is one of the following
topics:
AVG
BIT_AND
BIT_OR
BIT_XOR
...
今は mysql.help_category
& mysql.help_topic
から
mysql> select help_category_id,name,parent_category_id from mysql.help_category;
+------------------+---------------------------------+--------------------+
| help_category_id | name | parent_category_id |
+------------------+---------------------------------+--------------------+
| 0 | Contents | 0 |
| 1 | Help Metadata | 0 |
| 2 | Data Types | 0 |
| 3 | Administration | 0 |
| 4 | Functions | 0 |
...
mysql> select help_topic_id,name,help_category_id from mysql.help_topic;
+---------------+----------------------------+------------------+
| help_topic_id | name | help_category_id |
+---------------+----------------------------+------------------+
| 0 | HELP_DATE | 1 |
| 1 | HELP_VERSION | 1 |
| 2 | AUTO_INCREMENT | 2 |
| 3 | HELP COMMAND | 3 |
| 4 | ASYMMETRIC_DECRYPT | 5 |
| 5 | ASYMMETRIC_DERIVE | 5 |
| 6 | ASYMMETRIC_ENCRYPT | 5 |
| 7 | ASYMMETRIC_SIGN | 5 |
関数っぽいカテゴリからトピックの名前を抽出
select t.name
from mysql.help_topic t
join mysql.help_category c using (help_category_id)
where c.name rlike "functions|operators|geometry (constructors|relations)|properties|mbr|wkt|wkb|xml|gtid"
and c.name != "user-defined functions"
and t.name not rlike "definition"
バージョンごとにカテゴリが変わったりする
/usr/local/mysql/include/mysqld_error.h
から
エラー番号を取得
//#define OBSOLETE_ER_HASHCHK 1000
//#define OBSOLETE_ER_NISAMCHK 1001
#define ER_NO 1002
#define ER_YES 1003
#define ER_CANT_CREATE_FILE 1004
#define ER_CANT_CREATE_TABLE 1005
#define ER_CANT_CREATE_DB 1006
#define ER_DB_CREATE_EXISTS 1007
#define ER_DB_DROP_EXISTS 1008
//#define OBSOLETE_ER_DB_DROP_DELETE 1009
#define ER_DB_DROP_RMDIR 1010
//#define OBSOLETE_ER_CANT_DELETE_FILE 1011
エラー番号で perror
コマンドを実行
% perror 1002
MySQL error code MY-001002 (ER_NO): NO
% perror 1003
MySQL error code MY-001003 (ER_YES): YES
% perror 1004
MySQL error code MY-001004 (ER_CANT_CREATE_FILE): Can't create file '%-.200s' (errno: %d - %s)
% perror 1005
MySQL error code MY-001005 (ER_CANT_CREATE_TABLE): Can't create table '%-.200s' (errno: %d - %s)
% perror 1006
MySQL error code MY-001006 (ER_CANT_CREATE_DB): Can't create database '%-.192s' (errno: %d - %s)
だいたいこんな感じで3ヶ月毎に処理してます
テキトーに作り始めてかなりごちゃごちゃしてるんで Vuetify.js とかで作り直したい