MySQL複製其實就是把資料從一個節點(master) 拷貝到另一個節點(slaves), 當然根據應用架構的不同,採用的方式也不同,MySQL伺服器之間的複製使用的是二進位日誌機制.對master的更新與變動都會作為事件(event)記錄在日誌中,日誌中的資訊會隨變化的不同被記錄成不同的格式.slaves被配置成從master讀取日誌,並且執行二進位日誌中的事件到slave本機資料庫.一旦master啟動二進位日誌功能,那麼所有語句操作都會被記錄下來,每一個slave會收到一份整個日誌內容的拷貝.slave的責任就是決定日誌中的哪條語句需要被執行,而我們不能通過配置master來僅僅記錄某些特定的事件.如果您沒有另行指定,在主伺服器二進位日誌中的所有事件都在slave上執行.如果需要,還可以配置slave僅應用來自於特定資料庫或表的事件.
根據來說說MySQL複製的工作機制,複製的過程在主從架構中一般是有三個線程來完成複製工作的,主伺服器上dump thread ,從伺服器I/O thread ,從伺服器sql thread, 如果想使用多線程的話需要打補丁的, 根據一主一從的架構複製是這樣工作的,主伺服器將操作寫入二進位日誌,由主伺服器上的dump線程將日誌發送到從伺服器上的I/O線程,然後儲存為中繼日誌,而由sql線程根據中繼日誌將資料寫入從伺服器中,下面來配置下這樣的複製架構,
配置主從複製
一,master和slave上編譯安裝mysql 這裡使用目前最新的mysq版本5.5.25a
- 下載如下兩個軟體包到/usr/srC目錄
- cmake-2.8.8.tar.gz
- mysql-5.5.25a.tar.gz
- 開始安裝配置,主從伺服器的配置一樣,
- #cd /usr/src
- #tar xzvf cmake-2.8.8.tar.gz
- #cd cmake-2.8.8
- #./bootstrap
- #make
- #make install
- #cd /usr/src
- #tar xzvf mysql-5.5.25a.tar.gz
- #cd mysql-5.5.25a
- #cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
- -DMYSQL_DATADIR=/data/mysql \
- -DSYSCONFDIR=/etc \
- -DWITH_INNOBASE_STORAGE_ENGINE=1 \
- -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
- -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
- -DWITH_READLINE=1 \
- -DWITH_SSL=system \
- -DWITH_ZLIB=system \
- -DWITH_LIBWRAP=0 \
- -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \
- -DDEFAULT_CHARSET=utf8 \
- -DDEFAULT_COLLATION=utf8_general_ci
- #make
- #make install
- #useradd -r mysql
- #mkdir -p /data/mysql
- #chown -R mysql.mysql /usr/local/mysql/
- #/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql
- #cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
- #vim /etc/my.cnf
- [mysqld] 在mysqld配置中添加
- datadir = /data/mysql
-
- #cp -p /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
- #chkconfig mysqld on
- #service mysqld restart