MYSQL5.6へアップグレード後のWarningを無くす為にmysqlのオプションファイルを編集

InnoDBのメモリー処理関連のWarning

2013-05-05 16:28:19 b784c8e0 InnoDB: Warning: Using innodb_additional_mem_pool_size is DEPRECATED. 
This option may be removed in future releases, together with the option innodb_use_sys_malloc and with the InnoDB's internal memory allocator.
[root@HOME001 data]# mysql -u root -p -e "show variables like 'innodb_use_sys_malloc'"
Enter password:
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_use_sys_malloc | ON    |
+-----------------------+-------+
[root@HOME001 data]#

以下の値をOptionファイルに追加して対応。
innodb_use_sys_malloc

innodb_buffer_pool_size = 32M
#innodb_additional_mem_pool_size = 2M
innodb_use_sys_malloc=1

http://dev.mysql.com/doc/refman/5.1/en/innodb-parameters.html#sysvar_innodb_use_sys_malloc

http://docs.oracle.com/cd/E17952_01/refman-5.5-en/innodb-performance-use_sys_malloc.html

You can control whether InnoDB uses its own memory allocator or an allocator of the operating system,
by setting the value of the system configuration parameter innodb_use_sys_malloc in the MySQL option file (my.cnf or my.ini).
If set to ON or 1 (the default), InnoDB uses the malloc and free functions of the underlying system rather than manage memory pools itself.
This parameter is not dynamic, and takes effect only when the system is started.
To continue to use the InnoDB memory allocator, set innodb_use_sys_malloc to 0.

InnoDBのメモリーマネージャーではなく、OSのメモリ割り当てを任せるという事になるが、
どちらが良いかはタイミング見て確認。

TIMESTAMP型を指定した時の処理の変更点

2013-05-05 16:43:37 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. 
Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

設定を変えなければ、TIMESTAMPを指定したときのテーブル属性に変更無し。

[root@HOME001 data]# mysql -u root -p -e "show variables like 'explicit_defaults_for_timestamp'"
Enter password:
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| explicit_defaults_for_timestamp | OFF   |
+---------------------------------+-------+
[root@HOME001 data]# mysql -u root -p -e "create table test.timestamp_chk (chk_explicit_defaults_for_timestamp timestamp) ENGINE=InnoDB;"
Enter password:
[root@HOME001 data]# mysql -u root -p -e "show create table test.timestamp_chk\G"
Enter password:
*************************** 1. row ***************************
       Table: timestamp_chk
Create Table: CREATE TABLE `timestamp_chk` (
  `chk_explicit_defaults_for_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1
[root@HOME001 data]#

この値をmy.cnfに追加してWarning対応。
explicit_defaults_for_timestamp=true

TIMESTAMP型を利用した時にテーブル属性が変わった事を確認

[root@HOME001 data]# vi /etc/my.cnf
[root@HOME001 data]# /etc/init.d/mysql restart
Shutting down MySQL..                                      [  OK  ]
Starting MySQL.                                            [  OK  ]
[root@HOME001 data]# mysql -u root -p -e "show variables like 'explicit_defaults_for_timestamp'"
Enter password:
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| explicit_defaults_for_timestamp | ON    |
+---------------------------------+-------+
[root@HOME001 data]#


[root@HOME001 data]# mysql -u root -p -e "create table test.timestamp_chk2 (chk_explicit_defaults_for_timestamp timestamp) ENGINE=InnoDB;"
Enter password:
[root@HOME001 data]# mysql -u root -p -e "show create table test.timestamp_chk2\G"
Enter password:
*************************** 1. row ***************************
       Table: timestamp_chk2
Create Table: CREATE TABLE `timestamp_chk2` (
  `chk_explicit_defaults_for_timestamp` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
[root@HOME001 data]#

新旧を並べるとこんな感じになります。

[root@HOME001 data]# mysql -u root -p -e "show create table test.timestamp_chk\G"
Enter password:
*************************** 1. row ***************************
       Table: timestamp_chk
Create Table: CREATE TABLE `timestamp_chk` (
  `chk_explicit_defaults_for_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1
[root@HOME001 data]# mysql -u root -p -e "show create table test.timestamp_chk2\G"
Enter password:
*************************** 1. row ***************************
       Table: timestamp_chk2
Create Table: CREATE TABLE `timestamp_chk2` (
  `chk_explicit_defaults_for_timestamp` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
[root@HOME001 data]#

MYSQLを再起動しても、Warningが無い事を確認してとりあえず確認終了。


130505 16:55:24 mysqld_safe mysqld from pid file /usr/local/mysql/data/HOME001.localdomain.pid ended
130505 16:55:25 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
2013-05-05 16:55:25 7031 [Note] Plugin ‘FEDERATED’ is disabled.
2013-05-05 16:55:25 7031 [Note] InnoDB: The InnoDB memory heap is disabled
2013-05-05 16:55:25 7031 [Note] InnoDB: Mutexes and rw_locks use InnoDB’s own implementation
2013-05-05 16:55:25 7031 [Note] InnoDB: Compressed tables use zlib 1.2.3
2013-05-05 16:55:25 7031 [Note] InnoDB: Using Linux native AIO
2013-05-05 16:55:25 7031 [Note] InnoDB: Not using CPU crc32 instructions
2013-05-05 16:55:25 7031 [Note] InnoDB: Initializing buffer pool, size = 32.0M
2013-05-05 16:55:25 7031 [Note] InnoDB: Completed initialization of buffer pool
2013-05-05 16:55:25 7031 [Note] InnoDB: Highest supported file format is Barracuda.
2013-05-05 16:55:25 7031 [Note] InnoDB: 128 rollback segment(s) are active.
2013-05-05 16:55:25 7031 [Note] InnoDB: Waiting for purge to start
2013-05-05 16:55:26 7031 [Note] InnoDB: 5.6.11 started; log sequence number 1747262
2013-05-05 16:55:26 7031 [Note] Semi-sync replication initialized for transactions.
2013-05-05 16:55:26 7031 [Note] Semi-sync replication enabled on the master.
2013-05-05 16:55:26 7031 [Note] Server hostname (bind-address): ‘*’; port: 3306
2013-05-05 16:55:26 7031 [Note] IPv6 is available.
2013-05-05 16:55:26 7031 [Note] – ‘::’ resolves to ‘::’;
2013-05-05 16:55:26 7031 [Note] Server socket created on IP: ‘::’.
2013-05-05 16:55:26 7031 [Note] Event Scheduler: Loaded 0 events
2013-05-05 16:55:26 7031 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: ‘5.6.11-log’ socket: ‘/tmp/mysql.sock’ port: 3306 MySQL Community Server (GPL)
2013-05-05 16:56:21 7031 [Note] Start semi-sync binlog_dump to slave (server_id: 2), pos(mysql-bin.000027, 120)


http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp


MYSQL5.6がリリースされました!!

MYSQL5.6はこれまでのMYSQL5.5と比較してもパフォーマンスが良く、
レプリケーションも安定性と運用を考慮した改善がされているという
事でしたので、リリースを待っていました。

Web セミナー Web セミナー

MySQL Security Enhancements and Important Security Tips for ISVs & OEMs
Thursday, February 21, 2013  2013年02月22日 (金): 00:00 日本

MySQL 5.6 Performance & Scalability ~ Afina tu BD en este webinar gratuito!
Thursday, February 28, 2013  2013年03月01日 (金): 08:00 日本
  

MySQL Replication: An Introduction
http://www-jp.mysql.com/why-mysql/white-papers/mysql-replication-introduction/

The whitepaper discusses:
Replication concepts
Replication enhancements in MySQL 5.6
Replication use-cases
Replication topologies
Replication monitoring and management

MySQL Replication Tutorial: Configuration, Provisioning and Management
http://www-jp.mysql.com/why-mysql/white-papers/mysql-replication-tutorial/

By reading this paper, you will be able to:
Configure and provision MySQL replication
Migrate to semi-synchronous replication
Administer and trouble-shoot MySQL replication

データベース管理者/開発者ガイド MySQL 5.6の新機能
http://www-jp.mysql.com/why-mysql/white-papers/whats-new-mysql-5-6-ja/

    以下抜粋

MySQL 5.6は、世界で最も普及しているオープンソース・データベースの、
これまでで最高のリリースです。次世代のWebシステムの実現や、組込みアプリケーション
およびサービスの構築 を可能にするために設計された先進的な新機能を提供します。
本書では、主要な機能と機能強化を項目ごとに紹介し、
詳細な技術情報や実装関連情報を提供する事例や参考資料を示します。本書によって、
以下に挙げるような、MySQL 5.6の以前のリリースより改善・強化した点を理解することができます。

パフォーマンスとスケーラビリティの向上
InnoDBストレージ・エンジンの改良によるトランザクション・スループットの向上
オプティマイザの改良によるクエリ実行時間と診断機能の改善
オンラインでのDDL/スキーマ操作によるアプリケーション可用性の向上
Memcached APIを用いたInnoDBへのNoSQLアクセスによる開発速度の向上
レプリケーションの改善による高いパフォーマンスと自己修復可能なクラスタ構成
パフォーマンス・スキーマの改良による性能統計情報管理と監視機能の改善
セキュリティの向上による容易なアプリケーション設計
その他の重要な機能強化


検証用のレプリケーションの環境にてスレーブのMYSQLを5.6にアップグレードしてみました。

レプリケーションの確認

マスター側にてデータをINSERTして確認。

mysql> insert into TABLE001(title,comment) values('Before upgrade','MYSQL 5.6 - 0');
Query OK, 1 row affected (0.12 sec)

mysql> insert into TABLE001(title,comment) values('Before upgrade','MYSQL 5.6 - 1');
Query OK, 1 row affected (0.45 sec)

mysql> insert into TABLE001(title,comment) values('Before upgrade','MYSQL 5.6 - 2');
Query OK, 1 row affected (0.44 sec)

mysql> select @@hostname;
+---------------------+
| @@hostname          |
+---------------------+
| HOME001.localdomain |
+---------------------+
1 row in set (0.00 sec)

mysql> select * from TABLE001;
+----+----------------+---------------+
| id | title          | comment       |
+----+----------------+---------------+
|  1 | Before upgrade | MYSQL 5.6 - 0 |
|  2 | Before upgrade | MYSQL 5.6 - 1 |
|  3 | Before upgrade | MYSQL 5.6 - 2 |
+----+----------------+---------------+
3 rows in set (0.00 sec)

mysql>

mysql> show variables like '%semi%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | ON    |
| rpl_semi_sync_master_timeout       | 5     |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+
4 rows in set (0.00 sec)

mysql>

スレーブにデータが同期されている事を確認。

mysql> select @@hostname;
+---------------------+
| @@hostname          |
+---------------------+
| HOME002.localdomain |
+---------------------+
1 row in set (0.00 sec)

mysql> select * from TABLE001;
+----+----------------+---------------+
| id | title          | comment       |
+----+----------------+---------------+
|  1 | Before upgrade | MYSQL 5.6 - 0 |
|  2 | Before upgrade | MYSQL 5.6 - 1 |
|  3 | Before upgrade | MYSQL 5.6 - 2 |
+----+----------------+---------------+
3 rows in set (0.00 sec)

mysql> show variables like '%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.08 sec)

MYSQL5.5.29で追加インストールしたプラグインが
MYSQL5.6で有効になっていない可能性があるのでアップグレードの
タイミングで事前に無効にしておく。

[root@HOME002 mysql]# cp -p /etc/my.cnf /etc/my.cnf.20130216
[root@HOME002 mysql]# vi /etc/my.cnf
[root@HOME002 mysql]# diff /etc/my.cnf /etc/my.cnf.20130216
68c68
< #rpl_semi_sync_slave_enabled=1
---
> rpl_semi_sync_slave_enabled=1
[root@HOME002 mysql]#

[root@HOME002 mysql]# /etc/init.d/mysql stop
Shutting down MySQL.                                       [  OK  ]
[root@HOME002 mysql]#

MYSQL56-0

MYSQL5.6のインストール開始。
基本的には、TARの入れ替えとシンボリックリンクの張替えで対応してます。

[root@HOME002 src]# tar zxvf mysql-5.6.10-linux-glibc2.5-i686.tar.gz
mysql-5.6.10-linux-glibc2.5-i686/COPYING
mysql-5.6.10-linux-glibc2.5-i686/bin/mysqlaccess.conf
mysql-5.6.10-linux-glibc2.5-i686/bin/resolveip
mysql-5.6.10-linux-glibc2.5-i686/bin/mysqld_multi
mysql-5.6.10-linux-glibc2.5-i686/bin/mysqlshow
mysql-5.6.10-linux-glibc2.5-i686/bin/mysqlaccess
mysql-5.6.10-linux-glibc2.5-i686/bin/resolve_stack_dump
mysql-5.6.10-linux-glibc2.5-i686/bin/mysqladmin
mysql-5.6.10-linux-glibc2.5-i686/bin/mysqld

省略.........

mysql-5.6.10-linux-glibc2.5-i686/mysql-test/lib/My/Memcache.pm
mysql-5.6.10-linux-glibc2.5-i686/mysql-test/lib/My/File/Path.pm
mysql-5.6.10-linux-glibc2.5-i686/mysql-test/lib/My/Exec.pm
mysql-5.6.10-linux-glibc2.5-i686/mysql-test/lib/My/ConfigFactory.pm
mysql-5.6.10-linux-glibc2.5-i686/mysql-test/lib/My/CoreDump.pm
[root@HOME002 src]#

[root@HOME002 src]# mv mysql-5.6.10-linux-glibc2.5-i686 /usr/local/
[root@HOME002 src]#


[root@HOME002 local]# ls -lh
合計 100K
drwxr-xr-x  2 root  root  4.0K  1月  8 14:59 bin
drwxr-xr-x  2 root  root  4.0K  3月 30  2007 etc
drwxr-xr-x  2 root  root  4.0K  3月 30  2007 games
drwxr-xr-x  2 root  root  4.0K  1月  7 19:58 include
drwxr-xr-x  3 root  root  4.0K  1月  7 19:58 lib
drwxr-xr-x  2 root  root  4.0K  3月 30  2007 libexec
drwxr-xr-x  3 root  root  4.0K  1月  7 19:58 man
lrwxrwxrwx  1 mysql mysql   27 12月 22 14:43 mysql -> mysql-5.5.29-linux2.6-i686/
drwxrwxr-x 13 mysql mysql 4.0K  1月 25 15:14 mysql-5.5.29-linux2.6-i686
drwxr-xr-x 13 root  root  4.0K  2月 16 15:51 mysql-5.6.10-linux-glibc2.5-i686
drwxr-xr-x  2 root  root  4.0K  3月 30  2007 sbin
drwxr-xr-x  5 root  root  4.0K  1月  7 19:58 share
drwxr-xr-x  2 root  root  4.0K  2月 16 15:53 src
[root@HOME002 local]#

[root@HOME002 local]# chown -R mysql:mysql mysql-5.6.10-linux-glibc2.5-i686/
[root@HOME002 local]# chmod -R 775 mysql-5.6.10-linux-glibc2.5-i686/
[root@HOME002 local]#


[root@HOME002 local]# rm mysql
rm: remove シンボリックリンク `mysql'? y
[root@HOME002 local]# ln -s mysql-5.6.10-linux-glibc2.5-i686/ mysql
[root@HOME002 local]# ls -lh
合計 100K
drwxr-xr-x  2 root  root  4.0K  1月  8 14:59 bin
drwxr-xr-x  2 root  root  4.0K  3月 30  2007 etc
drwxr-xr-x  2 root  root  4.0K  3月 30  2007 games
drwxr-xr-x  2 root  root  4.0K  1月  7 19:58 include
drwxr-xr-x  3 root  root  4.0K  1月  7 19:58 lib
drwxr-xr-x  2 root  root  4.0K  3月 30  2007 libexec
drwxr-xr-x  3 root  root  4.0K  1月  7 19:58 man
lrwxrwxrwx  1 root  root    33  2月 16 15:56 mysql -> mysql-5.6.10-linux-glibc2.5-i686/
drwxrwxr-x 13 mysql mysql 4.0K  1月 25 15:14 mysql-5.5.29-linux2.6-i686
drwxrwxr-x 13 mysql mysql 4.0K  2月 16 15:51 mysql-5.6.10-linux-glibc2.5-i686
drwxr-xr-x  2 root  root  4.0K  3月 30  2007 sbin
drwxr-xr-x  5 root  root  4.0K  1月  7 19:58 share
drwxr-xr-x  2 root  root  4.0K  2月 16 15:53 src
[root@HOME002 local]#


[root@HOME002 local]# cp -rp mysql-5.5.29-linux2.6-i686/data/* /usr/local/mysql/data/
[root@HOME002 local]#

[root@HOME002 bin]# ls -l /usr/local/mysql/bin/*up*
-rwxrwxr-x 1 mysql mysql 4471915  1月 23 02:13 /usr/local/mysql/bin/mysql_upgrade
[root@HOME002 bin]# /etc/init.d/mysql start
Starting MySQL......                                       [  OK  ]
[root@HOME002 bin]# ./mysql_upgrade -u root -p
Enter password:
Looking for 'mysql' as: ./mysql
Looking for 'mysqlcheck' as: ./mysqlcheck
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql.sock'
Warning: Using a password on the command line interface can be insecure.
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql.sock'
Warning: Using a password on the command line interface can be insecure.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.host                                         OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.servers                                      OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
test.TABLE001                                      OK
Running 'mysql_fix_privilege_tables'...
Warning: Using a password on the command line interface can be insecure.
OK
[root@HOME002 bin]#

upgrade

アップグレード後の確認。
OFFにしてあったSEMI-SYNCを再度ONに設定しても問題無いか確認して元に戻す。

mysql> select @@version;
+------------+
| @@version  |
+------------+
| 5.6.10-log |
+------------+
1 row in set (0.00 sec)

mysql> show variables like '%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.00 sec)

mysql> set GLOBAL rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.00 sec)

mysql>

[root@HOME002 bin]# vi /etc/my.cnf
[root@HOME002 bin]# diff /etc/my.cnf /etc/my.cnf.20130216
[root@HOME002 bin]#

[root@HOME002 bin]# /etc/init.d/mysql restart
Shutting down MySQL..                                      [  OK  ]
Starting MySQL...                                          [  OK  ]
[root@HOME002 bin]#

レプリケーションの動作確認
マスターでデータをINSERTしてみる。

mysql> select @@hostname;
+---------------------+
| @@hostname          |
+---------------------+
| HOME001.localdomain |
+---------------------+
1 row in set (0.00 sec)

mysql> insert into TABLE001(title,comment) values('After Slave upgrade','MYSQL 5.6 - 0');
Query OK, 1 row affected (0.43 sec)

mysql> select * from TABLE001;
+----+---------------------+---------------+
| id | title               | comment       |
+----+---------------------+---------------+
|  1 | Before upgrade      | MYSQL 5.6 - 0 |
|  2 | Before upgrade      | MYSQL 5.6 - 1 |
|  3 | Before upgrade      | MYSQL 5.6 - 2 |
|  4 | After Slave upgrade | MYSQL 5.6 - 0 |
+----+---------------------+---------------+
4 rows in set (0.00 sec)

mysql>

スレーブにデータが同期されている事を確認。

mysql> select @@hostname;
+---------------------+
| @@hostname          |
+---------------------+
| HOME002.localdomain |
+---------------------+
1 row in set (0.00 sec)

mysql> select * from TABLE001;
+----+---------------------+---------------+
| id | title               | comment       |
+----+---------------------+---------------+
|  1 | Before upgrade      | MYSQL 5.6 - 0 |
|  2 | Before upgrade      | MYSQL 5.6 - 1 |
|  3 | Before upgrade      | MYSQL 5.6 - 2 |
|  4 | After Slave upgrade | MYSQL 5.6 - 0 |
+----+---------------------+---------------+
4 rows in set (0.00 sec)

mysql>

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: HOME001
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000015
          Read_Master_Log_Pos: 1506
               Relay_Log_File: relay-bin.000008
                Relay_Log_Pos: 270
        Relay_Master_Log_File: mysql-bin.000015
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB: mysql,performance_schema
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1506
              Relay_Log_Space: 437
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID:
             Master_Info_File: /usr/local/mysql-5.6.10-linux-glibc2.5-i686/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
1 row in set (0.00 sec)

mysql>

insert-after-slave-upgrade

エラーログの確認
特に問題なさそうですが、ログを確認するとバージョンアップしたので
幾つかオプションファイルの設定やレプリケーションの設定も変更した方が良さそうです。
マスターをアップグレードするタイミングで設定変更してみます。

130216 16:16:21 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
2013-02-16 16:16:21 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2013-02-16 16:16:21 13756 [Note] Plugin 'FEDERATED' is disabled.
2013-02-16 16:16:21 b7fe96d0 InnoDB: Warning: Using innodb_additional_mem_pool_size is DEPRECATED. This option may be removed in future releases, together with the option innodb_use_sys_malloc and with the InnoDB's internal memory allocator.
2013-02-16 16:16:21 13756 [Note] InnoDB: The InnoDB memory heap is disabled
2013-02-16 16:16:21 13756 [Note] InnoDB: Mutexes and rw_locks use InnoDB's own implementation
2013-02-16 16:16:21 13756 [Note] InnoDB: Compressed tables use zlib 1.2.3
2013-02-16 16:16:21 13756 [Note] InnoDB: CPU does not support crc32 instructions
2013-02-16 16:16:21 13756 [Note] InnoDB: Using Linux native AIO
2013-02-16 16:16:21 13756 [Note] InnoDB: Initializing buffer pool, size = 32.0M
2013-02-16 16:16:21 13756 [Note] InnoDB: Completed initialization of buffer pool
2013-02-16 16:16:21 13756 [Note] InnoDB: Highest supported file format is Barracuda.
2013-02-16 16:16:22 13756 [Note] InnoDB: 128 rollback segment(s) are active.
2013-02-16 16:16:22 13756 [Note] InnoDB: 1.2.10 started; log sequence number 1727822
2013-02-16 16:16:22 13756 [Note] Server hostname (bind-address): '*'; port: 3306
2013-02-16 16:16:22 13756 [Note] IPv6 is available.
2013-02-16 16:16:22 13756 [Note]   - '::' resolves to '::';
2013-02-16 16:16:22 13756 [Note] Server socket created on IP: '::'.
2013-02-16 16:16:22 13756 [Note] Slave I/O thread: Start semi-sync replication to master 'slave_user@HOME001:3306' in log 'mysql-bin.000015' at position 1506
2013-02-16 16:16:22 13756 [Warning] Storing MySQL user name or password information in the master.info repository is not secure and is therefore not recommended. Please see the MySQL Manual for more about this issue and possible alternatives.
2013-02-16 16:16:22 13756 [Warning] Slave SQL: If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0
2013-02-16 16:16:22 13756 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000015' at position 1506, relay log '/usr/local/mysql/data/relay-bin.000006' position: 270
2013-02-16 16:16:22 13756 [Note] Slave I/O thread: connected to master 'slave_user@HOME001:3306',replication started in log 'mysql-bin.000015' at position 1506
2013-02-16 16:16:22 13756 [Note] Event Scheduler: Loaded 0 events
2013-02-16 16:16:22 13756 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.6.10-log'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)
2013-02-16 16:16:22 13756 [Warning] Slave I/O: Notifying master by SET @master_binlog_checksum= @@global.binlog_checksum failed with error: Unknown system variable 'binlog_checksum', Error_code: 1193
2013-02-16 16:16:22 13756 [Warning] Slave I/O: Unknown system variable 'SERVER_UUID' on master, maybe it is a *VERY OLD MASTER*. Error_code: 1193
[root@HOME002 data]#


MYSQLDUMPを利用する時のOPTION確認とDUMPした後にバイナリーログを適用して、
最新のデータをリカバリーする方法の再確認。

以下のようなOPTIONでDB全体の整合性とバイナリーログのロールフォワードに必要なデータをダンプする。

–master-dataオプションと対象ロック

mysqldump --lock-all-tables --flush-logs --master-data=2 --databases test > DB_DUMP.sql -u root -p
mysqldump --single-transaction --flush-logs --master-data=2 --databases test > DB_DUMP.sql -u root -p

–lock-all-tablesと–single-transactionは同時に利用する事が出来ません。HELPを読むと–lock-all-tablesを利用すると
自動的に–single-transactionはOFFにされるようです。–single-transactionはトランザクションをサポートする
InnoDBにのみ利用可能なのでMyISAMなどには有効では無いようです。同時にオプションを指定すると以下のようなエラーになる。
また–master-dataオプションを指定している場合は自動的に–lock-all-tablesがONになるようです。
暗黙的にONになるので運用者が明確にしておく為に意図的に指定しておいても良いかもしれません。
但し、–single-transactionが指定されていると–master-dataを指定していても–lock-all-tablesはONにならない様です。

[root@HOME002 data]# mysqldump --single-transaction --lock-all-tables --flush-logs --master-data=2 --databases test > /home/mysql/MYSQL_dump20130125.sql -u root -p
mysqldump: You can't use --single-transaction and --lock-all-tables at the same time.
[root@HOME002 data]#

こちらのバックアップオプションで特定データベースもしくはDB全体をバックアップ
InnoDBやMYISAMを含む全てのデータベースをDumpする場合
(–lock-all-tablesはあえて残してあります)
例)

 mysqldump --lock-all-tables --flush-logs --master-data=2 --databases test > DB_DUMP.sql -u root -p
 mysqldump --lock-all-tables --flush-logs --master-data=2 --all-databases >  ALL_DB_DUMP.sql -u root -p

InnoDBのみ利用していて整合性の取れたデータをDumpする場合
例)

 mysqldump --single-transaction --flush-logs --master-data=2 --databases test > DB_DUMP.sql -u root -p
 mysqldump --single-transaction --flush-logs --master-data=2 --all-databases >  ALL_DB_DUMP.sql -u root -p

—————————————————
以下のHELP抜粋
—————————————————
-x, –lock-all-tables
Locks all tables across all databases. This is achieved
by taking a global read lock for the duration of the
whole dump. Automatically turns –single-transaction and
–lock-tables off.

–single-transaction
Creates a consistent snapshot by dumping all tables in a
single transaction. Works ONLY for tables stored in
storage engines which support multiversioning (currently
only InnoDB does); the dump is NOT guaranteed to be
consistent for other storage engines. While a
–single-transaction dump is in process, to ensure a
valid dump file (correct table contents and binary log
position), no other connection should use the following
statements: ALTER TABLE, DROP TABLE, RENAME TABLE,
TRUNCATE TABLE, as consistent snapshot is not isolated
from them. Option automatically turns off –lock-tables.

–master-data[=#] This causes the binary log position and filename to be
appended to the output. If equal to 1, will print it as a
CHANGE MASTER command; if equal to 2, that command will
be prefixed with a comment symbol. This option will turn
–lock-all-tables on, unless –single-transaction is
specified too (in which case a global read lock is only
taken a short time at the beginning of the dump; don’t
forget to read about –single-transaction below). In all
cases, any action on logs will happen at the exact moment
of the dump. Option automatically turns –lock-tables
off.

-F, –flush-logs Flush logs file in server before starting dump. Note that
if you dump many databases at once (using the option
–databases= or –all-databases), the logs will be
flushed for each database dumped. The exception is when
using –lock-all-tables or –master-data: in this case
the logs will be flushed only once, corresponding to the
moment all tables are locked. So if you want your dump
and the log flush to happen at the same exact moment you
should use –lock-all-tables or –master-data with
–flush-logs.

-A, –all-databases Dump all the databases. This will be same as –databases
with all databases selected.

–dump-date Put a dump date to the end of the output.
(Defaults to on; use –skip-dump-date to disable.)

-q, –quick Don’t buffer query, dump directly to stdout.
(Defaults to on; use –skip-quick to disable.)
—————————————————


MYISAMを含むデータもあるのでFULLをあえて–lock-all-tablesで取得して、
InnoDBしか含まないtestデータベースを–single-transactionで取得してます。

※本番環境では状況によって使い分けして下さい。

[root@HOME001 backup]# dumpdate=`date '+%F'`
[root@HOME001 backup]# dumpfile=MYSQL_DUMP_$dumpdate
[root@HOME001 backup]# dumpfile_dir=/home/mysql/backup/
[root@HOME001 backup]# mysqldump --lock-all-tables --flush-logs --master-data=2 --all-databases >  $dumpfile_dir$dumpfile\_ALL.sql -u root -p
Enter password:
[root@HOME001 backup]# 
[root@HOME001 backup]# mysqldump --single-transaction --flush-logs --master-data=2 --databases test > $dumpfile_dir$dumpfile\_test.sql -u root -p
Enter password:
[root@HOME001 backup]# ls -l /home/mysql/backup/MYSQL_DUMP_*                                                          
-rw-r--r--. 1 root root 516386  1月 26 11:00 2013 /home/mysql/backup/MYSQL_DUMP_2013-01-26_ALL.sql
-rw-r--r--. 1 root root   4000  1月 26 11:03 2013 /home/mysql/backup/MYSQL_DUMP_2013-01-26_test.sql
[root@HOME001 backup]#


FULLバックアップを取得したので先ずはデータの確認して、
データを追記した後に擬似的な操作ミスとしてTruncateしてデータを空にしてみる。

mysql> select * from TABLE001 order by id desc limit 0,10;
+----+----------------------+-----------------------------------------------+
| id | title                | comment                                       |
+----+----------------------+-----------------------------------------------+
| 32 | Recreate Replication | 20130125 mysql-bin.000004 and relay-bin.00000 |
| 31 | Recreate Replication | 20130125 mysql-bin.000004 and relay-bin.00000 |
| 30 | Recreate Replication | mysql-bin.000004 and relay-bin.000008         |
| 29 | Recreate Replication | mysql-bin.000004 and relay-bin.000008         |
| 28 | LOG20120113          | mysql-bin.000034 After  Full Backup           |
| 27 | LOG20120113          | mysql-bin.000034 After  Full Backup           |
| 26 | LOG20120113          | mysql-bin.000034 After  Full Backup           |
| 25 | LOG20120113          | mysql-bin.000034 Take Full Backup             |
| 24 | LOG20120111--01      | after mysql-bin.000034                        |
| 23 | LOG20120111--01      | after mysql-bin.000034                        |
+----+----------------------+-----------------------------------------------+
10 rows in set (0.00 sec)

mysql>

mysql> insert into TABLE001(title,comment) values("Recreate Replication","after dump 20120126");
Query OK, 1 row affected (0.45 sec)

mysql> insert into TABLE001(title,comment) values("Recreate Replication","after dump 20120126");
Query OK, 1 row affected (0.62 sec)

mysql> insert into TABLE001(title,comment) values("Recreate Replication","after dump 20120126");
Query OK, 1 row affected (0.13 sec)

mysql> select * from TABLE001 order by id desc limit 0,10;
+----+----------------------+-----------------------------------------------+
| id | title                | comment                                       |
+----+----------------------+-----------------------------------------------+
| 35 | Recreate Replication | after dump 20120126                           |
| 34 | Recreate Replication | after dump 20120126                           |
| 33 | Recreate Replication | after dump 20120126                           |
| 32 | Recreate Replication | 20130125 mysql-bin.000004 and relay-bin.00000 |
| 31 | Recreate Replication | 20130125 mysql-bin.000004 and relay-bin.00000 |
| 30 | Recreate Replication | mysql-bin.000004 and relay-bin.000008         |
| 29 | Recreate Replication | mysql-bin.000004 and relay-bin.000008         |
| 28 | LOG20120113          | mysql-bin.000034 After  Full Backup           |
| 27 | LOG20120113          | mysql-bin.000034 After  Full Backup           |
| 26 | LOG20120113          | mysql-bin.000034 After  Full Backup           |
+----+----------------------+-----------------------------------------------+
10 rows in set (0.00 sec)

mysql>


mysql> truncate table TABLE001;
Query OK, 0 rows affected (0.40 sec)

mysql> select * from TABLE001 order by id desc limit 0,10;
Empty set (0.00 sec)

mysql>

confirmation1


上記でバックアップしたダンプファイルの中身を確認してLOGのポジションを確認。

[root@HOME001 backup]# cat MYSQL_DUMP_2013-01-26_test.sql | egrep -i master
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=107;
[root@HOME001 backup]#


擬似オペミス直前まで戻す為にどのバイナリーログまで戻したら良いか確認。

最後のバックアップから全てのデータを戻したい場合は、
バックアップのログポジションを確認した後に確認したポジション
以降の全てのログを戻せば良い。

[root@HOME001 data]# mysqlbinlog --no-defaults mysql-bin.000007 | egrep -i -B5 truncate
#130126 11:26:50 server id 1  end_log_pos 929   Xid = 366
COMMIT/*!*/;
# at 929
#130126 11:41:11 server id 1  end_log_pos 1015  Query   thread_id=5     exec_time=0     error_code=0
SET TIMESTAMP=1359168071/*!*/;
truncate table TABLE001
[root@HOME001 data]#

ロールフォワードする為には以下のログの中身を適用する必要がある。
今回の検証で確認したケースでのStartとEndのポジション

mysql-bin.000007
 –start-position=107
 –stop-position=929

バイナリーログから戻すべきデータを再作成する為のスクリプトを作成する。
OracleでいうArchiveログを適用するRecoveryモード時に適用するログをマニュアル作成する感じ?
Positionは上記で確認したPositionを設定。

[root@HOME001 data]# mysqlbinlog --no-defaults --start-position=107 --stop-position=929 mysql-bin.000007 > /home/mysql/backup/recovery.sql
[root@HOME001 data]#

障害発生前まで戻す為の材料が揃ったのでリカバリー開始

[root@HOME001 backup]# ls -l
合計 524
drwxr-xr-x. 6 root root   4096  1月 24 14:45 2013 2013-01-24_14-44-57
drwxr-xr-x. 6 root root   4096  1月 24 15:23 2013 2013-01-24_15-23-31
-rw-r--r--. 1 root root 516386  1月 26 11:00 2013 MYSQL_DUMP_2013-01-26_ALL.sql
-rw-r--r--. 1 root root   4000  1月 26 11:03 2013 MYSQL_DUMP_2013-01-26_test.sql
-rw-r--r--. 1 root root   2713  1月 26 12:17 2013 recovery.sql
[root@HOME001 backup]#

[root@HOME001 backup]# mysql -u root -p test < MYSQL_DUMP_2013-01-26_test.sql
Enter password:
&#91;root@HOME001 backup&#93;# mysql -u root -p test < recovery.sql
Enter password:
&#91;root@HOME001 backup&#93;#
&#91;/SHELL&#93;

<strong>リカバリー完了したのでデータを確認して完了。</strong>
[SHELL]
mysql> use test
Database changed
mysql> select * from TABLE001 order by id desc limit 0,10;
+----+----------------------+-----------------------------------------------+
| id | title                | comment                                       |
+----+----------------------+-----------------------------------------------+
| 35 | Recreate Replication | after dump 20120126                           |
| 34 | Recreate Replication | after dump 20120126                           |
| 33 | Recreate Replication | after dump 20120126                           |
| 32 | Recreate Replication | 20130125 mysql-bin.000004 and relay-bin.00000 |
| 31 | Recreate Replication | 20130125 mysql-bin.000004 and relay-bin.00000 |
| 30 | Recreate Replication | mysql-bin.000004 and relay-bin.000008         |
| 29 | Recreate Replication | mysql-bin.000004 and relay-bin.000008         |
| 28 | LOG20120113          | mysql-bin.000034 After  Full Backup           |
| 27 | LOG20120113          | mysql-bin.000034 After  Full Backup           |
| 26 | LOG20120113          | mysql-bin.000034 After  Full Backup           |
+----+----------------------+-----------------------------------------------+
10 rows in set (0.00 sec)

mysql>

after

スレーブでmysqldumpを取得時にバイナリーログPOSITIONを記録する場合の留意:

--master-data

オプションは、バックアップを取得したサーバーでのポジションになるので
スレーブでバックアップ取得していてマスターDBが破損した場合でも、
スレーブのバイナリーログから対象のデータをリカバリーする必要があります。
もしマスター側のバイナリーログから必要なDDL、DMLを追加で取得する場合は、
調査と対応に時間がかなりかかる事が想定されます。
MYSQL5.5以降であれば、スレーブで取得する場合は

--dump-slave

を使用する事で、
MasterデータベースのバイナリーログのPOSITIONを記録してくれるので、
マスターのログを利用してのリカバリーが可能です。
但し、マスターが全損する場合もあるので用途によって運用でカバーする必要があります。

検証結果

mysqldump

参考サイト
How to obtain a correct dump using mysqldump and single-transaction when DDL is used at the same time?
mysqldump –single-transaction に –flush-logs をつけてはいけない
mysqldump の option 復習
7.12. mysqldump — データベースバックアッププログラム
mysqlbinlog — バイナリログファイルを処理するためのユーティリティ


MYSQLオンラインバックアップ

基本的にWeb系のサービスではオンラインバックアップが基本だと思うので、
改めてMYSQLのオンラインバックアップの選択肢を確認。

ハードウエアやOSの機能を利用
 LVMやストレージが提供しているSnapShot機能を利用する。
 自分で簡単なスクリプトを作成すれば瞬時にオンラインで
 MYSQLバックアップをする事が可能。

ソフトウエアの機能を利用したバックアップ
mysqldump
mMySQL Enterprise Backup
InnoDB Hot Backup
Xtra Backup

Xtra Backupの動作確認
32bit版はi686 64bit版はx86_64
http://www.percona.com/downloads/XtraBackup/XtraBackup-2.0.5/
http://www.percona.com/software/percona-xtrabackup

OS確認

[root@HOME001 mysql]# uname -m
i686
[root@HOME001 mysql]#

ダウンロード

[root@HOME001 mysql]# wget http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.0.5/binary/Linux/i686/percona-xtrabackup-2.0.5-499.tar.gz
--2013-01-24 13:31:20--  http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.0.5/binary/Linux/i686/percona-xtrabackup-2.0.5-499.tar.gz
www.percona.com をDNSに問いあわせています... 74.121.199.234
www.percona.com|74.121.199.234|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: /downloads/XtraBackup/XtraBackup-2.0.5/binary/Linux/i686/percona-xtrabackup-2.0.5-499.tar.gz [続く]
--2013-01-24 13:31:21--  http://www.percona.com/downloads/XtraBackup/XtraBackup-2.0.5/binary/Linux/i686/percona-xtrabackup-2.0.5-499.tar.gz
www.percona.com:80 への接続を再利用します。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 22328480 (21M) [application/x-gzip]
`percona-xtrabackup-2.0.5-499.tar.gz' に保存中

100%[==========================================================>] 22,328,480  1.40M/s 時間 15s

2013-01-24 13:31:36 (1.45 MB/s) - `percona-xtrabackup-2.0.5-499.tar.gz' へ保存完了 [22328480/22328480]

[root@HOME001 mysql]#

展開
MYSQLのホームディレクトリーのbinに展開したファイルをコピーしないとエラーが出たのでコピーしてます。

[root@HOME001 mysql]# tar zxvf percona-xtrabackup-2.0.5-499.tar.gz
percona-xtrabackup-2.0.5/
percona-xtrabackup-2.0.5/bin/
percona-xtrabackup-2.0.5/bin/xtrabackup_55
percona-xtrabackup-2.0.5/bin/xtrabackup_51
percona-xtrabackup-2.0.5/bin/innobackupex
percona-xtrabackup-2.0.5/bin/xtrabackup
省略…
percona-xtrabackup-2.0.5/share/percona-xtrabackup-test/inc/bug723097.sql
percona-xtrabackup-2.0.5/share/percona-xtrabackup-test/inc/ib_stream_common.sh
percona-xtrabackup-2.0.5/share/percona-xtrabackup-test/inc/incremental_sample-db/
percona-xtrabackup-2.0.5/share/percona-xtrabackup-test/inc/incremental_sample-db/incremental_sample-schema.sql
percona-xtrabackup-2.0.5/share/percona-xtrabackup-test/inc/common.sh
[root@HOME001 mysql]#


[root@HOME001 percona-xtrabackup-2.0.5]# pwd
/home/mysql/percona-xtrabackup-2.0.5
[root@HOME001 percona-xtrabackup-2.0.5]# ls -l
合計 8
drwxr-xr-x. 2 root root 4096  1月 18 05:37 2013 bin
drwxr-xr-x. 4 root root 4096  1月 18 05:37 2013 share
[root@HOME001 percona-xtrabackup-2.0.5]# ls -l bin/
合計 32272
-rwxr-xr-x. 1 root root   106390  1月 18 05:37 2013 innobackupex
lrwxrwxrwx. 1 root root       12  1月 24 13:34 2013 innobackupex-1.5.1 -> innobackupex
-rwxr-xr-x. 1 root root  2031819  1月 18 05:37 2013 xbstream
-rwxr-xr-x. 1 root root  9809963  1月 18 05:34 2013 xtrabackup
-rwxr-xr-x. 1 root root  8375751  1月 18 05:37 2013 xtrabackup_51
-rwxr-xr-x. 1 root root 12713916  1月 18 05:29 2013 xtrabackup_55
[root@HOME001 percona-xtrabackup-2.0.5]#cd bin
[root@HOME001 bin]# cp -rp * /usr/local/mysql/bin/
[root@HOME001 bin]# cd /usr/local/mysql/bin/
[root@HOME001 bin]# mkdir /home/mysql/backup

tar

InnoDBのオンラインバックアップ実行
パスワードは変数を入れてます。

[root@HOME001 bin]# ./innobackupex-1.5.1 --user root --password $b_pass /home/mysql/backup/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Ireland Ltd 2009-2012.  All Rights Reserved.

This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.

130124 14:44:51  innobackupex-1.5.1: Starting mysql with options:  --password=xxxxxxxx --user='root' --unbuffered --
130124 14:44:51  innobackupex-1.5.1: Connected to database with mysql child process (pid=4736)
130124 14:44:57  innobackupex-1.5.1: Connection to database server closed
IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex-1.5.1
           prints "completed OK!".

innobackupex-1.5.1: Using mysql  Ver 14.14 Distrib 5.5.29, for linux2.6 (i686) using readline 5.1
innobackupex-1.5.1: Using mysql server version Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

innobackupex-1.5.1: Created backup directory /home/mysql/backup/2013-01-24_14-44-57
130124 14:44:57  innobackupex-1.5.1: Starting mysql with options:  --password=xxxxxxxx --user='root' --unbuffered --
130124 14:44:57  innobackupex-1.5.1: Connected to database with mysql child process (pid=4763)
130124 14:44:59  innobackupex-1.5.1: Connection to database server closed

130124 14:44:59  innobackupex-1.5.1: Starting ibbackup with command: xtrabackup_55  --defaults-group="mysqld" --backup --suspend-at-end --target-dir=/home/mysql/backup/2013-01-24_14-44-57
innobackupex-1.5.1: Waiting for ibbackup (pid=4771) to suspend
innobackupex-1.5.1: Suspend file '/home/mysql/backup/2013-01-24_14-44-57/xtrabackup_suspended'

xtrabackup_55 version 2.0.5 for Percona Server 5.5.16 Linux (i686) (revision id: undefined)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /usr/local/mysql/data
xtrabackup: Target instance is assumed as followings.
xtrabackup:   innodb_data_home_dir = ./
xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend
xtrabackup:   innodb_log_group_home_dir = ./
xtrabackup:   innodb_log_files_in_group = 2
xtrabackup:   innodb_log_file_size = 8388608
>> log scanned up to (1656933)
[01] Copying ./ibdata1 to /home/mysql/backup/2013-01-24_14-44-57/ibdata1
[01]        ...done

130124 14:45:03  innobackupex-1.5.1: Continuing after ibbackup has suspended
130124 14:45:03  innobackupex-1.5.1: Starting mysql with options:  --password=xxxxxxxx --user='root' --unbuffered --
130124 14:45:03  innobackupex-1.5.1: Connected to database with mysql child process (pid=4785)
>> log scanned up to (1656933)
130124 14:45:05  innobackupex-1.5.1: Starting to lock all tables...
>> log scanned up to (1656933)
>> log scanned up to (1656933)
130124 14:45:15  innobackupex-1.5.1: All tables locked and flushed to disk

130124 14:45:15  innobackupex-1.5.1: Starting to backup non-InnoDB tables and files
innobackupex-1.5.1: in subdirectories of '/usr/local/mysql/data'
innobackupex-1.5.1: Backing up files '/usr/local/mysql/data/performance_schema/*.{frm,MYD,MYI,MAD,MAI,MRG,TRG,TRN,ARM,ARZ,CSM,CSV,opt,par}' (18 files)
innobackupex-1.5.1: Backing up file '/usr/local/mysql/data/DB_REPLICATION/db.opt'
innobackupex-1.5.1: Backing up file '/usr/local/mysql/data/test/TABLE001.frm'
innobackupex-1.5.1: Backing up files '/usr/local/mysql/data/mysql/*.{frm,MYD,MYI,MAD,MAI,MRG,TRG,TRN,ARM,ARZ,CSM,CSV,opt,par}' (72 files)
130124 14:45:15  innobackupex-1.5.1: Finished backing up non-InnoDB tables and files

130124 14:45:15  innobackupex-1.5.1: Waiting for log copying to finish

xtrabackup: The latest check point (for incremental): '1656933'
xtrabackup: Stopping log copying thread.
.>> log scanned up to (1656933)

xtrabackup: Transaction log of lsn (1656933) to (1656933) was copied.
130124 14:45:18  innobackupex-1.5.1: All tables unlocked
130124 14:45:18  innobackupex-1.5.1: Connection to database server closed

innobackupex-1.5.1: Backup created in directory '/home/mysql/backup/2013-01-24_14-44-57'
innobackupex-1.5.1: MySQL binlog position: filename 'mysql-bin.000050', position 107
130124 14:45:18  innobackupex-1.5.1: completed OK!
[root@HOME001 bin]#


[root@HOME001 bin]# ls -l /home/mysql/backup/
合計 4
drwxr-xr-x. 6 root root 4096  1月 24 14:45 2013 2013-01-24_14-44-57
[root@HOME001 bin]#

innobackup

並列処理を指定する事も可能

[root@HOME001 bin]# ./innobackupex-1.5.1 --user root --password $b_pass --parallel=4 /home/mysql/backup/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Ireland Ltd 2009-2012.  All Rights Reserved.

This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.

130124 15:23:25  innobackupex-1.5.1: Starting mysql with options:  --password=xxxxxxxx --user='root' --unbuffered --
130124 15:23:25  innobackupex-1.5.1: Connected to database with mysql child process (pid=5010)
130124 15:23:31  innobackupex-1.5.1: Connection to database server closed
IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex-1.5.1
           prints "completed OK!".
省略・・・
xtrabackup: Starting 4 threads for parallel data files transfer
[03] Copying ./ibdata1 to /home/mysql/backup/2013-01-24_15-23-31/ibdata1
[03]        ...done
省略・・・
innobackupex-1.5.1: Backup created in directory '/home/mysql/backup/2013-01-24_15-23-31'
innobackupex-1.5.1: MySQL binlog position: filename 'mysql-bin.000050', position 107
130124 15:23:52  innobackupex-1.5.1: completed OK!
[root@HOME001 bin]#

リストアを試してみる
リストア時にフルバックアップで取得したデータをリストアすると、
データフォルダーが空では無いとエラーになる。
バイナリーログは差分リカバリーで必要になるので残しておく。
Oracleでいうテーブルスペースのオンライバックアップをリストアして、
ArchiveログやRedoを適用してロールフォワードするような感じ。

[root@HOME001 bin]# mysql -u root -p$b_pass -e "select count(*) from test.TABLE001;"
+----------+
| count(*) |
+----------+
|       28 |
+----------+
[root@HOME001 bin]# mysql -u root -p$b_pass -e "truncate table test.TABLE001;"
[root@HOME001 bin]# mysql -u root -p$b_pass -e "select count(*) from test.TABLE001;"
+----------+
| count(*) |
+----------+
|        0 |
+----------+
[root@HOME001 bin]#
[root@HOME001 bin]# /etc/init.d/mysql stop
Shutting down MySQL..                                      [  OK  ]
[root@HOME001 bin]# mv /usr/local/mysql/data  /home/mysql/backup/
[root@HOME001 bin]# mkdir /usr/local/mysql/data
[root@HOME001 bin]# chown -R mysql:mysql /usr/local/mysql/data

restore1

コピーバックしてリストア
注意:レプリケーション環境ではきちんと必要なファイル等を理解した上でリカバリーして下さい。

[root@HOME001 bin]# ./innobackupex-1.5.1 --user root --password $b_pass --copy-back /home/mysql/backup/2013-01-24_15-23-31

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Ireland Ltd 2009-2012.  All Rights Reserved.

This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.

IMPORTANT: Please check that the copy-back run completes successfully.
           At the end of a successful copy-back run innobackupex-1.5.1
           prints "completed OK!".

innobackupex-1.5.1: Starting to copy files in '/home/mysql/backup/2013-01-24_15-23-31'
innobackupex-1.5.1: back to original data directory '/usr/local/mysql/data'
innobackupex-1.5.1: Creating directory '/usr/local/mysql/data/performance_schema'
innobackupex-1.5.1: Copying '/home/mysql/backup/2013-01-24_15-23-31/performance_schema/file_summary_by_event_name.frm' to '/usr/l         ocal/mysql/data/performance_schema/file_summary_by_event_name.frm'
innobackupex-1.5.1: Copying '/home/mysql/backup/2013-01-24_15-23-31/performance_schema/rwlock_instances.frm' to '/usr/local/mysql         /data/performance_schema/rwlock_instances.frm'
....省略
innobackupex-1.5.1: Copying '/home/mysql/backup/2013-01-24_15-23-31/mysql/time_zone_transition.MYI' to '/usr/local/mysql/data/mys         ql/time_zone_transition.MYI'
innobackupex-1.5.1: Copying '/home/mysql/backup/2013-01-24_15-23-31/mysql/time_zone_transition_type.frm' to '/usr/local/mysql/dat         a/mysql/time_zone_transition_type.frm'
innobackupex-1.5.1: Creating directory '/usr/local/mysql/data/DB_REPLICATION'
innobackupex-1.5.1: Copying '/home/mysql/backup/2013-01-24_15-23-31/DB_REPLICATION/db.opt' to '/usr/local/mysql/data/DB_REPLICATI         ON/db.opt'
innobackupex-1.5.1: Creating directory '/usr/local/mysql/data/test'
innobackupex-1.5.1: Copying '/home/mysql/backup/2013-01-24_15-23-31/test/TABLE001.frm' to '/usr/local/mysql/data/test/TABLE001.frm'

innobackupex-1.5.1: Starting to copy InnoDB system tablespace
innobackupex-1.5.1: in '/home/mysql/backup/2013-01-24_15-23-31'
innobackupex-1.5.1: back to original InnoDB data directory '/usr/local/mysql/data'
innobackupex-1.5.1: Copying '/home/mysql/backup/2013-01-24_15-23-31/ibdata1' to '/usr/local/mysql/data/ibdata1'

innobackupex-1.5.1: Starting to copy InnoDB log files
innobackupex-1.5.1: in '/home/mysql/backup/2013-01-24_15-23-31'
innobackupex-1.5.1: back to original InnoDB log directory '/usr/local/mysql/data'
innobackupex-1.5.1: Finished copying back files.
130124 15:38:03  innobackupex-1.5.1: completed OK!
[root@HOME001 bin]#

サービス再起動とデータの確認

[root@HOME001 bin]# /etc/init.d/mysql start
Starting MySQL....                                         [  OK  ]
[root@HOME001 bin]# mysql -u root -p$b_pass -e "select count(*) from test.TABLE001;"
+----------+
| count(*) |
+----------+
|       28 |
+----------+
[root@HOME001 bin]#

リカバリーログの内容(ログファイル再作成、ロールフォワードの履歴)

130124 15:40:42 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
130124 15:40:42 [Note] Plugin ‘FEDERATED’ is disabled.
130124 15:40:42 InnoDB: The InnoDB memory heap is disabled
130124 15:40:42 InnoDB: Mutexes and rw_locks use InnoDB’s own implementation
130124 15:40:42 InnoDB: Compressed tables use zlib 1.2.3
130124 15:40:42 InnoDB: Using Linux native AIO
130124 15:40:42 InnoDB: Initializing buffer pool, size = 32.0M
130124 15:40:42 InnoDB: Completed initialization of buffer pool
130124 15:40:42 InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 8 MB
InnoDB: Database physically writes the file full: wait…
130124 15:40:42 InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 8 MB
InnoDB: Database physically writes the file full: wait…
130124 15:40:43 InnoDB: highest supported file format is Barracuda.
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
130124 15:40:43 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files…
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer…
InnoDB: Last MySQL binlog file position 0 3917, file name ./mysql-bin.000035
130124 15:40:43 InnoDB: Waiting for the background threads to start
130124 15:40:44 InnoDB: 1.1.8 started; log sequence number 1657356
130124 15:40:44 [Note] Semi-sync replication initialized for transactions.
130124 15:40:44 [Note] Semi-sync replication enabled on the master.
130124 15:40:44 [Note] Server hostname (bind-address): ‘0.0.0.0’; port: 3306
130124 15:40:44 [Note] – ‘0.0.0.0’ resolves to ‘0.0.0.0’;
130124 15:40:44 [Note] Server socket created on IP: ‘0.0.0.0’.
130124 15:40:44 [Note] Event Scheduler: Loaded 0 events
130124 15:40:44 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: ‘5.5.29-log’ socket: ‘/tmp/mysql.sock’ port: 3306 MySQL Community Server (GPL)
130124 15:40:46 [Note] Start semi-sync binlog_dump to slave (server_id: 2), pos(mysql-bin.000050, 194)
130124 15:40:46 [Note] Stop semi-sync binlog_dump to slave (server_id: 2)

restore3

その他LVM のスナップショット機能を利用したバックアップに関しては後日検証
LVMの現状確認

[root@HOME001 ~]# fdisk -l /dev/sda
ディスク /dev/sda: 60.0 GB, 60011642880 バイト
ヘッド 255, セクタ 63, シリンダ 7296
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x1ecfb89b

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *           1          64      512000   83  Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2              64        7296    58091520   8e  Linux LVM
[root@HOME001 ~]#


[root@HOME001 ~]# pvscan
  PV /dev/sda2   VG vg_home001   lvm2 [55.40 GiB / 0    free]
  Total: 1 [55.40 GiB] / in use: 1 [55.40 GiB] / in no VG: 0 [0   ]
[root@HOME001 ~]# 

[root@HOME001 ~]# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "vg_home001" using metadata type lvm2
[root@HOME001 ~]# 

[root@HOME001 ~]# lvscan
  ACTIVE            '/dev/vg_home001/lv_root' [46.86 GiB] inherit
  ACTIVE            '/dev/vg_home001/lv_home' [4.57 GiB] inherit
  ACTIVE            '/dev/vg_home001/lv_swap' [3.97 GiB] inherit
[root@HOME001 ~]# 

[root@HOME001 ~]# vgs
  VG         #PV #LV #SN Attr   VSize  VFree
  vg_home001   1   3   0 wz--n- 55.40g    0
[root@HOME001 ~]# 

[root@HOME001 ~]# lvs
  LV      VG         Attr     LSize  Pool Origin Data%  Move Log Copy%  Convert
  lv_home vg_home001 -wi-ao--  4.57g
  lv_root vg_home001 -wi-ao-- 46.86g
  lv_swap vg_home001 -wi-ao--  3.97g
[root@HOME001 ~]# 

[root@HOME001 ~]# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/vg_home001-lv_root      48360312   2618204  43285532   6% /
tmpfs                                 969472         0    969472   0% /dev/shm
/dev/sda1                             495844     36136    434108   8% /boot
/dev/mapper/vg_home001-lv_home       4721020    441796   4039404  10% /home
tmpfs                                  65536         0     65536   0% /usr/local/tmp
[root@HOME001 ~]# 

[root@HOME001 ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       4161528 0       -1
[root@HOME001 ~]#


もしボリューム名を変更したら起動、fstabの変更も忘れずに
[root@HOME001 ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/vg_home001-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-279.el6.i686)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-279.el6.i686 ro root=/dev/mapper/vg_home001-lv_root rd_NO_LUKS rd_LVM_LV=vg_home001/lv_swap rd_NO_MD rd_LVM_LV=vg_home001/lv_root crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-279.el6.i686.img
[root@HOME001 ~]#

参考

MySQLバックアップ頂上決戦!! LVMスナップショット vs InnoDB Hot Backup
Percona XtraBackup
Percona XtraBackupの基本的な使い方
XtraBackupを使ってMySQLをバックアップしよう
MySQLバックアップツール比較 XtraBackup / mysqldump / Mydumper
MySQL – XtraBackupを使ったバックアップ&リストアについて
レプリケーション作成を簡単にする mysql40dump という mysqldump の wrapper を作った話
keepalived + MySQL-MHA + xtrabackupで自動フェイルオーバーと手動フェイルバック(その1 keepalived編)
Percona XtraBackupの抽出と圧縮の並列処理
LVM を導入する
LVM のパーティションを管理する
LVM のスナップショット機能を使ってみる
How to setup a slave for replication in 6 simple steps with Xtrabackup


MYSQL5.6も近い将来リリースされるので再度基本レビューしておく。

確認したMYSQLバージョン

mysql> select @@version;
+------------+
| @@version  |
+------------+
| 5.5.29-log |
+------------+
1 row in set (0.00 sec)

MYSQLファイルパスについて
basedir MYSQLインストールディレクトリー
datadir データディレクトリー(mysql_install_dbスクリプト実行時に–datadir=/dataなどで指定可能)
/etc/my.cnfにて変更可能

	[root@HOME001 mysql]# cat /etc/my.cnf | grep innodb
	#innodb_data_home_dir = /usr/local/mysql/data
	#innodb_data_file_path = ibdata1:10M:autoextend
	#innodb_log_group_home_dir = /usr/local/mysql/data
	innodb_buffer_pool_size = 32M
	innodb_additional_mem_pool_size = 2M
	innodb_log_file_size =   8M
	innodb_log_buffer_size = 8M
	innodb_flush_log_at_trx_commit = 1
	innodb_lock_wait_timeout = 50
	[root@HOME001 mysql]#
mysql> show variables like '%dir%';
+-----------------------------------------+-------------------------------------------------------+
| Variable_name                           | Value                                                 |
+-----------------------------------------+-------------------------------------------------------+
| basedir                                 | /usr/local/mysql                                      |
| binlog_direct_non_transactional_updates | OFF                                                   |
| character_sets_dir                      | /usr/local/mysql-5.5.29-linux2.6-i686/share/charsets/ |
| datadir                                 | /usr/local/mysql/data/                                |
| innodb_data_home_dir                    |                                                       |
| innodb_log_group_home_dir               | ./                                                    |
| innodb_max_dirty_pages_pct              | 75                                                    |
| lc_messages_dir                         | /usr/local/mysql-5.5.29-linux2.6-i686/share/          |
| plugin_dir                              | /usr/local/mysql/lib/plugin/                          |
| slave_load_tmpdir                       | /tmp                                                  |
| tmpdir                                  | /tmp                                                  |
+-----------------------------------------+-------------------------------------------------------+
11 rows in set (0.00 sec)

mysql>

TCP/IP PORT・Socket接続について。
複数インスタンスを立ち上げる場合はPort、Socket、Datadirが被らないようにする必要あり。

mysql> show variables like '%socket%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| socket        | /tmp/mysql.sock |
+---------------+-----------------+
1 row in set (0.00 sec)

mysql> show variables like '%port%';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| innodb_support_xa   | ON    |
| large_files_support | ON    |
| port                | 3306  |
| report_host         |       |
| report_password     |       |
| report_port         | 3306  |
| report_user         |       |
+---------------------+-------+
7 rows in set (0.01 sec)

mysql>

コネクションに関しては、Default値がバージョンによっても異なるので、
確認して不足している場合は適宜値を変更する必要があります。
Java EE, RubyなどのようにコネクションPoolする場合とPHPなどのように
都度接続する場合など調整方法も変更する必要があると思います。
MSSQLなどを利用している場合も同様に.Netやサーバー側のPool設定
またはLoad Balancerなどの調整なども環境によっては必要になると思います。

mysql> show variables like '%connection%';
+--------------------------+-----------------+
| Variable_name            | Value           |
+--------------------------+-----------------+
| character_set_connection | utf8            |
| collation_connection     | utf8_general_ci |
| max_connections          | 151             |
| max_user_connections     | 0               |
+--------------------------+-----------------+
4 rows in set (0.00 sec)

mysql>

既定のストレージエンジンについて
CREATE TABLE文実行時にENGINE=MyISAMなどで指定する事も可能。

mysql> show variables like '%storage%';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
| storage_engine         | InnoDB |
+------------------------+--------+
2 rows in set (0.00 sec)

mysql>

ログファイルについて。
log_binに関しては、リカバリーやレプリケーションで必須なので設定。

mysql> show variables like '%log%';
+-----------------------------------------+-----------------------------------------------+
| Variable_name                           | Value                                         |
+-----------------------------------------+-----------------------------------------------+
| back_log                                | 50                                            |
| binlog_cache_size                       | 32768                                         |
| binlog_direct_non_transactional_updates | OFF                                           |
| binlog_format                           | MIXED                                         |
| binlog_stmt_cache_size                  | 32768                                         |
| expire_logs_days                        | 7                                             |
| general_log                             | OFF                                           |
| general_log_file                        | /usr/local/mysql/data/HOME001.log             |
| innodb_flush_log_at_trx_commit          | 1                                             |
| innodb_locks_unsafe_for_binlog          | OFF                                           |
| innodb_log_buffer_size                  | 8388608                                       |
| innodb_log_file_size                    | 8388608                                       |
| innodb_log_files_in_group               | 2                                             |
| innodb_log_group_home_dir               | ./                                            |
| innodb_mirrored_log_groups              | 1                                             |
| log                                     | OFF                                           |
| log_bin                                 | ON                                            |
| log_bin_trust_function_creators         | OFF                                           |
| log_error                               | /usr/local/mysql/data/HOME001.localdomain.err |
| log_output                              | FILE                                          |
| log_queries_not_using_indexes           | OFF                                           |
| log_slave_updates                       | OFF                                           |
| log_slow_queries                        | OFF                                           |
| log_warnings                            | 1                                             |
| max_binlog_cache_size                   | 18446744073709547520                          |
| max_binlog_size                         | 1073741824                                    |
| max_binlog_stmt_cache_size              | 18446744073709547520                          |
| max_relay_log_size                      | 0                                             |
| relay_log                               |                                               |
| relay_log_index                         |                                               |
| relay_log_info_file                     | relay-log.info                                |
| relay_log_purge                         | ON                                            |
| relay_log_recovery                      | OFF                                           |
| relay_log_space_limit                   | 0                                             |
| slow_query_log                          | OFF                                           |
| slow_query_log_file                     | /usr/local/mysql/data/HOME001-slow.log        |
| sql_log_bin                             | ON                                            |
| sql_log_off                             | OFF                                           |
| sync_binlog                             | 0                                             |
| sync_relay_log                          | 0                                             |
| sync_relay_log_info                     | 0                                             |
+-----------------------------------------+-----------------------------------------------+
41 rows in set (0.00 sec)

mysql>

mysql> show variables like '%bin%';
+-----------------------------------------+----------------------+
| Variable_name                           | Value                |
+-----------------------------------------+----------------------+
| binlog_cache_size                       | 32768                |
| binlog_direct_non_transactional_updates | OFF                  |
| binlog_format                           | MIXED                |
| binlog_stmt_cache_size                  | 32768                |
| innodb_locks_unsafe_for_binlog          | OFF                  |
| log_bin                                 | ON                   |
| log_bin_trust_function_creators         | OFF                  |
| max_binlog_cache_size                   | 18446744073709547520 |
| max_binlog_size                         | 1073741824           |
| max_binlog_stmt_cache_size              | 18446744073709547520 |
| sql_log_bin                             | ON                   |
| sync_binlog                             | 0                    |
+-----------------------------------------+----------------------+
12 rows in set (0.00 sec)

mysql>

遅いQueryを早期発見してDBを安定稼動させ続ける為に必要です。
設定を有効にしておきましょう。
オンラインでも設定可能ですが再起動に備えて/etc/my.cnfに設定入れておくと良い。

mysql> show variables like '%slow%';
+---------------------+----------------------------------------+
| Variable_name       | Value                                  |
+---------------------+----------------------------------------+
| log_slow_queries    | OFF                                    |
| slow_launch_time    | 2                                      |
| slow_query_log      | OFF                                    |
| slow_query_log_file | /usr/local/mysql/data/HOME001-slow.log |
+---------------------+----------------------------------------+
4 rows in set (0.00 sec)

mysql> SET GLOBAL log_slow_queries = 1;
Query OK, 0 rows affected, 1 warning (0.39 sec)

mysql> show variables like '%slow%';
+---------------------+----------------------------------------+
| Variable_name       | Value                                  |
+---------------------+----------------------------------------+
| log_slow_queries    | ON                                     |
| slow_launch_time    | 2                                      |
| slow_query_log      | ON                                     |
| slow_query_log_file | /usr/local/mysql/data/HOME001-slow.log |
+---------------------+----------------------------------------+
4 rows in set (0.00 sec)

mysql>

設定は反映されるかWarningに以下のメッセージが出るので、
以降は”SET GLOBAL slow_query_log = 1;”コマンドで有効に設定する。

mysql> show warnings;
+---------+------+-------------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                           |
+---------+------+-------------------------------------------------------------------------------------------------------------------+
| Warning | 1287 | '@@log_slow_queries' is deprecated and will be removed in a future release. Please use '@@slow_query_log' instead |
+---------+------+-------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

SLOWログの閾値を設定する。
Default10秒なので1秒に変更するが再起動が必要。
規定値として1秒に設定しておいて、I/O負荷状況や必要に応じて
”log_slow_queries”でON・OFFを切り替えるのが良いかと思う。

mysql> show variables like '%long%';
+---------------------------------------------------+-----------+
| Variable_name                                     | Value     |
+---------------------------------------------------+-----------+
| long_query_time                                   | 10.000000 |
| max_long_data_size                                | 1048576   |
| performance_schema_events_waits_history_long_size | 10000     |
+---------------------------------------------------+-----------+
3 rows in set (0.00 sec)

mysql> set global long_query_time = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%long%';
+---------------------------------------------------+-----------+
| Variable_name                                     | Value     |
+---------------------------------------------------+-----------+
| long_query_time                                   | 10.000000 |
| max_long_data_size                                | 1048576   |
| performance_schema_events_waits_history_long_size | 10000     |
+---------------------------------------------------+-----------+
3 rows in set (0.00 sec)

mysql>

SLOWログの設定を設定ファイルに入れて再起動。
long_query_timeはマイクロ秒単位で設定可能(例:long_query_time=0.5)

[root@HOME001 mysql]# vi /etc/my.cnf
[root@HOME001 mysql]# cat /etc/my.cnf | egrep -i "slow|long"
# In this file, you can use all long options that a program supports.
slow_query_log=ON
slow_query_log_file=home001-mysql-slow.log
long_query_time=1
[root@HOME001 mysql]#


mysql> show variables like '%slow%';
+---------------------+------------------------+
| Variable_name       | Value                  |
+---------------------+------------------------+
| log_slow_queries    | ON                     |
| slow_launch_time    | 2                      |
| slow_query_log      | ON                     |
| slow_query_log_file | home001-mysql-slow.log |
+---------------------+------------------------+
4 rows in set (0.00 sec)

mysql>

mysql> show variables like '%long%';
+---------------------------------------------------+----------+
| Variable_name                                     | Value    |
+---------------------------------------------------+----------+
| long_query_time                                   | 1.000000 |
| max_long_data_size                                | 1048576  |
| performance_schema_events_waits_history_long_size | 10000    |
+---------------------------------------------------+----------+
3 rows in set (0.00 sec)

mysql> 

Fusion-IOなどの高性能のディスクも出てきましたが、
メモリーの方が高速である事は変わりないのでパフォーマンスに影響ある
innodb_buffer_pool_sizeを適切に設定しInnoDB内のデータ領域を
メモリー内に保持する必要があります。
サーバーを1つのMYSQLインスタンス専用として利用している場合は、
物理メモリーサイズの60%~80%程度を割り当てて様子を見て調整すれば良いようです。
Linuxの古いカーネルなどを利用している場合は、InnoDBログサイズなどが大きく
ファイルシステムのキャッシュから圧迫される事でSwapが頻発してしまう可能性があるそうです。
残りのメモリーは、OSやアプリケーション接続スレッドなどに利用される。
※ 参考:unmap_mysql_logs https://github.com/yoshinorim/unmap_mysql_logs
※ Swapの確認に関しては下に追記しておきます。

mysql> show variables like '%buffer_pool%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| innodb_buffer_pool_instances | 1        |
| innodb_buffer_pool_size      | 33554432 |
+------------------------------+----------+
2 rows in set (0.01 sec)

mysql>

MySQL innodb_flush_method = O_DIRECTに関してネットで確認してみると
検証されている方も沢山いて非常に参考になります。
全ての環境でパフォーマンスが上がる訳では無さそうなので検証してしてみる必要あり。

MySQL innodb_flush_method = O_DIRECTを設定するとダイレクトI/OというOSの機能が有効になります。
ダイレクトI/Oを利用するとInnoDBのメモリー領域とディスク間のデータのやりとりに(InnoDB Buffer<->Disk)、
OSのファイルシステムキャッシュを利用しないI/O方式になるとの事。
※ オーバーヘット増:Disk -> OS Page Cache -> InnoDB Buffer
※ オーバーヘット減:Disk -> InnoDB Buffer
※ メモリーが多い環境で有効との事。

mysql> show variables like '%flush%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| flush                          | OFF   |
| flush_time                     | 0     |
| innodb_adaptive_flushing       | ON    |
| innodb_flush_log_at_trx_commit | 1     |
| innodb_flush_method            |       |
+--------------------------------+-------+
5 rows in set (0.00 sec)

mysql>

innodb_data_file_pathパラメーターに関しては、
データファイルの初期サイズやディレクトリーを指定する為に利用。
データファイルの拡張が頻繁に発生する環境では予めファイルサイズを大きめに取って、
ユーザーがサイトを利用している間にファイル拡張が発生して
パフォーマンスが落ちないようにしておく方が良いかと思います。

mysql> show variables like '%innodb_data%';
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir  |                        |
+-----------------------+------------------------+
2 rows in set (0.00 sec)

innodb_autoextend_incrementがautoextendで拡張する拡張単位を指定します。
Defaultでは8MB単位になっているので必要に応じて変更。

mysql> show variables like '%innodb_autoextend%';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| innodb_autoextend_increment | 8     |
+-----------------------------+-------+
1 row in set (0.00 sec)

mysql> set global innodb_autoextend_increment = 10;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%innodb_autoextend%';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| innodb_autoextend_increment | 10    |
+-----------------------------+-------+
1 row in set (0.00 sec)

mysql>

再起動で変更が消えてしまうので、my.cnfに設定を追記しておくこと。

[root@HOME001 mysql]# vi /etc/my.cnf
[root@HOME001 mysql]# cat /etc/my.cnf | grep innodb_autoextend_increment
innodb_autoextend_increment = 10
[root@HOME001 mysql]# /etc/init.d/mysql restart
Shutting down MySQL..                                      [  OK  ]
Starting MySQL..                                           [  OK  ]
[root@HOME001 mysql]#

innodb_log_file_sizeはInnoDBのログファイルサイズを指定出来ます。
OracleのREDOログやMS SQLのT-Logと同じなのでクラッシュリカバリーでも利用されます。
大きいとログスイッチの頻度やチェックポイント処理を下げる事が出来ますが、
多くのトランザクションログが一つのファイルに含まれて障害発生時にログの破損やリカバリー処理に
時間がかかり困る場合もあるので、パフォーマンスとリカバリーの観点から適切なサイズを選択する必要があります。

innodb_log_file_size
小さい: リカバリー高速だが更新処理が遅くなる。
大きい: 高速だがリカバリーが遅い。ログファイルの破損の注意。

mysql> show variables like '%innodb_log%';
+---------------------------+---------+
| Variable_name             | Value   |
+---------------------------+---------+
| innodb_log_buffer_size    | 8388608 |
| innodb_log_file_size      | 8388608 |
| innodb_log_files_in_group | 2       |
| innodb_log_group_home_dir | ./      |
+---------------------------+---------+
4 rows in set (0.00 sec)

mysql>


安定性からMYSQLコンパイル済みのバイナリーを利用してますが、
コンパイル済みMYSQLのConfigオプションを確認したい場合は以下のファイルを確認。


[root@HOME001 docs]# tail -n 100 /usr/local/mysql/docs/INFO_BIN
===== Information about the build process: =====
Build was run at 2012-12-10 07:35:23 on host 'loki02'

Build was done on  Linux-2.6.9-89.ELsmp using i686
Build was done using cmake 2.8.5

===== Compiler flags used (from the 'sql/' subdirectory): =====
# compile C with /usr/local/gcc-4.3.4/bin/gcc
# compile CXX with /usr/local/gcc-4.3.4/bin/gcc
C_FLAGS =  -fPIC -Wall -O3 -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -DDBUG_OFF -DMY_PTHREAD_FASTMUTEX=1 -I/export/home/pb2/build/sb_0-7814961-1355120555.52/release/include -I/export/home/pb2/build/sb_0-7814961-1355120555.52/mysql-5.5.29/include -I/export/home/pb2/build/sb_0-7814961-1355120555.52/mysql-5.5.29/sql -I/export/home/pb2/build/sb_0-7814961-1355120555.52/mysql-5.5.29/regex -I/export/home/pb2/build/sb_0-7814961-1355120555.52/mysql-5.5.29/zlib -I/export/home/pb2/build/sb_0-7814961-1355120555.52/mysql-5.5.29/extra/yassl/include -I/export/home/pb2/build/sb_0-7814961-1355120555.52/mysql-5.5.29/extra/yassl/taocrypt/include -I/export/home/pb2/build/sb_0-7814961-1355120555.52/release/sql    -DHAVE_YASSL -DYASSL_PURE_C -DYASSL_PREFIX -DHAVE_OPENSSL -DMULTI_THREADED
C_DEFINES = -DHAVE_CONFIG_H -DMYSQL_SERVER -DHAVE_EVENT_SCHEDULER
CXX_FLAGS = -fno-exceptions  -fPIC -Wall -Wno-unused-parameter -fno-implicit-templates -fno-exceptions -fno-rtti -O3 -g -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing -DDBUG_OFF -DMY_PTHREAD_FASTMUTEX=1 -I/export/home/pb2/build/sb_0-7814961-1355120555.52/release/include -I/export/home/pb2/build/sb_0-7814961-1355120555.52/mysql-5.5.29/include -I/export/home/pb2/build/sb_0-7814961-1355120555.52/mysql-5.5.29/sql -I/export/home/pb2/build/sb_0-7814961-1355120555.52/mysql-5.5.29/regex -I/export/home/pb2/build/sb_0-7814961-1355120555.52/mysql-5.5.29/zlib -I/export/home/pb2/build/sb_0-7814961-1355120555.52/mysql-5.5.29/extra/yassl/include -I/export/home/pb2/build/sb_0-7814961-1355120555.52/mysql-5.5.29/extra/yassl/taocrypt/include -I/export/home/pb2/build/sb_0-7814961-1355120555.52/release/sql    -DHAVE_YASSL -DYASSL_PURE_C -DYASSL_PREFIX -DHAVE_OPENSSL -DMULTI_THREADED
CXX_DEFINES = -DHAVE_CONFIG_H -DMYSQL_SERVER -DHAVE_EVENT_SCHEDULER

Pointer size: 4

===== Feature flags used: =====
-- Cache values
CMAKE_BUILD_TYPE:STRING=RelWithDebInfo
CMAKE_INSTALL_PREFIX:PATH=/usr/local/mysql
COMMUNITY_BUILD:BOOL=ON
ENABLED_PROFILING:BOOL=ON
ENABLE_DEBUG_SYNC:BOOL=ON
ENABLE_GCOV:BOOL=OFF
FEATURE_SET:STRING=community
INSTALL_LAYOUT:STRING=STANDALONE
MYSQL_DATADIR:PATH=/usr/local/mysql/data
MYSQL_MAINTAINER_MODE:BOOL=OFF
WITH_ARCHIVE_STORAGE_ENGINE:BOOL=ON
WITH_BLACKHOLE_STORAGE_ENGINE:BOOL=ON
WITH_DEBUG:BOOL=OFF
WITH_EMBEDDED_SERVER:BOOL=ON
WITH_EXAMPLE_STORAGE_ENGINE:BOOL=OFF
WITH_EXTRA_CHARSETS:STRING=all
WITH_FEDERATED_STORAGE_ENGINE:BOOL=ON
WITH_INNOBASE_STORAGE_ENGINE:BOOL=ON
WITH_LIBEDIT:BOOL=OFF
WITH_LIBWRAP:BOOL=OFF
WITH_PARTITION_STORAGE_ENGINE:BOOL=ON
WITH_PERFSCHEMA_STORAGE_ENGINE:BOOL=ON
WITH_PIC:BOOL=ON
WITH_READLINE:BOOL=ON
WITH_SSL:STRING=bundled
WITH_UNIT_TESTS:BOOL=ON
WITH_VALGRIND:BOOL=OFF
WITH_ZLIB:STRING=bundled

===== EOF =====
[root@HOME001 docs]#


参考:
MySQL 5.1のスロークエリログ
MySQL 5.1のmysqldumpslowで快速チューニング
MySQL innodb_flush_method = O_DIRECTの検討
非同期I/Oの謎
初期化パラメータ filesystemio_options の値によってI/Oに関するシステムコールがどのように変化するか
Oracleの同期IOと非同期IOについて

その他パフォーマンス関連調整項目:
MySQL InnoDBストレージエンジンのチューニング(前編)
MySQL InnoDBストレージエンジンのチューニング(後編)

mysql> show variables like '%innodb_io_capacity%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| innodb_io_capacity | 200   |
+--------------------+-------+
1 row in set (0.00 sec)

mysql>


mysql> show variables like '%innodb_doublewrite';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| innodb_doublewrite | ON    |
+--------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%_io_threads';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| innodb_read_io_threads  | 4     |
| innodb_write_io_threads | 4     |
+-------------------------+-------+
2 rows in set (0.00 sec)

mysql>

Swapに関しての確認メモ
以下のようなコマンドで確認する事が出来る。

[root@HOME001 ~]#  /sbin/swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       4161528 0       -1
[root@HOME001 ~]#

[root@HOME001 ~]# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       4161528 0       -1
[root@HOME001 ~]#


[root@HOME001 ~]#  cat /proc/meminfo
MemTotal:        1938948 kB
MemFree:         1679616 kB
Buffers:           10584 kB
Cached:           149116 kB
SwapCached:            0 kB
Active:            55040 kB
Inactive:         140456 kB
Active(anon):      36056 kB
Inactive(anon):        4 kB
Active(file):      18984 kB
Inactive(file):   140452 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:       1189716 kB
HighFree:         995844 kB
LowTotal:         749232 kB
LowFree:          683772 kB
SwapTotal:       4161528 kB
SwapFree:        4161528 kB
Dirty:                 8 kB
Writeback:             0 kB
AnonPages:         35816 kB
Mapped:            13712 kB
Shmem:               264 kB
Slab:              37544 kB
SReclaimable:       7596 kB
SUnreclaim:        29948 kB
KernelStack:        1056 kB
PageTables:         1688 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     5131000 kB
Committed_AS:     341716 kB
VmallocTotal:     122880 kB
VmallocUsed:       13716 kB
VmallocChunk:      90828 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       10232 kB
DirectMap2M:      897024 kB
[root@HOME001 ~]#




[root@HOME001 ~]# free -kt
             total       used       free     shared    buffers     cached
Mem:       1938948     259580    1679368          0      10836     149104
-/+ buffers/cache:      99640    1839308
Swap:      4161528          0    4161528
Total:     6100476     259580    5840896
[root@HOME001 ~]#


[root@HOME001 ~]# free -mt
             total       used       free     shared    buffers     cached
Mem:          1893        253       1640          0         10        145
-/+ buffers/cache:         97       1796
Swap:         4063          0       4063
Total:        5957        253       5704
[root@HOME001 ~]#


[root@HOME001 ~]# df -h /dev/mapper/vg_home001-lv_swap
Filesystem            Size  Used Avail Use% マウント位置
-                     940M  260K  940M   1% /dev
[root@HOME001 ~]# 

[root@HOME001 ~]# vmstat 10 -S M
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0   1639     10    145    0    0    21    10   27   64  0  0 98  1  0
 0  0      0   1639     10    145    0    0     0     0   10   41  0  0 100  0  0




NFS機能確認について
Linuxカーネルが古かったり、ネットワークカードが古いとPCI-ExpressやGB Etherのスループット
を出し切れないとの事でNFSマウントを利用して検証してみようと思いましたが、
なかなかDiscardや再送が発生する処理を出し切れてないので検証出来てません。
とりあえずNFSのレビューだけ取り合えず行いました。

メモ:
LinuxのカーネルがRHEL6などでないと、ネットワーク処理(送受信)が1コアでしか処理できず、
処理しているCPUコアが100%になってしまい処理が遅延してしまうとの事。
新しいLinuxカーネルではTx/Rx Multiqueueが改善されていて、複数のCPUコアを使用してネットワーク
送受信を処理出来るそうです。Linuxカーネルのバージョンによっては、パケットロスが発生するとの事。
CentOSであれば5.7、6以降を利用する方がいいとの事。
net.core.somaxconn(net.core.somaxconnはTCPソケットが受け付けた接続要求を格納するキュー)
などがディフォルトで128なので設定変更して暫定対応する方法も検討しても良いかもしれません。

NFSサービス用基本アプリ確認

[root@HOME001 nfs_dir]# /sbin/chkconfig --list rpcbind
rpcbind         0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@HOME001 nfs_dir]# /sbin/chkconfig --list nfslock
nfslock         0:off   1:off   2:off   3:on    4:on    5:on    6:off
[root@HOME001 nfs_dir]# /sbin/chkconfig --list nfs
nfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@HOME001 nfs_dir]#


[root@HOME001 nfs_dir]# service rpcbind status
rpcbind (pid  1174) を実行中...
[root@HOME001 nfs_dir]#

[root@HOME001 nfs_dir]# service nfslock status
rpc.statd (pid  1192) を実行中...
[root@HOME001 nfs_dir]#

[root@HOME001 nfs_dir]# service nfs status
rpc.svcgssd は停止しています
rpc.mountd (pid 2565) を実行中...
nfsd (pid 2630 2629 2628 2627 2626 2625 2624 2623) を実行中...
rpc.rquotad (pid 2561) を実行中...
[root@HOME001 nfs_dir]#

NFS設定ファイル確認しサービスの有効化

[root@HOME001 nfs_dir]# cat /etc/hosts.allow | grep ALL
ALL : 192.168.11.0/255.255.255.0
[root@HOME001 nfs_dir]# cat /etc/hosts.deny | grep ALL
ALL:ALL
[root@HOME001 nfs_dir]#


[root@HOME001 nfs_dir]# vi /etc/exports
[root@HOME001 home]# cat /etc/exports
/home/nfs_dir 192.168.11.0/255.255.255.0(rw,sync,no_root_squash)
[root@HOME001 nfs_dir]# exportfs -ra
[root@HOME001 nfs_dir]# showmount -e
Export list for HOME001.localdomain:
/home/nfs_dir 192.168.11.0/255.255.255.0
[root@HOME001 nfs_dir]# exportfs -v
/home/nfs_dir   192.168.11.0/255.255.255.0(rw,wdelay,no_root_squash,no_subtree_check)
[root@HOME001 nfs_dir]#
[root@HOME001 home]# cat /proc/fs/nfs/exports
# Version 1.2
# Path Client(Flags) # IPs
/home/nfs_dir   192.168.11.0/255.255.255.0(rw,no_root_squash,sync,wdelay,no_subtree_check,uuid=549fba92:c5d34bdc:ad460fad:a3888c8a)
[root@HOME001 home]#

NFSクライアント側でのマウント

[root@HOME002 home]# mkdir nfs_home001
[root@HOME002 ~]# mount -t nfs -o rw home001:/home/nfs_dir /home/nfs_home001
[root@HOME002 ~]# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/hda2             9.7G  4.6G  4.7G  50% /
/dev/hda1             251M   19M  220M   8% /boot
tmpfs                 125M     0  125M   0% /dev/shm
home001:/home/nfs_dir 4.6G  382M  4.0G   9% /home/nfs_home001
[root@HOME002 ~]#


[root@HOME002 nfs_home001]# hostname
HOME002.localdomain
[root@HOME002 nfs_home001]# pwd
/home/nfs_home001
[root@HOME002 nfs_home001]# touch test_nfs | echo "test for nfs" > test_nfs
[root@HOME002 nfs_home001]# ls -lh
合計 4.0K
-rw-r--r-- 1 root root 13  1月 18 11:46 test_nfs
[root@HOME002 nfs_home001]#

もし再起動しれも継続的に利用する場合はfstabに追記

[root@HOME002 nfs_home001]# cat /etc/fstab
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
sysfs                   /sys                    sysfs   defaults        0 0
LABEL=SWAP-hda3         swap                    swap    defaults        0 0
home001:/home/nfs_dir   /home/nfs_home001       nfs     defaults        0 0
[root@HOME002 nfs_home001]#

nfsmount

その他パフォーマンス確認
64MのファイルをNFSマウント上に作成中にnuttcpで0.1秒毎に確認して再送が発生の有無確認。
クライアントを増やして検証してみる。

dd if=/dev/zero of=/home/nfs_home001/nfs_check_file bs=64K count=1024
[root@HOME002 tools]# ./nuttcp  -v -i0.1 192.168.11.10
nuttcp-t: v7.1.6: socket
nuttcp-t: buflen=65536, nstream=1, port=5101 tcp -> 192.168.11.10
nuttcp-t: time limit = 10.00 seconds
nuttcp-t: connect to 192.168.11.10 with mss=1448, RTT=1.683 ms
nuttcp-t: send window size = 16384, receive window size = 87380
nuttcp-t: available send window = 12288, available receive window = 65535
nuttcp-r: v7.1.6: socket
nuttcp-r: buflen=65536, nstream=1, port=5101 tcp
nuttcp-r: interval reporting every 0.10 seconds
nuttcp-r: accept from 192.168.11.11
nuttcp-r: send window size = 22120, receive window size = 87380
nuttcp-r: available send window = 16590, available receive window = 65535
    0.0625 MB /   0.10 sec =    5.2407 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4874 Mbps     0 retrans
    0.1875 MB /   0.10 sec =   15.7282 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4862 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4856 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4861 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4850 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4862 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4858 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4858 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4858 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4859 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4856 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4859 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2428 Mbps     0 retrans
    0.1875 MB /   0.10 sec =   15.7293 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4851 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4862 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4859 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4854 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4861 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2427 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2429 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2430 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2428 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2427 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2428 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2431 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4854 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4861 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4860 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4859 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4823 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4881 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4857 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4856 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4857 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4837 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4861 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4840 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4858 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4865 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4851 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4861 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4862 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4863 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4860 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4836 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4860 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4864 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4861 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4848 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4839 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4862 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2427 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2430 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2428 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2428 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2429 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2430 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2429 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2425 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2431 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2430 Mbps     0 retrans
    0.0625 MB /   0.10 sec =    5.2424 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4860 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4854 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4866 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
    0.1250 MB /   0.10 sec =   10.4860 Mbps     0 retrans
    0.0000 MB /   0.10 sec =    0.0000 Mbps     0 retrans
nuttcp-t: 7.5625 MB in 10.13 real seconds = 764.50 KB/sec = 6.2628 Mbps
nuttcp-t: retrans = 0
nuttcp-t: 121 I/O calls, msec/call = 85.72, calls/sec = 11.95
nuttcp-t: 0.0user 5.9sys 0:10real 58% 0i+0d 0maxrss 0+5pf 0+417csw

nuttcp-r: 7.5625 MB in 10.13 real seconds = 764.43 KB/sec = 6.2622 Mbps
nuttcp-r: 5566 I/O calls, msec/call = 1.86, calls/sec = 549.43
nuttcp-r: 0.0user 0.1sys 0:10real 1% 0i+0d 324maxrss 0+21pf 5658+47csw
[root@HOME002 tools]#

nfstest

参考:
ネットワーク診断 ( nuttcp )
NFS(Network File System)の概要
NFS Serverとして動かす
net.core.somaxconnについて調べてみた


expire_logs_dayによるログの自動削除

MYSQLのバイナリーログファイルがディスク容量を圧縮してきているので、
バックアップのタイミングと調整してログの定期削除を実施する設定を投入。

設定前

[root@HOME001 data]# ls
DB_REPLICATION           mysql             mysql-bin.000006  mysql-bin.000012  mysql-bin.000018
HOME001.localdomain.err  mysql-bin.000001  mysql-bin.000007  mysql-bin.000013  mysql-bin.000019
HOME001.localdomain.pid  mysql-bin.000002  mysql-bin.000008  mysql-bin.000014  mysql-bin.000020
ib_logfile0              mysql-bin.000003  mysql-bin.000009  mysql-bin.000015  mysql-bin.000021
ib_logfile1              mysql-bin.000004  mysql-bin.000010  mysql-bin.000016  mysql-bin.000022
ibdata1                  mysql-bin.000005  mysql-bin.000011  mysql-bin.000017  mysql-bin.000023
[root@HOME001 data]# 

MYSQLの設定

mysql> SHOW GLOBAL VARIABLES like 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 0     |
+------------------+-------+
1 row in set (0.00 sec)

mysql> 

my.cnfに設定入れて再起動

[root@HOME001 data]# cat /etc/my.cnf | grep expire_logs_days
expire_logs_days = 7
[root@HOME001 data]# /etc/init.d/mysql restart
Shutting down MySQL..                                      [  OK  ]
Starting MySQL..                                           [  OK  ]
[root@HOME001 data]# 

設定投入後
my.cnfに設定を入れて再起動すると既に設定が反映されている。

[root@HOME001 data]# ls
DB_REPLICATION           ibdata1           mysql-bin.000027  mysql-bin.000032
HOME001.localdomain.err  mysql             mysql-bin.000028  mysql-bin.index
HOME001.localdomain.pid  mysql-bin.000024  mysql-bin.000029  performance_schema
ib_logfile0              mysql-bin.000025  mysql-bin.000030  test
ib_logfile1              mysql-bin.000026  mysql-bin.000031
[root@HOME001 data]#
mysql> SHOW GLOBAL VARIABLES like 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 7     |
+------------------+-------+
1 row in set (0.00 sec)

mysql>

log-expire

その他、SQLコマンドでマニュアル削除する方法。(PURGE)

削除前

[root@HOME002 data]# ls -l mysql-bin.*
合計 35136
-rw-rw---- 1 mysql mysql      126  1月 24 16:50 mysql-bin.000001
-rw-rw---- 1 mysql mysql      126  1月 25 14:32 mysql-bin.000002
-rw-rw---- 1 mysql mysql      126  1月 25 15:24 mysql-bin.000003
-rw-rw---- 1 mysql mysql      126  1月 25 15:28 mysql-bin.000004
-rw-rw---- 1 mysql mysql      150  1月 25 18:15 mysql-bin.000005
-rw-rw---- 1 mysql mysql      150  1月 25 18:16 mysql-bin.000006
-rw-rw---- 1 mysql mysql      150  1月 25 18:17 mysql-bin.000007
-rw-rw---- 1 mysql mysql      126  1月 25 18:46 mysql-bin.000008
-rw-rw---- 1 mysql mysql      126  1月 26 18:24 mysql-bin.000009
-rw-rw---- 1 mysql mysql      221  1月 27 12:15 mysql-bin.000010
-rw-rw---- 1 mysql mysql      221  1月 27 16:11 mysql-bin.000011
-rw-rw---- 1 mysql mysql      150  1月 27 16:13 mysql-bin.000012
-rw-rw---- 1 mysql mysql      221  1月 27 16:18 mysql-bin.000013
-rw-rw---- 1 mysql mysql      221  1月 27 17:37 mysql-bin.000014
-rw-rw---- 1 mysql mysql      150  1月 27 17:39 mysql-bin.000015
-rw-rw---- 1 mysql mysql      126  1月 27 17:57 mysql-bin.000016
-rw-rw---- 1 mysql mysql      107  1月 29 12:54 mysql-bin.000017
-rw-rw---- 1 mysql mysql      323  1月 29 12:54 mysql-bin.index
[root@HOME002 data]#

削除コマンド実行
既にバックアップ対象データが取られていれば、古いバイナリーログは不要。


mysql> PURGE MASTER LOGS TO 'mysql-bin.000008';
Query OK, 0 rows affected (0.07 sec)

mysql>

PURGE

コマンド実行後
指定したバイナリーログ以前のファイルが削除されている事を確認。

[root@HOME002 data]# ls -l mysql-bin.*
-rw-rw---- 1 mysql mysql 126  1月 25 18:46 mysql-bin.000008
-rw-rw---- 1 mysql mysql 126  1月 26 18:24 mysql-bin.000009
-rw-rw---- 1 mysql mysql 221  1月 27 12:15 mysql-bin.000010
-rw-rw---- 1 mysql mysql 221  1月 27 16:11 mysql-bin.000011
-rw-rw---- 1 mysql mysql 150  1月 27 16:13 mysql-bin.000012
-rw-rw---- 1 mysql mysql 221  1月 27 16:18 mysql-bin.000013
-rw-rw---- 1 mysql mysql 221  1月 27 17:37 mysql-bin.000014
-rw-rw---- 1 mysql mysql 150  1月 27 17:39 mysql-bin.000015
-rw-rw---- 1 mysql mysql 126  1月 27 17:57 mysql-bin.000016
-rw-rw---- 1 mysql mysql 107  1月 29 12:54 mysql-bin.000017
-rw-rw---- 1 mysql mysql 190  1月 29 13:27 mysql-bin.index
[root@HOME002 data]#


MYSQL Semi-Sync Replicationについて

Semi-Synchronous Replicationは、マスターでコミットされた処理がスレーブにも送信されて
スレーブにデータが送信されて受け取った事を確認してからAckをマスターに返して初めて、
処理が確定されます。なので以下の1の処理が完了しているので、マスターDBが破損してもデータの
損失を最小限に留める事が出来ます。
——————————————
 1. I/Oスレッド(スレーブバイナリーログ受信)
 2. SQLスレッド(スレーブにてバイナリーログを読み込んで実行)
——————————————
但し、Ackが発生するのはマスターとスレーブのログに書き込んでからなので
当然CPU、メモリー、ディスク、ネットワークが遅いとユーザーに返すレスポンスは極端に遅くなります。
特にFusion-IOやSSDを用いてディスクの遅延が無い環境ではネットワーク遅延が原因で、
DB処理が遅くなりユーザーへのレスポンスも極端に遅くなるので実装する時は十分な確認が必要です。

以前、オラクルを稼動させた外部ディスクにてのディスクのSync機能を利用して
遠隔地とDark Fiberを利用してディスクのMirrorをした時は、
オラクル処理の遅延を懸念して、データ、REDOログのディスクはA-SYNCにして非同期で同期して、
Archiveログで利用しているディスクだけSync設定にしてデータ保護していました。
障害発生時のシュミレーションではテーブルスペースに前日同期したテーブルスペースに、
同期してあるArchiveログを適用したら問題無く起動する事が出来ました。
RedoやControlファイルが壊れている場合は再作成で対応。

マスターDBにプラグインをインストール

mysql> select @@version;
+------------+
| @@version  |
+------------+
| 5.5.29-log |
+------------+
1 row in set (0.00 sec)

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.35 sec)

mysql> show variables like '%semi%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | OFF   |
| rpl_semi_sync_master_timeout       | 10000 |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+
4 rows in set (0.00 sec)

mysql> show variables like 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
+--------------------------------+-------+
1 row in set (0.00 sec)

mysql>

スレーブにプラグインのインストール

mysql> select @@version;
+------------+
| @@version  |
+------------+
| 5.5.29-log |
+------------+
1 row in set (0.00 sec)

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.10 sec)

mysql> show variables like '%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.00 sec)

mysql>

install_plugin

設定を有効にしてみる。
オンラインで実行可能なので、SETコマンドで有効にした後に動作確認し、
次回再起動時に有効にする為にmy.cnfに設定を追加。

スレーブ側で念の為、既存のレプリケーションを停止しておいた。
既存のレプリケーション設定があったので念の為。

mysql> stop slave;
Query OK, 0 rows affected (0.08 sec)

mysql>

マスター側でsemi_syncの設定、タイムアウト値を変更して有効にする。
合わせてmy.cnf側も変更しておく。(次の再起動に備えて)

mysql> show variables like '%semi%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | OFF   |
| rpl_semi_sync_master_timeout       | 10000 |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+
4 rows in set (0.00 sec)

mysql> set GLOBAL rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)

mysql> set GLOBAL rpl_semi_sync_master_timeout=5;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%semi%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | ON    |
| rpl_semi_sync_master_timeout       | 5     |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+
4 rows in set (0.00 sec)

mysql>

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000029 |      107 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql>

マスター側で次回回帰同時の為に、semi_syncの設定を入れておく。

[root@HOME001 ~]# vi /etc/my.cnf
[root@HOME001 ~]# cat /etc/my.cnf | grep rpl_semi
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=5
[root@HOME001 ~]#

スレーブ側でSETコマンドで設定を有効にしてmy.cnfにも追加しておく。

mysql> show variables like '%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.00 sec)

mysql>  show variables like 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1     |
+--------------------------------+-------+
1 row in set (0.00 sec)

mysql> set GLOBAL rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.01 sec)

mysql> show variables like '%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.00 sec)

mysql>

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State:
                  Master_Host: HOME001
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000029
          Read_Master_Log_Pos: 107
               Relay_Log_File: relay-bin.000035
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000029
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB:
          Replicate_Ignore_DB: mysql,performance_schema
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 107
              Relay_Log_Space: 549
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
1 row in set (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql>

次回再起動時の為にスレーブのmy.cnfを変更

[root@HOME002 ~]# vi /etc/my.cnf
[root@HOME002 ~]# cat /etc/my.cnf | grep rpl
rpl_semi_sync_slave_enabled=1
[root@HOME002 ~]#

基本動作確認(データ同期)
同期は問題無いが、シンプルなInsertに若干時間がかかっているような気がする。
マスター、スレーブのI/OスレッドAck待ちの影響?
semi-sync

レプリケーションポジション確認
master

マスター書き込みとRelayログの更新時間確認
マスターDBにinsertと同時にスレーブ側のログ時間も更新されている事を確認。
log_time

レプリケーション障害発生時の留意点:
もしレプリケーションを構築していて、スレーブが破損してしまい
マスターからデータを持ってきてレプリケーションを再構築する場合には以下留意。
①マスターからDBコピー
②スレーブのmy.cnfにて(rpl_semi_sync_slave_enabled)をコメントアウト。
③①で展開したデータフォルダーを利用してMYSQLの再開
④以下のコマンドでスレーブ用に設定を変更する。

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.12 sec)
mysql> uninstall PLUGIN rpl_semi_sync_master;
Query OK, 0 rows affected (0.02 sec)

⑤CHANGE MASTER TOコマンドでスレーブを設定。
⑥②でコメントアウトした箇所のコメントを外す。
⑦MYSQLを再起動してshow slave status \Gで確認。

その他参考:遅延レプリケーション(MASTER_DELAY)
5.6からはMASTER_DELAYでレプリケーションを意図的に遅延させる事が出来るそうなので、
オペミスしたら直ぐに最新のデータを戻す為の用途などに利用出来そうです。

遅延が無い場合は、以下の遅延状況は0秒になっていて良いのですがもしオペミスでデータ破損してしまった場合は、
即時ミスも反映されてしまうので、バックアップ専用スレーブDBなどには遅延を入れて運用すると良いかもしれません。

通常

[root@HOME002 ~]# mysql -u root -ppassword -e "show slave status\G" | grep "Seconds_Behind_Master"
        Seconds_Behind_Master: 0
[root@HOME002 ~]#

設定方法

CHANGE MASTER TO MASTER_DELAY = N;

運用ケース

To protect against user mistakes on the master. A DBA can roll back a delayed slave to the time just before the disaster.

To test how the system behaves when there is a lag. For example, in an application, a lag might be caused by a heavy load on the slave. However, it can be difficult to generate this load level. Delayed replication can simulate the lag without having to simulate the load. It can also be used to debug conditions related to a lagging slave.

To inspect what the database looked like long ago, without having to reload a backup. For example, if the delay is one week and the DBA needs to see what the database looked like before the last few days’ worth of development, the delayed slave can be inspected.

16.3.9. Delayed Replication
MySQL 5.6.0-m4登場

参考

Semi-Synchronous Replication用プラグインをインストールする。
最強のMySQL HA化手法 – Semi-Synchronous Replication
MySQL5.5 Semisynchronous Replicationを試してみる ~構築編
MySQL 5.5 GA版が出たのでSemisynchronous Replicationを使ってみた
MySQL 準同期レプリケーション(Semisynchronous Replication)設定メモ
MySQLにおけるレプリケーション遅延の傾向と対策
http://www.day32.com/MySQL/
UNINSTALL PLUGIN 構文


rsyncをcronで定期的に実行して、サーバー間のファイル同期する方法でも問題ないが、
ファイル送信元のデータが変更されたら出来るだけ迅速に送信先にもデータが同期されるように
しておきたい場合はGoogleからダウンロード出来るlsyncdを利用してファイル同期するという
選択肢があっても良いかもしれません。

CRONで直接rsyncを実行する場合の例)

rsync -av /home/sync_user/lsync/ sync_user@home002:/home/sync_user/lsync/

システム環境
|– HOME001:/home/sync_user/lsync/ (同期元)
      |– lsyncd_test002:/home/sync_user/lsync/(同期先)

[root@HOME001 sync_user]# uname -r
2.6.32-279.el6.i686
[root@HOME001 sync_user]#

[root@HOME002 lsync]# uname -r
2.6.18-53.1.21.el5
[root@HOME002 lsync]#

同期:ユーザーsync_user

———————————————-

ファイル同期先サーバーでrsync設定
1) rsyncd.conf作成 2) xinetdをインストールしrsyncを自動起動設定

[root@HOME002 sync_user]# vi /etc/rsyncd.conf
[root@HOME002 sync_user]# cat /etc/rsyncd.conf
[sync_user]
    path = /home/sync_user/lsync
    hosts allow = 192.168.11.0/24
    read only = false
[root@HOME002 sync_user]#

[root@HOME002 sync_user]# rpm -qi xinetd
パッケージ xinetd はインストールされていません。
[root@HOME002 sync_user]# yum -y install xinetd
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for xinetd to pack into transaction set.
xinetd-2.3.14-16.el5.i386 100% |=========================| 8.9 kB    00:00
---> Package xinetd.i386 2:2.3.14-16.el5 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 xinetd                  i386       2:2.3.14-16.el5  base              126 k

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 126 k
Downloading Packages:
(1/1): xinetd-2.3.14-16.e 100% |=========================| 126 kB    00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: xinetd                       ######################### [1/1]

Installed: xinetd.i386 2:2.3.14-16.el5
Complete!
[root@HOME002 sync_user]#
[root@HOME002 sync_user]# /etc/rc.d/init.d/xinetd start
xinetd を起動中:                                           [  OK  ]
[root@HOME002 sync_user]# /sbin/chkconfig xinetd on
[root@HOME002 sync_user]# /sbin/chkconfig --list xinetd
xinetd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@HOME002 sync_user]# rpm -qi xinetd
Name        : xinetd                       Relocations: (not relocatable)
Version     : 2.3.14                            Vendor: CentOS
Release     : 16.el5                        Build Date: 2012年02月23日 01時49分52秒
Install Date: 2013年01月07日 14時41分23秒      Build Host: builder10.centos.org
Group       : System Environment/Daemons    Source RPM: xinetd-2.3.14-16.el5.src.rpm
Size        : 263015                           License: xinetd
Signature   : DSA/SHA1, 2012年02月23日 03時54分46秒, Key ID a8a447dce8562897
URL         : http://www.xinetd.org
Summary     : Inetd に代わる安全なデーモン
Description :
インターネットサービスデーモン inetd の代わりに Xinetd を使用しても安全
です。Xinetd はリモートホストのアドレスやアクセスの時刻に基づいてすべ
てのサービスに対するアクセス制御を行います。またアクセス拒否型攻撃を防
御することができます。Xinetd は、豊富なロギング機能を提供
します。サーバー引数の数に制限がなくホストマシン上の特定サービスと特定
IP アドレスをバインドすることができます。各サービスは各々独自の設定
ファイルを持ち、それらは /etc/xinetd.d ディレクトリに置かれます。
[root@HOME002 sync_user]#
[root@HOME002 sync_user]# /sbin/chkconfig rsync on
[root@HOME002 sync_user]# /sbin/chkconfig --list rsync
rsync           on
[root@HOME002 sync_user]#

xinetd

ファイル同期元のサーバーにlsyncdをインストールする為に必要なパッケージインストール
事前インストール:libxml2-devel、lua-devel、lua-static、asciidoc

[root@HOME001 sync_user]# yum -y install libxml2-devel lua-devel lua-static
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
base                                                                               | 3.7 kB     00:00
extras                                                                             | 3.5 kB     00:00
updates                                                                            | 3.5 kB     00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package libxml2-devel.i686 0:2.7.6-8.el6_3.4 will be installed
--> Processing Dependency: libxml2 = 2.7.6-8.el6_3.4 for package: libxml2-devel-2.7.6-8.el6_3.4.i686
---> Package lua-devel.i686 0:5.1.4-4.1.el6 will be installed
---> Package lua-static.i686 0:5.1.4-4.1.el6 will be installed
--> Running transaction check
---> Package libxml2.i686 0:2.7.6-4.el6_2.4 will be updated
--> Processing Dependency: libxml2 = 2.7.6-4.el6_2.4 for package: libxml2-python-2.7.6-4.el6_2.4.i686
---> Package libxml2.i686 0:2.7.6-8.el6_3.4 will be an update
--> Running transaction check
---> Package libxml2-python.i686 0:2.7.6-4.el6_2.4 will be updated
---> Package libxml2-python.i686 0:2.7.6-8.el6_3.4 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================================================
 Package                       Arch                Version                         Repository              Size
================================================================================================================
Installing:
 libxml2-devel                 i686                2.7.6-8.el6_3.4                 updates                1.1 M
 lua-devel                     i686                5.1.4-4.1.el6                   base                    20 k
 lua-static                    i686                5.1.4-4.1.el6                   base                    89 k
Updating for dependencies:
 libxml2                       i686                2.7.6-8.el6_3.4                 updates                800 k
 libxml2-python                i686                2.7.6-8.el6_3.4                 updates                314 k

Transaction Summary
================================================================================================================
Install       3 Package(s)
Upgrade       2 Package(s)

Total download size: 2.3 M
Downloading Packages:
(1/5): libxml2-2.7.6-8.el6_3.4.i686.rpm                                                  | 800 kB     00:00
(2/5): libxml2-devel-2.7.6-8.el6_3.4.i686.rpm                                            | 1.1 MB     00:00
(3/5): libxml2-python-2.7.6-8.el6_3.4.i686.rpm                                           | 314 kB     00:00
(4/5): lua-devel-5.1.4-4.1.el6.i686.rpm                                                  |  20 kB     00:00
(5/5): lua-static-5.1.4-4.1.el6.i686.rpm                                                 |  89 kB     00:00
----------------------------------------------------------------------------------------------------------------
Total                                                                           2.0 MB/s | 2.3 MB     00:01
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : lua-devel-5.1.4-4.1.el6.i686                                                                 1/7
  Installing : lua-static-5.1.4-4.1.el6.i686                                                                2/7
  Updating   : libxml2-2.7.6-8.el6_3.4.i686                                                                 3/7
  Installing : libxml2-devel-2.7.6-8.el6_3.4.i686                                                           4/7
  Updating   : libxml2-python-2.7.6-8.el6_3.4.i686                                                          5/7
  Cleanup    : libxml2-python-2.7.6-4.el6_2.4.i686                                                          6/7
  Cleanup    : libxml2-2.7.6-4.el6_2.4.i686                                                                 7/7
  Verifying  : libxml2-python-2.7.6-8.el6_3.4.i686                                                          1/7
  Verifying  : libxml2-devel-2.7.6-8.el6_3.4.i686                                                           2/7
  Verifying  : lua-static-5.1.4-4.1.el6.i686                                                                3/7
  Verifying  : libxml2-2.7.6-8.el6_3.4.i686                                                                 4/7
  Verifying  : lua-devel-5.1.4-4.1.el6.i686                                                                 5/7
  Verifying  : libxml2-python-2.7.6-4.el6_2.4.i686                                                          6/7
  Verifying  : libxml2-2.7.6-4.el6_2.4.i686                                                                 7/7

Installed:
  libxml2-devel.i686 0:2.7.6-8.el6_3.4    lua-devel.i686 0:5.1.4-4.1.el6    lua-static.i686 0:5.1.4-4.1.el6

Dependency Updated:
  libxml2.i686 0:2.7.6-8.el6_3.4                      libxml2-python.i686 0:2.7.6-8.el6_3.4

Complete!
[root@HOME001 sync_user]#

[root@HOME001 lsyncd-2.1.4]# yum install asciidoc
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package asciidoc.noarch 0:8.4.5-4.1.el6 will be installed
--> Processing Dependency: docbook-style-xsl for package: asciidoc-8.4.5-4.1.el6.noarch
--> Running transaction check
---> Package docbook-style-xsl.noarch 0:1.75.2-6.el6 will be installed
--> Processing Dependency: docbook-dtd-xml for package: docbook-style-xsl-1.75.2-6.el6.noarch
--> Running transaction check
---> Package docbook-dtds.noarch 0:1.0-51.el6 will be installed
--> Processing Dependency: sgml-common >= 0.6.3-4 for package: docbook-dtds-1.0-51.el6.noarch
--> Running transaction check
---> Package sgml-common.noarch 0:0.6.3-32.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=========================================================================================================================
 Package                            Arch                    Version                          Repository             Size
=========================================================================================================================
Installing:
 asciidoc                           noarch                  8.4.5-4.1.el6                    base                  183 k
Installing for dependencies:
 docbook-dtds                       noarch                  1.0-51.el6                       base                  274 k
 docbook-style-xsl                  noarch                  1.75.2-6.el6                     base                  2.6 M
 sgml-common                        noarch                  0.6.3-32.el6                     base                   43 k

Transaction Summary
=========================================================================================================================
Install       4 Package(s)

Total download size: 3.1 M
Installed size: 20 M
Is this ok [y/N]: y
Downloading Packages:
(1/4): asciidoc-8.4.5-4.1.el6.noarch.rpm                                                          | 183 kB     00:00
(2/4): docbook-dtds-1.0-51.el6.noarch.rpm                                                         | 274 kB     00:00
(3/4): docbook-style-xsl-1.75.2-6.el6.noarch.rpm                                                  | 2.6 MB     00:00
(4/4): sgml-common-0.6.3-32.el6.noarch.rpm                                                        |  43 kB     00:00
-------------------------------------------------------------------------------------------------------------------------
Total                                                                                    3.8 MB/s | 3.1 MB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : sgml-common-0.6.3-32.el6.noarch                                                                       1/4
  Installing : docbook-dtds-1.0-51.el6.noarch                                                                        2/4
  Installing : docbook-style-xsl-1.75.2-6.el6.noarch                                                                 3/4
  Installing : asciidoc-8.4.5-4.1.el6.noarch                                                                                       4/4
  Verifying  : docbook-style-xsl-1.75.2-6.el6.noarch                                                                               1/4
  Verifying  : asciidoc-8.4.5-4.1.el6.noarch                                                                                       2/4
  Verifying  : sgml-common-0.6.3-32.el6.noarch                                                                                     3/4
  Verifying  : docbook-dtds-1.0-51.el6.noarch                                                                                      4/4

Installed:
  asciidoc.noarch 0:8.4.5-4.1.el6

Dependency Installed:
  docbook-dtds.noarch 0:1.0-51.el6          docbook-style-xsl.noarch 0:1.75.2-6.el6          sgml-common.noarch 0:0.6.3-32.el6

Complete!
[root@HOME001 lsyncd-2.1.4]#

同期元サーバーにてlsyncdダウンロードとインストール

[root@HOME001 sync_user]# wget http://lsyncd.googlecode.com/files/lsyncd-2.1.4.tar.gz
--2013-01-07 14:45:25--  http://lsyncd.googlecode.com/files/lsyncd-2.1.4.tar.gz
lsyncd.googlecode.com をDNSに問いあわせています... 74.125.31.82, 2404:6800:4008:c00::52
lsyncd.googlecode.com|74.125.31.82|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 150852 (147K) [application/x-gzip]
`lsyncd-2.1.4.tar.gz' に保存中

100%[===============================================================================>] 150,852      222K/s 時間 0.7s

2013-01-07 14:45:26 (222 KB/s) - `lsyncd-2.1.4.tar.gz' へ保存完了 [150852/150852]

[root@HOME001 sync_user]#

[root@HOME001 sync_user]# tar zxvf lsyncd-2.1.4.tar.gz
lsyncd-2.1.4/
lsyncd-2.1.4/default-rsyncssh.lua
lsyncd-2.1.4/COPYING
lsyncd-2.1.4/doc/
lsyncd-2.1.4/doc/lsyncd.1.txt
lsyncd-2.1.4/doc/lsyncd.1
lsyncd-2.1.4/Makefile.am
lsyncd-2.1.4/default-direct.lua
lsyncd-2.1.4/config.h.in
lsyncd-2.1.4/m4/
lsyncd-2.1.4/m4/ax_subst_l.m4
省略...
lsyncd-2.1.4/examples/limagemagic.lua
lsyncd-2.1.4/examples/lrsync.lua
lsyncd-2.1.4/examples/lrsyncssh.lua
lsyncd-2.1.4/examples/lbash.lua
lsyncd-2.1.4/examples/lgforce.lua
[root@HOME001 sync_user]#

[root@HOME001 lsyncd-2.1.4]# ./configure && make && make install
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...

省略...
make[1]: ディレクトリ `/home/sync_user/lsyncd-2.1.4' から出ます
make[1]: ディレクトリ `/home/sync_user/lsyncd-2.1.4' に入ります
 /bin/mkdir -p '/usr/local/bin'
  /usr/bin/install -c lsyncd '/usr/local/bin'
 /bin/mkdir -p '/usr/local/share/doc/lsyncd/'
 /usr/bin/install -c -m 644 examples/lbash.lua examples/lecho.lua examples/lgforce.lua examples/limagemagic.lxamples/lrsync.lua examples/lrsyncssh.lua '/usr/local/share/doc/lsyncd/'
 /bin/mkdir -p '/usr/local/share/man/man1'
 /usr/bin/install -c -m 644 doc/lsyncd.1 '/usr/local/share/man/man1'
make[1]: ディレクトリ `/home/sync_user/lsyncd-2.1.4' から出ます
[root@HOME001 lsyncd-2.1.4]#

[root@HOME001 lsyncd-2.1.4]# cp examples/lrsync.lua /etc/lsyncd.conf
[root@HOME001 lsyncd-2.1.4]# vi /etc/lsyncd.conf
[root@HOME001 sync_user]# cat /etc/lsyncd.conf
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings  {
        statusFile = "/tmp/lsyncd.stat",
        statusInterval = 1,
        logfile="/var/log/lsyncd.log",
}

sync {
        default.rsync,
        source="/home/sync_user/lsync/",
        target="HOME002:/home/sync_user/lsync/",
--      rsyncOps={"-rv",},
--      rsyncOps={"-ltus",},
--      exclude = "/home/sync_user/lsync/nonsync/"
        exclude={"/nonsync/"},
}

[root@HOME001 sync_user]#

ファイル同期をパスワード入力無しで行う為の設定
ーファイル送信元で作成して送信先の.sshにキーをコピーしておく。
ー同期をsync_userにて行う為に鍵をsync_userになって作成する。

[root@HOME001 sync_user]# su - sync_user
[sync_user@HOME001 ~]$ pwd
/home/sync_user
[sync_user@HOME001 ~]$ ls -l
合計 156
drwxr-xr-x. 2 sync_user sync_user   4096  1月  7 14:23 2013 lsync
drwxr-xr-x. 6 mysql     mysql       4096  1月  7 14:59 2013 lsyncd-2.1.4
-rw-r--r--. 1 root      root      150852 11月 24 22:47 2012 lsyncd-2.1.4.tar.gz
[sync_user@HOME001 ~]$ ssh-keygen -t rsa -N ""
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sync_user/.ssh/id_rsa):
Created directory '/home/sync_user/.ssh'.
Your identification has been saved in /home/sync_user/.ssh/id_rsa.
Your public key has been saved in /home/sync_user/.ssh/id_rsa.pub.
The key fingerprint is:
41:02:9d:2a:2b:1b:f6:d5:07:ab:35:64:bf:02:ad:58 sync_user@HOME001.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
|    .o...        |
|      oo         |
|     .  .        |
|  . .  + .       |
|.+. + = o .      |
|.  o o . .       |
|        .        |
+-----------------+
[sync_user@HOME001 ~]$
[sync_user@HOME001 ~]$ scp .ssh/id_rsa.pub home002:/home/sync_user/.ssh/authorized_keys
sync_user@home002's password:
id_rsa.pub                                                    100%  411     0.4KB/s   00:
[sync_user@HOME001 ~]$

起動するスクリプトの設定

[root@HOME001 sync_user]# vi /etc/rc.d/init.d/lsyncd
[root@HOME001 sync_user]# cat /etc/init.d/lsyncd
#!/bin/bash
#
# lsyncd
#
# chkconfig: - 99 20
# description: lsyncd auto start script

start() {
    /usr/local/bin/lsyncd /etc/lsyncd.conf
}

stop() {
    /bin/kill -9 `/sbin/pidof lsyncd`
    until [ -z $(/sbin/pidof lsyncd) ]; do :; done
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        pid=`pidof lsyncd`
        if [ $? -eq 0 ]; then
            echo "lsyncd (pid $pid) is running..."
        else
            echo "lsyncd is not running"
        fi
        ;;
    *)
        echo "Usage: lsyncd {start|stop|restart|status}"
        exit 1
esac

exit $?

[root@HOME001 sync_user]# chmod 755 /etc/init.d/lsyncd

[root@HOME001 local]# /sbin/chkconfig lsyncd on
[root@HOME001 local]# /sbin/chkconfig --list lsyncd
lsyncd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@HOME001 local]# 

chkconfig
chkconfig

サービス起動確認
start

基本ファイル同期動作確認
送信元、送信先、送信ログ
lsync_confirmation

追加検証(追加、削除)

-- 送信元にてファイル作成と削除
[root@HOME001 sync_user]# ls -l /home/sync_user/lsync/
合計 8
-rw-r--r--. 1 sync_user sync_user 3300  1月  7 16:12 2013 lsyncd.log
-rw-rw-r--. 1 sync_user sync_user    0  1月  8 15:04 2013 lsyncd_test001
-rw-rw-r--. 1 sync_user sync_user    0  1月  8 15:04 2013 lsyncd_test002
-rw-r--r--. 1 root      root         0  1月  8 16:43 2013 lsyncd_test003
drwxrwxr-x. 2 sync_user sync_user 4096  1月  8 15:20 2013 nonsync
[root@HOME001 sync_user]# touch /home/sync_user/lsync/lsyncd_test004
[root@HOME001 sync_user]# touch /home/sync_user/lsync/lsyncd_test005
[root@HOME001 sync_user]# touch /home/sync_user/lsync/lsyncd_test006
[root@HOME001 sync_user]# touch /home/sync_user/lsync/lsyncd_test007
[root@HOME001 sync_user]# touch /home/sync_user/lsync/lsyncd_test008
[root@HOME001 sync_user]# touch /home/sync_user/lsync/lsyncd_test009
[root@HOME001 sync_user]# touch /home/sync_user/lsync/lsyncd_test010
[root@HOME001 sync_user]# rm /home/sync_user/lsync/lsyncd_test001
rm: remove 通常の空ファイル `/home/sync_user/lsync/lsyncd_test001'? y
[root@HOME001 sync_user]# rm /home/sync_user/lsync/lsyncd_test002
rm: remove 通常の空ファイル `/home/sync_user/lsync/lsyncd_test002'? y
[root@HOME001 sync_user]# rm /home/sync_user/lsync/lsyncd_test003
rm: remove 通常の空ファイル `/home/sync_user/lsync/lsyncd_test003'? y
[root@HOME001 sync_user]#

---- ログ
Tue Jan  8 16:43:41 2013 Normal: Calling rsync with filter-list of new/modified files/dirs
/lsyncd_test003
Tue Jan  8 16:43:41 2013 Normal: Finished a list after exitcode: 0
Tue Jan  8 16:44:06 2013 Normal: Calling rsync with filter-list of new/modified files/dirs
/lsyncd_test004
/lsyncd_test005
Tue Jan  8 16:44:07 2013 Normal: Finished a list after exitcode: 0
Tue Jan  8 16:44:45 2013 Normal: Calling rsync with filter-list of new/modified files/dirs
/lsyncd_test006
/lsyncd_test007
/lsyncd_test008
/lsyncd_test009
/lsyncd_test010
Tue Jan  8 16:44:46 2013 Normal: Finished a list after exitcode: 0
Tue Jan  8 16:45:42 2013 Normal: Calling rsync with filter-list of new/modified files/dirs
/lsyncd_test001
/lsyncd_test002
/lsyncd_test003
Tue Jan  8 16:45:43 2013 Normal: Finished a list after exitcode: 0

---- 同期先にファイルが同期(追加・削除)が反映されている事を確認。

[root@HOME002 sync_user]# ls -l /home/sync_user/lsync/
合計 36
-rw-r--r-- 1 sync_user sync_user 3300  1月  7 16:12 lsyncd.log
-rw-r--r-- 1 root      root         0  1月  8 15:04 lsyncd_test001
-rw-r--r-- 1 root      root         0  1月  8 15:04 lsyncd_test002
-rw-r--r-- 1 root      root         0  1月  8 16:43 lsyncd_test003
-rw-r--r-- 1 root      root         0  1月  8 16:43 lsyncd_test004
-rw-r--r-- 1 root      root         0  1月  8 16:43 lsyncd_test005
drwxr-xr-x 2 root      root      4096  1月  8 15:20 nonsync
[root@HOME002 sync_user]# ls -l /home/sync_user/lsync/
合計 44
-rw-r--r-- 1 sync_user sync_user 3300  1月  7 16:12 lsyncd.log
-rw-r--r-- 1 root      root         0  1月  8 16:43 lsyncd_test004
-rw-r--r-- 1 root      root         0  1月  8 16:43 lsyncd_test005
-rw-r--r-- 1 root      root         0  1月  8 16:44 lsyncd_test006
-rw-r--r-- 1 root      root         0  1月  8 16:44 lsyncd_test007
-rw-r--r-- 1 root      root         0  1月  8 16:44 lsyncd_test008
-rw-r--r-- 1 root      root         0  1月  8 16:44 lsyncd_test009
-rw-r--r-- 1 root      root         0  1月  8 16:44 lsyncd_test010
drwxr-xr-x 2 root      root      4096  1月  8 15:20 nonsync
[root@HOME002 sync_user]#

Excludeの設定有効性確認

-----lsyncd.conf
[root@HOME001 lsync]# cat /etc/lsyncd.conf
settings  {
        statusFile = "/tmp/lsyncd.stat",
        statusInterval = 1,
        logfile="/var/log/lsyncd.log",
}

sync {
        default.rsync,
        source="/home/sync_user/lsync/",
        target="HOME002:/home/sync_user/lsync/",
        exclude={"/nonsync/"},
}

[root@HOME001 lsync]#

-----実行コマンド
[root@HOME001 lsync]#dd if=/dev/zero of=/home/sync_user/lsync/should-be bs=1M count=10
[root@HOME001 lsync]#dd if=/dev/zero of=/home/sync_user/lsync/nonsync/should-not-be bs=1M count=10

-----ファイル確認 (HOME001: 同期元)
[root@HOME001 lsync]# ls -lh
合計 11M
drwxrwxr-x. 2 sync_user sync_user 4.0K  1月  9 15:08 2013 nonsync
-rw-r--r--. 1 root      root       10M  1月  9 15:08 2013 should-be
[root@HOME001 lsync]# ls -lh nonsync/
合計 10M
-rw-r--r--. 1 root root 10M  1月  9 15:08 2013 should-not-be
[root@HOME001 lsync]#

-----ファイル確認(HOME001: 同期先)
[root@HOME002 lsync]# ls -lh
合計 11M
drwxr-xr-x 2 root root 4.0K  1月  9 14:48 nonsync
-rw-r--r-- 1 root root  10M  1月  9 15:08 should-be
[root@HOME002 lsync]# ls -lh nonsync/
合計 0
[root@HOME002 lsync]#

exclude

設定メモ:
バージョンが異なるrsyncが共存するとエラーになってしまったので、
送信元と送信先のrsyncのバージョンを合わせました。

エラー

rsync: on remote machine: -sltre.iLs: unknown option
rsync error: syntax or usage error (code 1) at main.c(1231) [server=2.6.8]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]

log_confirmation

エラーが発生したバージョン

[root@HOME001 ~]# rsync --version
rsync  version 3.0.6  protocol version 30
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.
[root@HOME001 ~]#


[root@HOME002 .ssh]# rsync --version
rsync  version 2.6.8  protocol version 29
Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.
<http://rsync.samba.org/>
Capabilities: 64-bit files, socketpairs, hard links, ACLs, xattrs, symlinks, batchfiles,
              inplace, IPv6, 64-bit system inums, 64-bit internal inums

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.
[root@HOME002 .ssh]#

送信元と同じバージョンのrsyncをダウンロードし送信先にインストール

[root@HOME002 sync_user]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.6.tar.gz
--16:28:00--  http://rsync.samba.org/ftp/rsync/src/rsync-3.0.6.tar.gz
rsync.samba.org をDNSに問いあわせています... 216.83.154.106, 2001:470:1f05:1a07::1
rsync.samba.org|216.83.154.106|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 778927 (761K) [application/x-gzip]
Saving to: `rsync-3.0.6.tar.gz'

