MySQL 複製 on Ubuntu12.04

來源:互聯網
上載者:User

MySQL 複製 on Ubuntu12.04

一、簡介

MySQL 複製(Replication)基於binnary logging機制,將資料在master和slave之間同步。無論機制、配置、運行維護都比MSSQL2000的複製簡單穩定很多(mssql2000之後的版本沒用過)。

Mysql master將資料更新、變化作為事件寫入binary log,Mysql slave讀取binary log的事件並將相同的更新、變化寫入自己的資料庫。

Master只管自己寫binary log,不用照看slave。Slave只要線上,資料即可持續同步;即使slave離線,恢複線上後可以繼續執行未完成的複製。這一點非常適合進行資料備份,因為在slave上備份絲毫不影響master的運行。

Master可以有多個slaves,slave也可以同時作為master並且擁有自己的slaves。

每一個master和slave必須在my.cnf中指定唯一的 server-id。

在slave上,複製可以隨時使用簡單的指令停止、恢複。

binary log有三種格式:STATEMENT,ROW,MIXED。STATEMENT格式基於SQL語句,效能高但不支援某些SQL語句;ROW格式基於行,能克服STATEMENT格式的缺點但會產生較大的日誌;MIXED結合二者特點,預設使用STATEMENT,當STATEMENT格式不適用時自動轉為ROW格式。推薦MIXED,可以在Master的my.cnf中設定此參數。

二、設定Mysql複製非常簡單,情境如下。

OS:Ubuntu12.04 X86_64

Master:主機名稱 mysql-0,IP 192.168.150.200

Slave: 主機名稱 mysql-1,IP 192.168.150.204

1、在Master上:

編輯檔案/etc/mysql/my.cnf 確保有如下幾行(後3行是InnoDB引擎必須的,建議加上)
[mysqld]

bind-address=0.0.0.0
server-id=1
log-bin=mysql-binary-log   #這個名字自己隨便起
binlog_format=MIXED
innodb_fast_shutdown=0
innodb_flush_log_at_trx_commit=1
sync_binlog=1

然後重啟Master的mysql server。

建立一個使用者

mysql> create user 'repl'@'192.168.150.200' identified by 'pass4repl';
mysql> grant replication slave on *.* to 'repl'@'192.168.150.200';

為slave獲得binary log座標,首先要使資料庫暫時唯讀,執行:
mysql> FLUSH TABLES WITH READ LOCK;

此終端視窗不動,另外開啟一個終端視窗串連到mysql server,執行:
mysql> SHOW MASTER STATUS;
+-------------------------+----------+--------------+------------------+
| File                    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------------+----------+--------------+------------------+
| mysql-binary-log.000001 |      106 |              |                  |
+-------------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

記下來這兩個值mysql-binary-log.000001、106,一會兒設定slave時要用到,注意,這是我的測試結果,你的結果很可能不同。(Binlog_Do_DB 和 Binlog_Ignore_DB也許能決定哪些庫複製哪些庫不複製,這個以後研究)

如果Master上已經有了資料,則需要先用mysqldump或者未經處理資料拷貝產生現有資料的”快照“,應用到Slave伺服器上,再配置Slave。

一般用mysqldump做備份,再拷貝到slave上恢複就能滿足大部分需求。特殊情況稍微複雜些,可以參考官方連結:
16.1.1.5 Creating a Data Snapshot Using mysqldump
16.1.1.6 Creating a Data Snapshot Using Raw Data Files

如果Master上沒有使用者資料,或者已經把資料快照應用到Slave上,就可以在剛才執行”FLUSH TABLES WITH READ LOCK;“的終端視窗裡執行
mysql> UNLOCK TABLES;

以解鎖Master資料庫,然後繼續配置Slave。(或者退出該終端視窗也可)

2、在Slave上:

編輯檔案/etc/mysql/my.cnf 確保有如下2行
[mysqld]

report-host=192.168.150.200
server-id=2

重啟一下slave的mysql server。

然後在mysql中執行:
mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.150.200',
    -> MASTER_USER='repl',
    -> MASTER_PASSWORD='pass4repl',
    -> MASTER_LOG_FILE='mysql-binary-log.000001',
    -> MASTER_LOG_POS=106;

大功告成! 

3、簡單的管理工作(結果資料來自官方文檔)

在Master上

mysql> SHOW PROCESSLIST \G;
*************************** 4. row ***************************
    Id: 10
  User: root
  Host: slave1:58371
    db: NULL
Command: Binlog Dump
  Time: 777
  State: Has sent all binlog to slave; waiting for binlog to be updated
  Info: NULL

mysql> SHOW SLAVE HOSTS;
+-----------+--------+------+-------------------+-----------+
| Server_id | Host  | Port | Rpl_recovery_rank | Master_id |
+-----------+--------+------+-------------------+-----------+
|        10 | slave1 | 3306 |                0 |        1 |
+-----------+--------+------+-------------------+-----------+
1 row in set (0.00 sec)

在slave上

mysql> SHOW SLAVE STATUS \G
mysql> STOP SLAVE;
mysql> START SLAVE; 

參考:http://dev.mysql.com/doc/refman/5.5/en/replication.html Mysql的官方文檔寫得真心不錯,清晰易懂。

禁用Mysql複製:
1、在Slave上停止複製,執行:
mysql> STOP SLAVE;

2、在Master上,編輯 /etc/mysql/my.cnf,注釋掉如下幾行:
report-host=192.168.150.200
server-id=2

3、在Slave上尋找master.info檔案:
~$ sudo find / -name master.info | grep master.info
找到後,刪除,或者重新命名,或者移動到其他目錄。
重啟Slave的mysql server。
mysqld-relay-bin.* 等檔案可以刪除了。

3、在Master上,編輯 /etc/mysql/my.cnf,注釋掉如下幾行:
server-id=1
log-bin=mysql-binary-log
binlog_format=MIXED
innodb_flush_log_at_trx_commit=1
sync_binlog=1

innodb_fast_shutdown=0 可以選擇保留
重啟Slave的mysql server。
mysql-binary-log.* 等檔案可以刪除了。

--------------------------------------分割線 --------------------------------------

Ubuntu 14.04下安裝MySQL

《MySQL權威指南(原書第2版)》清晰中文掃描版 PDF

Ubuntu 14.04 LTS 安裝 LNMP Nginx\PHP5 (PHP-FPM)\MySQL

Ubuntu 14.04下搭建MySQL主從伺服器

Ubuntu 12.04 LTS 構建高可用分布式 MySQL 叢集

Ubuntu 12.04下原始碼安裝MySQL5.6以及Python-MySQLdb

MySQL-5.5.38通用二進位安裝

--------------------------------------分割線 --------------------------------------

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.