搜尋
首頁資料庫mysql教程Mysql主从复制技术(亲测)_MySQL

bitsCN.com

Mysql主从复制技术(亲测)

 

开始配置:  

    第一步:创建复制帐号 

        每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予
REPLICATIONSLAVE权限。 

     用户名的密码都会存储在文本文件master.info中。假如,你想创建repl用户,如下 

    mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'192.
168.1.%' IDENTIFIED BY '123456'; 

    第二步:配置My.cnf 

    配置Master的My.cnf,该文件默认位置为/etc/my.cnf 

 

        接下来对master进行配置,包括打开二进制日志,指定唯一的servr ID。例如,在配置文件
加入如下值: 

        [mysqld] 

        server-id=1 

        log-bin=mysql-bin 

 

        重启mysql,service mysql restart , 

        登录mysql -uroot -p 

        运行SHOW MASTER STATUS,输出如下: 

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

        | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 

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

        | mysql-bin.000002 |      106 |              |                  | 

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

        1 row in set (0.00 sec) 

 

    配置Slave的My.cnf,该文件默认位置为/etc/my.cnf 

        Slave的配置与master类似,你同样需要重启slave的MySQL。如下:  

        server-id = 2 

        log-bin = mysql-bin 

        relay_log = mysql-relay-bin  

        log_slave_updates = 1  

        read_only = 1  

        server-id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须
设置,例如,如果slave为其它slave的master,必须设置bin_log。在这里,我们开启了二进制
日志,而且显示的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)。  

relay_log配置中继日志,log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会
看到它的用处)。 

有些人开启了slave的二进制日志,却没有设置log_slave_updates,然后查看slave的数据是否改
变,这是一种错误的配置。所以,尽量使用read_only,它防止改变数据(除了特殊的线程)。但是,
read_only并是很实用,特别是那些需要在slave上创建表的应用。 

        重启mysql,service mysql restart , 

        登录mysql -uroot -p 

 

    第三步:启动slave 

        接下来就是让slave连接master,并开始重做master二进制日志中的事件。你不应该用配置
文件进行该操作,而应该使用CHANGE MASTER TO语句,该语句可以完全取代对配置文件的修改,
而且它可以为slave指定不同的master,而不需要停止服务器。如下: 

        mysql>CHANGE MASTER TO MASTER_HOST='192.168.60.73',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER
_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=0; 

        MASTER_LOG_POS的值为0,因为它是日志的开始位置。然后,你可以用SHOW SLAVE STATUS
语句查看slave的设置是否正确: 

        mysql> SHOW SLAVE STATUS/G 

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

             Slave_IO_State: 

                Master_Host: server1 

                Master_User: repl 

                Master_Port: 3306 

              Connect_Retry: 60 

             Master_Log_File: mysql-bin.000001 

             Read_Master_Log_Pos: 4 

             Relay_Log_File: mysql-relay-bin.000001 

              Relay_Log_Pos: 4 

             Relay_Master_Log_File: mysql-bin.000001 

            Slave_IO_Running: No 

            Slave_SQL_Running: No 

                             ...omitted... 

        Seconds_Behind_Master: NULL 

        Slave_IO_State, Slave_IO_Running, 和Slave_SQL_Running表明slave还没有开始复制过程。
日志的位置为4而不是0,这是因为0只是日志文件的开始位置,并不是日志位置。实际上,MySQL知
道的第一个事件的位置是4。 

 

为了开始复制,你可以运行: 

mysql> START SLAVE; 

mysql> SHOW SLAVE STATUS/G 

运行SHOW SLAVE STATUS查看输出结果: 

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

        Slave_IO_State: Waiting for master to send event 

                Master_Host: server1 

                Master_User: repl 

                Master_Port: 3306 

               Connect_Retry: 60 

               Master_Log_File: mysql-bin.000001 

               Read_Master_Log_Pos: 164 

              Relay_Log_File: mysql-relay-bin.000001 

              Relay_Log_Pos: 164 

              Relay_Master_Log_File: mysql-bin.000001 

              Slave_IO_Running: Yes 

              Slave_SQL_Running: Yes 

                             ...omitted... 

      Seconds_Behind_Master: 0 

注意,slave的I/O和SQL线程都已经开始运行,而且Seconds_Behind_Master不再是NULL。日志
的位置增加了,意味着一些事件被获取并执行了。如果你在master上进行修改,你可以在slave上看
到各种日志文件的位置的变化,同样,你也可以看到数据库中数据的变化。 

 

你可查看master和slave上线程的状态。在master上,你可以看到slave的I/O线程创建的连接: 

 

mysql> show processlist /G 

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

     Id: 1 

   User: root 

   Host: localhost:2096 

     db: test 

Command: Query 

   Time: 0 

 State: NULL 

   Info: show processlist 

*************************** 2. row *************************** 

     Id: 2 

   User: repl 

   Host: localhost:2144 

     db: NULL 

Command: Binlog Dump 

   Time: 1838 

 State: Has sent all binlog to slave; waiting for binlog to be updated 

   Info: NULL 

2 rows in set (0.00 sec) 

基本到这里就完成,至于后期的加强操作,我会在另行添加。 

Mysql复制的时候可以做到限制复制(主) 

binlog-do-db=work      #只复制 

binlog_ignore_db=mysql    #不允许复制 

  

Replicate_Do_DB=mysql 

replicate-ignore-db=mysql 

另外还有几条常用的命令 

flush mater;  #清除垃圾 

flush slave;  #清除垃圾 

start slave;  #开始服务 

reset slave;  #重设服务 

stop slave;   #停止服务 

  

上面复制方式是假设在新设Master和slave的情况下,实际环境并不十分实用,例如,你在一
组运行了很久的Master中加入一个新的slave呢? 

这样我们就需要优先进行数据处理。 

1.现将Master的数据库锁定,以免数据复制的时候出现差异。 

FLUSH TABLES WITH READ LOCK; 

2. 在另一个连接用mysqldump创建一个你想进行复制的数据库的转储: 

shell> mysqldump --all-databases --lock-all-tables >dbdump.db 

3. 对表释放锁。  

mysql> UNLOCK TABLES; 

上面方法中,第2部需要将数据库复制到新slave中还原,这样,Master和新Slave的数据源就一致。 

其实第2部的方法有很多,也可以使用Mysql软件进行同步,例如:Navicat for Mysql  

方法不是唯一,只要结果一致即可。 

4.完成旧数据同步后,Master中输入

mysql> show master status; 

##得到: 

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB          | 

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

| mysql-bin.000024 |    38113 |              | mysql,test | 

 

1 row in set (0.00 sec) 

5.然后在根据上表中内容输入上文启动Slave步骤的内容。 

CHANGE MASTER TO MASTER_HOST='192.168.60.73',MASTER_USER='repl',MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=0; 

6.启动slave 

START SLAVE; 

7.启动完成后进行检查。 

mysql> SHOW SLAVE STATUS/G                                                        ***************************
1. row *************************** 

               Slave_IO_State: Waiting for master to send event 

                  Master_Host: 192.168.1.171 

                  Master_User: repl 

                  Master_Port: 3306 

                Connect_Retry: 60 

              Master_Log_File: mysql-bin.000024 

              Read_Master_Log_Pos: 38255 

               Relay_Log_File: mysql-relay-bin.000002 

                Relay_Log_Pos: 393 

              Relay_Master_Log_File: mysql-bin.000024 

             Slave_IO_Running: Yes 

            Slave_SQL_Running: Yes 

              Replicate_Do_DB: 

          Replicate_Ignore_DB: mysql,wdcpdb,mysql,wdcpdb 

           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: 38255 

              Relay_Log_Space: 548 

              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: 

1 row in set (0.00 sec) 

完成 

测试过程要主要的问题: 

 

1.请先配置好Mysql 

2.开通复制前请将Mysql的库和表的框架复制过去。

(在测试一下能不能连表都复制过去!) 

 

bitsCN.com
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
您可以使用哪些工具來監視MySQL性能?您可以使用哪些工具來監視MySQL性能?Apr 23, 2025 am 12:21 AM

如何有效監控MySQL性能?使用mysqladmin、SHOWGLOBALSTATUS、PerconaMonitoringandManagement(PMM)和MySQLEnterpriseMonitor等工具。 1.使用mysqladmin查看連接數。 2.用SHOWGLOBALSTATUS查看查詢數。 3.PMM提供詳細性能數據和圖形化界面。 4.MySQLEnterpriseMonitor提供豐富的監控功能和報警機制。

MySQL與SQL Server有何不同?MySQL與SQL Server有何不同?Apr 23, 2025 am 12:20 AM

MySQL和SQLServer的区别在于:1)MySQL是开源的,适用于Web和嵌入式系统,2)SQLServer是微软的商业产品,适用于企业级应用。两者在存储引擎、性能优化和应用场景上有显著差异,选择时需考虑项目规模和未来扩展性。

在哪些情況下,您可以選擇SQL Server而不是MySQL?在哪些情況下,您可以選擇SQL Server而不是MySQL?Apr 23, 2025 am 12:20 AM

在需要高可用性、高級安全性和良好集成性的企業級應用場景下,應選擇SQLServer而不是MySQL。 1)SQLServer提供企業級功能,如高可用性和高級安全性。 2)它與微軟生態系統如VisualStudio和PowerBI緊密集成。 3)SQLServer在性能優化方面表現出色,支持內存優化表和列存儲索引。

MySQL如何處理角色集和碰撞?MySQL如何處理角色集和碰撞?Apr 23, 2025 am 12:19 AM

mySqlManagesCharacterSetsetSandCollat​​ionsyutusututf-8asthEdeFault,允許ConfigurationAtdataBase,table和columnlevels,AndrequiringCarefullageLignmentToavoidMismatches.1)setDefeaultCharactersetTercharactersetEtCollacterSeteTandColletationForAdataBase.2)conformentcollecharactersettersetertersetcollat​​ertersetcollat​​ioncollat​​ion

MySQL中有什麼觸發器?MySQL中有什麼觸發器?Apr 23, 2025 am 12:11 AM

MySQL觸發器是與表相關聯的自動執行的存儲過程,用於在特定數據操作時執行一系列操作。 1)觸發器定義與作用:用於數據校驗、日誌記錄等。 2)工作原理:分為BEFORE和AFTER,支持行級觸發。 3)使用示例:可用於記錄薪資變更或更新庫存。 4)調試技巧:使用SHOWTRIGGERS和SHOWCREATETRIGGER命令。 5)性能優化:避免複雜操作,使用索引,管理事務。

您如何在MySQL中創建和管理用戶帳戶?您如何在MySQL中創建和管理用戶帳戶?Apr 22, 2025 pm 06:05 PM

在MySQL中創建和管理用戶賬戶的步驟如下:1.創建用戶:使用CREATEUSER'newuser'@'localhost'IDENTIFIEDBY'password';2.分配權限:使用GRANTSELECT,INSERT,UPDATEONmydatabase.TO'newuser'@'localhost';3.修正權限錯誤:使用REVOKEALLPRIVILEGESONmydatabase.FROM'newuser'@'localhost';然後重新分配權限;4.優化權限:使用SHOWGRA

MySQL與Oracle有何不同?MySQL與Oracle有何不同?Apr 22, 2025 pm 05:57 PM

MySQL適合快速開發和中小型應用,Oracle適合大型企業和高可用性需求。 1)MySQL開源、易用,適用於Web應用和中小型企業。 2)Oracle功能強大,適合大型企業和政府機構。 3)MySQL支持多種存儲引擎,Oracle提供豐富的企業級功能。

與其他關係數據庫相比,使用MySQL的缺點是什麼?與其他關係數據庫相比,使用MySQL的缺點是什麼?Apr 22, 2025 pm 05:49 PM

MySQL相比其他關係型數據庫的劣勢包括:1.性能問題:在處理大規模數據時可能遇到瓶頸,PostgreSQL在復雜查詢和大數據處理上表現更優。 2.擴展性:水平擴展能力不如GoogleSpanner和AmazonAurora。 3.功能限制:在高級功能上不如PostgreSQL和Oracle,某些功能需要更多自定義代碼和維護。

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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MantisBT

MantisBT

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

mPDF

mPDF

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