首頁 >資料庫 >mysql教程 >MySQL配置主從複製的方法

MySQL配置主從複製的方法

WBOY
WBOY轉載
2023-06-03 10:47:101560瀏覽

一、偵測通訊

檢視主函式庫(master)與從函式庫(slave)的ip位址,並偵測是否可以通訊

MySQL配置主從複製的方法

保證master和slave之間網路是互通的,用ping指令偵測

MySQL配置主從複製的方法

到這裡我們知道,master的ip是192.168.131.129,slave的ip為192.168.0.6,並且可以相互通訊。保證3306埠開放

MySQL配置主從複製的方法

MySQL配置主從複製的方法

#查看防火牆狀態systemctl status firewalld.service

#臨時手動啟動防火牆systemctl start firewalld.service
暫時手動停止防火牆systemctl stop firewalld.service

持久開啟防火牆(重啟服務生效)systemctl enable firewalld.service
持久關閉防火牆(重啟服務生效)systemctl disable firewalld.service

查看目前開放的連接埠清單firewall-cmd --list- ports

二、master配置

1. 開啟二進位日誌

配置log_bin和全域唯一的server-id,和slave區分開,不能配置成一樣的(如果是my.cnf新新增配置,一定要重新啟動MySQL服務)

vim /etc/my.cnf開啟my.cnf檔案

MySQL配置主從複製的方法

#2. 建立一個用於主從庫通訊用的帳號

即在master中建立一個帳號,用於slave登入master讀取binlog

#雖然我們在Linux上查看的ip位址是192.168.131.129,但我們建立帳號登入時不寫這個ip,寫的是192.168.131.1。因為我這裡虛擬機器用的是NAT模式(如果是橋接模式就可以直接用了),虛擬機器(master)和實體機(slave)通訊的時候,虛擬機器先把資料傳送到網關192.168.131.1(預設與VMnet8通訊),192.168.131.1再轉發到實體機,所以實體機接收到的是192.168.131.1的數據,故我們在master上為slave創建帳戶的時候,應該寫192.168.131.1

MySQL配置主從複製的方法

##如果給slave配置的不是閘道192.168.131.1位址,vim /var/log/mysqld.log開啟錯誤日誌會有以下訊息:

MySQL配置主從複製的方法

這說的就是從192.168.131.1的mslave權限不夠,那是因為我們在master配置的是允許從其他地方登錄,並不允許從192.168.131.1地址登錄,導致權限不夠。

由於master這邊收到的是來自192.168.131.1的請求,所以錯誤日誌顯示的是192.168.131.1

#建立使用者的指令:

#
//如果嫌麻烦可以用%代替192.168.131.1,,它就可以匹配任何ip
mysql> CREATE USER 'mslave'@'192.168.131.1' IDENTIFIED BY '1qaz@WSX';
//启动主从,在主库上给当前的mslave用户开启REPLICATION SLAVE主从复制的权限,从库就可以通过1qaz@WSX账户密码
//从192.168.131.1 IP地址来请求访问这台主库上的任意库里面的任意表*.*,同步这个主库的任意库里的任意表
mysql> GRANT REPLICATION SLAVE ON *.* to 'mslave'@'192.168.131.1' IDENTIFIED BY '1qaz@WSX';
mysql> FLUSH PRIVILEGES;

3. 取得binlog的日誌檔案名稱與position

show master status

MySQL配置主從複製的方法

三、slave設定

1. 設定全域唯一的server-id

MySQL配置主從複製的方法

#設定全域唯一的server-id

MySQL配置主從複製的方法

涉及修改設定文件,需要重新啟動MySQL服務

MySQL配置主從複製的方法

#2. 使用master建立的帳戶讀取binlog同步資料

這一步驟配置主要是給IO執行緒讀取binlog使用:

mysql> CHANGE MASTER TO MASTER_HOST='192.168.131.129',
MASTER_PORT=3306,
MASTER_USER='mslave',
MASTER_PASSWORD='1qaz@WSX',
MASTER_LOG_FILE='mysql-bin.000006',
MASTER_LOG_POS=1262;
  • #MASTER_HOST:指定master的ip

  • MASTER_LOG_FILE:binlog檔名

  • MASTER_LOG_POS:binlog的position

#3. 開啟slave服務

透過show slave status#指令查看主從複製狀態,show processlist查看master和salve相關執行緒的執行狀態

MySQL配置主從複製的方法

四、設定中可能出現的問題

1. 網路連線問題

透過show slave status指令查看主從複製狀態

MySQL配置主從複製的方法

連接connection錯粗,先考慮網路是否互通,ping一下:

#

然后再检查从库里面的配置信息是否正确

MySQL配置主從複製的方法

如果都正确,检查主库所在机器的3306端口是否正常

telnet xxx.xxx.xxx.xxx 3306

如果发现3306端口不能连通,就需要怀疑主库对端口有限制吗,也就是防火墙限制,就需要在防火墙把3306端口开放出来。

如果这个错误还没解决,就查看一个主库的错误日志/var/log/mysql/mysqld.log,查看错误日志中提示的ip是否和自己允许slave登录的ip一致

MySQL配置主從複製的方法

这说的就是从192.168.131.1的mslave权限不够,自己玩的时候,如果虚拟机是NAT模式,则需要写成VMnet8网关ip。如果都是物理机通信,那直接写正确的ip即可

可以在MySQL数据库下的mysql库的user表中更改允许登录的ip

MySQL配置主從複製的方法

然后重新赋予权限:

mysql> GRANT REPLICATION SLAVE ON *.* to 'mslave'@'xxx.xxx.xxx.xxx' IDENTIFIED BY '1qaz@WSX';

2. binlog的position问题

MySQL配置主從複製的方法

在master中查看show master status一下binlog日志文件名以及position,然后用命令重新配置slave,比如:

mysql> CHANGE MASTER TO MASTER_HOST='192.168.131.129',MASTER_PORT=3306,MASTER_USER='mslave',MASTER_PASSWORD='1qaz@WSX',
MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=1262;

配置slave前需要stop slave,配置完成再start slave

3. SQL线程出错

MySQL配置主從複製的方法

错误原因:首先配置主从复制的时候,slave的mytest库中没有user表,而master的mytest库已经有user表了配置好主从复制后直接drop table mytest.user,这就会写到binlog里面,然后在通过dump线程和IO线程将这个操作发送到从库的relay log,然后从库的SQL线程从relay log里把drop table mytest.user捞出来在从库执行这个SQL,可从库的mytest根本就没有user表,这就是删除一个不存在的表,于是出现错误了。

一般我们是不会做这样的操作的,我们一般都是主库配置以后,slave从数据开始增量进行同步,不会同步以后一开始就删主库里的东西,如果真的出现这样的问题了,随时可以通过show slave status来查看主从库的状态来解决错误,如果是上图这个错误,
(1)可以在从库stop slave,然后把位置重新设置一下,然后再start slave,相当于重新开始主从同步的位置。
(2)可以在从库stop slave,然后set global sql_slave_skip_counter=1;(跳过一个错误),然后再start slave重启从库的线程,相当于把错误跳过了,异常操作。

可以通过show slave status查看以下标识,IO线程出错一般是网络问题,SQL线程出错一般是SQL在slave库执行出现了问题

MySQL配置主從複製的方法

以上是MySQL配置主從複製的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除