コンテンツにスキップ

04 management

mysql.log
slow query ログ

設定内容確認

show variables;

show variables like ‘port’;

設定ファイル

/etc/my.cnf

設定ファイルを検索。
(実はファイル名は「my.cnf」でなくともよいので、別の名前になっている可能性も)

sudo find / -name "my.cnf"

データベース一覧表示

show databases

SQL ver

select
    DATABASE()

テーブル一覧表示(SQL) +コメント

select
    trim(table_name)     as  table_name
   ,trim(table_comment)  as  table_comment
from
    information_schema.tables
where  1=1
  and  table_schema = database()
  and  table_name not in ('failed_jobs','migrations')
order by
    table_name
;

テーブルと件数をチェック

select
    table_name
   ,table_rows
from
    information_schema.tables
where  1=1
  and  table_schema = database()
;

前回のエラー内容を表示

show errors

前回の警告内容を表示

show warnings

コンソールの表示内容整形(改行入って見づらい時)

ログイン後、
pager less -S

(レコードごとに縦表示する方法)

select * from table_name\G

外部ファイルを実行

(未接続状態から実行)
mysql -u root -p  < create_myqpp01.sql

(接続状態から実行1)
 \. ./create_myqpp01.sql

(接続状態から実行2)
source create_myqpp01.sql

スレーブの状態確認

show slave status\G

【 CentOS 】

再起動

sudo systemctl restart mysqld.service

テーブル名とカラム名を抽出

select
    trim(table_name)      as  table_name
   ,trim(column_name)     as  column_name
   ,trim(column_comment)  as  column_comment
from
    information_schema.columns
where  1=1
  and  table_schema = database()
  and  table_name not in ('migrations','cache','cache_locks','jobs','failed_jobs','password_resets')
--  and  table_schema="db01"
--  and  table_name = 'teble01'
--  and  column_name like '%mail%' 
order by
    table_name
   ,ordinal_position
--   ,column_name
;

/*
use information_schema;
としておくと、スキーマ名を省略可。
*/

テーブル名(論理・物理)とカラム名(論理・物理)を抽出

select distinct
--   information_schema.columns.*
    trim(information_schema.columns.table_name)          as  table_name
   ,trim(information_schema.tables.table_comment)        as  table_comment
   ,trim(information_schema.columns.column_name)         as  column_name
   ,trim(information_schema.columns.column_comment)      as  column_comment
   ,information_schema.columns.data_type                 as  data_type
   ,information_schema.columns.is_nullable               as  is_nullable
   ,information_schema.columns.character_maximum_length  as  character_maximum_length
   ,information_schema.columns.column_default            as  column_default
   ,information_schema.columns.numeric_precision         as  numeric_precision
   ,information_schema.columns.numeric_scale             as  numeric_scale
from
    information_schema.columns
    left join information_schema.tables on information_schema.columns.table_name = information_schema.tables.table_name
where  1=1
  and  information_schema.tables.table_schema  = database()
  and  information_schema.columns.table_schema = database()
  and  information_schema.columns.table_name  not in ('migrations','cache','cache_locks','jobs','failed_jobs','password_resets')
  and  information_schema.columns.column_name not in ('created_at','created_by','deleted_at','deleted_by','updated_at','updated_by')
--  and  information_schema.columns.table_schema = 'db01'
  and  information_schema.columns.table_name in ('table_01')
  and  information_schema.columns.table_name in (
 'table_01'
,'table_02'
,'table_03'
)
-- order by
--    information_schema.columns.table_name
--   ,information_schema.columns.ordinal_position
--   ,information_schema.columns.column_name

インデックス一覧

select
     table_name
    ,index_name
    ,column_name
from
    information_schema.statistics
where  1=1
  and  table_schema = database()
  and  table_name   = 'items'
  and  index_name   = 'PRIMARY'

show index from <TABLE_NAME>

ユニークキー一覧

select
    TABLE_NAME
   ,CONSTRAINT_NAME
   ,CONSTRAINT_TYPE
from
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where  1=1
  and  TABLE_SCHEMA = database()
  and  TABLE_NAME   = 'users'

オートインクリメントの値を表示

select
    trim(table_name)     as  table_name
   ,trim(table_comment)  as  table_comment
   ,auto_increment
from
    information_schema.tables
where  1=1
  and  table_schema = database()
  and  table_name in ('extends_items') 

オートインクリメントのモード(innodb_autoinc_lock_mode)を確認

SELECT @@innodb_autoinc_lock_mode
@@innodb_autoinc_lock_mode
1

my.conf

[mysqld]
innodb_autoinc_lock_mode=0

AUTO_INCREMENTに関するオプション

innodb_autoinc_lock_modeパラメータを使用することで,AUTO_INCロックを制御することができます。モードの変更にはMySQLの再起動が必要です。

モード デフォルト
0 従来ロックモード
1 連続ロックモード
2 インターリーブ ロックモード

※MySQL 8 からは、デフォルトは「2」

0 :従来ロックモード

下位互換のために残されている。通常は使用しない。

1:連続 ロックモード

MySQL 5 までのデフォルトのロックモード。
挿入される行が事前に行数の把握できないINSERT..SELECT文やLOAD DATA INFILE文などの挿入文(一括挿入)時に対してAUTO_INCロックを取得する。

事前に行数の把握できる単純挿入は,これとは別の軽微な排他ロックを取得するため同時挿入性能は上がります。
また,一括挿入のAUTO_INCREMENTの順番が守られるので,ステートメントベースレプリケーションでも正常にレプリケーションされます。

2:インターリーブ ロックモード

これはすべての挿入する文に対してAUTO_INCロックを取得しません。
そのため,長時間に渡る一括挿入の実行間でも並列挿入ができるため,高速で処理されます。
しかし,一括挿入のAUTO_INCREMENTの順番が守られないので,行ベースでのみレプリケーション可能となります。

その他,ロックモードによる挙動の違いは,詳しくはマニュアルをご参照ください。

レプリケーションとは

データの複製(レプリカ)を別のサーバに持つ機能
MySQLの標準機能で、多数のWebサイト等で利用されている
マスター・スレーブ構成など。

インターリーブまたはインターリービング(英: Interleaving)とは

計算機科学と電気通信において、データを何らかの領域(空間、時間、周波数など)で不連続な形で配置し、性能を向上させる技法を指す。

参考

14.6.5.2 構成可能な InnoDB の自動インクリメントロック
innodb_autoinc_lock_mode = 1 vs 2 でバルクインサートが競合した時のAUTO_INCREMENTの挙動が違うはなし
公式英語サイト(8)


mysql ファントムリード
mysql ダーティリード