2012年10月31日水曜日

レプリケーション設定(非同期レプリケーション)

レプリケーションの設定を行いたいと思います。
master用と、slave用のMySQLが既にインストール済みの状態から説明したいと思います。
MySQLのインストールについてはこちらを参考にしてください
(準同期レプリケーションについては、この記事の設定が終わった後にこちらを参考にしてください)

■手順1.masterの設定を変更します。
[mysqld]セクションに次の項目を追加する。
# vi /etc/my.cnf
#バイナリーログを有効化
log-bin=mysql-bin
#レプリケーション方式の選択SBRとRBRを動的に切り替える(デフォルトはMIXED)
binlog_format=MIXED
#バイナリーログファイルのサイズ
max_binlog_size=100M
#バイナリーログの有効期限
expire_logs_days=3
#1回バイナリログへ更新を行うことでディスクへのフラッシュを行う
sync_binlog=1
#InnoDBのログバッファをInnoDBログファイルに書き込むタイミングを決める
innodb_support_xa=1
#2相コミットを行うかどうか。ログをコミットごとにフラッシュしない
innodb_flush_log_at_trx_commit=1
#テーブルスペースをテーブル単位で作成する
innodb_file_per_table

MySQLレプリケーションを安全に利用するための10のテクニックからの引用になります。
5. バイナリログを同期する 適切な設定をしておかないと、サーバがクラッシュしてしまった場合などに最後にバイナリログに対して行った更新が失われてしまう場合がある。バイナリログの一部が失われてしまうと、スレーブへ更新内容を転送することが出来なくなる。そのため、マスターとスレーブでデータの食い違いが生じるので、レプリケーションは停止する。このような状況になった場合、最悪はマスターからデータのコピーをやり直す必要があるので厄介だ。そのような状況になりたくない場合には、次の設定をしておこう。 sync_binlog=1
innodb_support_xa=1
innodb_flush_logs_at_trx_commit=1

レプリケーション時のデータの整合性やクラッシュ時の事を考えるなら、上記の三つは必須項目で、
パフォーマンスを考えると場合によっては変えた方が(・∀・)イイ!!って感じかな?

my.cnf編集後に再起動を行う。
# /etc/init.d/mysqld restart
mysqld を停止中:                                           [  OK  ]
mysqld を起動中:                                           [  OK  ]
MySQLにログインして確認する
mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       126 |
| mysql-bin.000002 |       126 |
| mysql-bin.000003 |       126 |
| mysql-bin.000004 |       126 |
| mysql-bin.000005 |       126 |
| mysql-bin.000006 |       126 |
| mysql-bin.000007 |       126 |
| mysql-bin.000008 |       107 |
+------------------+-----------+
8 rows in set (0.01 sec)
mysql> show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000008
        Position: 107
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
■手順2.マスター上にレプリケーション用のユーザーを作成する。
スレーブが複数ある場合にはホスト名にワイルドカードを用いて、
すべてのホストからログインできる統一のレプリケーション用アカウントを作成するか、
スレーブのホストごとにユーザーを作成する必要がある。
マスターの現在のユーザーを確認する
mysql> SELECT user, host, password FROM mysql.user;
+------+-----------+----------+
| user | host      | password |
+------+-----------+----------+
| root | localhost |          |
| root | 127.0.0.1 |          |
| root | ::1       |          |
+------+-----------+----------+
3 rows in set (0.08 sec)
slaveがmasterのデータベースに接続するためslaveユーザーを作成する。
今回はslaveで共通のアカウントを利用する方法を利用しますので、
一番上のコマンドでユーザーを作成します。
#slaveごとに共通のアカウントを利用する場合、 
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%' IDENTIFIED BY '任意のパスワード';

#slaveごとにアカウントを分ける場合 
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'slaveのIPアドレス' IDENTIFIED BY '任意のパスワード';

#指定IPアドレスのネットワーク内なら全て許可(IPアドレス/255.255.255.0) 
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'指定のIPアドレス/255.255.255.0' IDENTIFIED BY '任意のパスワード';
slaveユーザー作成。
#slaveユーザー作成
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%' IDENTIFIED BY '*****';
Query OK, 0 rows affected (0.08 sec)

#権限の確認
mysql> SHOW GRANTS FOR 'slave'@'%';
+--------------------------------------------------------------------------------------------------------------------------------------+
| Grants for slave@%                                                                                                                   |
+--------------------------------------------------------------------------------------------------------------------------------------+
| GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%' IDENTIFIED BY PASSWORD '*2222CF6639797EFE06ED82985752723FE6BB0BA0' |
+--------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

