Skip to content

Instantly share code, notes, and snippets.

@onigra
Last active December 14, 2015 16:19
Show Gist options
  • Save onigra/5114089 to your computer and use it in GitHub Desktop.
Save onigra/5114089 to your computer and use it in GitHub Desktop.
MySQLに大規模データ移行した際のノウハウ

BULK INSERT ではなく LOAD INFILE を使う

基本

バイナリログを停止する

SUPER権限を持っているユーザーなら下記のSQLでそのセッションだけバイナリログを無効にできる

SET sql_log_bin=OFF;

インデックス無しでロードする

ファイルフォーマットをBarracudaにする

[mysqld]
innodb_file_per_table
innodb_file_format=Barracuda
mysql> ALTER TABLE t ROW_FORMAT=Compressed;
mysql> SHOW CREATE TABLE t;

おまけ

updateはtmpテーブルを作ってINSERT SELECTしてテーブル名変える

CREATE TABLE tmp_a LIKE a;

INSERT INTO
  tmp_a
SELECT
  id,
  '00000'
FROM
  a
;

DROP TABLE a;
ALTER TABLE tmp_a RENAME TO a;

ジョブ管理にJenkinsを使う

Got timeout reading communication packets 対策

長いSQLを実行するとこのエラーが出る。
実行できるSQLの長さの限界(データのパケット容量)を大きくするには、my.cnfの下記の値を大きくする

[mysqld]
max_allowed_packet=16MB
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment