MySQL Parameters 데이터 제작 방법

15624 단어 MySQLtech

MySQL Parameters 데이터 제작 방법


MySQL Advent Calendar 2020 25일째 보도다.
MySQL Parameters 페이지 유지 관리.
MySQL Paramers는 MySQL 버전 간의 차이를 표시할 수 있습니다.
이제 다음 버전을 비교할 수 있습니다.
  • 5.0.96
  • 5.1.72
  • 5.5.58〜62
  • 5.6.34〜50
  • 5.7.16〜32
  • 8.0.11〜22
  • 비교할 수 있는 값의 종류는 다음과 같다.
  • mysqld의 명령행 매개 변수
  • mysql의 명령행 매개 변수
  • 시스템 변수
  • 상태 변수
  • 문자 세트
  • 블렌드
  • 권한
  • 함수/연산자
  • information_schema 데이터베이스의 표 이름과 열 이름
  • performance_schema 데이터베이스의 표 이름과 열 이름
  • 오류 메시지
  • 예를 들어 시스템 변수 8.0.*버전 간의 차이https://mysql-params.tmtms.net/variable/?vers=8.0.11,8.0.12,8.0.13,8.0.14,8.0.15,8.0.16,8.0.17,8.0.18,8.0.19,8.0.20,8.0.21,8.0.22&diff=true를 표시할 수 있습니다.
    노란색 셀은 왼쪽 셀과 다른 값을 나타냅니다.
    원래 블루였는데.js를 배우기 위해 한 것은 기본적으로 이렇다. 앞부분은 너무 했다.다시 하고 싶어요.
    앞머리를 만지고 싶지 않으니 데이터를 어떻게 만드는지 설명해 주세요.

    mysqld 명령행 매개 변수


    기본적으로 mysqld --no-defaults --user mysql --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)
    ...
    
    --plugin-load에는 가능한 한 플러그인을 많이 불러와서 값을 표시하기 때문에 example 메모리 엔진과 비슷한 매개 변수를 보여 줍니다.

    mysql 명령행 매개 변수


    mysqld와 같이 mysql --no-defaults --help -v 출력의 후반부를 사용합니다.
    Variables (--variable-name=value)
    and boolean options {FALSE|TRUE}  Value (after reading options)
    --------------------------------- ----------------------------------------
    auto-rehash                       TRUE
    auto-vertical-output              FALSE
    bind-address                      (No default value)
    binary-as-hex                     FALSE
    character-sets-dir                (No default value)
    column-type-info                  FALSE
    comments                          FALSE
    compress                          FALSE
    database                          (No default value)
    default-character-set             auto
    delimiter                         ;
    ...
    

    시스템 변수

    mysqld --help -v 출력된 매개 변수와 mysqld가 시작된 후SHOW VARIABLES에 표시된 변수는 미묘한 차이가 있기 때문에 추가되었습니다.
    부팅 후 모든 플러그인과 구성 요소를 불러온 후 SHOW GLOBAL VARIABLES 의 출력을 사용합니다.
    activate_all_roles_on_login	OFF
    admin_address	
    admin_port	33062
    admin_ssl_ca	
    admin_ssl_capath	
    admin_ssl_cert	
    admin_ssl_cipher	
    admin_ssl_crl	
    admin_ssl_crlpath	
    admin_ssl_key	
    admin_tls_ciphersuites	
    admin_tls_version	TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
    auto_generate_certs	ON
    auto_increment_increment	1
    auto_increment_offset	1
    autocommit	ON
    ...
    

    상태 변수

    SHOW GLOBAL STATUS 출력의 첫 번째 열만 사용합니다.
    Aborted_clients 0
    Aborted_connects        0
    Acl_cache_items_count   0
    Audit_null_authorization_column 0
    Audit_null_authorization_db     0
    Audit_null_authorization_procedure      0
    Audit_null_authorization_proxy  0
    Audit_null_authorization_table  0
    Audit_null_authorization_user   0
    Audit_null_called       2222
    Audit_null_command_end  8
    Audit_null_command_start        9
    Audit_null_connection_change_user       0
    Audit_null_connection_connect   2
    Audit_null_connection_disconnect        1
    ...
    

    문자 세트

    mysql --no-defaults -e 'SHOW CHARSET' 출력의 첫 번째 열을 사용합니다.
    Charset	Description	Default collation	Maxlen
    armscii8	ARMSCII-8 Armenian	armscii8_general_ci	1
    ascii	US ASCII	ascii_general_ci	1
    big5	Big5 Traditional Chinese	big5_chinese_ci	2
    binary	Binary pseudo charset	binary	1
    cp1250	Windows Central European	cp1250_general_ci	1
    cp1251	Windows Cyrillic	cp1251_general_ci	1
    cp1256	Windows Arabic	cp1256_general_ci	1
    cp1257	Windows Baltic	cp1257_general_ci	1
    cp850	DOS West European	cp850_general_ci	1
    cp852	DOS Central European	cp852_general_ci	1
    cp866	DOS Russian	cp866_general_ci	1
    ...
    

    섞다

    mysql --no-defaults -e 'SHOW COLLATION' 출력의 첫 번째 열을 사용합니다.
    Collation	Charset	Id	Default	Compiled	Sortlen	Pad_attribute
    armscii8_bin	armscii8	64		Yes	1	PAD SPACE
    armscii8_general_ci	armscii8	32	Yes	Yes	1	PAD SPACE
    ascii_bin	ascii	65		Yes	1	PAD SPACE
    ascii_general_ci	ascii	11	Yes	Yes	1	PAD SPACE
    big5_bin	big5	84		Yes	1	PAD SPACE
    big5_chinese_ci	big5	1	Yes	Yes	1	PAD SPACE
    binary	binary	63	Yes	Yes	1	NO PAD
    cp1250_bin	cp1250	66		Yes	1	PAD SPACE
    cp1250_croatian_ci	cp1250	44		Yes	1	PAD SPACE
    cp1250_czech_cs	cp1250	34		Yes	2	PAD SPACE
    cp1250_general_ci	cp1250	26	Yes	Yes	1	PAD SPACE
    cp1250_polish_ci	cp1250	99		Yes	1	PAD SPACE
    cp1251_bin	cp1251	50		Yes	1	PAD SPACE
    cp1251_bulgarian_ci	cp1251	14		Yes	1	PAD SPACE
    ...
    

    사용 권한

    DESC mysql.user의 열 이름*_priv에서 권한을 얻습니다.
    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	
    ...
    
    열명과 권한명은 미묘한 차이Create_tmp_tableCREATE TEMPORARY TABLES 등)로 수정되었다.
    그리고 8.0의 권한은 PROXY이지만 이것은 mysql.user에 포함되지 않기 때문에 보고 있습니다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		
    ...
    
    나머지 8.0은 동적 권한(Dynamic Privileges)(개인적으로 이름이 좋지 않다고 생각), 플러그인과 구성 요소에 추가된 권한이 있습니다.
    ALL 권한이 있는 사용자SHOW GRANTS FOR ユーザー名 출력을 만들었기 때문에 그것을 사용했다.
    Grants for test@%
    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
    
    실제로 이 출력에는 모든 권한mysql.user이 포함되어 있어 보지 않아도 되지만 이런 출력은 8.0에 불과하다. 5.7 이하면 아래처럼 출력되기 때문에 모르겠다.
    Grants for test@%
    GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' WITH GRANT OPTION
    

    함수/연산자


    mysql에서 help Functions 클래스를 표시하고 help에서 함수 이름의 일람표를 표시합니다.
    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
       Encryption Functions
       Enterprise Encryption 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
       COUNT
       COUNT DISTINCT
       GROUP_CONCAT
       JSON_ARRAYAGG
       JSON_OBJECTAGG
       MAX
    ...
    
    는 처음에 이걸 사용했지만 출력된 퍼스가 귀찮아서 현재mysql.help_categorymysql.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 |
    ...
    
    에서 함수/연산자 클래스 아래name에서 아래 조회를 통해 추출한다.
    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"
      order by t.name
    

    information_schema 데이터베이스의 표 이름과 열 이름

    SELECT TABLE_NAME,COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA='information_schema'의 출력을 사용합니다.
    ADMINISTRABLE_ROLE_AUTHORIZATIONS	GRANTEE
    ADMINISTRABLE_ROLE_AUTHORIZATIONS	GRANTEE_HOST
    ADMINISTRABLE_ROLE_AUTHORIZATIONS	HOST
    ADMINISTRABLE_ROLE_AUTHORIZATIONS	IS_DEFAULT
    ADMINISTRABLE_ROLE_AUTHORIZATIONS	IS_GRANTABLE
    ADMINISTRABLE_ROLE_AUTHORIZATIONS	IS_MANDATORY
    ADMINISTRABLE_ROLE_AUTHORIZATIONS	ROLE_HOST
    ADMINISTRABLE_ROLE_AUTHORIZATIONS	ROLE_NAME
    ADMINISTRABLE_ROLE_AUTHORIZATIONS	USER
    APPLICABLE_ROLES	GRANTEE
    APPLICABLE_ROLES	GRANTEE_HOST
    APPLICABLE_ROLES	HOST
    APPLICABLE_ROLES	IS_DEFAULT
    ...
    

    performance_schema 데이터베이스의 표 이름과 열 이름

    SELECT TABLE_NAME,COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA='performance_schema'의 출력을 사용합니다.
    accounts	CURRENT_CONNECTIONS
    accounts	HOST
    accounts	TOTAL_CONNECTIONS
    accounts	USER
    binary_log_transaction_compression_stats	COMPRESSED_BYTES_COUNTER
    binary_log_transaction_compression_stats	COMPRESSION_PERCENTAGE
    binary_log_transaction_compression_stats	COMPRESSION_TYPE
    binary_log_transaction_compression_stats	FIRST_TRANSACTION_COMPRESSED_BYTES
    binary_log_transaction_compression_stats	FIRST_TRANSACTION_ID
    binary_log_transaction_compression_stats	FIRST_TRANSACTION_TIMESTAMP
    binary_log_transaction_compression_stats	FIRST_TRANSACTION_UNCOMPRESSED_BYTES
    binary_log_transaction_compression_stats	LAST_TRANSACTION_COMPRESSED_BYTES
    binary_log_transaction_compression_stats	LAST_TRANSACTION_ID
    binary_log_transaction_compression_stats	LAST_TRANSACTION_TIMESTAMP
    binary_log_transaction_compression_stats	LAST_TRANSACTION_UNCOMPRESSED_BYTES
    ...
    

    오류 메시지


    오류 메시지는 perror 명령을 통해 출력됩니다.
    % perror 1022
    MySQL error code MY-001022 (ER_DUP_KEY): Can't write; duplicate key in table '%-.192s'
    
    , 잘못된 번호의 일람표를 몰라서 원본 코드만 볼 수 있을 줄 알았는데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만 하고 출력을 받습니다.

    끝맺다


    네, 저는 3개월에 한 번씩 MySQL이 발표되는 일입니다.
    처음 제작을 시작한 것은 8.0GA가 발매되기 전이었고, 덕분에 패치 레벨로 나왔지만 왠지 마이SQL8.0이 많이 변경됐다.x의 차이를 확인하는 것이 간단해졌다.(GA란 대체...?)
    투자금은 이 페이지 오른쪽의'엔화 지원'부터 접수한다.

    좋은 웹페이지 즐겨찾기