程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySql的主從復制備份

MySql的主從復制備份

編輯:MySQL綜合教程

MySql的主從復制備份


1.復制解決的問題
MySQL復制技術有以下一些特點:
讀寫分離(Read And Write Separate)
數據分布 (Data distribution )
負載平衡(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-log log-bin = mysql-bin #主服務器編號為1 server-id = 1 #要記錄的數據庫 binlog-do-db = test 添加用戶權限 mysql> grant replication slave on *.* to 'backup'@'192.168.104.%' identified by '123456'; 上句是添加了一個用戶,該用戶帳號為backup,密碼為123456,擁有了對所有數據庫的從數據庫備份權限 不了解GRANT可以去百度下,很EASY。 主庫建表 從庫表一致 同時主從運行如下指令 mysql>reset master重置bin-log日志
配置從服務器 server-id = 2 #多台從服務器的時候保證從服務器的ID值的唯一 #選擇要備份的數據庫,過濾不備份的數據庫 replicate-do-db=test replicate-ignore-db=mysql replicate-ignore-db=information_schema replicate-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= Position Slave_IO_Running與Slave_SQL_Running都顯示yes表同步成功

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved