mysql 只读账号_MySql主从复制,从原理到实践!
生活随笔
收集整理的這篇文章主要介紹了
mysql 只读账号_MySql主从复制,从原理到实践!
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文將從MySql主從復制的原理出發(fā),詳細介紹MySql在Docker環(huán)境下的主從復制搭建,以一個主實例和一個從實例實現(xiàn)主從復制為例。
什么是主從復制?
主從復制是指將主數(shù)據(jù)庫的DDL和DML操作通過二進制日志傳到從數(shù)據(jù)庫上,然后在從數(shù)據(jù)庫上對這些日志進行重新執(zhí)行,從而使從數(shù)據(jù)庫和主數(shù)據(jù)庫的數(shù)據(jù)保持一致。
主從復制的原理
- MySql主庫在事務提交時會把數(shù)據(jù)變更作為事件記錄在二進制日志Binlog中;
- 主庫推送二進制日志文件Binlog中的事件到從庫的中繼日志Relay Log中,之后從庫根據(jù)中繼日志重做數(shù)據(jù)變更操作,通過邏輯復制來達到主庫和從庫的數(shù)據(jù)一致性;
- MySql通過三個線程來完成主從庫間的數(shù)據(jù)復制,其中Binlog Dump線程跑在主庫上,I/O線程和SQL線程跑著從庫上;
- 當在從庫上啟動復制時,首先創(chuàng)建I/O線程連接主庫,主庫隨后創(chuàng)建Binlog Dump線程讀取數(shù)據(jù)庫事件并發(fā)送給I/O線程,I/O線程獲取到事件數(shù)據(jù)后更新到從庫的中繼日志Relay Log中去,之后從庫上的SQL線程讀取中繼日志Relay Log中更新的數(shù)據(jù)庫事件并應用,如下圖所示。
主實例搭建
- 運行mysql主實例:
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
- 在mysql的配置文件夾/mydata/mysql-master/conf中創(chuàng)建一個配置文件my.cnf:
- 修改配置文件my.cnf,配置信息如下:
## 設置server_id,同一局域網(wǎng)中需要唯一
server_id=101
## 指定不需要同步的數(shù)據(jù)庫名稱
binlog-ignore-db=mysql
## 開啟二進制日志功能
log-bin=mall-mysql-bin
## 設置二進制日志使用內(nèi)存大小(事務)
binlog_cache_size=1M
## 設置使用的二進制日志格式(mixed,statement,row)
binlog_format=mixed
## 二進制日志過期清理時間。默認值為0,表示不自動清理。
expire_logs_days=7
## 跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷。
## 如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數(shù)據(jù)庫數(shù)據(jù)不一致
slave_skip_errors=1062
- 修改完配置后重啟實例:
- 進入mysql-master容器中:
- 在容器中使用mysql的登錄命令連接到客戶端:
- 創(chuàng)建數(shù)據(jù)同步用戶:
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
從實例搭建
- 運行mysql從實例:
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
- 在mysql的配置文件夾/mydata/mysql-slave/conf中創(chuàng)建一個配置文件my.cnf:
- 修改配置文件my.cnf:
## 設置server_id,同一局域網(wǎng)中需要唯一
server_id=102
## 指定不需要同步的數(shù)據(jù)庫名稱
binlog-ignore-db=mysql
## 開啟二進制日志功能,以備Slave作為其它數(shù)據(jù)庫實例的Master時使用
log-bin=mall-mysql-slave1-bin
## 設置二進制日志使用內(nèi)存大小(事務)
binlog_cache_size=1M
## 設置使用的二進制日志格式(mixed,statement,row)
binlog_format=mixed
## 二進制日志過期清理時間。默認值為0,表示不自動清理。
expire_logs_days=7
## 跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷。
## 如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數(shù)據(jù)庫數(shù)據(jù)不一致
slave_skip_errors=1062
## relay_log配置中繼日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave將復制事件寫進自己的二進制日志
log_slave_updates=1
## slave設置為只讀(具有super權(quán)限的用戶除外)
read_only=1
- 修改完配置后重啟實例:
將主從數(shù)據(jù)庫進行連接
- 連接到主數(shù)據(jù)庫的mysql客戶端,查看主數(shù)據(jù)庫狀態(tài):
- 主數(shù)據(jù)庫狀態(tài)顯示如下:
- 進入mysql-slave容器中:
- 在容器中使用mysql的登錄命令連接到客戶端:
- 在從數(shù)據(jù)庫中配置主從復制:
主從復制命令參數(shù)說明:
- master_host:主數(shù)據(jù)庫的IP地址;
- master_port:主數(shù)據(jù)庫的運行端口;
- master_user:在主數(shù)據(jù)庫創(chuàng)建的用于同步數(shù)據(jù)的用戶賬號;
- master_password:在主數(shù)據(jù)庫創(chuàng)建的用于同步數(shù)據(jù)的用戶密碼;
- master_log_file:指定從數(shù)據(jù)庫要復制數(shù)據(jù)的日志文件,通過查看主數(shù)據(jù)的狀態(tài),獲取File參數(shù);
- master_log_pos:指定從數(shù)據(jù)庫從哪個位置開始復制數(shù)據(jù),通過查看主數(shù)據(jù)的狀態(tài),獲取Position參數(shù);
- master_connect_retry:連接失敗重試的時間間隔,單位為秒。
查看主從同步狀態(tài):
- 從數(shù)據(jù)庫狀態(tài)顯示如下:
- 開啟主從同步:
- 查看從數(shù)據(jù)庫狀態(tài)發(fā)現(xiàn)已經(jīng)同步:
主從復制測試
主從復制的測試方法有很多,可以在主實例中創(chuàng)建一個數(shù)據(jù)庫,看看從實例中是否有該數(shù)據(jù)庫,如果有,表示主從復制已經(jīng)搭建成功。
- 在主實例中創(chuàng)建一個數(shù)據(jù)庫mall;
- 在從實例中查看數(shù)據(jù)庫,發(fā)現(xiàn)也有一個mall數(shù)據(jù)庫,可以判斷主從復制已經(jīng)搭建成功。
推薦閱讀
- Spring 最常用的 7 大類注解,史上最強整理!
- 2020=1024+996,996之年,程序員要如何應對!
- 當下流行的NIO框架,一篇搞懂!
- 前后端分離項目,引入 Spring Cloud Gateway 遇到的一個問題!
- 前后端分離項目,如何優(yōu)雅實現(xiàn)文件存儲!
- Github標星19K+Star,10分鐘自建對象存儲服務!
- 2019 我的 Github 開源之路!
- Github標星25K+Star,SpringBoot實戰(zhàn)電商項目mall出SpringCloud版本啦!
- 涵蓋大部分核心組件使用的 Spring Cloud 教程,一定要收藏哦!
- 我的Github開源項目,從0到20000 Star!
歡迎關注,點個在看
總結(jié)
以上是生活随笔為你收集整理的mysql 只读账号_MySql主从复制,从原理到实践!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英语分词组_考生必看!成人高考英语大牛教
- 下一篇: 余弦信号频谱表达式_2019年清华828