天天看點

MySQL主從複制bug記錄

因為是第一次搭建mysql主從複制是以也是困難重重啊一不小心就會遇到莫名其妙的問題,一連串的元素遇到了三個問題啊。

問題一. /usr/local/mysql/bin/mysqld (mysqld 5.7.34-log) starting as process 2038 …

/usr/local/mysql/bin/mysqld (mysqld 5.7.34-log)
 starting as process 2038 ...
mysqld: File '/var/lib/mysql/mysqlbin.index' 
not found (Errcode: 2 - No such file or directory)

           

這個是在剛剛開始在mysql配置檔案中配置出錯了,配置如下,因為是和視訊教程上面的一樣配置,我就直接複制過來了。

#mysql binlog 日志的存儲路徑和檔案名
log-bin=/var/lib/mysql/mysqlbin
           

然後再啟動mysql服務的時候就啟動不起來,于是我去檢視mysql錯誤日志時發現了報了以上問題。于是我就在該路徑下建立了該檔案,并且把權限也修改了,但是依舊沒有解決問題。于是我就去csdn上找了另外一個主從複制搭建的文章,

MySQL主從複制讀寫分離,看這篇就夠了!

我按照他的步驟其實也就是把

log-bin=/var/lib/mysql/mysqlbin
//修改為
log-bin=mysql-bin
           

最後成功的啟動了MySQL服務。然後我就按照文章上面的操作一通配置後,然後啟動從機,結果發現

error connecting to master '[email protected]:3306' - retry-time: 60  retries: 1

           

問題二 .error connecting to master ‘[email protected]:3306’ - retry-time: 60 retries: 1

檢視了錯誤日志後報了以下錯誤,發現這并不是什麼有用資訊,然後就又是接着去百度上一通亂找亂試,結果都不行,突然想起來是不是可能因為防火牆沒有關閉,因為在昨天搭建MyCat的時候也是防火牆沒有關閉導緻一直連不上,然後我去看了看結果一看還真是防火牆,然後把防火牆關閉了,問題就解決啦。

MySQL主從複制bug記錄
#檢視防火牆狀态
firewall-cmd --state
#關閉防火牆
systemctl stop firewalld.service
           

防火牆坑了我兩次了。

本以為問題總算全部解決了于是又遇到了第三個問題。

問題三.Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’

MySQL主從複制bug記錄

原因是:我把

CHANGE MASTER TO 
MASTER_HOST='192.168.114.132',
MASTER_USER='root',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154,
master_port=3306;
           

寫到了主機上這肯定是不行的。

于是報了以下錯誤,我才發現複制錯了位置。

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; 
these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense;
 please check the manual before using it).

           

首先遇到這個是因為binlog位置索引處的問題,不要reset slave;

reset slave會将主從同步的檔案以及位置恢複到初始狀态,一開始沒有資料還好,有資料的話,相當于重新開始同步,可能會出現一些問題;

一般做主從同步,都是要求以後的資料實作主從同步,而對于舊的資料完全可以使用資料庫同步工具先将資料庫同步,完了再進行主從同步;

好了遇到上面的問題,正确做法是:

  1. 打開主伺服器,進入mysql
  2. 執行flush logs;//這時主伺服器會重新建立一個binlog檔案;
  3. 在主服務上執行show master status \G;顯示如下:
    MySQL主從複制bug記錄
  4. 來到從伺服器的mysql;
  5. stop slave;
  6. change master to master_log_file=‘mysql-bin.000003’,master_log_pos=154;//這裡的file和pos都是上面主伺服器master顯示的。
  7. start slave;//這時候就應可以了
  8. show slave status \G;//結果如下:
    MySQL主從複制bug記錄

繼續閱讀