*MySQLBackUp [#afc6d9bc] RIGHT:更新日&lastmod(); **レプリケーションを利用したバックアップ [#z4b6eb29] マスターでの更新情報をバイナリログとしてスレーブに転送、これをSQLに変換しスレーブで実行しデータ同期を行うようだ。バイナリログは逐次スレーブ側に転送される?~ BackUpをとるには同じDBを作製しておく必要がある。 ***マスター [#wf204aff] ''/etc/my.cnf'' [mysqld] ## REPLICATION MASTER SETTING ## user = mysql server-id = 1 log-bin character-set-server = utf8 設定内容~ SLAVE IP :10.1.4.142~ User :repl~ mysql> GRANT REPLICATION SLAVE ON *.* TO repl@10.1.4.142 IDENTIFIED BY '*****'; ***現在のバイナリログの状態を確認 [#l5187035] マスタのバイナリログのどの時点からレプリケートを開始すればよいかスレーブにはわからないからないので、場所を決定するに必要となる。この場所がFileとPosition。 (Master側でDBをLock) &color(red){<=変更が多くないときは不要かもでも安全のため}; mysql> FLUSH TABLES WITH READ LOCK; ''logファイルと、logポジションを表示'' mysql> SHOW MASTER STATUS; <=(1) +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000024 | 98 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.01 sec) DBをBackUpしてスレーブ側にコピーしてからUnLock mysql> UNLOCK TABLES; ***スレーブ [#m88db59e] ''/etc/my.cnf'' [mysqld] ## REPLICATION SLAVE SETTING server-id = 2 character-set-server = utf8 read-only <=アプリケーションからの変更禁止 &color(red){以下のCHANGE MASTER TO と STOP/START SLAVE;はDBを追加するごとに必要}; 一度CHANGE MASTER TO は実行すればOK mysql> CHANGE MASTER TO -> MASTER_HOST='10.99.99.202', -> MASTER_PORT=3306, -> MASTER_USER='repl', -> MASTER_PASSWORD='*******', -> MASTER_LOG_FILE='mysql-bin.000024', <=MASTER側で表示したSTATUSの結果を記入 -> MASTER_LOG_POS=98; <=MASTER側で表示したSTATUSの結果を記入 Query OK, 0 rows affected (0.04 sec) ''スレーブの起動'' mysql> START SLAVE; Query OK, 0 rows affected (0.01 sec) ''スレーブの状態の表示'' mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.99.99.202 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000024 Read_Master_Log_Pos: 98 Relay_Log_File: localhost-relay-bin.000002 Relay_Log_Pos: 235 Relay_Master_Log_File: mysql-bin.000024 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: 98 Relay_Log_Space: 235 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 1 row in set (0.00 sec) ERROR: No query specified ''スレーブの停止'' mysql> STOP SLAVE; Query OK, 0 rows affected (0.01 sec) CHANGE MASTER TO を実行すると以下のファイルができるので、その情報でその後再起動は問題なく動作する。 # less /var/lib/mysql/master.info 14 mysql-bin.000024 98 10.99.99.202 repl ****** 3306 60 0 # less /var/lib/mysql/relay-log.info ./localhost-relay-bin.000002 235 mysql-bin.000024 98 ***その他の指定 [#u74a6373] ''レプリケーションを作製するDBやテーブルの指定''~ Slaveのmy.cnfに指定 [mysqld] |replicate-do-db |対象となるデータベース名 | | |replicate-ignore-db |対象外となるデータベース名 | | |replicate-do-table |対象となるテーブル名 |指定方法:データベース名.テーブル名 | |replicate-ignore-table |対象外となるテーブル名 |指定方法:データベース名.テーブル名 | 複数あるときは~ replicate-do-db = db1~ replicate-do-db = db2~ のように併記する。