日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

11_MySQL笔记-主从复制-延迟备份-读写分离

發(fā)布時間:2024/3/12 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 11_MySQL笔记-主从复制-延迟备份-读写分离 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 主從復制
    • 異步復制
    • 半同步復制
    • 同步復制
  • 延遲備份
  • 讀寫分離
  • 高可用
  • 實驗

個人博客
https://blog.csdn.net/cPen_web


主從復制

集群cluster:多臺MySQL服務器 集群:很多臺服務器做一樣的事情 如何保證數據庫里的內容是一樣的? 如何分工? 從服務器是如何知道主服務器上更新了哪些數據?答:二進制日志(binlog) 主從復制:其實就是復制的是主服務器的二進制日志,從服務器然后再重新根據日志操作一遍,從而達到和主服務器里的數據一樣,但是時間上會有延遲 如何解決延遲的問題?中間件 middleware --> WebLogic (oracle和java)、mysql-router、onekey (第三方公司)負載均衡器 (load balancer)讀寫分離:read、write 主從復制的環(huán)境準備:硬件:CPU、內存相同2~4個核心內存:4G系統(tǒng):centos7軟件:MySQL版本要一樣5.7.32編譯安裝 --> 推薦yum安裝 (rpm)二進制安裝 --> 下載好別人已經編譯好的二進制包,解壓就可以使用了 --> 免安裝

主從復制原理


問題:1 .到底是主服務器主動通知從服務器來取二進制日志,還是從服務器每隔一段時間來拿二進制日志?主服務器主動通知從服務器過來拿二進制日志2 .主服務器如何知道從服務器上已經有哪些數據了,需要從哪里開始給數據給從服務器?3 .是否任何一臺機器都可以充當從服務器,不需要驗證就可以去拿主服務器的二進制日志?4 .從服務器如何知道誰是它的主服務器呢?master-info文件5 .master-info文件的作用?a)記錄取日志結束的pos位置號,日志文件的名字6.relay-log.info文件的作用?

異步復制

配置

