mysqldumpがどれくらい時間かかるのか試してみる

VirtualBoxにCentOSをとりあえずインストール
の続き

MacBookProのVirtualBoxの環境で、
1000万件のデータをINSERTした状態で、
mysqldumpがどれくらい時間かかるのか試してみる。

MySQLのインストール

とりあえずMySQLをインストールする。

$ sudo yum -y install mysql-server
$ sudo service mysqld start
$ sudo chkconfig mysqld on

現時点のibdata1のサイズは10MB。

$ sudo du -sh /var/lib/mysql/*
5.0M    /var/lib/mysql/ib_logfile0
5.0M    /var/lib/mysql/ib_logfile1
10M     /var/lib/mysql/ibdata1
988K    /var/lib/mysql/mysql
0       /var/lib/mysql/mysql.sock
4.0K    /var/lib/mysql/test

1000万件のデータを追加

今回は、testデータベースを使う。

$ mysql -u root
mysql> use test

大量データを入れるためのテーブルを用意する。

mysql> create table tmp (id int NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
mysql> insert into tmp values (), (), (), (), (), (), (), (), (), ();

下記のテーブルに1000万件のデータを入れる。

mysql> create table sample (
  id      int         NOT NULL AUTO_INCREMENT,
  c1      int         NOT NULL,
  c2      int         NOT NULL,
  c3      smallint    NOT NULL,
  c4      smallint    NOT NULL,
  c5      tinyint(1)  NOT NULL,
  c6      tinyint(1)  NOT NULL,
  c7      varchar(64) NOT NULL,
  c8      varchar(64) NOT NULL,
  c9      text        NOT NULL,
  c10     text        NOT NULL,
  c11     datetime    NOT NULL,
  c12     datetime    NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB;
mysql> insert into sample (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12)
 select
  FLOOR(RAND()*10000 + 1),
  FLOOR(RAND()*10000 + 1),
  FLOOR(RAND()*100 + 1),
  FLOOR(RAND()*100 + 1),
  FLOOR(RAND()*2),
  FLOOR(RAND()*2),
  ELT(t1.id, 'sato', 'suzuki', 'takahashi', 'tanaka', 'ito', 'yamamoto', 'watanabe', 'nakamura', 'kobayashi', 'kato'),
  ELT(t1.id, 'sato', 'suzuki', 'takahashi', 'tanaka', 'ito', 'yamamoto', 'watanabe', 'nakamura', 'kobayashi', 'kato'),
  'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj',
  'aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj',
  now(),
  now()
 from tmp t1, tmp t2, tmp t3, tmp t4, tmp t5, tmp t6, tmp t7;

約3分半かかった。

Query OK, 10000000 rows affected (3 min 34.86 sec)

下記のような感じのデータが入る。

mysql> select * from sample limit 10;
+----+------+------+----+----+----+----+-----------+-----------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+---------------------+---------------------+
| id | c1   | c2   | c3 | c4 | c5 | c6 | c7        | c8        | c9                                                                                                   | c10                                                                                                  | c11                 | c12                 |
+----+------+------+----+----+----+----+-----------+-----------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+---------------------+---------------------+
|  1 | 5419 | 7316 |  4 | 97 |  1 |  1 | sato      | sato      | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | 2014-06-26 01:02:56 | 2014-06-26 01:02:56 |
|  2 | 6935 | 1265 | 56 | 39 |  0 |  0 | suzuki    | suzuki    | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | 2014-06-26 01:02:56 | 2014-06-26 01:02:56 |
|  3 | 7251 | 3458 | 56 | 73 |  1 |  1 | takahashi | takahashi | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | 2014-06-26 01:02:56 | 2014-06-26 01:02:56 |
|  4 | 8200 | 8266 | 68 | 89 |  0 |  0 | tanaka    | tanaka    | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | 2014-06-26 01:02:56 | 2014-06-26 01:02:56 |
|  5 | 6765 | 2437 | 19 | 22 |  1 |  1 | ito       | ito       | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | 2014-06-26 01:02:56 | 2014-06-26 01:02:56 |
|  6 | 8141 | 4804 | 96 | 36 |  1 |  0 | yamamoto  | yamamoto  | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | 2014-06-26 01:02:56 | 2014-06-26 01:02:56 |
|  7 | 6342 | 7538 | 87 |  8 |  1 |  1 | watanabe  | watanabe  | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | 2014-06-26 01:02:56 | 2014-06-26 01:02:56 |
|  8 | 6311 | 4094 | 16 | 55 |  0 |  1 | nakamura  | nakamura  | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | 2014-06-26 01:02:56 | 2014-06-26 01:02:56 |
|  9 | 1914 | 2084 | 47 | 72 |  0 |  1 | kobayashi | kobayashi | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | 2014-06-26 01:02:56 | 2014-06-26 01:02:56 |
| 10 | 9962 | 8793 | 41 | 41 |  1 |  1 | kato      | kato      | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj | 2014-06-26 01:02:56 | 2014-06-26 01:02:56 |
+----+------+------+----+----+----+----+-----------+-----------+------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+---------------------+---------------------+

ibdata1のサイズは約3GBになった。

$ sudo du -sh /var/lib/mysql/*
5.0M    /var/lib/mysql/ib_logfile0
5.0M    /var/lib/mysql/ib_logfile1
3.0G    /var/lib/mysql/ibdata1
988K    /var/lib/mysql/mysql
0       /var/lib/mysql/mysql.sock
28K     /var/lib/mysql/test

mysqldumpを試す。

ダンプを取得してみる。

$ mysqldump -u root --all-databases > dump.sql

約2分かかった。

ダンプのサイズは約2.8GB。1000万件なので、1件300Bくらい。

$ ls -lh
-rw-rw-r-- 1 hoge hoge 2.8G  626 01:11 2014 dump.sql

圧縮してみる。

$ tar czvf dump.tar.gz dump.sql

約1分かかった。

約140MBになった。

$ ls -lh
-rw-rw-r-- 1 hoge hoge 138M  626 01:14 2014 dump.tar.gz