国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步

這篇具有很好參考價值的文章主要介紹了Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步

?? 一、mysql 同步復制有關概述

? 前言、何為主從復制

一般數(shù)據(jù)庫都是讀取壓力大于寫數(shù)據(jù)壓力,主從復制即為了實現(xiàn)數(shù)據(jù)庫的負載均衡和讀寫分離。通過將Mysql的某一臺主機的數(shù)據(jù)復制到其它主機(slaves)上,主服務器只負責寫,而從服務器只負責讀。

如生產(chǎn)環(huán)境中,使用redis數(shù)據(jù)庫作為緩存數(shù)據(jù)庫,用戶訪問業(yè)務數(shù)據(jù)時,先從緩存數(shù)據(jù)庫查詢,如果緩存數(shù)據(jù)庫沒有,再從業(yè)務數(shù)據(jù)庫讀取。
Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步

? 1.1 mysql支持的復制方式

  • 基于語句的復制--Statement(Statement-Based Replication,SBR): 在主服務器上執(zhí)行的sql語句,在從服務器上執(zhí)行同樣的語句。mysql默認采用基于語句的復制,效率比較高。一旦發(fā)現(xiàn)沒法精確復制時,會自動選擇基于行的復制,每一條會修改數(shù)據(jù)的sql都會記錄在 binlog 中。

  • 基于行的復制--Row(Row-Based Replication,RBR):把改變的內(nèi)容復制過去,僅保存哪條記錄被修改。而不是把命令在從服務器上執(zhí)行一遍, 從mysql5.0開始支持。

  • 混合類型的復制--Mixed(Mixed-Based Replication,MBR): 默認采用基于語句的復制,一旦發(fā)現(xiàn)基于語句的無法精確的復制時,就會采用基于行的復制,Statement 和 Row 的混合體。

  • 通過alter user root identified by '新密碼';

? 1.2 mysql支持的復制類型

1.2.1??異步復制

  • mysql數(shù)據(jù)庫默認的復制方式
  • 異步復制指主庫以異步的方式同步數(shù)據(jù)到一個從庫或多個從庫中。
  • 主節(jié)點不會主動推送數(shù)據(jù)到從節(jié)點,主庫在執(zhí)行完客戶端提交的事務后會立即將結果返給給客戶端,并不關心從庫是否已經(jīng)接收并處理。
  • 主節(jié)點如果掉了,此時主節(jié)點上已經(jīng)提交的事務可能并沒有傳到從節(jié)點上,如果此時,強行將從節(jié)點提升為主節(jié)點,可能導致新主節(jié)點上的數(shù)據(jù)不完整。

1.2.2??同步復制

  • 同步復制是mysql主節(jié)點特有的復制方式,當主庫執(zhí)行完一個事務,然后所有的從庫都復制了該事務并成功執(zhí)行完才返回成功信息給客戶端。

1.2.3??半同步復制

  • 介于異步復制和全同步復制之間,主庫在執(zhí)行完客戶端提交的事務后不是立刻返回給客戶端,而是等待至少一個從庫接收到并寫到relay log中才返回成功信息給客戶端
  • 只能保證主庫的Binlog至少傳輸?shù)搅艘粋€從節(jié)點上,否則需要等待直到超時時間,然后切換成異步模式再提交。

1.2.4??[圖解]-異步復制 / 同步復制 / 半同步復制

Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步

? 1.3 mysql復制解決的問題

  • 數(shù)據(jù)分布 (Data distribution )—提高數(shù)據(jù)操作自然并行度,以達到最優(yōu)的執(zhí)行效率的目的
  • 負載平衡(load balancing)—主服務器只負責寫,而從服務器只負責讀
  • 備份(Backups)—災難恢復,對損壞的數(shù)據(jù)進行恢復和還原
  • 高可用性和容錯行( High availability and failover)—確保 mysql 數(shù)據(jù)庫在故障和異常情況下仍然能夠提供可靠的服務

? 1.4 mysql復制是如何工作的

