<span id="11vvv"></span>
<strike id="11vvv"></strike><strike id="11vvv"><i id="11vvv"><del id="11vvv"></del></i></strike>
<span id="11vvv"><i id="11vvv"></i></span>
<strike id="11vvv"><i id="11vvv"><del id="11vvv"></del></i></strike>
<span id="11vvv"><dl id="11vvv"></dl></span>
<strike id="11vvv"></strike>
<strike id="11vvv"></strike>
<strike id="11vvv"><i id="11vvv"></i></strike>
<strike id="11vvv"><ins id="11vvv"></ins></strike>
<span id="11vvv"><i id="11vvv"></i></span>
<del id="11vvv"><video id="11vvv"><del id="11vvv"></del></video></del>
<strike id="11vvv"><i id="11vvv"></i></strike>
<strike id="11vvv"></strike>
<span id="11vvv"></span>
<strike id="11vvv"><dl id="11vvv"><del id="11vvv"></del></dl></strike>
青島對講機廠家聯盟

MySQL 復制介紹及搭建

2022-08-01 10:05:02

(點擊上方公眾號,可快速關注)


來源:bestvivi

鏈接:http://bestvivi.com/2015/09/06/MySQL復制介紹及搭建/


MySQL復制介紹


MySQL復制就是一臺MySQL服務器(slave)從另一臺MySQL服務器(master)進行日志的復制然后再解析日志并應用到自身,類似Oracle中的Data Guard。


MySQL復制有那些好處:


  • 第一是解決宕機帶來的數據不一致,因為MySQL復制可以實時備份數據;


  • 第二點是減輕數據庫服務器的壓力,多臺服務器的性能一般比單臺要好。但是MySQL復制不適合大數據量,大數據量推薦使用集群。


MySQL復制過程分成三步:


  • master將改變記錄到二進制日志(binary log)。這些記錄過程叫做二進制日志事件,binary log events;


  • slave將master的binary log events拷貝到它的中繼日志(relay log);


  • slave重做中繼日志中的事件,將改變應用到自己的數據庫中。?MySQL復制是異步的且串行化的



MySQL復制搭建


環境準備


master 192.168.1.5

slave 192.168.1.6

OS:Oracle Linux 6.1

MySQL:5.5.37


Master配置


1)分配復制權限


主庫和從庫均需要執行


mysql> grant replication client,replication slave on *.* to root@'192.168.1.%' identified by 'root';

Query OK, 0 rows affected (0.00 sec)


2)清空日志文件


主從庫都是默認開啟二進制日志文件


mysql> show binary logs;

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

| Log_name ? ? ? ? | File_size |

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

| mysql-bin.000001 | ? ? 26636 |

| mysql-bin.000002 | ? 1069399 |

| mysql-bin.000003 | ? ? 26636 |

| mysql-bin.000004 | ? 1069399 |

| mysql-bin.000005 | ? ? ? 536 |

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

5 rows in set (0.00 sec)


mysql> reset master;

Query OK, 0 rows affected (0.01 sec)


mysql> show binary logs;

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

| Log_name ? ? ? ? | File_size |

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

| mysql-bin.000001 | ? ? ? 107 |

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

1 row in set (0.00 sec)


需要注意的是,如果不想清空日志文件的話,需要記錄當前master的log_file和log_pos,并在下面啟用復制操作時指定這兩個參數或者在slave的配置文件指定。


Slave設置


1) 修改從服務器server-id


# vim /etc/my.cnf

server-id = 2


修改完以后需要重啟數據庫


2)清空日志文件,同Master


3)啟用復制


讓slave連接master并開始重做master二進制日志中的事件


mysql> change master to?

master_host='192.168.1.5',master_user='root',master_password='root',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=0;


master_log_pos的值為0,因為它是日志的開始位置;master_log_file是初始日志文件。如果master日志沒有被清空,這里就是當前master的日志信息


需要注意的是,默認情況下,會同步該用戶下所有的DB,如果想限定哪些DB,有3種思路


  • 在master上的/etc/my.inf中通過參數binlog-do-db、binlog-ignore-db設置需要同步的數據庫。


  • 在執行grant分配權限操作的時候,限定數據庫


  • 在slave上限定數據庫使用replicate-do-db=dbname


4)開啟slave


mysql> start slave;

Query OK, 0 rows affected (0.00 sec)


5)確認Slave是否和Mater成功通信。如果 Slave_IO_Running和Slave_SQL_Running都是yes,則證明配置成功


mysql> show slave status\G;

*************************** 1. row ***************************

? ? ? ? ? ? ? ?Slave_IO_State: Waiting for master to send event

? ? ? ? ? ? ? ? ? Master_Host: 192.168.1.5

? ? ? ? ? ? ? ? ? Master_User: root

? ? ? ? ? ? ? ? ? Master_Port: 3306

? ? ? ? ? ? ? ? Connect_Retry: 60

? ? ? ? ? ? ? Master_Log_File: mysql-bin.000001

? ? ? ? ? Read_Master_Log_Pos: 107

? ? ? ? ? ? ? ?Relay_Log_File: rac-node2-relay-bin.000002

? ? ? ? ? ? ? ? Relay_Log_Pos: 253

? ? ? ? Relay_Master_Log_File: mysql-bin.000001

? ? ? ? ? ? **Slave_IO_Running: Yes**

? ? ? ? ? ? **Slave_SQL_Running: Yes**

? ? ? ? ? ? ? Replicate_Do_DB:?

? ? ? ? ? Replicate_Ignore_DB:?

? ? ? ? ? ?Replicate_Do_Table:?

? ? ? ?Replicate_Ignore_Table:?

