搜尋
首頁資料庫mysql教程MySQL 数据库两台主机同步实战(linux)_MySQL

bitsCN.com

当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。

在实际项目中,两台分布于异地的主机上安装有MySQL数据库,两台服务器互为主备,客户要求当其中一台机器出现故障时,另外一台能够接管服务器上的应用,这就需要两台数据库的数据要实时保持一致,在这里使用MySQL的同步功能实现双机的同步复制。

以下是操作实例:

1、数据库同步设置

主机操作系统:RedHat Enterprise Linux 5

数据库版本:MySQL Ver 14.12 Distrib 5.0.22

前提:MySQL数据库正常启动

假设两台主机地址分别为:

ServA:10.240.136.9

ServB:10.240.136.149

1.1 配置同步账号

在ServA上增加一个ServB可以登录的帐号:

MySQL>GRANT all privileges ON *.* TO tongbu@'10.240.136.149' IDENTIFIED BY '123456';

在ServB上增加一个ServA可以登录的帐号:

MySQL>GRANT all privileges ON *.* TO tongbu@'10.240.136.9' IDENTIFIED BY '123456';

1.2 配置数据库参数

1、以root用户登录ServA,修改ServA的my.cnf文件

vi /etc/my.cnf

在[MySQLd]的配置项中增加如下配置:

1 default-character-set=utf8<br>2 <br>3 log-bin=MySQL-bin<br>4 <br>5 relay-log=relay-bin<br>6 <br>7 relay-log-index=relay-bin-index<br>8 <br>9 server-id=1<br>10 <br>11 master-host=10.240.136.149<br>12 <br>13 master-user=tongbu<br>14 <br>15 master-password=123456<br>16 <br>17 master-port=3306<br>18 <br>19 master-connect-retry=30<br>20 <br>21 binlog-do-db=umsdb<br>22 <br>23 replicate-do-db=umsdb<br>24 <br>25 replicate-ignore-table=umsdb.boco_tb_menu<br>26 <br>27 replicate-ignore-table=umsdb.boco_tb_connect_log<br>28 <br>29 replicate-ignore-table=umsdb.boco_tb_data_stat<br>30 <br>31 replicate-ignore-table=umsdb.boco_tb_log_record<br>32 <br>33 replicate-ignore-table=umsdb.boco_tb_workorder_record

2、以root用户登录ServB,修改ServB的my.cnf文件

vi /etc/my.cnf

在[MySQLd]的配置项中增加如下配置:

1 default-character-set=utf8<br>2 <br>3 log-bin=MySQL-bin<br>4 <br>5 relay-log=relay-bin<br>6 <br>7 relay-log-index=relay-bin-index<br>8 <br>9 server-id=2<br>10 <br>11 master-host=10.240.136.9<br>12 <br>13 master-user=tongbu<br>14 <br>15 master-password=123456<br>16 <br>17 master-port=3306<br>18 <br>19 master-connect-retry=30<br>20 <br>21 binlog-do-db=umsdb<br>22 <br>23 replicate-do-db=umsdb<br>24 <br>25 replicate-ignore-table=umsdb.boco_tb_menu<br>26 <br>27 replicate-ignore-table=umsdb.boco_tb_connect_log<br>28 <br>29 replicate-ignore-table=umsdb.boco_tb_data_stat<br>30 <br>31 replicate-ignore-table=umsdb.boco_tb_log_record<br>32 <br>33 replicate-ignore-table=umsdb.boco_tb_workorder_record

1.3 手工执行数据库同步

假设以ServA为主服务器,在ServB上重启MySQL:

service MySQLd restart

在ServB上用root用户登录MySQL,执行:

MySQL> stop slave;<p> </p><p>MySQL> load data from master;</p><p>MySQL> start slave;</p>

在ServA上重启MySQL:

service MySQLd restart

1.4 查看数据库同步状态

在MySQL命令提示符下执行:

MySQL> show slave status/G

将显示同步进程的状态,如下所示,两行蓝色字体为slave进程状态,如果都为yes表示正常;红色字体表示同步错误指示,如果有问题会有错误提示:

1 *************************** 1. row ***************************<br>2 <br>3 Slave_IO_State: Waiting for master to send event<br>4 <br>5 Master_Host: 10.21.2.90<br>6 <br>7 Master_User: tongbu<br>8 <br>9 Master_Port: 3306<br>10 <br>11 Connect_Retry: 30<br>12 <br>13 Master_Log_File: localhost-bin.000005<br>14 <br>15 Read_Master_Log_Pos: 39753882<br>16 <br>17 Relay_Log_File: localhost-relay-bin.000062<br>18 <br>19 Relay_Log_Pos: 9826663<br>20 <br>21 Relay_Master_Log_File: localhost-bin.000005<br>22 <br>23 Slave_IO_Running: Yes<br>24 <br>25 Slave_SQL_Running: Yes<br>26 <br>27 Replicate_Do_DB: bak,umsdb<br>28 <br>29 Replicate_Ignore_DB:<br>30 <br>31 Replicate_Do_Table:<br>32 <br>33 Replicate_Ignore_Table: umsdb.boco_tb_connect_log,umsdb.boco_tb_menu,umsdb.boco_tb_workorder_record,<p> </p><p>umsdb.boco_tb_data_stat,umsdb.boco_tb_log_record<br>34 <br>35 Replicate_Wild_Do_Table:<br>36 <br>37 Replicate_Wild_Ignore_Table:<br>38 <br>39 Last_Errno: 0<br>40 <br>41 Last_Error:<br>42 <br>43 Skip_Counter: 0<br>44 <br>45 Exec_Master_Log_Pos: 39753882<br>46 <br>47 Relay_Log_Space: 9826663<br>48 <br>49 Until_Condition: None<br>50 <br>51 Until_Log_File:<br>52 <br>53 Until_Log_Pos: 0<br>54 <br>55 Master_SSL_Allowed: No<br>56 <br>57 Master_SSL_CA_File:<br>58 <br>59 Master_SSL_CA_Path:<br>60 <br>61 Master_SSL_Cert:<br>62 <br>63 Master_SSL_Cipher:<br>64 <br>65 Master_SSL_Key:<br>66 <br>67 Seconds_Behind_Master:</p>

3、数据库同步测试

配置完数据库后进行测试,首先在网络正常情况下测试,在ServA上进行数据库操作,和在ServB上进行数据库操作,数据都能够同步过去。

拔掉ServB主机上的网线,然后在ServA上做一些数据库操作,之后再恢复ServB的网络环境,但是在ServB上却看不到同步的数据,通过命令show slave status/G查看发现Slave_IO_Running的状态是No,这种状态持续很长一段时间,数据才能同步到ServB上去。这是什么问题呢?同步延迟不会这么大吧。后来通过网上查找相关资料,找到一个同步延迟相关的参数:

--slave-net-timeout=seconds

参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据。

于是在配置文件中增加该参数,设置为60秒

slave-net-timeout=60

重启MySQL数据库后测试,该问题解决。

4、 数据库同步失效的解决

当数据同步进程失效后,首先手工检查slave主机当前备份的数据库日志文件在master主机上是否存在,在slave主机上运行:

MySQL> show slave status/G

一般获得如下的信息:

1 *************************** 1. row ***************************<br>2 <br>3 Slave_IO_State: Waiting for master to send event<br>4 <br>5 Master_Host: 10.21.3.240<br>6 <br>7 Master_User: tongbu<br>8 <br>9 Master_Port: 3306<br>10 <br>11 Connect_Retry: 30<br>12 <br>13 Master_Log_File: MySQL-bin.000001<br>14 <br>15 Read_Master_Log_Pos: 360<br>16 <br>17 Relay_Log_File: localhost-relay-bin.000003<br>18 <br>19 Relay_Log_Pos: 497<br>20 <br>21 Relay_Master_Log_File: MySQL-bin.000001<br>22 <br>23 Slave_IO_Running: Yes<br>24 <br>25 Slave_SQL_Running: Yes<br>26 <br>27 Replicate_Do_DB: bak<br>28 <br>29 Replicate_Ignore_DB:<br>30 <br>31 Replicate_Do_Table:<br>32 <br>33 Replicate_Ignore_Table:<br>34 <br>35 Replicate_Wild_Do_Table:<br>36 <br>37 Replicate_Wild_Ignore_Table:<br>38 <br>39 Last_Errno: 0<br>40 <br>41 Last_Error:<br>42 <br>43 Skip_Counter: 0<br>44 <br>45 Exec_Master_Log_Pos: 360<br>46 <br>47 Relay_Log_Space: 497<br>48 <br>49 Until_Condition: None<br>50 <br>51 Until_Log_File:<br>52 <br>53 Until_Log_Pos: 0<br>54 <br>55 Master_SSL_Allowed: No<br>56 <br>57 Master_SSL_CA_File:<br>58 <br>59 Master_SSL_CA_Path:<br>60 <br>61 Master_SSL_Cert:<br>62 <br>63 Master_SSL_Cipher:<br>64 <br>65 Master_SSL_Key:<br>66 <br>67 Seconds_Behind_Master: 0<br>其中Master_Log_File描述的是master主机上的日志文件。

在master上检查当前的数据库列表:

MySQL> show master logs;

得到的日志列表如下:

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

| Log_name | File_size |

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

| localhost-bin.000001 | 495 |

| localhost-bin.000002 | 3394 |

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

如果slave主机上使用的的Master_Log_File对应的文件在master的日志列表中存在,在slave主机上开启从属服务器线程后可以自动同步:

MySQL> start slave;

如果master主机上的日志文件已经不存在,则需要首先从master主机上恢复全部数据,再开启同步机制。

在slave主机上运行:

MySQL> stop slave;

在master主机上运行:

MySQL> stop slave;

在slave主机上运行:

MySQL> load data from master;

MySQL> reset master;

MySQL> start slave;

在master主机上运行:

MySQL> reset slave;<p> </p><p>MySQL>start slave;</p>

注意:LOAD DATA FROM MASTER目前只在所有表使用MyISAM存储引擎的数据库上有效。

bitsCN.com
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
說明InnoDB重做日誌和撤消日誌的作用。說明InnoDB重做日誌和撤消日誌的作用。Apr 15, 2025 am 12:16 AM

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

在解釋輸出(類型,鍵,行,額外)中要查找的關鍵指標是什麼?在解釋輸出(類型,鍵,行,額外)中要查找的關鍵指標是什麼?Apr 15, 2025 am 12:15 AM

EXPLAIN命令的關鍵指標包括type、key、rows和Extra。 1)type反映查詢的訪問類型,值越高效率越高,如const優於ALL。 2)key顯示使用的索引,NULL表示無索引。 3)rows預估掃描行數,影響查詢性能。 4)Extra提供額外信息,如Usingfilesort提示需要優化。

在解釋中使用臨時狀態以及如何避免它是什麼?在解釋中使用臨時狀態以及如何避免它是什麼?Apr 15, 2025 am 12:14 AM

Usingtemporary在MySQL查詢中表示需要創建臨時表,常見於使用DISTINCT、GROUPBY或非索引列的ORDERBY。可以通過優化索引和重寫查詢避免其出現,提升查詢性能。具體來說,Usingtemporary出現在EXPLAIN輸出中時,意味著MySQL需要創建臨時表來處理查詢。這通常發生在以下情況:1)使用DISTINCT或GROUPBY時進行去重或分組;2)ORDERBY包含非索引列時進行排序;3)使用複雜的子查詢或聯接操作。優化方法包括:1)為ORDERBY和GROUPB

描述不同的SQL交易隔離級別(讀取未讀取,讀取,可重複的讀取,可序列化)及其在MySQL/InnoDB中的含義。描述不同的SQL交易隔離級別(讀取未讀取,讀取,可重複的讀取,可序列化)及其在MySQL/InnoDB中的含義。Apr 15, 2025 am 12:11 AM

MySQL/InnoDB支持四種事務隔離級別:ReadUncommitted、ReadCommitted、RepeatableRead和Serializable。 1.ReadUncommitted允許讀取未提交數據,可能導致臟讀。 2.ReadCommitted避免臟讀,但可能發生不可重複讀。 3.RepeatableRead是默認級別,避免臟讀和不可重複讀,但可能發生幻讀。 4.Serializable避免所有並發問題,但降低並發性。選擇合適的隔離級別需平衡數據一致性和性能需求。

MySQL與其他數據庫:比較選項MySQL與其他數據庫:比較選項Apr 15, 2025 am 12:08 AM

MySQL適合Web應用和內容管理系統,因其開源、高性能和易用性而受歡迎。 1)與PostgreSQL相比,MySQL在簡單查詢和高並發讀操作上表現更好。 2)相較Oracle,MySQL因開源和低成本更受中小企業青睞。 3)對比MicrosoftSQLServer,MySQL更適合跨平台應用。 4)與MongoDB不同,MySQL更適用於結構化數據和事務處理。

MySQL索引基數如何影響查詢性能?MySQL索引基數如何影響查詢性能?Apr 14, 2025 am 12:18 AM

MySQL索引基数对查询性能有显著影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

MySQL:新用戶的資源和教程MySQL:新用戶的資源和教程Apr 14, 2025 am 12:16 AM

MySQL學習路徑包括基礎知識、核心概念、使用示例和優化技巧。 1)了解表、行、列、SQL查詢等基礎概念。 2)學習MySQL的定義、工作原理和優勢。 3)掌握基本CRUD操作和高級用法,如索引和存儲過程。 4)熟悉常見錯誤調試和性能優化建議,如合理使用索引和優化查詢。通過這些步驟,你將全面掌握MySQL的使用和優化。

現實世界Mysql:示例和用例現實世界Mysql:示例和用例Apr 14, 2025 am 12:15 AM

MySQL在現實世界的應用包括基礎數據庫設計和復雜查詢優化。 1)基本用法:用於存儲和管理用戶數據,如插入、查詢、更新和刪除用戶信息。 2)高級用法:處理複雜業務邏輯,如電子商務平台的訂單和庫存管理。 3)性能優化:通過合理使用索引、分區表和查詢緩存來提升性能。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具