搜尋
首頁資料庫mysql教程MySQL数据库主从复制_MySQL

  MySQL支持单向、异步复制,一台作为Master服务器、多台作为Slave服务器。
    MySQL主从复制通常采用单主星型结构,如A-->B、A-->C;当然,也可以采用链式结构,如A-->B-->C。
    主服务器将更新写入二进制日志文件(log-bin),并传递给从服务器再执行一次。通常情况下,一旦主服务器的日志文件更新,从服务器就会立即启动复制,只要网络和硬件性能足够,这个延迟会非常小(趋于0是差不多就是同步了)。
    主、从服务器均保持在线,允许同时对外提供服务,也相当于一种负载均衡(只读的)。
    从服务器可以设置为只读,以避免误操作造成的不一致性,也因此可以将数据库查询、更新分离(A可读可写,B/C只读)。
 
############################################################################## 
 
系统环境: 
    RHEL 5.5 [2.6.18-194.el5] 
 
软件环境: 
    mysql-server-5.0.77-4.el5_4.2
    mysql-5.0.77-4.el5_4.2     采用RHEL5自带的RPM包安装,主、从服务器都装上,默认的数据库目录位于 /var/lib/mysql/
 
############################################################################## 
 
一、MySQL主服务器(server105,192.168.4.105) 1. 备份现有库   方法1,在线热备份:
[root@server105 ~]# mysqldump -u root -p --all-databases > /tmp/mysql-master.sql   方法2,二进制冷备:
[root@server105 ~]# service mysqld stop        #//也可以不停止,改为锁定(mysql> FLUSH TABLES WITH READ LOCK;)
[root@server105 ~]# cd /var/lib/mysql/
[root@server105 mysql]# tar zcpvf /tmp/mysql-master.tar.gz ./
[root@server105 mysql]# service mysqld start
2. 修改my.cnf配置,重启mysqld服务
[root@server105 ~]# cp /etc/my.cnf /etc/my.cnf.origin
[root@server105 ~]# vim /etc/my.cnf
[mysqld]
.. ..
log-bin=mysql-bin       #//使用二进制日志文件
server-id=1      #//指定服务器标识,参与复制的每台服务器不能相同
innodb_flush_log_at_trx_commit=1   #//提高InnoDB复制的耐受性、一致性
sync-binlog=1       #//启用日志同步
.. .. [root@server105 ~]# service mysqld restart
3. 创建复制账户
    对于仅执行复制的账户,只要授予 REPLICATION SLAVE 权限就够了;
    如果计划让从服务器使用 LOAD 方式导入主库(LOAD DATA FROM MASTER、LOAD TABLE FROM MASTER),还需要授予 SUPER、RELOAD 全局权限,以及对相关库表的 SELECT 权限。在执行 LOAD 操作时对于无 SELECT 权限的表将会被忽略到,从而易造成主从的不一致性。 [root@server105 ~]# mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* TO  'replicater'@'192.168.4.%' IDENTIFIED BY  'pwd @123 '; 或者 [root@server105 ~]# mysql -u root -p
mysql> GRANT REPLICATION SLAVE,SUPER,RELOAD,SELECT ON *.* TO  'replicater'@'192.168.4.%' IDENTIFIED BY  'pwd @123 ';
4. 确认主库状态
    记下日志文件名(mysql-bin.000005)、偏移量(3586),从服务器首次复制时需要用到 mysql> SHOW MASTER STATUS;
+----------------    -+------------------+-------------------+----------------------+
|  File               |  Position        | Binlog_Do_DB      |  Binlog_Ignore_DB    |
+---------------------+------------------+-------------------+----------------------+
|  mysql-bin.000005   |      3586        |                   |                      |
+---------------------+------------------+-------------------+----------------------+
1 row in set (0.00 sec)     二、MySQL从服务器(server205,192.168.4.205) 1. 导入现有库(主库的备份)   方法1,在线热导入:
[root@server205 ~]# scp 192.168.4.105:/tmp/mysql-master.sql /tmp/
[root@server205 ~]# mysql -u root -p [root@server205 ~]# service mysqld stop
[root@server205 ~]# rm -rf /var/lib/mysql/*                 #//此步骤可选
[root@server205 ~]# scp 192.168.4.105:/tmp/mysql-master.tar.gz  /tmp/
[root@server205 ~]# tar zxpvf /tmp/mysql-master.tar.gz -C /var/lib/
[root@server205 ~]# service mysqld start
2. 修改my.cnf配置,重启mysqld服务
[root@server205 ~]# cp /etc/my.cnf /etc/my.cnf.origin
[root@server205 ~]# vim /etc/my.cnf
[mysqld]
.. ..
log-bin=mysql-bin       #//使用二进制日志文件
server-id=2      #//指定服务器标识,参与复制的每台服务器不能相同
innodb_flush_log_at_trx_commit=1   #//提高InnoDB复制的耐受性、一致性
sync-binlog=1       #//启用日志同步 [root@server205 ~]# service mysqld restart
3. 启动从库复制 1)首次复制操作
[root@server205 ~]# mysql -u root -p
mysql> CHANGE MASTER TO MASTER_HOST='192.168.4.105',
MASTER_USER='replicater',
MASTER_PASSWORD='pwd @123 ',
MASTER_LOG_FILE='mysql-bin.000005',
MASTER_LOG_POS=3586; mysql> SLAVE START;                      #//启用从库复制 2)查看连接信息
[root@server205 ~]# head /var/lib/mysql/master.info      #//连接信息会存于此文件,提供给mysqld服务调用
14
mysql-bin.000005
3586
192.168.4.105
replicater
pwd @123
3306
60
0
.. .. 3)确认复制状态
mysql> SHOW SLAVE STATUS/G
******************************* 1. row **********************************
  Slave_IO_State: Waiting for master to send event
  Master_Host: 192.168.4.105
  Master_USER: replicater
  Master_Port: 3306
  Connect_Retry: 60
  Master_Log_File: mysql-bin.000005
  Read_Master_Log_Pos: 3586
  Relay_Log_File: mysqld-relay-bin-bin.000016
  Relay_Log_Pos: 372
  Relay_Master_Log_File: mysql-bin.000005
  Slave_IO_Running: Yes            #//从服务器的IO线程已运行
  Slave_SQL_Running: Yes           #//从服务器的SQL线程已运行
  .. ..
  .. ..
  Seconds_Behind_Master: 0         #//此项可反映主-->从复制延迟,0为最理想状态(无延迟)
