最近加入了同窗的技術分享小組,4我的分兩組,半月進行一次技術分享,如今一塊兒搞Mysql我被分到講解Mysql日誌方面,上週已經講完了,不過他們老是以爲對於日誌這塊瞭解不透徹,以爲不過關...因而你們自覺強制在加一輪分享做爲對mysql這段時間的學習總結,結合實踐來進行分享,以前分享的日誌的分類和原理很是理論,我本身也不滿意,因而花了一天把二進制日誌的數據恢復和主從複製搞了一下,因而這篇文章產生了,紙上得來總覺淺,絕知此事要躬行,這句話忽然從我腦海中冒出來了。mysql
我是將Mac OS本機的Mysql做爲master,虛擬機的Mysql做爲slave,首先修改master和slave的my.cnf數據庫配置文件。內容以下:我這裏配置的是同步master的test數據庫。
git
master的my.cnfgithub
[mysqld] # 主從備份相關配置 server-id = 1 # 服務器 id 號,不要和其餘服務器重複 log-bin=mysql-bin # 開啓二進制日誌 log_bin_index = mysql-bin.index # 索引二進制日誌的文件名 sync_binlog = 1 # 設爲1就是把MySql每次發生的修改和事件的日誌即時同步到硬盤上 binlog_format = Row # 複製模式 Statement, Row, mixed skip_slave_start = 1 # 防止從服務器在崩潰後自動開啓,以給你足夠的時間修復。 max_binlog_size = 200M # 指定二進制日誌的大小 # 須要同步的二進制數據庫名 binlog-do-db = test # 不一樣步的二進制數據庫名,若是不設置能夠將其註釋掉 binlog-ignore-db = information_schema binlog-ignore-db = mysql
slave的my.cnfsql
# 主從備份相關配置 - 從服務器 server-id = 2 # 服務器 id 號,不要和其餘服務器重複 read_only = 1 # 讓從服務器只讀,能夠防止有人誤從服務器插入數據,致使主從數據不一致。 log-bin=mysql-bin # 開啓二進制日誌 log_bin_index = mysql-bin.index # 索引二進制日誌的文件名 log_slave_updates = 1 relay_log = mysql-relay-bin # 中繼日誌 relay_log_index = mysql-relay-bin.index skip_slave_start = 1 # 防止從服務器在崩潰後自動開啓,以給你足夠的時間修復。 max_binlog_size = 200M # 指定二進制日誌的大小 # 如下配置是爲了方便之後,從庫切換爲主庫 # 須要同步的二進制數據庫名 binlog-do-db = test # 不一樣步的二進制數據庫名,若是不設置能夠將其註釋掉 binlog-ignore-db = information_schema binlog-ignore-db = mysql
配置文件修改完,須要將mysql服務重啓,使得配置生效;而後在master上使用root用戶建立同步帳戶並受權slave;而後查看master狀態,此時不要再進行master的操做,配置slave的跟蹤master日誌的位置;最後檢查主從備份是否成功。具體實現過程以下:數據庫
我這裏建立的用戶容許任何主機使用正確密碼登錄,也能夠指定ip地址登錄,至關於在master使用repl帳號密碼也能夠登錄進行操做。服務器
// 建立同步帳戶repl並受權 create user 'repl'@'%' identified by 'password'; grant all privileges on *.* to 'repl'@'%';
查看mster狀態,我進行了兩次mysql服務重啓,因此二進制日誌已經到mysql-bin.000003,咱們以後在master上操做會開始從mysql-bin.000003開始記錄。ide
show master status\G
配置slave跟蹤master日誌的位置,本地ip地址是192.168.1.90,slave的ip地址是192.168.92.141,配置過程不須要用到slave的ip,repl是咱們建立的同步帳戶,接下來是密碼,二進制日誌文件,和二進制日誌中查看到的positon 5616。截圖顯示Position已經達到了6467,我應該是截圖的時候搞得太慢了,數據庫內部發生了一點變化,說明即便咱們不操做數據庫,二進制日誌也會記錄數據庫的變化,固然這不影響咱們的主從複製,由於Position提早了,就更不影響了。學習
CHANGE MASTER TO MASTER_HOST='192.168.1.90', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysq-bin.000003', MASTER_LOG_POS=5616;
接下來開啓slave,檢查slave主從備份的狀態,這裏Slave_IO_State狀態是Wait for master to send event說明主從備份配置成功了,正在等待master數據庫發生變化,若是主從複製失敗,查看狀態會顯示出錯誤信息,能夠根據狀況進行調試。spa
// 開啓slave start slave; // 查看狀態 SHOW SLAVE STATUS\G
咱們接下來在test數據庫的user表添加一行數據user4:調試
看下從庫發生了同步,查看數據以下:
看到從庫同步增長了一行數據,說明咱們利用二進制日誌binlog實現了主從備份成功了,最後提醒一下,個人數據庫版本都是mysql8,0+的版本,若是版本不一致配置會遇到不少麻煩,最好是統一,不統一也不符合咱們的開發規範,建立同步帳戶時,mysql8.0+版本的sql語句也不同,若是你的版本在mysql8.0如下,能夠直接參考其餘人的教程,可是大體步驟都是相同的,這篇文章着重於實現二進制日誌的主從複製,目的爲了更好的瞭解mysql日誌,本人技術有限,若有錯誤,歡迎批評指正,謝謝。