Skip to content

Instantly share code, notes, and snippets.

@conmame
Created August 22, 2012 04:11
Show Gist options
  • Save conmame/3422225 to your computer and use it in GitHub Desktop.
Save conmame/3422225 to your computer and use it in GitHub Desktop.
Add UserID Partition (MySQL 5.5=<)
#!/bin/sh
# userバーティションを拡張
HOST='127.0.0.1'
USER='hoge'
PASS='fuga'
DBNAME='piyo'
TABLENAME='oreo'
NUMPERPARTITION=50000 #インクリメントする値
PREVIOUSNUM=`mysql -u$USER -p$PASS -e 'SHOW CREATE TABLE '$DBNAME'.'$TABLENAME'\G' |
tail -n 2 |
head -n 1 |
perl -wnl -e '/LESS\sTHAN\s\((\d*)\)/ and print $1;'`
PARTITIONUM=`echo $((PREVIOUSNUM+NUMPERPARTITION))`
SQL="ALTER TABLE $DBNAME.$TABLENAME REORGANIZE PARTITION pmax INTO(
PARTITION p$PARTITIONNUM VALUES LESS THAN ('$PARTITIONUM') ENGINE=InnoDB,
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB);"
mysql -u$USER -p$PASS -e "$SQL"
@conmame
Copy link
Author

conmame commented Aug 22, 2012

PARTITION p1000000 VALUES LESS THAN (1000000) ENGINE = InnoDB,
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB

MySQLで、こんな感じでID毎にパーティショニングしている場合にパーテションを追加。
cronで一定のIDまでインクリメントされてたら追加するようにするといい。
ただし、pmaxにデータがしこたま入ってたりすると、リパーティショニングの際に時間がかかり詰まってしまう恐れがあるので注意。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment