操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    一、概述

    主從復制是指將主數據庫的DDL和DML操作通過二進制日志傳到從庫服務器中,然后在從庫對這些日志重新執行,從而使得從庫和主庫數據保持同步。

    MySQL也支持一臺主庫同時向多臺從庫進行復制,從庫同時也可以作為其他從服務器的主庫,實現鏈裝復制。

    MySQL復制的優點包含以下三點:

    1. 主庫出現問題,可以快速切換到從庫提供服務
    2. 實現讀寫分離,降低主庫的訪問壓力
    3. 可以在從庫執行備份,以避免備份期間影響主庫服務

    二、原理

    MySQL主從復制的核心就是二進制日志 具體過程如下:

    從上圖來看,復制分成三步:

    1. Master主庫在事務提交時,會把數據變更記錄在二進制日志文件 binlog中。
    2. 從庫讀取主庫的二進制文件binlog,寫入到從庫的中繼日志 relay log。
    3. Slave 重做中繼日志事件,將改變反映它自己的數據。

    注意:這里面有兩個線程:iothread 和sqlthread

    iothread線程是:在主庫的二進制binlog日志有變更的時候,就會讀取到從庫,然后寫入到中繼日志relay log中。

    sqlthread線程是:是當中繼日志有變更的時候,會讀取,然后把記錄的命令在從庫執行一次。

    三、環境搭建

    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd -reload

    搭建準備:以Windows平臺為例,在兩臺服務器上都部署mysql服務,保證mysql正常。

    序號

    服務器IP

    備注

    1

    10.70.20.29

    Master(主庫)

    2

    10.70.20.29

    Slave(從庫)

    3.1、主從配置

    3.1.1、前置條件

    • 版本一致
    • 初始化表,并在后臺啟動mysql
    • 修改root的密碼

    3.1.2、修改主服務器master

    #vi /etc/my.cnf
    [mysqld]
    log-bin=mysql-bin   //[必須]啟用二進制日志
    server-id=222      //[必須]服務器唯一ID,默認是1,一般取IP最后一段

    3.1.3、修改從服務器slave

    #vi /etc/my.cnf
    [mysqld]
    log-bin=mysql-bin   //[不是必須]啟用二進制日志
    server-id=226      //[必須]服務器唯一ID,默認是1,一般取IP最后一段

    3.1.4、重啟兩臺服務器MySQL

    3.1.5、在主服務器上建立帳戶并授權slave

    #/usr/local/mysql/bin/mysql -uroot -pmttang  
    mysql>GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456'; 
    //一般不用root帳號,“%”表示所有客戶端都可能連,只要帳號,密碼正確,此處可用具體客戶端IP代替,
       如192.168.145.226,加強安全。
    grant replication slave on *.* to 'backup'@'10.0.0.1' identified by '123456';
    
    mysql> create user chenxin identified by 'chenxin';
    
    mysql> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'chenxin'@'%';
     
    mysql> grant all privileges on *.* to 'chenxin'@'%';
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> flush privileges;

    3.1.6、登錄主服務器的mysql,查詢master的狀態

    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |     1083 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    # 注:執行完此步驟后不要再操作主服務器MYSQL,防止主服務器狀態值變化

    3.1.7、配置從服務器Slave

    mysql>change master to master_host='192.168.253.128',master_user='chenxin',master_password='chenxin',master_log_file='mysql-bin.000001',master_log_pos=1083;
    
    Mysql>start slave;    //啟動從服務器復制功能

    3.1.8、檢查從服務器復制功能狀態

    mysql> show slave status\G;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for source to send event
                      Master_Host: 192.168.253.128
                      Master_User: chenxin
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 1083
                   Relay_Log_File: chenxin-relay-bin.000002
                    Relay_Log_Pos: 326
            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: 1083
                  Relay_Log_Space: 538
                  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: 128
                      Master_UUID: 308e4bec-e254-11ed-9467-00505632b3f0
                 Master_Info_File: mysql.slave_master_info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
               Master_Retry_Count: 86400
                      Master_Bind: 
          Last_IO_Error_Timestamp: 
         Last_SQL_Error_Timestamp: 
                   Master_SSL_Crl: 
               Master_SSL_Crlpath: 
               Retrieved_Gtid_Set: 
                Executed_Gtid_Set: 
                    Auto_Position: 0
             Replicate_Rewrite_DB: 
                     Channel_Name: 
               Master_TLS_Version: 
           Master_public_key_path: 
            Get_master_public_key: 0
                Network_Namespace: 
    1 row in set, 1 warning (0.00 sec)
                        ......

    注:Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。

    以上操作過程,主從服務器配置完成。

    1、MySQL 主從同步

    MySQL主從又叫做Replication、Master/Slave復制。簡單講就是A和B兩臺機器做主從后,其中Master負責寫操作的負載,也就是說一切寫的操作都在Master上進行,而讀的操作則分攤到Slave上進行,兩者數據實時同步。

    主上有一個log dump線程,用來和從的I/O線程傳遞binlog

    從上有兩個線程,其中I/O線程用來同步主的binlog并生成relaylog,另外一個SQL線程用來把relaylog里面的sql語句執行一遍

    兩種情況:一種是做備份用,一種是作為讀用

    MySQL主從是基于binlog的,主上須開啟binlog才能進行主從。 主從過程大致有3個步驟

    1)主將更改操作記錄到binlog里

    2)從將主的binlog事件(sql語句)同步到從本機上并記錄在relaylog里

    3)從根據relaylog里面的sql語句按順序執行

    2、MySQL 數據庫環境

    MySQL 數據庫版本都是mysql-5.7,兩臺電腦都在同一個網段之中。

    主庫所在的操作系統:win7 從庫所在的操作系統:windows server 2008

    主庫的版本:mysql-5.7.20-winx64.zip 從庫的版本:mysql-5.7.20-winx64.zip

    主庫的ip地址:192.168.0.116 從庫的ip地址:192.168.0.254

    主庫的端口:3306 從庫的端口:3306

    3、MySQL 主從同步配置

    1)配置主庫,主要是my.ini增加如下選項:

    配置完成后需要重啟mysql服務,如下圖所示:

    2)添加主數據庫用于同步的賬號:

    給主數據庫授權一個可以進行復制的用戶,執行如下命令:

    #進入到mysql的bin目錄下,執行

    #重啟主數據庫,然后在主數據庫中建立一個備份賬戶

    mysql -h localhost -u root -p

    輸入密碼 進入

    mysql mysql>show databases;

    mysql>grant replication slave on *.* to 'slave_username'@'192.168.1.12' identified by 'slave_password' ;

    mysql>flush privileges;

    3)顯示主數據庫的同步信息:

    可以看出已經產生了二進制的日志文件信息,mysql的同步就是通過這個二進制日志文件進行同步,主數據庫把對數據庫的操作的指令都記錄到該日志文件下,從數據庫通過讀取該文件,來對從數據庫中的數據進行修改,從而達到主從同步的效果。

    #顯示主服務器的狀態信息,并且找到File 和 Position 的值記錄下來;

    #此處加\G的意思是格式化輸出,否則輸出亂七八糟,看不清楚

    mysql>show master status \G;

    #記下File 和 Position,從庫配置要用

    4) 配置從庫

    從數據庫的話只需要配置server-id,binlog-do-db,binlog-ignore-db即可。

    #從庫配置

    server_id=2

    relay-log-index=slave-relay-bin.index

    relay-log=slave-relay-bin

    配置完成重啟mysql服務

    5) 設置從數據庫鏈接到主數據庫

    #進入到mysql的bin目錄下,執行

    #重啟從數據庫,設置登錄主數據庫的賬號和密碼等信息,然后啟動slave

    mysql>change master to master_host='192.168.0.254',master_user='slave_username',master_password='slave_password', master_log_file='.000001',master_log_pos=0;

    mysql>start slave;

    #此處加\G的意思是格式化輸出,否則輸出亂七八糟,看不清楚

    mysql>show slave status \G;

    #如果出現: Slave_IO_Running: Yes Slave_SQL_Running: Yes以上兩項都為Yes,那說明沒問題了

    6)錯誤問題匯總

    在配置MySQL主從復制時,通過show slave status 命令可能發現問題,到MySQL日志文件路徑(D:\Program Files\mysql-5.7.20-winx64\data)以計算機名+.err就是錯誤日志文件

    Slave_IO_Running:連接到主庫,并讀取主庫的日志到本地,生成本地日志文件

    Slave_SQL_Running:讀取本地日志文件,并執行日志里的SQL命令。

    a) Slave_IO_Running :No

    2018-07-20T02:52:13.894200Z 4 [ERROR] Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593

    解決辦法:是由于當初從庫數據庫是直接從主庫復制而來,導致MySQL 主庫和從庫server-uuid 重復問題,只需要到MySQL 安裝目錄(D:\Program Files\mysql-5.7.20-winx64\data)下auto.cnf文件打開更改server-uuid即可或者刪掉auto.cnf,重新啟動;

    #可以通過select uuid(); 命令獲取uuid

    select uuid();

    b)Slave_SQL_Running : No

    2018-07-20T03:37:14.074200Z 23 [ERROR] Slave SQL for channel '': Error executing row event: 'Table 'ryw-ec.sys_log' doesn't exist', Error_code: 1146

    2018-07-20T03:37:22.213200Z 24 [ERROR] Slave SQL for channel '': Error 'Can't drop database 'ryw-ec'; database doesn't exist' on query. Default database: 'ryw-ec'. Query: 'DROP DATABASE `ryw-ec`', Error_code: 1008

    解決辦法:

    在從服務器上設置忽略該錯,在my.cnf文件中添加“slave-skip-errors=1146”,

    如果少量的這種錯誤,直接在mysql client里面設置“set global sql_slave_skip_counter=1”;

    mysql> stop slave;

    mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

    mysql> start slave;

    PS:本人多次遇到從數據庫的同步進程自動停掉的問題,有時簡單通過slave stop,slave start即可解決。有時slave start啟動后又會自動停掉,這時使用 change master重設主數據庫信息的方式解決了問題。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有