操作步驟: (異步復制)步驟1 .修改MySQL的配置文件,啟動二進制日志功能 #步驟1.1:在主服務器上開啟二進制日志,server_id=1 [root@mysql-master ~]# vim /etc/my.cnf [mysqld] #binary log log_bin server_id = 1 [root@mysql-master ~]# killall -9 mysqld_safe [root@mysql-master ~]# killall -9 mysqld [root@mysql-master ~]# service mysqld start#步驟1.2:在從服務器上也可以開啟二進制日志,server_id=2 [root@mysql-slave ~]# vim /etc/my.cnf [mysqld] #binary log log_bin server_id = 2 [root@mysql-slave ~]# killall -9 mysqld_safe [root@mysql-slave ~]# killall -9 mysqld [root@mysql-slave ~]# service mysqld start--------------------------------------------------------------------------------------------------------------------------------- 步驟2 .在主服務器上新建并且授權一個用戶,用于復制二進制日志 [root@mysql-master ~]# mysql -uroot -p'Sanchuang123#' root@(none) mysql>grant replication slave on *.* to 'oudi'@'192.168.31.181' identified by 'Sanchuang123#';--------------------------------------------------------------------------------------------------------------------------------- 步驟3 .備份出主服務器上的數據,然后導入到從服務器上 [root@mysql-master ~]# mysqldump -uroot -p'Sanchuang123#' --all-databases > /backup/all_db.sql [root@mysql-master backup]# scp /backup/all_db.sql root@192.168.31.181:/root/在從服務器上導入數據 [root@mysql-slave ~]# mysql -uroot -p'Sanchuang123#' <all_db.sql--------------------------------------------------------------------------------------------------------------------------------- 步驟4 .在從服務器上配置master的信息 #注:在主服務器上查看當前的二進制日志的文件和位置號 root@(none) mysql>show master status; | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | | mysql-master-bin.000002 | 450 | | | | #注:刷新二進制日志文件 root@(none) mysql>flush logs; root@(none) mysql>show master status; | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | | mysql-master-bin.000003 | 154 | | | |------------------------------------------------------------------------------------------ #注:在從服務器上配置master的信息 [root@mysql-slave ~]# mysql -uroot -p'Sanchuang123#' root@(none) mysql>CHANGE MASTER TO MASTER_HOST='192.168.31.179' ,-> MASTER_USER='oudi',-> MASTER_PASSWORD='Sanchuang123#',-> MASTER_PORT=3306,-> MASTER_LOG_FILE='mysql-master-bin.000003',-> MASTER_LOG_POS=154;CHANGE MASTER TO MASTER_HOST='192.168.31.179' ,MASTER_USER='oudi',MASTER_PASSWORD='Sanchuang123#',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-master-bin.000003',MASTER_LOG_POS=154;------------------------------------------------------------------------ #注:查看slave的狀態(tài)信息 root@(none) mysql>show slave status \G; *************************** 1. row ***************************Slave_IO_State: Master_Host: 192.168.31.180Master_User: oudiMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-master-bin.000003Read_Master_Log_Pos: 154Relay_Log_File: mysql-slave-relay-bin.000001Relay_Log_Pos: 4Relay_Master_Log_File: mysql-master-bin.000003Slave_IO_Running: NoSlave_SQL_Running: No …… #注:從服務器的IO線程和SQL線程沒有起來--------------------------------------------------------------------------------------------------------------------------------- 步驟5 .在master和slave上關閉防火墻和selinux #注:主服務器 [root@mysql-master ~]# service firewalld stop [root@mysql-master ~]# getenforce Disabled#注:從服務器 [root@mysql-slave ~]# service firewalld stop [root@mysql-slave ~]# getenforce Disabled--------------------------------------------------------------------------------------------------------------------------------- 解決UUID一樣的問題 下面步驟報錯:原因 虛擬機克隆時,主從兩臺數據庫的UUID相同https://blog.csdn.net/t1anyuan/article/details/78117672解決方法:data目錄下的 auto.cnf 中的 server-uuid值相同了找個字母隨便改一下就行 比如把 9改成8 ,重啟數據庫[root@mysql-slave ~]# vim /data/mysql/auto.cnf [auto]server-uuid=65d10cce-6c25-11eb-b2d5-000c29c71e05 #注:修改幾個字符就可以,和主服務器里的不一樣就可以[root@mysql-slave ~]# service mysqld restart--------------------------------------------------------------------------------------------------------------------------------- 步驟6 .在slave上啟動復制功能 [root@mysql-slave ~]# mysql -uroot -p'Sanchuang123#' root@(none) mysql>start slave; root@(none) mysql>show slave status \G; *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.31.179Master_User: oudiMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-master-bin.000003Read_Master_Log_Pos: 154Relay_Log_File: mysql-slave-relay-bin.000007Relay_Log_Pos: 381Relay_Master_Log_File: mysql-master-bin.000003Slave_IO_Running: Yes --> 是yesSlave_SQL_Running: Yes --> 是yes 表示主從復制已經配置成功了 ……--------------------------------------------------------------------------------------------------------------------------------- 步驟7 .驗證主從復制的效果 #注:在master上新建庫 [root@mysql-master ~]# mysql -uroot -p'Sanchuang123#' root@(none) mysql>create database zouweicheng; root@(none) mysql>use zouweicheng; root@zouweicheng mysql>create table t1(id int); root@zouweicheng mysql>insert into t1 values(1),(2);#注:slave上查看 [root@mysql-slave ~]# mysql -uroot -p'Sanchuang123#' root@(none) mysql>show databases; | Database | | zouweicheng | …… root@(none) mysql>use zouweicheng; root@zouweicheng mysql>select * from t1; | id | | 1 | | 2 |--------------------------------------------------------------------------------------------------------------------------------- 步驟8 .到slave上去看master.info和relay-log.info [root@mysql-slave ~]# cd /data/mysql/ #注:到數據目錄下查看 [root@mysql-slave mysql]# ls |egrep "master.info|relay-log.info" master.info relay-log.info [root@mysql-slave mysql]# cat master.info …… [root@mysql-slave mysql]# cat relay-log.info ……--------------------------------------------------------------------------------------------------------------------------------- 相關問題解決方案 #示例:清空原來配置錯誤的master信息清除從服務器上填寫的主服務器的信息 root@(none) mysql>stop slave; root@(none) mysql>reset slave all; #注:清除所有的master信息 #注:重新輸入master的信息 CHANGE MASTER TO MASTER_HOST='192.168.31.179' ,MASTER_USER='oudi',MASTER_PASSWORD='Sanchuang123#',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-master-bin.000003',MASTER_LOG_POS=154;

