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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

MySQL-5.7数据库主从同步实战教程

發布時間:2023/12/13 综合教程 50 生活家
生活随笔 收集整理的這篇文章主要介紹了 MySQL-5.7数据库主从同步实战教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主從形式

MySQ主從復制原理(主庫寫入數據,從庫讀取數據)

MySql常用命令:

MySQL5.7設置密碼 update user set authentication_string=password('123456') where user='root';
MySQL5.6設置密碼 UPDATE USER SET PASSWORD=PASSWORD('123456') WHERE USER='root';
MySQL8.0設置密碼
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密碼';  
使用命令show global variables like 'port';查看端口號 使用“GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;”命令可以更改遠程連接的設置。 安裝mysql服務命:mysqld install mysql 啟動mysql命令:net start mysql SELECT * FROM USER WHERE USER='用戶名'; SHOW VARIABLES LIKE '%log_bin%';

mysql5.7設置密碼用不過期

  mysql5.7密碼默認過期時間是90天,切記將密碼設置為用不過期

  否則密碼過期后線上會出現“You must reset your password using ALTER USER statement before executing this statement”

 SET PASSWORD = PASSWORD(‘your new password‘);
 ALTER USER ‘root‘@‘localhost‘ PASSWORD EXPIRE NEVER;
 flush privileges;

MySql主從同步實戰

1.主庫配置:

第一步:my.ini配置文件(配置完成后記得重啟mysql服務)

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = test1
binlog-do-db = test2
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema

注:

binlog-do-db = test1(需要同步的主庫的數據庫名字)

binlog-do-db = test2(需要同步的主庫的數據庫名字)

binlog-ignore-db = mysql(需要忽略的的主庫的數據庫名字)

第二步:給主數據庫開啟可以讓從數據庫訪問的賬戶

GRANT REPLICATION SLAVE ON *.* TO '用戶名'@'%' IDENTIFIED BY '密碼';//不建議使用root  “%”表示所有客戶端都可能連,只要帳號,密碼正確,此處可用從服務器IP代替。

2.從庫配置:

第一步:my.ini配置文件(配置完成后記得重啟mysql服務)

[mysqld]
server-id = 2
log_bin = log_bin

第二步:從庫連接主數據庫進行數據同步(使用SHOW MASTER STATUS命令查看主庫的狀態,將從庫的MASTER_LOG_FILEMASTER_LOG_POS的值修改為主庫對應的值)

STOP SLAVE;
RESET SLAVE;
CHANGE MASTER TO 
MASTER_HOST="主數據庫IP地址",
MASTER_PORT=3306,
MASTER_USER="用戶名",
MASTER_PASSWORD="密碼",
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;
START SLAVE;
SHOW SLAVE STATUS;

數據庫主從不一致,怎么解

問:常見的數據庫集群架構如何?

:一主多從,主從同步,讀寫分離。

如上圖:

(1)一個主庫提供寫服務

(2)多個從庫提供讀服務,可以增加從庫提升讀性能

(3)主從之間同步數據

畫外音:任何方案不要忘了本心,加從庫的本心,是提升讀性能。

問:為什么會出現不一致?

:主從同步有時延,這個時延期間讀從庫,可能讀到不一致的數據。

如上圖:

(1)服務發起了一個寫請求

(2)服務又發起了一個讀請求,此時同步未完成,讀到一個不一致的臟數據

(3)數據庫主從同步最后才完成

畫外音:任何數據冗余,必將引發一致性問題。

問:如何避免這種主從延時導致的不一致?

:常見的方法有這么幾種。

方案一:忽略

任何脫離業務的架構設計都是耍流氓,絕大部分業務,例如:百度搜索,淘寶訂單,QQ消息,58帖子都允許短時間不一致。

畫外音:如果業務能接受,最推崇此法。

如果業務能夠接受,別把系統架構搞得太復雜。

方案二:強制讀主

如上圖:

(1)使用一個高可用主庫提供數據庫服務

(2)讀和寫都落到主庫上

(3)采用緩存來提升系統讀性能

這是很常見的微服務架構,可以避免數據庫主從一致性問題。

方案三:選擇性讀主

強制讀主過于粗暴,畢竟只有少量寫請求,很短時間,可能讀取到臟數據。

有沒有可能實現,只有這一段時間,可能讀到從庫臟數據的讀請求讀主,平時讀從呢?

可以利用一個緩存記錄必須讀主的數據。

如上圖,當寫請求發生時:

(1)寫主庫

(2)將哪個庫,哪個表,哪個主鍵三個信息拼裝一個key設置到cache里,這條記錄的超時時間,設置為“主從同步時延”

畫外音:key的格式為“db:table:PK”,假設主從延時為1s,這個key的cache超時時間也為1s。

如上圖,當讀請求發生時:

這是要讀哪個庫,哪個表,哪個主鍵的數據呢,也將這三個信息拼裝一個key,到cache里去查詢,如果,

(1)cache里有這個key,說明1s內剛發生過寫請求,數據庫主從同步可能還沒有完成,此時就應該去主庫查詢

(2)cache里沒有這個key,說明最近沒有發生過寫請求,此時就可以去從庫查詢

以此,保證讀到的一定不是不一致的臟數據。

總結

數據庫主庫和從庫不一致,常見有這么幾種優化方案:

(1)業務可以接受,系統不優化

(2)強制讀主,高可用主庫,用緩存提高讀性能

(3)在cache里記錄哪些記錄發生過寫請求,來路由讀主還是讀從

總結

以上是生活随笔為你收集整理的MySQL-5.7数据库主从同步实战教程的全部內容,希望文章能夠幫你解決所遇到的問題。

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