實例講解如何配置MySQL數據庫主從複制

這篇論壇文章(賽迪網技術社區)主要介紹了MySQL數據庫主從複制的相關概念及設置方法,詳細內容請大家參考下文:

MySQL支持單向、異步複制,複制過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日志文件,並維護日志文件的一個索引以跟蹤日志循環。當一個從服務器連接到主服務器時,它通知主服務器從服務器在日志中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,然後封鎖並等待主服務器通知下一次更新。

爲什麽使用主從複制?

1、主服務器/從服務器設置增加了健壯性。主服務器出現問題時,你可以切換到從服務器作爲備份。

2、通過在主服務器和從服務器之間切分處理客戶查詢的負荷,可以得到更好的客戶響應時間。但是不要同時在主從服務器上進行更新,這樣可能引起沖突。

3、使用複制的另一個好處是可以使用一個從服務器執行備份,而不會幹擾主服務器。在備份過程中主服務器可以繼續處理更新。

MySQL使用3個線程來執行複制功能(其中1個在主服務器上,另兩個在從服務器上。當發出START SLAVE時,從服務器創建一個I/O線程,以連接主服務器並讓主服務器發送二進制日志。主服務器創建一個線程將二進制日志中的內容發送到從服務器。從服務器I/O線程讀取主服務器Binlog Dump線程發送的內容並將該數據拷貝到從服務器數據目錄中的本地文件中,即中繼日志。第3個線程是SQL線程,從服務器使用此線程讀取中繼日志並執行日志中包含的更新。SHOW PROCESSLIST語句可以查詢在主服務器上和從服務器上發生的關于複制的信息。

默認中繼日志使用host_name-relay-bin.nnnnnn形式的文件名,其中host_name是從服務器主機名,nnnnnn是序列號。用連續序列號來創建連續中繼日志文件,從000001開始。從服務器跟蹤中繼日志索引文件來識別目前正使用的中繼日志。默認中繼日志索引文件名爲host_name-relay-bin.index。在默認情況,這些文件在從服務器的數據目錄中被創建。中繼日志與二進制日志的格式相同,並且可以用mysqlbinlog讀取。當SQL線程執行完中繼日志中的所有事件後,中繼日志將會被自動刪除。

從服務器在數據目錄中另外創建兩個狀態文件--master.info和relay-log.info。狀態文件保存在硬盤上,從服務器關閉時不會丟失。下次從服務器啓動時,讀取這些文件以確定它已經從主服務器讀取了多少二進制日志,以及處理自己的中繼日志的程度。

設置主從複制:

1、確保在主服務器和從服務器上安裝的MySQL版本相同,並且最好是MySQL的最新穩定版本。

2、在主服務器上爲複制設置一個連接賬戶。該賬戶必須授予REPLICATION SLAVE權限。如果賬戶僅用于複制(推薦這樣做),則不需要再授予任何其它權限。

mysql> GRANT REPLICATION SLAVE ON *.*

-> TO 'replication'@'%.yourdomain.com' IDENTIFIED BY 'slavepass';

3、執行FLUSH TABLES WITH READ LOCK語句清空所有表和塊寫入語句:

mysql> FLUSH TABLES WITH READ LOCK;

保持mysql客戶端程序不要退出。開啓另一個終端對主服務器數據目錄做快照。

shell> cd /usr/local/mysql/

shell> tar -cvf /tmp/mysql-snapshot.tar ./data

如果從服務器的用戶賬戶與主服務器的不同,你可能不想複制mysql數據庫。在這種情況下,應從歸檔中排除該數據庫。你也不需要在歸檔中包括任何日志文件或者master.info或relay-log.info文件。

當FLUSH TABLES WITH READ LOCK所置讀鎖定有效時(即mysql客戶端程序不退出),讀取主服務器上當前的二進制日志名和偏移量值:

mysql > SHOW MASTER STATUS;

+---------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+---------------+----------+--------------+------------------+

| mysql-bin.003 | 73 | test | manual,mysql |

+---------------+----------+--------------+------------------+

File列顯示日志名,而Position顯示偏移量。在該例子中,二進制日志值爲mysql-bin.003,偏移量爲73。記錄該值。以後設置從服務器時需要使用這些值。它們表示複制坐標,從服務器應從該點開始從主服務器上進行新的更新。

如果主服務器運行時沒有啓用--logs-bin,SHOW MASTER STATUS顯示的日志名和位置值爲空。在這種情況下,當以後指定從服務器的日志文件和位置時需要使用的值爲空字符串('')和4.

取得快照並記錄日志名和偏移量後,回到前一中端重新啓用寫活動:

mysql> UNLOCK TABLES;

4、確保主服務器主機上my.cnf文件的[mysqld]部分包括一個log-bin選項。該部分還應有一個server-id=Master_id選項,其中master_id必須爲1到232–1之間的一個正整數值。例如:

[mysqld]

log-bin

server-id=1

如果沒有提供那些選項,應添加它們並重啓服務器。

5、停止從服務器上的mysqld服務並在其my.cnf文件中添加下面的行:

[mysqld]

server-id=2

slave_id值同Master_id值一樣,必須爲1到232–1之間的一個正整數值。並且,從服務器的ID必須與主服務器的ID不相同。

6、將數據備據目錄中。確保對這些文件和目錄的權限正確。服務器 MySQL運行的用戶必須能夠讀寫文件,如同在主服務器上一樣。

Shell> chown -R mysql:mysql /usr/local/mysql/data

7、啓動從服務器。在從服務器上執行下面的語句,用你的系統的實際值替換選項值:

mysql> CHANGE MASTER TO

-> MASTER_HOST='master_host_name',

-> MASTER_USER='replication_user_name',

-> MASTER_PASSWORD='replication_password',

-> MASTER_LOG_FILE='recorded_log_file_name',

-> MASTER_LOG_POS=recorded_log_position;

8、啓動從服務器線程:

mysql> START SLAVE;

執行這些程序後,從服務器應連接主服務器,並補充自從快照以來發生的任何更新。

9、如果出現複制錯誤,從服務器的錯誤日志(HOSTNAME.err)中也會出現錯誤消息。

10、從服務器複制時,會在其數據目錄中發現文件master.info和HOSTNAME-relay-log.info。從服務器使用這兩個文件跟蹤已經處理了多少主服務器的二進制日志。不要移除或編輯這些文件,除非你確切知你正在做什麽並完全理解其意義。即使這樣,最好是使用CHANGE MASTER TO語句。

 
實例講解如何用Struts向MySQL中儲存圖片
這個例子是通過用Struts的FormFile來寫入到MySQL中。用戶通過選一個圖片,然後按submit就可以存入數據庫中。 1.首先需要建立一個表: create table test ( name varchar(20), pic blob );在MySQL的test庫中<%@ pag...查看完整版>>實例講解如何用Struts向MySQL中儲存圖片
 
詳細講解如何用SQLyog來分析MySQL數據庫
用SQLyog來分析MySQL數據庫: SOLyog的下載、安裝以及使用很簡單。我去了相關網站下載,它只有384K字節大小。它把兩個文件(一個可執行文件.exe和一個動態鏈接庫文件.dll)安裝到C:\Program Files\SQLyog路徑下。然後...查看完整版>>詳細講解如何用SQLyog來分析MySQL數據庫
 
詳細講解如何爲MySQL數據庫添加新函數
你可以通過自定義函數接口 (UDF)來添加函數。自定義函數被編譯爲目標文件,然後用CREATE FUNCTION 和DROP FUNCTION 聲明動態地添入到服務器中及從服務器中移出。你可以將函數添加爲MySQL固有(內建)函數。固有函數被...查看完整版>>詳細講解如何爲MySQL數據庫添加新函數
 
講解MaxDB數據庫和MySQL數據庫的主要差別
MaxDB是MySQL AB公司通過SAP認證的數據庫。MaxDB數據庫服務器補充了MySQL AB産品系列。某些MaxDB特性在MySQL數據庫服務器上不可用,反之亦然。 下面簡要介紹了MaxDB和MySQL的主要差別。 ·MaxDB是采用客戶端/服務器模...查看完整版>>講解MaxDB數據庫和MySQL數據庫的主要差別
 
Grub安裝、配置以及使用實例彙總講解
     (一)安裝linux時安裝grub  安裝redhat linux時會提示安裝引導程序,如果選擇grub爲引導程序,建議把grub安裝到硬盤的引導扇區MBR.grub 還可以引導其它操作系統,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和...查看完整版>>Grub安裝、配置以及使用實例彙總講解