半同步復制

半同步 semi-sync
https://www.cnblogs.com/ivictor/p/5735580.html


配置

半同步的配置啟用半同步復制--------------------------------------------------------------------------------------------------------------------------------- 步驟1:在主服務器上執(zhí)行安裝 root@(none) mysql>install plugin rpl_semi_sync_master soname 'semisync_master.so'; root@(none) mysql>show plugins; #注:查看插件 | rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL | ……#注:啟用半同步 root@(none) mysql>set global rpl_semi_sync_master_enabled=1; root@(none) mysql>show global variables like '%rpl_semi%'; +-------------------------------------------+------------+ | Variable_name | Value | +-------------------------------------------+------------+ | rpl_semi_sync_master_enabled | ON | | rpl_semi_sync_master_timeout | 10000 | #注:超時參數10s,如果超時沒回復,半同步切換到異步 | rpl_semi_sync_master_trace_level | 32 | | rpl_semi_sync_master_wait_for_slave_count | 1 | | rpl_semi_sync_master_wait_no_slave | ON | | rpl_semi_sync_master_wait_point | AFTER_SYNC | +-------------------------------------------+------------+ 6 rows in set (0.20 sec)--------------------------------------------------------------------------------------------------------------------------------- 步驟2:在從服務器上執(zhí)行安裝插件 root@(none) mysql>install plugin rpl_semi_sync_slave soname 'semisync_slave.so'; #注:從庫上啟用半同步功能 root@(none) mysql>set global rpl_semi_sync_slave_enabled=1; root@(none) mysql>show global variables like '%rpl_semi%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | rpl_semi_sync_slave_enabled | ON | | rpl_semi_sync_slave_trace_level | 32 | +---------------------------------+-------+ 2 rows in set (0.00 sec)--------------------------------------------------------------------------------------------------------------------------------- 步驟3:半同步測試 從庫停止復制以后在主庫建表測試#注:半同步目前是好的 root@(none) mysql>use zouweicheng; #注:master上 root@zouweicheng mysql>insert into t1 values(3),(4);#注:如何知道當前主從復制的狀態(tài)是半同步還是異步? root@zouweicheng mysql>show status like 'Rpl_semi_sync_master_status'; #注:master上敲 | Variable_name | Value | | Rpl_semi_sync_master_status | ON | #注:ON 表示是半同步在主服務器上執(zhí)行數據插入或者建表、數據修改等操作,觸發(fā)半同步,如果半同步失敗,主服務器會切換到異步--------------------------------------------------------------------------- #步驟3.1:在從服務器上stop slave; root@(none) mysql>stop slave;root@zouweicheng mysql>insert into t1 values(3),(4);#注:master上敲 Query OK, 2 rows affected (10.00 sec) #注:所花費的時間超過10秒 root@zouweicheng mysql>CREATE TABLE T2(id int);root@zouweicheng mysql>show status like 'Rpl_semi_sync_master_status'; #注:master上敲 | Variable_name | Value | | Rpl_semi_sync_master_status | OFF | #注:半同步關閉--------------------------------------------------------------------------- #步驟3.2:在從服務器那邊啟用start slave ; root@(none) mysql>start slave; root@(none) mysql>use zouweicheng; root@zouweicheng mysql>show tables; #注:查看同步情況 | Tables_in_zouweicheng | | T2 | #注:同步了 | t1 |--------------------------------------------------------------------------- #步驟3.3:在主服務器上查看狀態(tài) root@zouweicheng mysql>show status like 'Rpl_semi_sync_master_status'; | Variable_name | Value | | Rpl_semi_sync_master_status | ON | #注:ON 表示是半同步

同步復制

https://blog.csdn.net/bmengmeng/article/details/98742927
https://dev.mysql.com/doc/refman/5.7/en/group-replication-enterprise-backup.html


延遲備份

https://dev.mysql.com/doc/refman/5.7/en/replication-delayed.html
https://www.cnblogs.com/yangxiaochu/p/9323118.html

為什么需要延遲備份?可以快速的恢復數據比使用全備 + 二進制日志恢復更加快些

登陸到slave數據庫服務器#注:前面的slave要先配好 [root@mysql-slave ~]# mysql -uroot -p'Sanchuang123#' root@(none) mysql>show slave status \G; ……Slave_IO_Running: YesSlave_SQL_Running: Yes …… root@(none) mysql>stop slave; root@(none) mysql>CHANGE MASTER TO MASTER_DELAY = 600; #注:延遲備份 10min root@(none) mysql>start slave; ……SQL_Delay: 600 ……

GTID的主從復制

步驟參考 https://blog.51cto.com/13434336/2178937
https://blog.csdn.net/wzy0623/article/details/91047395

有點優(yōu)勢比binlog + pos的傳統(tǒng)方式,在恢復的時候,以前做過的不再執(zhí)行,可以節(jié)約時間 原理GTID(全局事務標識符)的全稱為Global Transaction Identifier是在整個復制環(huán)境中對一個事務的唯一標識全局唯一,一個事務對應一個GTID

log_slave_updates=ON 有什么作用?
http://blog.itpub.net/12679300/viewspace-1319263

通常情況,從服務器從主服務器接收到的更新不記入它的二進制日志。該選項告訴從服務器將其SQL線程執(zhí)行的更新記入到從服務器自己的二進制日志。為了使該選項生效,還必須用--logs-bin選項啟動從服務器以啟用二進制日志。如果想要應用鏈式復制服務器,應使用--logs-slave-updates。例如,可能你想要這樣設置:A -> B -> C也就是說,A為從服務器B的主服務器,B為從服務器C的主服務器。為了能工作,B必須既為主服務器又為從服務器。你必須用--logs-bin啟動A和B以啟用二進制日志,并且用--logs-slave-updates選項啟動B 基于日志點復制的缺點:1 .故障轉移時重新獲取master的日志點信息比較困難。基于日志點復制是從master的binlog的偏移量進行增量同步。如果指定錯誤會造成遺漏或者重復,造成主從不一致 基于GTID復制的優(yōu)點是:1 .可以很方便的進行故障轉移,記錄master最后事務的GTID值。比如master:A,slave:B,C。當A掛了后,B執(zhí)行了所有A傳過來的事務。當C連接到B后,在自己的binlog找到最后一次A傳過來的GTID。然后C將這個GTID發(fā)送給B,B獲取到這個GTID,就開始從這個GTID的下一個GTID開始發(fā)送事務給C。這種自我尋找復制位置的模式減少事務丟失的可能性以及故障恢復的時間2 .slave不會丟失master的任何修改 (開啟了log_slave_updates)

核心步驟參考 https://blog.51cto.com/13434336/2178937

GTID主從配置配置master vim /etc/my.cnf [mysqld] gtid-mode=ON enforce-gtid-consistency=ON server-id=1 binlog_format=row配置slave vim /etc/my.cnf [mysqld] gtid-mode=ON enforce-gtid-consistency=ON server-id=2 binlog_format=ROW log_slave_updates=ONmaster授權配置 略slave配置同步 mysql> change master to master_host='10.0.0.132', master_user='rep',master_password='123',master_port=3306,master_auto_position=1;=============================================================================== 配置gtid_mode=on enforce_gtid_consistency=on
MySQL的集群架構主主復制主+從+從+從 --> 一主多從 雙機熱備雙機熱備的概念簡單說一下,就是要保持兩個數據庫的狀態(tài)自動同步。對任何一個數據庫的操作都自動應用到另外一個數據庫,始終保持兩個數據庫數據一致。這樣做的好處多1 .可以做災備,其中一個壞了可以切換到另一個2 .可以做負載均衡,可以將請求分攤到其中任何一臺上,提高網站吞吐量 主主復制 (異步復制)2臺主機都是master,業(yè)務數據同時往2臺機器上寫要避免數據冗余

主主復制主鍵沖突問題解決方案 https://www.jianshu.com/p/469279c1ad39


讀寫分離

讀寫分離的控制問題主要是用戶權限的控制,有寫權限的用戶走讀的通道也可以寫前提是在后端的MySQL數據庫服務器里創(chuàng)建讀和寫分開的用戶 日志/var/log/messages/var/log/mysqlrouter/mysqlrouter.log middleware:中間件軟件中間件:MySQLrouter、mycat、weblogic、oneproxymycat 開源的 http://www.mycat.org.cn/MySQLrouter 官方weblogic oracle數據庫的oneproxy https://www.cnblogs.com/youge-OneSQL/articles/4208583.html

圖解 https://www.cnblogs.com/f-ck-need-u/p/9276639.html

中間件服務器只需要安裝mysql-router,不需要安裝mysql軟件MySQLrouter安裝步驟: 1 .到mysql的官方網站下載 官方 --> 注意下系統(tǒng)的版本 centos7 / centos8 https://dev.mysql.com/downloads/router/https://dev.mysql.com/get/Downloads/MySQL-Router/mysql-router-community-8.0.23-1.el7.x86_64.rpmhttps://dev.mysql.com/get/Downloads/MySQL-Router/mysql-router-community-8.0.23-1.el8.x86_64.rpm[root@mysql-router-1 ~]# ls |grep mysql-router-community-8.0.23-1.el8.x86_64.rpm #注:上傳 mysql-router-community-8.0.23-1.el8.x86_64.rpm [root@mysql-router-1 ~]# rpm -ivh mysql-router-community-8.0.23-1.el8.x86_64.rpm #注:安裝 [root@mysql-router-1 ~]# rpm -qpl mysql-router-community-8.0.23-1.el8.x86_64.rpm #注:知道它裝哪了 /etc/mysqlrouter/mysqlrouter.conf ……--------------------------------------------------------------------------------------------------------------------------------- [root@mysql-router-1 ~]# vim /etc/mysqlrouter/mysqlrouter.conf #注:修改配置文件 [routing:read_write] bind_address = 192.168.31.83 #注:是mysql-router服務器的ip地址 (自己的) bind_port = 7001 mode = read-write destinations = 192.168.31.179:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 2[routing:read_only] bind_address = 192.168.31.83 bind_port = 7002 mode = read-only destinations = 192.168.31.181:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 2[root@mysql-router-1 ~]# service mysqlrouter start #注:啟動mysqlrouter服務 [root@mysql-router-1 ~]# netstat -anplut |grep mysqlrouter tcp 0 0 192.168.31.83:7001 0.0.0.0:* LISTEN 16577/mysqlrouter tcp 0 0 192.168.31.83:7002 0.0.0.0:* LISTEN 16577/mysqlrouter #注:出錯可以去看日志文件 [root@mysql-router-1 ~]# tail -f /var/log/messages #注:自己的日志文件也可以查看 [root@mysql-router-1 ~]# tail -f /var/log/mysqlrouter/mysqlrouter.log --------------------------------------------------------------------------------------------------------------------------------- 在master上創(chuàng)建2個用戶,一個讀寫,一個讀 [root@mysql-master ~]# mysql -uroot -p'Sanchuang123#' root@(none) mysql>grant all on *.* to "wuxiaohui"@'%' identified by '123456wu'; root@(none) mysql>grant select on *.* to 'zouweicheng'@'%' identified by '123456zou';--------------------------------------------------------------------------------------------------------------------------------- 測試 # 測試讀寫 [root@test ~]# mysql -uwuxiaohui -p'123456wu' -P7001 -h 192.168.31.83 #注:連的中間件 wuxiaohui@(none) mysql>show processlist; | Id | User | Host | db | Command | Time | State | Info | | 12 | wuxiaohui | 192.168.31.83:54754 | NULL | Query | 0 | starting | show processlist | wuxiaohui@(none) mysql>use sc; wuxiaohui@sc mysql>insert into student(id,name,sex) values(200,'wuxh','F'); #注:測試讀寫 #注:中間件做了nat轉換# 測試讀 [root@test ~]# mysql -uzouweicheng -p'123456zou' -P7002 -h 192.168.31.83 zouweicheng@(none) mysql>use sc; zouweicheng@sc mysql>select * from student; #注:測試讀#注:讀寫的控制不在于mysqlrouter,而在于mysql 把賬戶權限控制好;mysqlrouter僅僅做了分離而已

高可用

高可用 - HAhigh availability 為什么要高可用?為了防止單點故障有備份,有替補 failover:故障切換、故障轉移 --> HA

什么是keepalived? https://www.keepalived.org/

vrrp協(xié)議 虛擬路由冗余協(xié)議 https://www.cnblogs.com/ananing/p/12803961.html

腦裂現(xiàn)象:master和backup上都有vip 為什么會出現(xiàn)腦裂?1 .兩邊的vrrp通告報文不能正常發(fā)送 --> 網絡通信不暢或者2邊有防火墻2 .master和backup的router id不同 腦裂有危害嗎?/腦裂對原來的業(yè)務有什么影響?后端真正去訪問db的ip地址不是vip,而是ens33上原來的ip地址。沒有影響驗證過的結論:沒有影響,可以正常訪問業(yè)務連接到后端的db不是使用vip,而是本機的真正配置的ip地址反而還可以起到負載均衡的作用正常 --> 發(fā)生腦裂,以及腦裂過程中這里應該是沒影響的 腦裂 --> 恢復正常,這個過程mysql這種有狀態(tài)的服務可能會導致數據丟失、連接中斷

實驗

#注:安裝mysqlrouter [root@keepalived-master ~]# ls |grep mysql-router-community-8.0.23-1.el8.x86_64.rpm mysql-router-community-8.0.23-1.el8.x86_64.rpm [root@keepalived-master ~]# scp mysql-router-community-8.0.23-1.el8.x86_64.rpm root@192.168.31.84:/root[root@keepalived-backup ~]# rpm -ivh mysql-router-community-8.0.23-1.el8.x86_64.rpm #注:拷貝配置文件 [root@keepalived-master ~]# scp /etc/mysqlrouter/mysqlrouter.conf root@192.168.31.84:/root#注:替換配置文件 [root@keepalived-backup ~]# cp mysqlrouter.conf /etc/mysqlrouter/mysqlrouter.conf [root@keepalived-backup ~]# vim /etc/mysqlrouter/mysqlrouter.conf [routing:read_write] bind_address = 192.168.31.84 bind_port = 7001 mode = read-write destinations = 192.168.31.179:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 2[routing:read_only] bind_address = 192.168.31.84 bind_port = 7002 mode = read-only destinations = 192.168.31.181:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 2--------------------------------------------------------------------------------------------------------------------------------- [root@keepalived-backup ~]# service mysqlrouter start [root@keepalived-backup ~]# netstat -anplut |grep mysqlrouter tcp 0 0 192.168.31.84:7001 0.0.0.0:* LISTEN 16062/mysqlrouter tcp 0 0 192.168.31.84:7002 0.0.0.0:* LISTEN 16062/mysqlrouter #注:MySQL主從 目前OK root@(none) mysql>show slave status \G;Slave_IO_Running: YesSlave_SQL_Running: Yes#注:前面已經在master上建過讀寫、讀用戶--------------------------------------------------------------------------------------------------------------------------------- #注:測試讀寫分離功能 [root@test ~]# mysql -h 192.168.31.84 -P 7001 -uwuxiaohui -p'123456wu' #注:7001 寫的端口 wuxiaohui@(none) mysql> wuxiaohui@(none) mysql>show processlist; | Id | User | Host | db | Command | Time | State | Info | | 16 | wuxiaohui | 192.168.31.84:35704 | NULL | Query | 0 | starting | show processlist | [root@test ~]# mysql -h 192.168.31.84 -P 7002 -uzouweicheng -p'123456zou' #注:7002 讀的端口 #注:wuxiaohui連到master上面了 #注:zouweicheng連到slave上面了 #注:通過不同端口,讓它走master和slave,實現(xiàn)讀寫分離 #注:配置master、slave都可以讀修改mysqlrouter的配置文件 [root@keepalived-master ~]# vim /etc/mysqlrouter/mysqlrouter.conf [routing:read_write] bind_address = 192.168.31.83 bind_port = 7001 mode = read-write destinations = 192.168.31.179:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 2[routing:read_only] bind_address = 192.168.31.83 bind_port = 7002 mode = read-only destinations = 192.168.31.181:3306,192.168.31.179:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 2 [root@keepalived-master ~]# service mysqlrouter restart[root@keepalived-backup ~]# vim /etc/mysqlrouter/mysqlrouter.conf [routing:read_write] bind_address = 192.168.31.84 bind_port = 7001 mode = read-write destinations = 192.168.31.179:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 2[routing:read_only] bind_address = 192.168.31.84 bind_port = 7002 mode = read-only destinations = 192.168.31.181:3306,192.168.31.179:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 2 [root@keepalived-backup ~]# service mysqlrouter restart 部署keepalived # 在mysql-router1上安裝keepalived軟件 [root@keepalived-master ~]# yum install keepalived -y# 在mysql-router2上安裝keepalived軟件 [root@keepalived-backup ~]# yum install keepalived -y--------------------------------------------------------------------------------------------------------------------------------- # 第1臺keepalived服務器(Master)配置[root@keepalived-master ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strict #注:注釋vrrp_garp_interval 0vrrp_gna_interval 0 }vrrp_instance VI_1 { #注:表示實例名state MASTER #注:狀態(tài)是masterinterface ens33 #注:在哪個網絡接口提供服務virtual_router_id 187 #注:虛擬路由器的id,id一樣表示是一個虛擬路由組,主和備id要一樣priority 180 #注:表示優(yōu)先級,優(yōu)先級數字越大優(yōu)先級越高advert_int 1 #注:通告消息發(fā)送的間隔時間 默認為1秒authentication { #注:認證的密碼auth_type PASS #注:認證類型auth_pass 1111sc #注:認證密碼}virtual_ipaddress { #注:虛擬ip地址 vip192.168.31.136192.168.31.137} } [root@keepalived-master ~]# service keepalived start #注:刷新服務#注:把配置文件拷貝到keepalived-backup服務器上 [root@keepalived-master ~]# scp /etc/keepalived/keepalived.conf root@192.168.31.84:/etc/keepalived/ --------------------------------------------------------------------------------------------------------------------------------- # 第2臺keepalived服務器(BACKUP)配置[root@keepalived-backup ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0 }vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 187priority 110advert_int 1authentication {auth_type PASSauth_pass 1111sc}virtual_ipaddress {192.168.31.136192.168.31.137} } [root@keepalived-backup ~]# service keepalived start #注:刷新服務 [root@keepalived-backup ~]# ps aux|grep keepalived root 16755 0.0 0.1 106212 992 ? Ss 15:38 0:00 /usr/sbin/keepalived -D root 16756 0.0 0.1 106212 996 ? S 15:38 0:00 /usr/sbin/keepalived -D root 16760 0.0 0.1 12324 1088 pts/0 S+ 15:39 0:00 grep --color=auto keepalived [root@keepalived-backup ~]# netstat -anplut |grep keepalived#注:keepalived進程運行起來了,但是不對外提供服務 (沒有監(jiān)聽端口)=============================================================================== #注:在master和backup上的mysqlrouter都需要修改綁定ip為vip (或者0.0.0.0) 將vip綁定到mysqlrouter上 [root@keepalived-master ~]# vim /etc/mysqlrouter/mysqlrouter.conf [routing:read_write] bind_address = 0.0.0.0 #注:綁定到本機所有的ip地址上 bind_port = 7001 mode = read-write destinations = 192.168.31.179:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 2[routing:read_only] bind_address = 0.0.0.0 bind_port = 7002 mode = read-only destinations = 192.168.31.181:3306,192.168.31.179:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 2 [root@keepalived-master ~]# service mysqlrouter restart #注:刷新服務[root@keepalived-backup ~]# vim /etc/mysqlrouter/mysqlrouter.conf [routing:read_write] bind_address = 0.0.0.0 bind_port = 7001 mode = read-write destinations = 192.168.31.179:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 2[routing:read_only] bind_address = 0.0.0.0 bind_port = 7002 mode = read-only destinations = 192.168.31.181:3306,192.168.31.179:3306 max_connections = 65535 max_connect_errors = 100 client_connect_timeout = 2 [root@keepalived-backup ~]# service mysqlrouter restart #注:刷新服務 #示例:vip漂移驗證vip是否能在master和backup之間漂移在master停止keepalived服務 [root@keepalived-master ~]# service keepalived stop #注:將master上的keepalived服務停掉=============================================================================== #示例:腦裂 1 .修改virtual_router_id [root@keepalived-backup ~]# vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 188 …… [root@keepalived-backup ~]# service keepalived restart#注:中間件mysqlrouter真正訪問后端的,用的不是vip,而是mysqlrouter上面真實的ip MySQL高可用解決方案經典MHAmysql實現(xiàn)高可用架構之MHA https://www.cnblogs.com/keerya/p/7883766.htmlMMMhttps://www.cnblogs.com/panwenbin-logs/p/8284593.html組復制同步復制mysql-cluster --> 官方 https://blog.csdn.net/nawenqiang/article/details/85051623https://dev.mysql.com/downloads/cluster/

總結

以上是生活随笔為你收集整理的11_MySQL笔记-主从复制-延迟备份-读写分离的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。