#設定の反映
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
間違った権限や、情報でユーザーを作ってしまった場合には、次の手順で削除を行う。
#間違ったアカウントを作った場合には権限を全て取り上げてから削除すること全ての権限を取り上げる
mysql> REVOKE ALL ON *.* FROM 'slave'@'%';
Query OK, 0 rows affected (0.02 sec)

#権限がなくなっているか確認
mysql> SHOW GRANTS FOR 'slave'@'%';
+------------------------------------------------------------------------------------------------------+
| Grants for slave@%                                                                                   |
+------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'slave'@'%' IDENTIFIED BY PASSWORD '*2222CF6639797EFE06ED82985752723FE6BB0BA0' |
+------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

#slaveユーザー削除
mysql> DELETE FROM mysql.user WHERE USER LIKE 'slave' AND HOST LIKE '%';
Query OK, 1 row affected (0.06 sec)

#slaveユーザーが削除されているか確認
mysql> SELECT user, host, password FROM mysql.user;
+------+-----------+----------+
| user | host      | password |
+------+-----------+----------+
| root | localhost |          |
| root | 127.0.0.1 |          |
| root | ::1       |          |
+------+-----------+----------+
3 rows in set (0.00 sec)

#反映
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
■手順3.レプリケーションのテスト用にデータベース、テーブル、レコードの作成を行う。
#データベースの作成
mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.01 sec)

#テーブルを選択
mysql> use test;
Database changed

#テーブルの作成
mysql> CREATE TABLE IF NOT EXISTS `user` (
    ->   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    ->   PRIMARY KEY (`id`)
    -> ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.09 sec)

#レコードの登録
mysql> INSERT INTO user( id ) VALUES( 1 );
Query OK, 1 row affected (0.03 sec)

#データの確認
mysql> SELECT * FROM user;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)
■手順4.slaveのセットアップ用データとしてmasterのデータをdumpする。
# mysqldump -u root -p --all-databases --master-data=2 --single-transaction --flush-logs > /home/admin/dump_20121031_01.sql
Enter password:

#dumpファイルの確認
# ls -alt /home/admin/dump_20121031_01.sql
-rw-r--r-- 1 root root 513573 11月  1 01:03 2012 /home/admin/dump_20121031_01.sql
mysqldumpの各オプションの説明
・--all-databases
全てのデータベースからデータをdumpします。
・--master-data=2
slaveのセットアップで利用できるバイナリログのファイル名と開始位置を出力する。
・--single-transaction
利用しているストレージエンジンがInnoDBだけの場合、
このオプションを付けるだけでテーブルへの参照や更新をブロックすることなく、
コマンド開始時点のデータのスナップショットを採取することができます。
この指定が無い場合には、mysqldumpで全てのテーブルをREADロックしてしまう。
・--flush-logs
バイナリログのローテーションを行います。

■手順5.dumpファイルをslaveに転送する。
ポート番号を変更してるので-Pオプションがついてます。
#転送コマンド
scp /home/admin/dump_20121031_01.sql ユーザー名@slaveのIPアドレス:/tmp/

■手順6.手順2で作成したユーザーがslaveからログインできるかチェック。

共通のアカウント用のコマンドでslaveユーザーを作成した場合には、IPアドレスの制限などが無いので、
slaveとなるサーバーであればどのサーバーからでもログインが出来るようになっている。
slaveサーバーに移動した後に、次のコマンドを実行してみる。
# mysql -h masterのIPアドレス -u slave -p
Enter password:パスワード入力
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 231
Server version: 5.5.27-log MySQL Community Server (GPL) by Remi

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
次のようなエラーメッセージが出る場合には、設定がうまく行えていない可能性があります。
ERROR 1130 (HY000): Host 'slaveのIPアドレスorホスト名' is not allowed to connect to this MySQL server

■手順7.slaveのmy.cnf設定

スレーブ用にmy.cnfを編集します。 [mysqld]セクションに次の項目を追加します。
vi /etc/my.cnf
#
server-id=20
#masterでSHOW SLAVE HOSTSコマンドを実行したときにスレーブの一覧が見れるように。
report_host=slave20
#書き込み禁止(SUPER権限のユーザーは書き込めてしまう)
read_only=1
#slaveの自動同期開始を無効化
skip_slave_start
#ログ関係はデフォルトだとホスト名が使われてしまうので指定しておいたほうが、
#後の管理が楽になるので指定しておく方が良いかも?
#バイナリーログのファイル名の指定。(slaveをmasterに昇格する場合など用に必要な場合のみ)
log_bin=mysql-bin
#バイナリーログを生成する場合にはこの記述も忘れずに!
#この指定がないとslave側では正しくバイナリーログが生成されない。
log_slave_updates
#リレーログのファイル名(masterから取得したバイナリーログを別名で保存したもの)
relay_log=mysql-relay-bin
#リレーログのインデックス用?のファイル名
relay-log-index==mysql-relay-bin
#テーブルスペースをテーブル単位で作成する
innodb_file_per_table

■手順8.slaveの起動を行い、リストアを行う。 slaveの同期を停止させている状態で起動する。
# /etc/init.d/mysqld start
mysqld を起動中:                                           [  OK  ]

既に一度slaveの設定がされていたり、余計なデータベースなどがある場合には削除する。
デフォルトで作られるデータベースの、
information_schema、performance_schema、mysql、testは消さない

・information_schema
INFORMATION_SCHEMAデータベースはMySQLに存在するデータベースやテーブルなどの情報を
参照するために利用できるものです

・performance_schema
実行性能に関する統計情報など?

・mysql
mysqlはアカウントユーザー情報が入っている。上書きされる。
・test
テスト用のデータベース?テーブルは無しの状態っぽい。

information_schemaデータベースは削除できないっぽい?
mysql> DROP DATABASE information_schema;
ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'information_schema'
余計なデータベースを削除したらdumpファイルをリストアする。
mysql -u root -p --default-character-set=utf8 < /tmp/dump_20121031_01.sql
リストアしたデータが正常に登録されているか確認する。
# mysql -u root
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.02 sec)

#
mysql> use test;
Database changed

#
mysql> SELECT * FROM user;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)
■手順9.dumpファイルからレプリケーションの設定を情報を取得し、設定する。
次のコマンドでdumpファイルからレプリケーションの設定情報を取得する
# head -100 /tmp/dump_20121031_01.sql | grep CHANGE
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=107;
上記のコマンドで出力されたLOG_FILEとLOG_POSの値を、CHANGE MASTER TOのMASTER_LOG_FILE、MASTER_LOG_POSの各値に設定する。
#レプリケーションの設定
mysql> CHANGE MASTER TO
     MASTER_HOST='masterサーバーのIPアドレス',
     MASTER_USER='slaveユーザーのアカウント名',
     MASTER_PASSWORD='slaveユーザーのパスワード',
     MASTER_PORT=3306,
     MASTER_LOG_FILE='mysql-bin.000009',
     MASTER_LOG_POS=107,
     MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected (0.02 sec)
■手順10.slave起動 CHANGE MASTER TOコマンドだけではslaveの同期が開始されません
Slave_IO_Running、Slave_SQL_RunningがNoになっていると思います
#slaveのステータスを確認する
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State:
                  Master_Host: *************
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin.000009
          Read_Master_Log_Pos: 107
               Relay_Log_File: mysql-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000009
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           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: 107
              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: 0
1 row in set (0.00 sec)

#slave起動
mysql> START SLAVE;
Query OK, 0 rows affected (0.02 sec)

#再度、ステータスを確認する。Slave_IO_Running、Slave_SQL_RunningがYesになっている事を確認する
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: ************
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin.000009
          Read_Master_Log_Pos: 107
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000009
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           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: 409
              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: 10
1 row in set (0.00 sec)

#system userというプロセスがslaveが利用しているプロセスになりますのでkillなどで殺してはいけない。
mysql> SHOW PROCESSLIST;
+-----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
| Id  | User        | Host      | db   | Command | Time | State                                                                       | Info             |
+-----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
| 327 | root        | localhost | NULL | Query   |    0 | NULL                                                                        | SHOW PROCESSLIST |
| 333 | system user |           | NULL | Connect |   22 | Waiting for master to send event                                            | NULL             |
| 334 | system user |           | NULL | Connect |   22 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL             |
+-----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
3 rows in set (0.00 sec)
■手順10.masterにデータを登録して同期されるか確認してみる
#masterサーバーでデータの登録する
mysql> INSERT INTO user( id ) VALUES( 2 );
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM user;
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.00 sec)
slaveサーバーでに接続して同期されているか確認する
#slaveサーバーでデータの確認をする
mysql> SELECT * FROM user;
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.00 sec)
以上でレプリケーションの設定は完了です(`・ω・´)ゞビシッ!! 今回利用したmater,slaveの設定ファイルはこちらになります。
master側のmy.cnf
# Example MySQL config file for large systems.
#
# This is for a large system with memory = 512M where the system runs mainly
# MySQL.
#
# MySQL programs look for option files in a set of
# locations which depend on the deployment platform.
# You can copy this option file to one of those
# locations. For information about these locations, see:
# http://dev.mysql.com/doc/mysql/en/option-files.html
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
#password       = your_password
port            = 3306
socket          = /var/lib/mysql/mysql.sock

#文字コードをUTF-8
default-character-set=utf8

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8

#文字コードをUTF-8
character-set-server=utf8

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
#バイナリーログを有効化
log-bin=mysql-bin

#エラーログを有効化
log-error = mysql-error.log

#バイナリーログの有効期限
expire_logs_days=31

#1回バイナリログへ更新を行うことでディスクへのフラッシュを行う
sync_binlog=1

#InnoDBのログバッファをInnoDBログファイルに書き込むタイミングを決める
innodb_support_xa=1

#2相コミットを行うかどうか。ログをコミットごとにフラッシュしない
innodb_flush_log_at_trx_commit=1

# binary logging format - mixed recommended
binlog_format=mixed

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
#サーバーの識別ID(ユニークな値にする)
server-id       = 10

# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 256M
#innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 64M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

#DNS逆引きを無効化
skip-name-resolve

#簡単な目安としてサーバーに積んであるメモリの50%~80%を指定するの(・∀・)イイ!!らしいです。
innodb_buffer_pool_size = 256M

#ログファイルのバッファサイズ
innodb_log_buffer_size = 16M

#ログファイルのサイズ
innodb_log_file_size = 128M

#ログファイルを作成する数
innodb_log_files_in_group = 2

#デフォルトのままで。(自動拡張有効で、初期化で10MBの領域を確保する)
innodb_data_file_path = ibdata1:10M:autoextend

#拡張時に64MBの領域を確保する
innodb_autoextend_increment=64

#ibdataの肥大化対策用にテーブルスペースをテーブル単位で作成する
#(innodb_file_per_tableを利用する場合にはinnodb_log_group_home_dirは設定してはいけない)
innodb_file_per_table

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

#文字コードをUTF-8
default-character-set=utf8

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

slave側のmy.cnf
# Example MySQL config file for large systems.
#
# This is for a large system with memory = 512M where the system runs mainly
# MySQL.
#
# MySQL programs look for option files in a set of
# locations which depend on the deployment platform.
# You can copy this option file to one of those
# locations. For information about these locations, see:
# http://dev.mysql.com/doc/mysql/en/option-files.html
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
#password       = your_password
port            = 3306
socket          = /var/lib/mysql/mysql.sock

#文字コードをUTF-8
default-character-set=utf8

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8

#文字コードをUTF-8
character-set-server=utf8

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
#バイナリーログを有効化
log-bin=mysql-bin

#エラーログを有効化
log-error = mysql-error.log

#バイナリーログの有効期限
expire_logs_days=31

#1回バイナリログへ更新を行うことでディスクへのフラッシュを行う
sync_binlog=1

#InnoDBのログバッファをInnoDBログファイルに書き込むタイミングを決める
innodb_support_xa=1

#InnoDBのログバッファをInnoDBログファイルに書き込むタイミングと、
#InnoDBログファイルをディスクにフラッシュするタイミングの設定
innodb_flush_log_at_trx_commit=1

# binary logging format - mixed recommended
binlog_format=mixed

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
#サーバーの識別ID(ユニークな値にする)
server-id       = 20

# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 256M
#innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 64M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

#DNS逆引きを無効化
skip-name-resolve

#簡単な目安としてサーバーに積んであるメモリの50%~80%を指定するの(・∀・)イイ!!らしいです。
innodb_buffer_pool_size = 256M

#ログファイルのバッファサイズ
innodb_log_buffer_size = 16M

#ログファイルのサイズ
innodb_log_file_size = 128M

#ログファイルを作成する数
innodb_log_files_in_group = 2

#デフォルトのままで。(自動拡張有効で、初期化で10MBの領域を確保する)
innodb_data_file_path = ibdata1:10M:autoextend

#拡張時に64MBの領域を確保する
innodb_autoextend_increment=64

#ibdataの肥大化対策用にテーブルスペースをテーブル単位で作成する
#(innodb_file_per_tableを利用する場合にはinnodb_log_group_home_dirは設定してはいけない)
innodb_file_per_table

###########
# slave用の設定
###########
#masterでSHOW SLAVE HOSTSコマンドを実行したときにスレーブの一覧が見れるように。
report_host=slave20

#書き込み禁止(SUPER権限のユーザーは書き込めてしまう)
read_only=1

#slaveの自動同期開始を無効化
skip_slave_start

#バイナリーログを生成する場合にはこの記述も忘れずに!
#この指定がないとslave側では正しくバイナリーログが生成されない。
#ただし、マスターの予備用として出力しておくのはダメ。
#log_slave_updates

#リレーログのファイル名(masterから取得したバイナリーログを別名で保存したもの)
relay-log=mysql-relay-bin

#リレーログのインデックス用?のファイル名
relay-log-index==mysql-relay-bin

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

#文字コードをUTF-8
default-character-set=utf8

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

0 件のコメント:

コメントを投稿