復制整體來說有 3 個步驟:

  • master將改變記錄到二進制日志(binary log)中(這些記錄叫做二進制日志事件,binary log events)
  • slavemaster的binary log events拷貝到它的中繼日志(relay log)
  • slave重做中繼日志中的事件,將改變反映它自己的數(shù)據(jù)
    Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步

?? 二、mysql 同步復制搭建

? 2.1 主從節(jié)點準備

克隆兩臺安裝好mysql8.0的虛擬機,并修改復制的db-server02(從節(jié)點)mysql server的UUID。

[root@db-server ~]# vi /var/lib/mysql/auto.cnf

####修改UUID
[auto]
server-uuid=83822642-0030-11ee-a2cc-000c29c2e1ad

####重啟mysql服務
[root@db-server ~]# systemctl restart mysqld
mysql服務器 Ip
db-server(主節(jié)點) 192.168.181.101
db-server02(從節(jié)點) 192.168.181.102

? 2.2 主節(jié)點配置

2.2.1 ?? 創(chuàng)建log-bin二進制日志存儲路徑

###創(chuàng)建二進制日志存儲路徑
[root@db-server /]# mkdir -p -v /var/log/mysql/mysql-bin
mkdir: created directory ‘/var/log/mysql/mysql-bin’

###賦權mysql用戶組合mysql用戶
[root@db-server ~]# chown -R mysql:mysql /var/log/mysql
[root@db-server ~]# chown -R mysql:mysql /var/log/mysql/mysql-bin

Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步

2.2.2 ?? 修改my.cnf配置文件

【必須參數(shù)】:

####添加內(nèi)容
[mysqld]
#配置唯一的服務器ID,一般使用IP最后一位
server-id=1
# 設置需要復制的數(shù)據(jù)庫,默認全部記錄。比如: binlog-do-db=db_master_slave
binlog-do-db=db_master_slave

#開啟log-bin二進制日志,指名路徑。如: 本地的路/var/log/mysql/mysql-bin
log-bin=/var/log/mysql/mysql-bin
#設置binlog格式
binlog_format=STATEMENT

Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步

【可選參數(shù)】:

# 0表示讀寫 (主機),1表示只讀(從機)
read-only=0

#設置日志文件保留的時長,單位是秒
binlog_expire_logs_seconds=6000

#控制單個二進制日志大小。此參數(shù)的最大和默認值是1GB
max_binlog_size=20

#設置不要復制的數(shù)據(jù)庫
binlog-ignore-db=test

#設置需要復制的數(shù)據(jù)庫,默認全部記錄。比如: binlog-do-db=dbtest01
binlog-do-db=需要復制的主數(shù)據(jù)庫名字

#設置binlog格式
binlog_format=STATEMENT

2.2.3 ?? 重啟mysql服務,檢查是否生效

[root@db-server mysql]# systemctl restart mysqld
[root@db-server mysql]# systemctl status mysqld
[root@db-server mysql]# mysql -u root -p

mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+
1 row in set (0.02 sec)

mysql> 

###開啟log-bin二進制日志
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql> 
##skip_networking--tcp/ip協(xié)議通信,默認是OFF關閉狀態(tài),啟用后主從將無法通信
mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> 

2.2.4 ?? 主節(jié)點創(chuàng)建主從復制賬號

  • mysql5.7版本:
mysql> grant replication slave on *.*  to  'slave1'@'%'  identified by 'Zyl@123456';  ###用戶地址可以指定從機IP192.168.181.102
  • mysql8.0版本:
mysql> create user 'slave1'@'%' identified by 'Zyl@123456'; 
Query OK, 0 rows affected (0.02 sec)

mysql>grant replication slave on *.*  to  'slave1'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql>alter user 'slave1'@'%' identified with mysql_native_password by 'Zyl@123456'; 
Query OK, 0 rows affected (0.02 sec)

mysql>flush privileges;
Query OK, 0 rows affected (0.02 sec)

Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步

2.2.5 ?? 查看主節(jié)點的二進制日志的名稱

  • File和Position兩個參數(shù)需要在從庫配置中使用。
mysql> show master status;
+------------------+----------+-----------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB    | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+-----------------+------------------+-------------------+
| mysql-bin.000004 |      157 | db_master_slave |                  |                   |
+------------------+----------+-----------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 

