標籤:
1.複製解決的問題
MySQL複製技術有以下一些特點:
讀寫分離(Read And Write Separate)
資料分布 (Data distribution )
Server Load Balancer(load balancing)
備份(Backups)
高可用性和容錯行 High availability and failover
2.複製如何工作
整體上來說,複製有3個步驟:
master將改變記錄到二進位日誌(binary log)中(這些記錄叫做二進位日誌事件,binary log events。)
slave將master的binary log events拷貝到它的中繼日誌(relay log)
slave重做中繼日誌中的事件,將改變反映它自己的資料。
該過程的第一部分就是master記錄二進位日誌。在每個事務更新資料完成之前,master在二日誌記錄這些改變。MySQL將事務串列的寫入二進位日誌,即使事務中的語句都是交叉執行的。在事件寫入二進位日誌完成後,master通知儲存引擎提交事務。
下一步就是slave將master的binary log拷貝到它自己的中繼日誌。首先,slave開始一個背景工作執行緒——I/O線程。I/O線程在master上開啟一個普通的串連,然後開始binlog dump process。Binlog dump process從master的二進位日誌中讀取事件,如果已經跟上master,它會睡眠並等待master產生新的事件。I/O線程將這些事件寫入中繼日誌。
SQL slave thread(SQL從線程)處理該過程的最後一步。SQL線程從中繼日誌讀取事件,並重放其中的事件而更新slave的資料,使其與master中的資料一致。只要該線程與I/O線程保持一致,中繼日誌通常會位於OS的緩衝中,所以中繼日誌的開銷很小。
此外,在master中也有一個背景工作執行緒:和其它MySQL的串連一樣,slave在master中開啟一個串連也會使得master開始一個線程。複製過程有一個很重要的限制——複製在slave上是序列化的,也就是說master上的並行更新操作不能在slave上並行操作。
圖如下:
配置主伺服器
Linux 下為 my.cnf WIN下為my.ini
#show variables like ‘log_bin‘; value = On 才可以如果為Linux下,建議在[mysqld]後添加下列數值參數#開啟bin-loglog-bin = mysql-bin#主伺服器編號為1server-id = 1#要記錄的資料庫 binlog-do-db = test添加使用者權限mysql> grant replication slave on *.* to ‘backup‘@‘192.168.104.%‘ identified by ‘123456‘;上句是添加了一個使用者,該使用者帳號為backup,密碼為123456,擁有了對所有資料庫的從Database Backup許可權不瞭解GRANT可以去百度下,很EASY。主庫建表從庫表一致同時主從運行如下指令mysql>reset master重設bin-log日誌
配置從伺服器server-id = 2 #多台從伺服器的時候保證從伺服器的ID值的唯一#選擇要備份的資料庫,過濾不備份的資料庫replicate-do-db=testreplicate-ignore-db=mysqlreplicate-ignore-db=information_schemareplicate-ignore-db=performance_schema#在5.1後設定檔中不再有master_*的配置,需在下列運行如下資訊才可行mysql>stop slave;mysql>change master to master_host= ‘192.168.104.9‘,master_user=‘admin‘,master_password=‘123456‘;#master_host為主庫的地址,user和password就是上部我們在主要資料庫所grant的帳號和密碼mysql>show master status\G;主機顯示File:日誌存放Position:位置Binlog_Do_DB:要記錄的資料庫Binlog_Ignore_DB:不要記錄的資料庫
mysql>show slave status\G;
確保Master_Log_File 與File一致, Read_Master_Log_Pos與Position一致 不一致也可以運行下列值來改變 change master to =Master_Log_File= File,Read_Master_Log_Pos= PositionSlave_IO_Running與Slave_SQL_Running都顯示yes表同步成功
MySql的主從複本備份