您好,登錄后才能下訂單哦!
這篇文章主要介紹了Mysql5.7中如何搭建主從復(fù)制,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
主從復(fù)制可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫備份和讀寫分離:
為了避免服務(wù)的不可用以及保障數(shù)據(jù)的安全可靠性,我們至少需要部署兩臺(tái)或兩臺(tái)以上服務(wù)器來存儲(chǔ)數(shù)據(jù)庫數(shù)據(jù),也就是我們需要將數(shù)據(jù)復(fù)制多份部署在多臺(tái)不同的服務(wù)器上,即使有一臺(tái)服務(wù)器出現(xiàn)故障了,其他服務(wù)器依然可以繼續(xù)提供服務(wù).
MySQL提供了主從復(fù)制功能以提高服務(wù)的可用性與數(shù)據(jù)的安全可靠性.主從復(fù)制是指服務(wù)器分為主服務(wù)器和從服務(wù)器,主服務(wù)器負(fù)責(zé)讀和寫,從服務(wù)器只負(fù)責(zé)讀,主從復(fù)制也叫 master/slave,master是主,slave是從,但是并沒有強(qiáng)制,也就是說從也可以寫,主也可以讀,只不過一般我們不這么做?!鞠嚓P(guān)推薦:mysql視頻教程】
一主多從架構(gòu):
多主多從架構(gòu):
主從復(fù)制原理:
當(dāng) master 主服務(wù)器上的數(shù)據(jù)發(fā)生改變時(shí),則將其改變寫入二進(jìn)制事件日志文件中
salve 從服務(wù)器會(huì)在一定時(shí)間間隔內(nèi)對(duì) master 主服務(wù)器上的二進(jìn)制日志進(jìn)行探測,探測其是否發(fā)生過改變,如果探測到 master 主服務(wù)器的二進(jìn)制事件日志發(fā)生了改變,則開始一個(gè) I/O Thread 請(qǐng)求 master 二進(jìn)制事件日志
同時(shí) master 主服務(wù)器為每個(gè) I/O Thread 啟動(dòng)一個(gè)dump Thread,用于向其發(fā)送二進(jìn)制事件日志
slave 從服務(wù)器將接收到的二進(jìn)制事件日志保存至自己本地的中繼日志文件中
salve 從服務(wù)器將啟動(dòng) SQL Thread 從中繼日志中讀取二進(jìn)制日志,在本地重放,使得其數(shù)據(jù)和主服務(wù)器保持一致;
最后 I/O Thread 和 SQL Thread 將進(jìn)入睡眠狀態(tài),等待下一次被喚醒
搭建環(huán)境:1. Linux 版本 CentOS release 6.9 (Final)
2. mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
下載地址
1.解壓 mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
#/usr/local下解壓 tar xzvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz #重命名文件 mv mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz mysql
2.創(chuàng)建多實(shí)例數(shù)據(jù)目錄
cd /usr/local/mysql mkdir data cd data #主 mkdir 3306 #從 mkdir 3307
3.數(shù)據(jù)庫初始化
#mysql 安裝bin目錄下執(zhí)行 #initialize-insecure 表示不生成MySQL數(shù)據(jù)庫root用戶的隨機(jī)密碼,即root密碼為空 #初始化3306 ./mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3306 --user=mysql #初始化3307 ./mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3307 --user=mysql
若出現(xiàn)錯(cuò)誤執(zhí)行yum install libaio-devel.x86_64
yum -y install numactl
4.創(chuàng)建各個(gè)數(shù)據(jù)庫的配置文件my.cnf
注意:
1.建議在linux下創(chuàng)建文件防止windows 與 linux 編碼不一致
2.不同的實(shí)例下配置要修改端口號(hào)
3.將修改好的my.cnf分別放至3306、3307文件夾內(nèi)
[client] port = 3306 socket = /usr/local/mysql/data/3306/mysql.sock default-character-set=utf8 [mysqld] port = 3306 socket = /usr/local/mysql/data/3306/mysql.sock datadir = /usr/local/mysql/data/3306 log-error = /usr/local/mysql/data/3306/error.log pid-file = /usr/local/mysql/data/3306/mysql.pid character-set-server=utf8 lower_case_table_names=1 autocommit = 1 log-bin=mysql-bin server-id=3306
5.多實(shí)例啟動(dòng)切換到/usr/local/mysql-5.7.24/bin目錄下,使用 msyqld_safe 命令指定配置文件并啟動(dòng)MySQL服務(wù):
#其中 --defaults-file 是指定配置文件,& 符合表示后臺(tái)啟動(dòng) ./mysqld_safe --defaults-file=/usr/local/mysql/data/3306/my.cnf & ./mysqld_safe --defaults-file=/usr/local/mysql/data/3307/my.cnf &
6.數(shù)據(jù)庫初始化配置分別在各個(gè)實(shí)例內(nèi)進(jìn)行配置 如3306:
#客戶端連接 ./mysql -uroot -p -P3306 -h227.0.0.1 #修改Mysql密碼 alter user 'root'@'localhost' identified by 'root'; #授權(quán)遠(yuǎn)程訪問(這樣遠(yuǎn)程客戶端才能訪問) grant all privileges on *.* to root@'%' identified by 'root'; #刷新配置 flush privileges;
客戶端連接測試
7.數(shù)據(jù)庫唯一id配置
1.確定各個(gè)實(shí)例正常啟動(dòng)無誤后進(jìn)行主從配置
2.關(guān)閉實(shí)例分別在各個(gè)實(shí)例的my.cnf文件加入以下配置
#/usr/local/mysql/bin 關(guān)閉實(shí)例 ./mysqladmin -uroot -p -P3307 -h227.0.0.1 shutdown ./mysqladmin -uroot -p -P3306 -h227.0.0.1 shutdown #新加的配置 log-bin=mysql-bin #表示啟用二進(jìn)制日志 server-id=3307 #表示server編號(hào),編號(hào)要唯一 建議和端口保持一致
加入完畢后啟動(dòng)各個(gè)實(shí)例
./mysqld_safe --defaults-file=/usr/local/mysql/data/3306/my.cnf & ./mysqld_safe --defaults-file=/usr/local/mysql/data/3307/my.cnf &
7.主機(jī)設(shè)置1.在主服務(wù)器上創(chuàng)建復(fù)制數(shù)據(jù)的賬號(hào)并授權(quán)
#在/usr/local/mysql/bin目錄下執(zhí)行 ./mysql -uroot -p -P3306 -h227.0.0.1 grant replication slave on *.* to 'copy'@'%' identified by 'root';
2.查看主服務(wù)器狀態(tài)
# mysql主服務(wù)器默認(rèn)初始值: # File:mysql-bin.000001 # Position:154 show master status;
3.如果主服務(wù)狀態(tài)不是初始狀態(tài),需要重置狀態(tài)
reset master;
7.從機(jī)設(shè)置
1.需要登錄到 3306|3307|3308的從機(jī)客戶端
#在/usr/local/mysql/bin目錄下執(zhí)行 多臺(tái)從機(jī)‘|’分隔 ./mysql -uroot -p -P3308|3309|3310 -h227.0.0.1
2.查看從機(jī)狀態(tài)
#初始狀態(tài):Empty set show slave status;
3.若不是初始狀態(tài),重置一下
stop slave; #停止復(fù)制,相當(dāng)于終止從服務(wù)器上的IO和SQL線程 reset slave;
4.設(shè)置從機(jī)設(shè)置主機(jī)配置
change master to master_host='主機(jī)ip',master_user='copy', master_port=主機(jī)端口,master_password='連接主機(jī)密碼', master_log_file='mysql-bin.000001',master_log_pos=154;
5.執(zhí)行 開始復(fù)制命令
start slave;
6.查看從機(jī)狀態(tài)
show slave status \G;
7.測試主從復(fù)制
在主數(shù)據(jù)庫中進(jìn)行創(chuàng)建表,從庫同步就算搭建成功了!
若你在從庫進(jìn)行寫操作,則從服務(wù)器不再同步主庫數(shù)據(jù),在從庫中執(zhí)行此命令即可解決!
stop slave; set global sql_slave_skip_counter =1; start slave; show slave status\G;
若主從復(fù)制速度較慢的話,執(zhí)行此命令
slave-parallel-type=LOGICAL_CLOCK slave-parallel-workers=16 master_info_repository=TABLE relay_log_info_repository=TABLE relay_log_recovery=ON
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Mysql5.7中如何搭建主從復(fù)制”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。