? 2.3 從節(jié)點配置

2.3.1 ?? 修改my.cnf配置文件

【必須參數(shù)】:

[mysqld]
#配置唯一的服務器ID,一般使用IP最后一位
server-id=2

###開啟中繼日志,從主服務器上同步日志文件記錄到本地
relay-log=relay-log-bin

【可選參數(shù)】:

[mysqld]
###定義中繼日志文件的位置和名稱
relay-log-index=slave-relay-bin.index

2.3.2 ?? 在從節(jié)點配置需要復制的主機

####語法##
change master to 
master_host='主節(jié)點IP',
master_user='主節(jié)點用戶名',
master_password='用戶密碼',
master_log_file='mysql-bin.具體數(shù)字',
master_log_pos=具體值;

####本環(huán)境配置##

mysql> change master to master_host='192.168.181.101',master_user='slave1',master_password='Zyl@123456',master_log_file='mysql-bin.000004',master_log_pos=157 ;
Query OK, 0 rows affected, 8 warnings (0.06 sec)

mysql> 

Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步

2.3.3 ?? 在從節(jié)點開啟slave同步,查看同步狀態(tài)

####開啟slave同步
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.05 sec)

####查看同步狀態(tài)
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 192.168.181.101
                  Master_User: slave1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 157
               Relay_Log_File: relay-log-bin.000006
                Relay_Log_Pos: 373
        Relay_Master_Log_File: mysql-bin.000004
             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: 

mysql> 

Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步

? 主要看這兩個參數(shù),兩個參數(shù)的值都為Yes,即主從配置搭建成功:

  • Slave_IO_Running:IO線程,負責與主機的io通信
  • Slave_SQL_Running:SQL線程,責自己的slave MySQL進程

如果報錯Slave failed to initialize relay_log info structure from the repository,需要清理之前的relay_log,重新啟用新的relay_log即可。

reset slave;

? 2.4 主節(jié)點創(chuàng)建數(shù)據(jù)庫測試

  • 主節(jié)點配置的db_master_slave
####主節(jié)點創(chuàng)建數(shù)據(jù)庫db_master_slave
mysql> create database db_master_slave;
Query OK, 1 row affected (0.01 sec)

mysql> use db_master_slave
Database changed
mysql> 

