天天看點

MySQL主主

A B資料庫安裝就不說了

啟動 A B資料庫

A B資料庫上執行

grant replication slave on *.* to'repl'@'127.0.0.1' identified by '123456';

連結資料庫

更改a主機my.cnf配置

log-bin=mysql-bin

# 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 ifomitted

server-id       = 1

binlog-do-db = test

binlog-ignore-db = mysql

log-slave-updates

sync_binlog=1

auto_increment_offset = 1

auto_increment_increment= 2

replicate-do-db = test

replicate-ignore-db =mysql

更改完後重新開機資料庫

更改b主機my.cnf配置

log-bin=mysql-bin1

server-id       = 111

auto_increment_offset = 2

A 主機登陸資料庫

Showmaster status\G;

flushtables with read lock;

Slavestop

changemaster tomaster_host='127.0.0.1',master_user='repl',master_password='123456',master_log_file='mysql-bin1.000002',master_log_pos=441,master_port=3306;

flushprivileges;

unlocktables

B主機登陸資料庫

changemaster tomaster_host='127.0.0.1',master_user='repl',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=186;

完成

A

server-id

ID值唯一的辨別了複制群集中的主從伺服器,是以它們必須各不相同。master_id必須為1到232–1之間的一個正整數值,slave_id值必須為2到232–1之間的一個正整數值。

log-bin

  表示打開binlog,打開該選項才可以通過I/O寫到Slave的relay-log,也是可以進行replication的前提;

binlog-do-db

  表示需要記錄進制日志的資料庫。如果有多個資料庫可用逗号分隔,或者使用多個binlog-do-db選項

binlog-ignore-db

  表示不需要記錄二進制日志的資料庫。如果有多個資料庫可用逗号分隔,或者使用多個binlog-do-db選項

replicate-do-db

  表示需要同步的資料庫,如果有多個資料庫可用逗号分隔,或者使用多個replicate-do-db選項

replicate-ignore-db=mysql

  表示不需要同步的資料庫,如果有多個資料庫可用逗号分隔,或者使用多個replicate-ignore-db=mysql選項

  配置從庫上的更新操作是否寫入二進制檔案,如果這台從庫,還要做其他從庫的主庫,那麼就需要打這個參數,以便從庫的從庫能夠進行日志同步

slave-skip-errors

  在複制過程,由于各種原因導緻binlog中的sql出錯,預設情況下,從庫會停止複制,要使用者介入。可以設定Slave-skip-errors來定義錯誤号,如果複制過程中遇到的錯誤号是定義的錯誤号,便可以跳過。如果從庫是用來做備份,設定這個參數會存在資料不一緻,不要使用。如果是分擔主庫的查詢壓力,可以考慮。

sync_binlog=1 or N

sync_binlog的預設值是0,這種模式下,MySQL不會同步到磁盤中去。這樣的話,MySQL依賴作業系統來重新整理二進制日志binary log,就像作業系統刷其他檔案的機制一樣。是以如果作業系統或機器(不僅僅是MySQL伺服器)崩潰,有可能binlog中最後的語句丢失了。要想防止這種情況,你可以使用sync_binlog全局變量,使binlog在每N次binlog寫入後與硬碟同步。當sync_binlog變量設定為1是最安全的,因為在crash崩潰的情況下,你的二進制日志binary log隻有可能丢失最多一個語句或者一個事務。但是,這也是最慢的一種方式(除非磁盤有使用帶蓄電池後備電源的緩存cache,使得同步到磁盤的操作非常快)。

  即使sync_binlog設定為1,出現崩潰時,也有可能表内容和binlog内容之間存在不一緻性。如果使用InnoDB表,MySQL伺服器處理COMMIT語句,它将整個事務寫入binlog并将事務送出到InnoDB中。如果在兩次操作之間出現崩潰,重新開機時,事務被InnoDB復原,但仍然存在binlog中。可以用–innodb-safe-binlog選項來增加InnoDB表内容和binlog之間的一緻性。(注釋:在MySQL 5.1中不需要–innodb-safe-binlog;由于引入了XA事務支援,該選項廢棄了),該選項可以提供更大程度的安全,使每個事務的 binlog(sync_binlog =1)和(預設情況為真)InnoDB日志與硬碟同步,該選項的效果是崩潰後重新開機時,在滾回事務後,MySQL伺服器從binlog剪切復原的 InnoDB事務。這樣可以確定binlog回報InnoDB表的确切資料等,并使從伺服器保持與主伺服器保持同步(不接收復原的語句)。

auto_increment_offset和auto_increment_increment

auto_increment_increment和auto_increment_offset用于主-主伺服器(master-to-master)複制,并可以用來控制AUTO_INCREMENT列的操作。兩個變量均可以設定為全局或局部變量,并且假定每個值都可以為1到65,535之間的整數值。将其中一個變量設定為0會使該變量為1。

  這兩個變量影響AUTO_INCREMENT列的方式:auto_increment_increment控制列中的值的增量值,auto_increment_offset确定AUTO_INCREMENT列值的起點。

如果auto_increment_offset的值大于auto_increment_increment的值,則auto_increment_offset的值被忽略。例如:表内已有一些資料,就會用現在已有的最大的自增值做為初始值。

mysql中有自增長字段,在做資料庫的主主同步時需要設定自增長的兩個相關配置:auto_increment_offset和auto_increment_increment。

auto_increment_offset表示自增長字段從那個數開始,他的取值範圍是1 .. 65535

auto_increment_increment表示自增長字段每次遞增的量,其預設值是1,取值範圍是1 .. 65535

在主主同步配置時,需要将兩台伺服器的auto_increment_increment增長量都配置為2,而要把auto_increment_offset分别配置為1和2.

繼續閱讀