1 row in set (0.00 sec)
4. 调整服务脚本,重启mysqld服务
    通过修改start()函数的执行语句,可以调控mysqld服务的启动选项。例如:
--log-slave-updates=1              #//记录从库更新,以便允许链式复制
--read-only                        #//将从库设为只读,仅允许从服务器线程或具有SUPER权限的用户执行
--relay-log=mysqld-relay-bin       #//使用固定的中继日志文件
--report-host=server205            #//报告给主服务器的主机名或IP地址
--slave_compressed_protocol=1      #//复制过程启用压缩,若启用此项,主、从服务器都应该添加
--replicate-do-db=mysql            #//仅复制指定的库,其他库将被忽略,此选项可设置多条(省略时复制所有库)
--replicate-do-db=mytestdb
--replicate-ignore-db=test         #//不复制(忽略)指定的库,此选项也可以设置多条,do和ignore用其中一种就可以了
--skip-slave-start                 #//服务器启动时跳过复制,需要手动 SLAVE START
--slave-net-timeout=60             #//当从服务器网络中断时,再次重试之前等待的时间(默认为60秒)
--master-connect-retry=60          #//当主服务器连接丢失时,再次重试之前等待的时间(默认为60秒)
.. .. [root@server205 ~]# vim /etc/init.d/mysqld
.. ..
sart() {
    .. ..
    EXTRA_ARGS="--log-slave-updates=1 --read-only --relay-log=mysqld-relay-bin --report-host=server205 --slave_compressed_protocol=1 --replicate-do-db=mysql -- replicate-do-db=mytestdb"
    /usr/bin/mysqld_safe --datadir="$datadir" --socket="$socketfile" /
            --log-error="$errlogfile" --pid-file="$mypidfile" /
            --user=mysql $EXTRA_ARGS > /dev/null 2>&1 &
    ret=$?
    .. ..
}
.. .. [root@server205 ~]# service mysqld restart  
三、验证主、从同步效果 1. 在主服务器上,执行更新操作
    针对配置为执行复制的库,可以做建库/删库、建表/删表、添加/修改/删除表记录等各种更新操作。 2. 在从服务器上,观察数据库的变化
    通过SELECT查询确认结果,与主服务器的数据库操作结果一致,几乎是实时的。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何識別和優化MySQL中的慢速查詢? (慢查詢日誌,performance_schema)如何識別和優化MySQL中的慢速查詢? (慢查詢日誌,performance_schema)Apr 10, 2025 am 09:36 AM

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL:開發人員的基本技能MySQL和SQL:開發人員的基本技能Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

描述MySQL異步主奴隸複製過程。描述MySQL異步主奴隸複製過程。Apr 10, 2025 am 09:30 AM

MySQL異步主從復制通過binlog實現數據同步,提升讀性能和高可用性。 1)主服務器記錄變更到binlog;2)從服務器通過I/O線程讀取binlog;3)從服務器的SQL線程應用binlog同步數據。

mysql:簡單的概念,用於輕鬆學習mysql:簡單的概念,用於輕鬆學習Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL:數據庫的用戶友好介紹MySQL:數據庫的用戶友好介紹Apr 10, 2025 am 09:27 AM

MySQL的安裝和基本操作包括:1.下載並安裝MySQL,設置根用戶密碼;2.使用SQL命令創建數據庫和表,如CREATEDATABASE和CREATETABLE;3.執行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.創建索引和存儲過程以優化性能和實現複雜邏輯。通過這些步驟,你可以從零開始構建和管理MySQL數據庫。

InnoDB緩衝池如何工作,為什麼對性能至關重要?InnoDB緩衝池如何工作,為什麼對性能至關重要?Apr 09, 2025 am 12:12 AM

InnoDBBufferPool通過將數據和索引頁加載到內存中來提升MySQL數據庫的性能。 1)數據頁加載到BufferPool中,減少磁盤I/O。 2)臟頁被標記並定期刷新到磁盤。 3)LRU算法管理數據頁淘汰。 4)預讀機制提前加載可能需要的數據頁。

MySQL:初學者的數據管理易用性MySQL:初學者的數據管理易用性Apr 09, 2025 am 12:07 AM

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。

與MySQL中使用索引相比,全表掃描何時可以更快?與MySQL中使用索引相比,全表掃描何時可以更快?Apr 09, 2025 am 12:05 AM

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。

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

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Safe Exam Browser

Safe Exam Browser

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