Ubuntu18 mysql8(maridb 10.4.17 )主從同步

小47丫發表於2020-11-28

一、我的環境

資料庫:maridb 10.4.17
主資料庫:192.168.36.130
從資料庫:192.168.36.131

二、要求

資料庫版本一致

三、防火牆配置

主資料庫

1.安裝iptables-persistent:$sudo apt-get install iptables-persistent
2.指令碼程式碼(新手指令碼,忘見諒)

#!/usr/bin/env expect 
#管理員賬號執行
spawn sudo su

expect {
        "(yse/no)?" { send "yes\r";exp_continue }
        "password" { send "123456\r" }
}

#從服務ip
set slaveip "192.168.36.131"

#刪除可能已經存在的配置,避免出現多條重複記錄
expect "#" { send "iptables -A INPUT -p tcp -s $slaveip --dport 3306 -j ACCEPT\r" }

expect "#" { send "iptables -D INPUT -p tcp -s $slaveip --dport 3306 -j ACCEPT\r" }

expect "#" { send "iptables -D INPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT\r" }

expect "#" { send "iptables -D INPUT -p tcp --dport 3306 -j DROP\r" }

expect "#" { send "iptables -D INPUT -p udp --dport 3306 -j DROP\r" }

expect "#" { send "iptables -D INPUT -p sctp --dport 3306 -j DROP\r" }

#增加配置,只允許特定地址訪問資料庫埠

expect "#" { send "iptables -A INPUT -p tcp -s $slaveip --dport 3306 -j ACCEPT\r"  }

expect "#" { send "iptables -A INPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT\r" }

expect "#" { send "iptables -A INPUT -p tcp --dport 3306 -j DROP\r" }

expect "#" { send "iptables -A INPUT -p udp --dport 3306 -j DROP\r" }

expect "#" { send "iptables -A INPUT -p sctp --dport 3306 -j DROP\r" }

expect "#" { send "iptables -L -n\r" }

expect "#" { send "netfilter-persistent save\r" }

echo "完成主資料庫配置"

expect eof

啟動指令碼完成配置
3.防火牆配置在/etc/iptables/rules.v4 和 /etc/iptables/rules.v6裡面,由於安裝了iptables-persistent,容易導致重複配置,將重複配置刪掉即可

從資料庫

1.安裝iptables-persistent:$sudo apt-get install iptables-persistent
2.指令碼程式碼

#!/usr/bin/env expect
#從庫防火牆配置

spawn sudo su

expect {
        "(yse/no)?" { send "yes\r";exp_continue }
        "password" { send "123456\r" }
}

#主服務ip
set masterip "192.168.36.130"


expect "#" { send "iptables -A OUTPUT -p tcp -d $masterip --dport 3306 -j ACCEPT\r" }

expect "#" { send "iptables -D OUTPUT -p tcp -d $masterip --dport 3306 -j ACCEPT\r" }

expect "#" { send "iptables -A OUTPUT -p tcp -d $masterip --dport 3306 -j ACCEPT\r" }

expect "#" { send "iptables -L -n\r" }

echo "完成從資料庫配置"

expect eof

啟動指令碼完成配置
3.防火牆配置在/etc/iptables/rules.v4 和 /etc/iptables/rules.v6裡面,由於安裝了iptables-persistent,容易導致重複配置,將重複配置刪掉即可

四、資料庫配置

主資料庫

1.修改配置(不同資料庫自行百度mysql配置位置)
#vim /etc/mysql/my.cnf
[mysqld]下
server-id = 1 #預設是註釋的,開啟
bind-address = 0.0.0.0 #預設是127.0.0.1,開啟
binlog-do-db = chain #表示只同步哪些資料庫,除此之外,其他不同步 ,我這裡同步的是chain資料庫
2.重啟資料庫:#service mysql restart
3.建立用於同步的使用者
進入資料庫
建立使用者名稱wallet密碼123456的131使用者:>CREATE USER 'wallet'@'192.168.36.131' IDENTIFIED BY '123456';
賦權:>GRANT REPLICATION SLAVE ON *.* TO 'wallet'@'192.168.36.131'; (注:*.*不可改準確資料庫)
重新整理:>flush privileges;
檢視master狀態:>SHOW MASTER STATUS; (注:記錄File:二進位制檔名(mariadb-bin.000002)和Position:位置(810
SHOW MASTER STATUS
4.將主資料庫匯出:$ mysqldump -u root -p chain > chain.sql (將用於匯入從資料庫)

從資料庫

1.修改配置
#vim /etc/mysql/my.cnf
[mysqld]下
server-id = 2 #預設是註釋的,開啟並修改
2.重啟資料庫:#service mysql restart
3.遠端複製主資料庫:$scp -P 22 -r test@192.168.36.130:/home/test01/work/chain.sql ./
3.匯入主資料庫:>source /home/test02/work/chain.sql;
4.執行同步語句:>CHANGE MASTER TO MASTER_HOST='192.168.36.130', MASTER_USER='wallet', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mariadb-bin.000002',MASTER_LOG_POS=810;
5.啟動slave同步程式:>start slave;
6.檢視slave狀態:>show slave status\G;
在這裡插入圖片描述
Slave_IO_Running和Slave_SQL_Running為Yes即表示主從資料庫同步成功

五、測試

主資料庫刪除一個表,檢視從資料庫該表是否也被刪除

相關文章