MySQL主從復制是其最重要的功能之一。主從復制是指一臺服務器充當主數(shù)據(jù)庫服務器,另一臺或多臺服務器充當從數(shù)據(jù)庫服務器,主服務器中的數(shù)據(jù)自動復制到從服務器之中赡若。對于多級復制,數(shù)據(jù)庫服務器即可充當主機团甲,也可充當從機逾冬。MySQL主從復制的基礎(chǔ)是主服務器對數(shù)據(jù)庫修改記錄二進制日志,從服務器通過主服務器的二進制日志自動執(zhí)行更新。
原理圖
準備兩臺centOS身腻,centOS1,centOS2
- 安裝mysql
- 安裝wget :
yum -y install wget
- 下載mysqlyum包:
wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
- 安裝軟件源:
rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
- 安裝mysql服務器:
yum install -y mysql-community-server
- 啟動mysql:
service mysqld start
查看運行狀態(tài):service mysqld status
- 修改臨時密碼:為了加強安全性产还,MySQL5.7為root用戶隨機生成了一個密碼,在error log中嘀趟,關(guān)于error log的位置雕沉,如果安裝的是RPM包,則默認是/var/log/mysqld.log去件。查看密碼
grep 'temporary password' /var/log/mysqld.log
- 登錄mysql:mysql -uroot -p坡椒,修改root密碼:
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
如果報錯說密碼太簡單了,執(zhí)行指令
set global validate_password_policy=0;
set global validate_password_length=1;
- 授權(quán)其他機器登錄
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
- 配置Master
- 開啟binlog日志
登錄mysql,輸入
- 開啟binlog日志
show variables like '%log_bin%';
查看是否開啟,默認是不開啟的尤溜。
退出MySQL倔叼,輸入
vi /etc/my.cnf
,編輯my.cnf文件宫莱。添加server_id=1丈攒,log-bin=mysql
。server_id不能和其他機器重復授霸。保存退出巡验。重啟MySQL,指令service mysqld restart
碘耳。再次查看log_bin显设,如下通過上圖顯示/var/lib/mysql/下存放二進制文件如mysql.000001和mysql.index。其中mysql.index存放的是內(nèi)容辛辨。
這樣就開啟了binlog捕捂,我們可以查看主節(jié)點master,指令:
show master status\G
- 我們需要創(chuàng)建一個用戶為從節(jié)點讀取日志斗搞,用戶txdev4
指令:(這里為了省事不適用實際ip了直接%代替)
grant all privileges on *.* to txdev4@'%' IDENTIFIED by '123456';
- 配置Slave
- 開啟Relay日志
查看是否開啟指攒,show variables like '%relay%';
默認是沒有開啟的,退出MySQL輸入vi /etc/my.cnf
僻焚,添加server_id=2
和relay-log=mysql
允悦,重啟MySQL,service mysqld restart
虑啤。
- 開啟Relay日志
-
這個時候我們需要驗證兩臺機器是否能訪問隙弛,比如說在某一臺機器中輸入mysql -h 192.168.1.118 -P 3306 -u root -p,連接另外一臺機器咐旧。我的機器顯示
是不能訪問主機的驶鹉,這里設(shè)置下主機/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT以及vi /etc/selinux/config>SELINUX=disabled绩蜻,最后清理防火墻sudo iptables -F铣墨。然后就能訪問了
- 開啟兩個線程即I/O和SQL線程
change master to master_host='192.168.1.118',master_port=3306,master_user='txdev4',master_password='123456',master_log_file='mysql.000008',master_log_pos=154;
file和pos是上面master上最后一個圖片中的值。
4.啟動Slave
指令start slave;
查看狀態(tài) show slave status\G
紅框中的都是Yes表示主從復制開啟成功办绝。
-
測試
我的機器上有三個centos伊约,分別為一個master姚淆,兩個slave,我們再Master(192.168.1.118)這個mysql上新建一個數(shù)據(jù)庫aaa,然后再刷新其他兩個數(shù)據(jù)庫屡律,如果其他兩個數(shù)據(jù)庫上都有aaa腌逢,則表示我們的主從復制建立成功。
到這里我們的MySQL主從復制配置完了超埋。