####創(chuàng)建表
mysql> CREATE TABLE `tab1`  (
    ->   `id` int NOT NULL,
    ->   `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
    ->   `class` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
    ->   PRIMARY KEY (`id`) USING BTREE
    -> ) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;
Query OK, 0 rows affected, 6 warnings (0.02 sec)

mysql> 

####插入測試數(shù)據(jù)
mysql> INSERT INTO `tab1` VALUES (1001, '曹操', '1班');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO `tab1` VALUES (1002, '張飛', '1班');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `tab1` VALUES (1003, '項羽', '3班');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `tab1` VALUES (1004, '劉備', '2班');
Query OK, 1 row affected (0.00 sec)

mysql> 

? 2.5 從節(jié)點查看同步數(shù)據(jù)

2.5.1 ?? 數(shù)據(jù)測試-主節(jié)點插入數(shù)據(jù),從節(jié)點查看

mysql> show databases;

Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步

###查看tab1表數(shù)據(jù)
mysql> select * from tab1;
+------+--------+-------+
| id   | name   | class |
+------+--------+-------+
| 1001 | 曹操   | 1|
| 1002 | 張飛   | 1|
| 1003 | 項羽   | 3|
| 1004 | 劉備   | 2|
+------+--------+-------+
4 rows in set (0.00 sec)

mysql> 

2.5.2 ?? 數(shù)據(jù)測試-主節(jié)點刪除數(shù)據(jù),從節(jié)點查看

Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步
Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步

? 2.6 主從同步關閉和開啟

  • ?? 停止主從服務復制的功能------從機執(zhí)行
####開啟slave同步
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.05 sec)


####關閉slave同步
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)

?? 三、mysql 同步復制延遲問題

? 3.1 從節(jié)點配置主從同步要求

  • ?? 讀庫與寫庫數(shù)據(jù)一致(最終一致)
  • ?? 寫數(shù)據(jù)必須寫到寫庫
  • ?? 讀數(shù)據(jù)不一定必須到讀庫

主從同步復制的內(nèi)容是二進制文件,在傳輸過程中會存在主從延遲的情況,會導致用戶在從庫讀取的數(shù)據(jù)不是最新數(shù)據(jù)----->即數(shù)據(jù)不一致性問題。

? 3.2 如何解決【數(shù)據(jù)不一致性】問題

  • ?? 異步復制—master執(zhí)行操作后直接返回給client結果,不再等待slave反饋同步信息,但這種方式數(shù)據(jù)一致性最弱。
  • ?? 半同步復制—只要有一個slave復制了該事務并成功執(zhí)行完就返回成功信息給client,這種方式提高了數(shù)據(jù)一致性,但是增加了網(wǎng)絡延遲時間,降低了主庫寫的效率。
  • 組復制(MGR)----mysql 5.7.17 推出的新的數(shù)據(jù)復制技術,基于Paxos協(xié)議復制,很好的彌補了前面兩種復制的不足。

Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步文章來源地址http://www.zghlxwxcb.cn/news/detail-475717.html

??四、總結—溫故知新

? 了解何為主從復制
? mysql支持的復制類型之間區(qū)別,以及解決的問題
? mysql主從復制搭建
? mysql主從復制延遲及解決方案

??【上一篇】
??The End?? 點點關注,收藏不迷路??
【下一篇】??

到了這里,關于Mysql數(shù)據(jù)庫--實現(xiàn)主從復制搭建與同步的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • MySQL數(shù)據(jù)庫——主從復制

    MySQL數(shù)據(jù)庫——主從復制

    在實際的生產(chǎn)環(huán)境中,對數(shù)據(jù)庫的讀和寫都在同一個數(shù)據(jù)庫服務器中,是不能滿足實際需求的。無論是在安全性、高可用性還是高并發(fā)等各個方面都是完全不能滿足實際需求的。因此,通過主從復制的方式來同步數(shù)據(jù),再通過讀寫分離來提升數(shù)據(jù)庫的并發(fā)負載能力。有點類似

    2024年02月11日
    瀏覽(26)
  • 【數(shù)據(jù)庫】mysql主從復制與讀寫分離

    【數(shù)據(jù)庫】mysql主從復制與讀寫分離

    ??讀寫分離,基本的原理是讓主數(shù)據(jù)庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE ),而從數(shù)據(jù)庫處理SELECT查詢操作。數(shù)據(jù)庫復制被用來把事務性操作導致的變更同步到集群中的從數(shù)據(jù)庫。 ??因為數(shù)據(jù)庫的\\\"寫”(寫10000條數(shù)據(jù)可能要3分鐘)操作是比較耗時的。 ??

    2024年02月11日
    瀏覽(27)
  • 【MySQL數(shù)據(jù)庫】主從復制與讀寫分離

    【MySQL數(shù)據(jù)庫】主從復制與讀寫分離

    讀寫分離,基本的原理是讓主數(shù)據(jù)庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫處理SELECT查詢操作。數(shù)據(jù)庫復制被用來把事務性操作導致的變更同步到集群中的從數(shù)據(jù)庫。 因為數(shù)據(jù)庫的“寫”(寫10000條數(shù)據(jù)可能要3分鐘)操作是比較耗時的。 但是數(shù)據(jù)庫

    2024年02月11日
    瀏覽(24)
  • MySQL數(shù)據(jù)庫 主從復制與讀寫分離

    讀寫分離,基本的原理是讓主數(shù)據(jù)庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫處理SELECT查詢操作。數(shù)據(jù)庫復制被用來把事務性操作導致的變更同步到集群中的從數(shù)據(jù)庫。 因為數(shù)據(jù)庫的“寫”(寫10000條數(shù)據(jù)可能要3分鐘)操作是比較耗時的。 但是數(shù)據(jù)庫

    2024年02月10日
    瀏覽(30)
  • 【數(shù)據(jù)庫七】MySQL主從復制與讀寫分離

    【數(shù)據(jù)庫七】MySQL主從復制與讀寫分離

    讀寫分離,基本的原理是讓主數(shù)據(jù)庫處理事務性增、改、刪操作 (insert、update、delete),而 從數(shù)據(jù)庫處理select查詢操作 。 數(shù)據(jù)庫復制被用來把事務性操作導致的變更同步到集群中的從數(shù)據(jù)庫 。 因為數(shù)據(jù)庫的“寫”(寫10000條數(shù)據(jù)可能要3分鐘)操作是比較耗時的。 但是數(shù)據(jù)

    2024年02月11日
    瀏覽(21)
  • Linux系統(tǒng)中MySQL 數(shù)據(jù)庫的主從同步

    在主數(shù)據(jù)庫服務器上配置: 編輯主數(shù)據(jù)庫服務器的配置文件(my.cnf) : 打開 MySQL 配置文件,一般路徑為 /etc/my.cnf 或 /etc/mysql/my.cnf。 確保以下參數(shù)已啟用或配置正確: 注: 一定是[mysqld]代碼塊中 創(chuàng)建用于復制的用戶 : 登錄到 MySQL 控制臺: mysql -u root -p 創(chuàng)建用于復制的用戶

    2024年03月23日
    瀏覽(18)
  • 發(fā)現(xiàn)Mysql的主從數(shù)據(jù)庫沒有同步,差點涼涼了

    摘要: 今天發(fā)現(xiàn)Mysql的主從數(shù)據(jù)庫沒有同步,瞬間整個人頭皮發(fā)麻。 本文分享自華為云社區(qū)《糟了,生產(chǎn)環(huán)境數(shù)據(jù)竟然不一致,人麻了!》,作者:冰 河 。 今天發(fā)現(xiàn)Mysql的主從數(shù)據(jù)庫沒有同步 先上Master庫: 查看下進程是否Sleep太多。發(fā)現(xiàn)很正常。 也正常。 再到Slave上查看

    2023年04月17日
    瀏覽(22)
  • MySQL高級第十七篇:數(shù)據(jù)庫主從復制原理及保證數(shù)據(jù)一致性

    MySQL高級第十七篇:數(shù)據(jù)庫主從復制原理及保證數(shù)據(jù)一致性

    在實際工作中,我們常常將Redis作為緩存與MySQL來配合使用,當有請求的時候,首先會從緩存中進行查找,如果存在就直接取出,如果不存在再訪問數(shù)據(jù)庫。 這樣就提升了讀取的效率,也減少了對后端數(shù)據(jù)庫的訪問壓力。 此外,對于一般數(shù)據(jù)庫應用而言,都是 讀多寫少 的,

    2023年04月25日
    瀏覽(26)
  • Mysql主從數(shù)據(jù)庫搭建(一主兩從)

    Mysql主從數(shù)據(jù)庫搭建(一主兩從)

    目錄 1、服務器規(guī)劃 2、主從同步流程 3、主從搭建 3.1、master節(jié)點上配置文件修改 3.2、master節(jié)點創(chuàng)建同步用戶和權限 3.3、slave1和slave2節(jié)點配置文件修改 3.4、slave1和slave2節(jié)點執(zhí)行同步任務 3.5、解決虛擬機克隆導致mysql所有服務器uuid都一樣的問題 4、bin-log相關說明 5、主從同步注

    2024年02月11日
    瀏覽(18)
  • Docker 容器搭建mysql 集群(主從數(shù)據(jù)庫)

    Docker 容器搭建mysql 集群(主從數(shù)據(jù)庫)

    目錄 1.背景? ? ? ?? 2.設備及軟件版本 3.開始搭建(這里不介紹安裝docker及mysql) 3.1創(chuàng)建主數(shù)據(jù)庫容器(master) 3.2查看容器是否創(chuàng)建成功 3.3進入修改容器下的/etc/my.cnf文件 3.3.1先拷貝my.cnf到容器外修改完再覆蓋容器原來的my.cnf文件 3.4重啟mysql容器使配置文件生效 3.5查看是否

    2024年02月08日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包