
1.復制概述
Mysql內建的復制功能是構建大型,高性能應用程序的基礎。將Mysql的數據分布到多個系統上去,這種分布的機制,是通過將Mysql的某一臺主機的數據復制到其它主機(slaves)上,并重新執行一遍來實現的。復制過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日志文件,并維護文件的一個索引以跟蹤日志循環。這些日志可以記錄發送到從服務器的更新。當一個從服務器連接主服務器時,它通知主服務器從服務器在日志中讀取的最后一次成功更新的位置。從服務器接收從那時起發生的任何更新,然后封鎖并等待主服務器通知新的更新。
請注意當你進行復制時,所有對復制中的表的更新必須在主服務器上進行。否則,你必須要小心,以避免用戶對主服務器上的表進行的更新與對從服務器上的表所進行的更新之間的沖突。
1.1 mysql支持的復制類型:
(1)基于語句的復制:在主服務器上執行的SQL語句,在從服務器上執行同樣的語句。MySQL默認采用基于語句的復制,效率比較高。一旦發現沒法精確復制時,會自動選著基于行的復制。
(2)基于行的復制:把改變的內容復制過去,而不是把命令在從服務器上執行一遍. 從mysql5.0開始支持
(3)混合類型的復制: 默認采用基于語句的復制,一旦發現基于語句的無法精確的復制時,就會采用基于行的復制。
1.2 復制解決的問題
MySQL復制技術有以下一些特點:
(1) 數據分布 (Data distribution )
(2) 負載平衡(load balancing)
(3) 備份(Backups)
(4) 高可用性和容錯行 High availability and failover
1.3 復制如何工作
整體上來說,復制有3個步驟:
(1) master將改變記錄到二進制日志(binary log)中(這些記錄叫做二進制日志事件,binary log events);
(2) slave將master的binary log events拷貝到它的中繼日志(relay log);
(3) slave重做中繼日志中的事件,將改變反映它自己的數據。
2 .復制配置
有兩臺MySQL數據庫服務器Master和slave,Master為主服務器,slave為從服務器,初始狀態時,Master和slave中的數據信息相同,當Master中的數據發生變化時,slave也跟著發生相應的變化,使得master和slave的數據信息同步,達到備份的目的。
要點:
負責在主、從服務器傳輸各種修改動作的媒介是主服務器的二進制變更日志,這個日志記載著需要傳輸給從服務器的各種修改動作。因此,主服務器必須激活二進制日志功能。從服務器必須具備足以讓它連接主服務器并請求主服務器把二進制變更日志傳輸給它的權限。
一、安裝MySQL
說明:在兩臺MySQL服務器192.168.21.169和192.168.21.168上分別進行如下操作,安裝MySQL 5.5.22
二、配置MySQL主服務器(192.168.21.169)
mysql -u root -p #進入MySQL控制臺create database AMT_DB; #建立數據庫AMT_DBinsert into mysql.user(Host,User,Password) values ('localhost','archermind',password('123456')); #創建用戶archermind,建立MySQL主從數據庫同步用戶replication密碼123456 flush privileges; #刷新系統授權表#授權用戶replication只能從192.168.21.168這個IP訪問主服務器192.168.21.169上面的數據庫,并且只具有數據庫備份的權限grant replication slave on *.* to 'replication'@'192.168.21.168' identified by '123456' with grant option;復制代碼
三、把MySQL主服務器192.168.21.169中的數據庫AMT_DB導入到MySQL從服務器192.168.21.168中
1、導出數據庫AMT_DB
mysqldump -u root -p AMT_DB > /home/replication.sql #在MySQL主服務器進行操作,導出數據庫AMT_DB到/home/replication.sql復制代碼
備注:在導出之前可以先進入MySQL控制臺執行下面命令
flush tables with read lock; #數據庫只讀鎖定命令,防止導出數據庫的時候有數據寫入unlock tables; #解除鎖定復制代碼
2、導入數據庫到MySQL從服務器
mysql -u root -p #進入從服務器MySQL控制臺create database AMT_DB; #創建數據庫use AMT_DB #進入數據庫source /home/replication.sql #導入備份文件到數據庫mysql -u replication -h 192.168.21.169 -p #測試在從服務器上登錄到主服務器復制代碼
四、配置MySQL主服務器的my.cnf文件
#vim /etc/my.cnf #編輯配置文件,在[mysqld]部分添加下面內容 server-id=1 #設置服務器id,為1表示主服務器,注意:如果原來的配置文件中已經有這一行,就不用再添加了。 log_bin=mysql-bin #啟動MySQ二進制日志系統,注意:如果原來的配置文件中已經有這一行,就不用再添加了。 binlog-do-db=AMT_DB #需要同步的數據庫名,如果有多個數據庫,可重復此參數,每個數據庫一行 binlog-ignore-db=mysql #不同步mysql系統數據庫#service mysqld restart #重啟MySQL復制代碼
mysql -u root -p #進入mysql控制臺show master status; 查看主服務器,出現以下類似信息+------------------+----------+--------------+------------------+|File |Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000001 | 7131 | AMT_DB |mysql |+------------------+----------+--------------+------------------+1 row in set (0.00 sec)復制代碼
注意:這里記住File的值:mysql-bin.000001和Position的值:7131,后面會用到。
五、配置MySQL從服務器的my.cnf文件
#vim /etc/my.cnf #編輯配置文件,在[mysqld]部分添加下面內容server-id=2 #配置文件中已經有一行server-id=1,修改其值為2,表示為從數據庫log-bin=mysql-bin #啟動MySQ二進制日志系統,注意:如果原來的配置文件中已經有這一行,就不用再添加了。replicate-do-db=AMT_DB #需要同步的數據庫名,如果有多個數據庫,可重復此參數,每個數據庫一行replicate-ignore-db=mysql #不同步mysql系統數據庫:wq! #保存退出#service mysqld restart #重啟MySQL復制代碼
注意:MySQL 5.1.7版本之后,已經不支持把master配置屬性寫入my.cnf配置文件中了,只需要把同步的數據庫和要忽略的數據庫寫入即可。
mysql -u root -p #進入MySQL控制臺slave stop; #停止slave同步進程change master to master_host='192.168.21.169',master_user='replication',master_password='123456',master_log_file='mysql-bin.000001' ,master_log_pos=7131; #執行同步語句slave start; #開啟slave同步進程SHOW SLAVE STATUSG #查看slave同步信息,出現以下內容*************************** 1. row *************************** Slave_IO_State:Waiting for master to send event Master_Host:192.168.21.169 Master_User:replication Master_Port:3306 Connect_Retry:60 Master_Log_File:mysql-bin.000001 Read_Master_Log_Pos:7131 Relay_Log_File:MySQLSlave-relay-bin.000001 Relay_Log_Pos:253 Relay_Master_Log_File:mysql-bin.000001 Slave_IO_Running:Yes Slave_SQL_Running:Yes Replicate_Do_DB:AMT_DB Replicate_Ignore_DB:mysql Replicate_Do_Table: Replicate_Ignore_Table:1 row in set (0.00 sec)復制代碼
注意查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上這兩個參數的值為Yes,即說明配置成功!
六、測試MySQL主從服務器雙機熱備是否成功
1、進入MySQL主服務器
mysql -u root-p #進入主服務器MySQL控制臺use AMT_DB #進入數據庫CREATETABLE test ( id int not null primary key,name char(20)); #創建test復制代碼
2、進入MySQL從服務器
mysql -u root-p #進入MySQL控制臺use AMT_DB #進入數據庫show tables; #查看AMT_DB表結構,會看到有一個新建的表test,表示數據庫同步成功復制代碼
至此,MySQL數據庫配置主從服務器實現雙機熱備