100%[===============================================================================================================================>] 778,927     81.0K/s   in 9.4s

16:28:10 (80.9 KB/s) - `rsync-3.0.6.tar.gz' を保存しました [778927/778927]

[root@HOME002 sync_user]#

[root@HOME002 rsync-3.0.6]# ./configure
configure.sh: Configuring rsync 3.0.6
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking whether to include debugging symbols... yes
checking for gcc... gcc
省略...
config.status: creating popt/dummy
config.status: creating shconfig
config.status: creating config.h

    rsync 3.0.6 configuration successful

[root@HOME002 rsync-3.0.6]# make
gcc -std=gnu99 -I. -I. -g -O2 -DHAVE_CONFIG_H -Wall -W  -c flist.c -o flist.o
gcc -std=gnu99 -I. -I. -g -O2 -DHAVE_CONFIG_H -Wall -W  -c rsync.c -o rsync.o
gcc -std=gnu99 -I. -I. -g -O2 -DHAVE_CONFIG_H -Wall -W  -c generator.c -o generator.o
省略...
rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.
[root@HOME002 rsync-3.0.6]# make install
mkdir -p /usr/local/bin
/usr/bin/install -c  -m 755 rsync /usr/local/bin
mkdir -p /usr/local/share/man/man1
mkdir -p /usr/local/share/man/man5
if test -f rsync.1; then /usr/bin/install -c -m 644 rsync.1 /usr/local/share/man/man1; fi
if test -f rsyncd.conf.5; then /usr/bin/install -c -m 644 rsyncd.conf.5 /usr/local/share/man/man5; fi
[root@HOME002 rsync-3.0.6]# /usr/local/bin/rsync --version
rsync  version 3.0.6  protocol version 30
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, no symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.
[root@HOME002 rsync-3.0.6]#

rsyncのアップグレード後にエラーログが消えた事とファイル同期された事を確認。

参考:

rsync
Lsyncd – Live Syncing (Mirror) Daemon
xinetd のセットアップ
lsyncdでリアルタイムrsync
リアルタイムミラーリングツール導入(lsyncd+rsyncd)
lsyncd を使ったファイルのミラーリング・バックアップ


ディスクとメモリーへの書き込み速度確認
ddコマンドで128Mのブロックサイズを2回書き込んだ速度確認

ディスク: real 0m7.087s
メモリー: real 0m0.788s
約9倍の書き込み速度の違いが見られる。

ファイルシステムへの書き込み速度

[root@HOME001 local]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_home001-lv_root
                       47G  2.5G   42G   6% /
tmpfs                 947M     0  947M   0% /dev/shm
/dev/sda1             485M   36M  424M   8% /boot
/dev/mapper/vg_home001-lv_home
                      4.6G  322M  4.0G   8% /home
[root@HOME001 local]# time dd if=/dev/zero of=/usr/local/tmp/tmpfs bs=128M count=2
2+0 records in
2+0 records out
268435456 bytes (268 MB) copied, 7.06478 s, 38.0 MB/s

real    0m7.087s
user    0m0.001s
sys     0m0.949s
[root@HOME001 local]# rm -f /usr/local/tmp/*

[root@HOME001 local]# free
             total       used       free     shared    buffers     cached
Mem:       1938948     200436    1738512          0      10720      94452
-/+ buffers/cache:      95264    1843684
Swap:      4161528          0    4161528
[root@HOME001 local]#

tmpfs(メモリー)への書き込み速度

[root@HOME001 local]# mount -t tmpfs -o size=512m tmpfs /usr/local/tmp
[root@HOME001 local]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_home001-lv_root
                       47G  2.5G   42G   6% /
tmpfs                 947M     0  947M   0% /dev/shm
/dev/sda1             485M   36M  424M   8% /boot
/dev/mapper/vg_home001-lv_home
                      4.6G  322M  4.0G   8% /home
tmpfs                 512M     0  512M   0% /usr/local/tmp
[root@HOME001 local]# time dd if=/dev/zero of=/usr/local/tmp/tmpfs bs=128M count=2
2+0 records in
2+0 records out
268435456 bytes (268 MB) copied, 0.770854 s, 348 MB/s

real    0m0.788s
user    0m0.000s
sys     0m0.784s
[root@HOME001 local]#

[root@HOME001 local]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_home001-lv_root
                       47G  2.5G   42G   6% /
tmpfs                 947M     0  947M   0% /dev/shm
/dev/sda1             485M   36M  424M   8% /boot
/dev/mapper/vg_home001-lv_home
                      4.6G  322M  4.0G   8% /home
tmpfs                 512M  257M  256M  51% /usr/local/tmp
[root@HOME001 local]# free
             total       used       free     shared    buffers     cached
Mem:       1938948     462820    1476128          0      10720     356596
-/+ buffers/cache:      95504    1843444
Swap:      4161528          0    4161528
[root@HOME001 local]#

tempfs

fstabに追記して常時起動

[root@HOME001 local]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_home001-lv_root     47G  2.5G   42G   6% /
tmpfs                             947M     0  947M   0% /dev/shm
/dev/sda1                         485M   36M  424M   8% /boot
/dev/mapper/vg_home001-lv_home    4.6G  322M  4.0G   8% /home
[root@HOME001 local]# vi /etc/fstab

[root@HOME001 local]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Nov 25 06:08:34 2012
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_home001-lv_root /                       ext4    defaults        1 1
UUID=d0a823c7-d51e-42de-b422-2f3ab5d82d96 /boot                   ext4    defaults        1 2
/dev/mapper/vg_home001-lv_home /home                   ext4    defaults        1 2
/dev/mapper/vg_home001-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
# add for memory disk
tmpfs                   /usr/local/tmp          tmpfs   defaults,size=512m 0 0
[root@HOME001 local]#


[root@HOME001 local]# mount -a
[root@HOME001 local]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_home001-lv_root     47G  2.5G   42G   6% /
tmpfs                             947M     0  947M   0% /dev/shm
/dev/sda1                         485M   36M  424M   8% /boot
/dev/mapper/vg_home001-lv_home    4.6G  322M  4.0G   8% /home
tmpfs                             128M     0  512M   0% /usr/local/tmp
[root@HOME001 local]#


[root@HOME001 local]# time dd if=/dev/zero of=/usr/local/tmp/tmpfs bs=128M count=2
2+0 records in
2+0 records out
268435456 bytes (268 MB) copied, 0.776067 s, 346 MB/s

real    0m0.793s
user    0m0.001s
sys     0m0.789s
[root@HOME001 local]#

再起動後もマウントされている事を確認済み

fstab

関連スレ
MYSQL with tempfs