tech_memo / MySQL


tech_memo

総計:502 今日:1 昨日:1

InnoDBで必ず設定しておくべきパラメータ

トランザクション分離レベル

チューニング

リモートサーバからのrootユーザのログインとすべての権限付与

  • DBサーバ上からログインして、以下を実行。すべてのサーバからのアクセスが許可される
    grant all privileges on *.* to root@'%' identified by 'XXXX' with grant option;
    • *.* は<全DB>.<全コマンド?>を意味する
    • root@'%' は、全ホストからのrootユーザを意味する
    • with grant optionをつけないと、リモートからroot接続しても、一般ユーザへの権限変更ができない

テーブル名の大文字・小文字区別

  • http://d.hatena.ne.jp/wd3ie/20110309/1299647373
  • lower_case_table_namesパラメータで定義
    mysql> show variables where variable_name='lower_case_table_names';
    +------------------------+-------+
    | Variable_name          | Value |
    +------------------------+-------+
    | lower_case_table_names | 0     |
    +------------------------+-------+
    • 0 区別する
    • 1 区別しない(小文字でテーブル名を格納)
    • 2 区別しない(大文字でテーブル名を格納)
  • 動的に変更できないパラメータなので、/etc/my.cnfで設定する
    [mysqld]
    lower_case_table_names = 0

SQL

  • tech_memo/MySQL/SQL?

ストアドプロシージャ

  • tech_memo/MySQL/StoredProcedure?

外部キー削除・追加

削除

  • 外部キー名の確認
    mysql> show create table TEST_TABLE;
    ~
  • キー名を指定して削除
    mysql> alter table TEST_TABLE drop foreign key TEST_TABLE_ibfk_2;

追加

mysql> alter table TEST_TABLE add foreign key (MY_ID) references REF_TAB(MY_ID);

Tableのストレージエンジンの確認

  • information_schemaデータベースから確認できる
    mysql> use information_schema;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> select table_name, engine from tables where table_name = 'TEST_TABLE';
    +---------------------------+--------+
    | table_name                | engine |
    +---------------------------+--------+
    | TEST_TABLE | InnoDB |
    +---------------------------+--------+
    1 row in set (0.00 sec)

bashからの出力を対話形式と同じようにする(通常は簡易形式になる)

  • -tオプションを使う
    [testuser@sv18]$ mysql -t -h dbserver -u testapp -ptestapp testapp << EOF
    select * from MY_TAB limit 1;
    EOF  
    +------------+--------------+
    | MY_ID      | RECORD_COUNT |
    +------------+--------------+
    |          1 |            1 |
    +------------+--------------+

便利ツール

インストール & 起動停止確認

RHEL7.2 + MySQL5.7


RHEL5

  • tech_memo/MySQL/RHEL5?

RHEL6

  • tech_memo/MySQL/RHEL6?

Global変数 Sample (MySQL-5.6)

Memo MySQL ver 5.6

  • 起動オプション(Global variables)
    • オプションファイルに記述するが、ファイルは複数あり、以下の順番で読まれる(存在するファイル全部読まれる。重複して設定したパラメータは後で読まれた物が優先)
      [root@sv07 mysql]# mysqld --help --verbose | head -20
      ~
      Default options are read from the following files in the given order:
      /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
  • 起動時にオプションを渡すことも可能
    mysqld_safe --port=3306
  • InnoDBデータ
    • /var/lib/mysql/lbdata1
  • InnoDBログファイル
    • /var/lib/mysql/ib_logfile0
    • /var/lib/mysql/ib_logfile1
  • dataファイル格納場所
    • /var/lib/mysql/<database_name>
      [root@sv07 testapp]# pwd
      /var/lib/mysql/testapp
  • <Table_name>.frm --> テーブル定義ファイル (全ストレージエンジン共通)
  • <Table_name>.ibd --> テーブルデータファイル (InnoDB)

データファイルを別Directoryに複数作成する方法

  • my.cnfに以下のように記述する。(innodb_file_per_tableオプションとは併用不可)
    [mysqld]
    datadir=/mnt
    innodb_data_home_dir=innodb_dir
    innodb_data_file_path=LUN1/ibdata1:100M;LUN2/ibdata2:100M:autoextend
  • 上記設定で、MySQL起動時に、下記の2ファイルが作成される。(/mnt/innodb_dir/LUN[12]はあらかじめ作成しておく必要あり)
    • /mnt/innodb_dir/LUN1/ibdata1
    • /mnt/innodb_dir/LUN2/ibdata2

Link