? ? ? Replicate_Wild_Do_Table:?

? Replicate_Wild_Ignore_Table:?

? ? ? ? ? ? ? ? ? ?Last_Errno: 0

? ? ? ? ? ? ? ? ? ?Last_Error:?

? ? ? ? ? ? ? ? ?Skip_Counter: 0

? ? ? ? ? Exec_Master_Log_Pos: 107

? ? ? ? ? ? ? Relay_Log_Space: 413

? ? ? ? ? ? ? Until_Condition: None

? ? ? ? ? ? ? ?Until_Log_File:?

? ? ? ? ? ? ? ? Until_Log_Pos: 0

? ? ? ? ? ?Master_SSL_Allowed: No

? ? ? ? ? ?Master_SSL_CA_File:?

? ? ? ? ? ?Master_SSL_CA_Path:?

? ? ? ? ? ? ? Master_SSL_Cert:?

? ? ? ? ? ? Master_SSL_Cipher:?

? ? ? ? ? ? ? ?Master_SSL_Key:?

? ? ? ? Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

? ? ? ? ? ? ? ? Last_IO_Errno: 0

? ? ? ? ? ? ? ? Last_IO_Error:?

? ? ? ? ? ? ? ?Last_SQL_Errno: 0

? ? ? ? ? ? ? ?Last_SQL_Error:?

? Replicate_Ignore_Server_Ids:?

? ? ? ? ? ? ?Master_Server_Id: 1

1 row in set (0.00 sec)


測試


Master創建數據庫


mysql> create database d;

mysql> show databases;

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

| Database ? ? ? ? ? |

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

| information_schema |

| d ? ? ? ? ? ? ? ? ?|

| mysql ? ? ? ? ? ? ?|

| performance_schema |

| test ? ? ? ? ? ? ? |

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


Slave查看數據庫已同步


mysql> show databases;

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

| Database ? ? ? ? ? |

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

| information_schema |

| d ? ? ? ? ? ? ? ? ?|

| mysql ? ? ? ? ? ? ?|

| performance_schema |

| test ? ? ? ? ? ? ? |

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


Master創建表插入數據


mysql> use d

mysql> create table t(id int);

mysql> insert into t values(1);

mysql> commit;


Slave查看


mysql> use d;

mysql> show tables;

mysql> select * from t;

+------+

| id ? |

+------+

| ? ?1 |

+------+


通過以上驗證,可以看到主服務器上的修改能夠正常同步到從服務器。


補充說明


1)做了MySQL主從復制以后,使用mysqldump對數據備份時,一定要注意按照如下方式:


mysqldump –master-data –single-transaction –user=username –password=password dbname> dumpfilename


這樣就可以保留file和position的信息,在新搭建一個slave的時候,還原完數據庫,file和position的信息也隨之更新,接著再start slave 就可以很迅速的完成增量同步。


其他復制方式


主主復制


master-slave只能進行單向操作,像網絡中的半雙工。master-master可以實現服務器之間互相同步,且主主復制可以避免出現單點故障后整個系統宕機。主主復制最大的問題就是數據插入或更新沖突。配置方法同主從復制,反過來讓slave同步master。注意master_log_file和master_log_pos參數要與master上對應。具體可以參考這里


單一master和多slave


由一個master和多個slave組成的復制系統比較簡單。slave之間并不互相通信,只能與master通信。如果寫操作較少,讀操作很多,可以采用。可以將讀操作分布到其他slave,從而減輕master的壓力。但slave增加到一定數量時,slave對master的負載以及網絡帶寬都會成為問題。


主從多級復制


讀操作很多可以采用單一maste和多slave,但增大到一定slave后連到master的slaveIO線程太多會造成master壓力增大,從而造成數據復制延時。多級復制就是為了解決這個問題。如果想實現主-從(主)-從多級復制,需要設置log-slave-updates參數。同時二進制日志也必須啟用。



當然,增加復制的級聯層次,同一個變更傳到最底層的Slave所需要經過的MySQL也會更多,同樣可能造成延時較長的風險。如果條件允許,傾向于通過拆分成多個Replication集群來解決。



【今日微信公號推薦↓】


更多推薦請看值得關注的技術和設計公眾號


其中推薦了包括技術設計極客?和?IT相親相關的熱門公眾號。技術涵蓋:Python、Web前端、Java、安卓、iOS、PHP、C/C++、.NET、Linux、數據庫、運維、大數據、算法、IT職場等。點擊《值得關注的技術和設計公眾號》,發現精彩!

友情鏈接

Copyright ? 2023 All Rights Reserved 版權所有 青島對講機廠家聯盟

<span id="11vvv"></span>
<strike id="11vvv"></strike><strike id="11vvv"><i id="11vvv"><del id="11vvv"></del></i></strike>
<span id="11vvv"><i id="11vvv"></i></span>
<strike id="11vvv"><i id="11vvv"><del id="11vvv"></del></i></strike>
<span id="11vvv"><dl id="11vvv"></dl></span>
<strike id="11vvv"></strike>
<strike id="11vvv"></strike>
<strike id="11vvv"><i id="11vvv"></i></strike>
<strike id="11vvv"><ins id="11vvv"></ins></strike>
<span id="11vvv"><i id="11vvv"></i></span>
<del id="11vvv"><video id="11vvv"><del id="11vvv"></del></video></del>
<strike id="11vvv"><i id="11vvv"></i></strike>
<strike id="11vvv"></strike>
<span id="11vvv"></span>
<strike id="11vvv"><dl id="11vvv"><del id="11vvv"></del></dl></strike>
1v3多肉多车高校生活的玩视频