其中簡易的處理方案就以replication或cluster。
以下為測試CentOS7.5環境下,建立兩台機器進行安裝MySQL5.7,
並設定某個DB replication的過程。
安裝MySQL
本次假定在兩台機器安裝,
MASTER位於192.168.0.201
SLAVE位於192.168.0.202
CentOS7.5預設的MySQL版本並非5.7,因此需要先從MySQL網站下載。
先下載最新的 noarch.rpm
wget http://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpmyum安裝搜尋路徑
yum localinstall mysql80-community-release-el7-1.noarch.rpm查看目前yum關於MySQL的設定
yum repolist all | grep mysql啟用MySQL5.7並關閉MySQL8.0(預設安裝最新版本)
yum-config-manager --disable mysql80-community yum-config-manager --enable mysql57-community設定完畢後開始安裝MySQL server
yum install mysql-community-server
啟動MySQL
systemctl start mysqld.servicePS:因為本次測試要兩台機器,所以安裝完畢後直接複製VM。
但每次安裝完畢,啟動MySQL後,MySQL會產生UUID提供辨識,
紀錄在 /var/lib/mysql/auto.cnf,
複製VM的方式會使兩個MySQL擁有相同的UUID,造成衝突。
因此複製完畢後,在其中一台VM要進行調整,將auto.cnf更名,
重新啟動MySQL,讓他重新產生UUID檔案。
mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak
fireall設定調整
CentOS7已經改用firewall取代iptables。
使用firewall可以增設一組設定,不用重新啟動firewall就可以更新狀態,
避免切斷已經在進行中的連線。
以下假定要增加一組名為 trusted 的設定,開放讓192.168.0.202機器連接本機的MySQL:
firewall-cmd --permanent --zone=trusted --add-source=192.168.0.202 firewall-cmd --permanent --zone=trusted --add-port=3306/tcp firewall-cmd --reload其中 --permanent 表示寫入設定檔,下次開機也會有效。
設定完畢後可以查看目前的狀態:
firewall-cmd --zone=trusted --list-all firewall-cmd --zone=trusted --list-all --permanent
MASTER設定
MASTER的MySQL上要建立一個帳號讓SLAVE可以讀取資料變動,
需要的權限包含 FILE、REPLICATION:
GRANT FILE ON *.* TO ‘backup’@'192.168.0.202' IDENTIFIED BY ‘1234’; GRANT REPLICATION SLAVE ON *.* TO ‘backup’@'192.168.0.202' IDENTIFIED BY ‘1234’;建立要同步的DB
create database testdb;打開binary log的輸出,讓SLAVE可以讀取。
編輯 /etc/my.cnf,加入下面的設定
server-id=1 log-bin binlog-do-db=testdb重新啟動MySQL server
PS:若有多個DB要同步,每個要獨立寫一行binlog-do-db。
完成後,若要查看MASTER的狀態,
可在MySQL下使用show master status\G,可以查看目前master設定是否運作正確。
SLAVE設定
同樣先建立要同步的testdb,
然後調整設定檔,設定要同步的db。
編輯/etc/my.cnf,加入以下設定
server-id=2 replicate-do-db=testdb重新啟動MySQL server
PS:同樣,多個DB要分寫多行replicate-do-db。
接著設定往MASTER連線,以root登入MySQL,下達下面的命令
change master to master_host='192.168.0.201', master_user='backup', master_password='1234'; start slave io_thread; start slave;完成後查看SLAVE的狀態,使用 show slave status\G
Slave_IO_Running: Yes Slave_SQL_Running: Yes上面兩個項目要確認為Yes才是成功運作,
如果其中有一項為No,都表示有問題。
可以直接查看MySQL的log檔,較容易找出問題所在。
MySQL的log位於:/var/log/mysqld.log