mysql5.7中怎么搭建主從復制?下面本篇文章帶大家了解一下mysql5.7中主從復制搭建步驟,希望對大家有所幫助!
一、概述
主從復制可以實現對數據庫備份和讀寫分離:
為了避免服務的不可用以及保障數據的安全可靠性,我們至少需要部署兩臺或兩臺以上服務器來存儲數據庫數據,也就是我們需要將數據復制多份部署在多臺不同的服務器上,即使有一臺服務器出現故障了,其他服務器依然可以繼續提供服務. MySQL提供了主從復制功能以提高服務的可用性與數據的安全可靠性.主從復制是指服務器分為主服務器和從服務器,主服務器負責讀和寫,從服務器只負責讀,主從復制也叫 master/slave,master是主,slave是從,但是并沒有強制,也就是說從也可以寫,主也可以讀,只不過一般我們不這么做。【相關推薦:mysql視頻教程】
二、主從復制架構
一主多從架構:
多主多從架構:
主從復制原理:
- 當 master 主服務器上的數據發生改變時,則將其改變寫入二進制事件日志文件中
- salve 從服務器會在一定時間間隔內對 master 主服務器上的二進制日志進行探測,探測其是否發生過改變,如果探測到 master 主服務器的二進制事件日志發生了改變,則開始一個 I/O Thread 請求 master 二進制事件日志
- 同時 master 主服務器為每個 I/O Thread 啟動一個dump Thread,用于向其發送二進制事件日志
- slave 從服務器將接收到的二進制事件日志保存至自己本地的中繼日志文件中
- salve 從服務器將啟動 SQL Thread 從中繼日志中讀取二進制日志,在本地重放,使得其數據和主服務器保持一致;
- 最后 I/O Thread 和 SQL Thread 將進入睡眠狀態,等待下一次被喚醒
三、一主多從搭建
搭建環境:
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.創建多實例數據目錄
cd?/usr/local/mysql mkdir?data cd?data #主 mkdir?3306 #從 mkdir?3307
3.數據庫初始化
#mysql?安裝bin目錄下執行 #initialize-insecure?表示不生成MySQL數據庫root用戶的隨機密碼,即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
若出現錯誤執行
yum install libaio-devel.x86_64
yum -y install numactl
4.創建各個數據庫的配置文件my.cnf
注意:
1.建議在linux下創建文件防止windows 與 linux 編碼不一致
2.不同的實例下配置要修改端口號
3.將修改好的my.cnf分別放至3306、3307文件夾內
[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.多實例啟動
切換到/usr/local/mysql-5.7.24/bin目錄下,使用 msyqld_safe 命令指定配置文件并啟動MySQL服務:
#其中?--defaults-file?是指定配置文件,&?符合表示后臺啟動 ./mysqld_safe?--defaults-file=/usr/local/mysql/data/3306/my.cnf?& ./mysqld_safe?--defaults-file=/usr/local/mysql/data/3307/my.cnf?&
6.數據庫初始化配置
分別在各個實例內進行配置 如3306:
#客戶端連接 ./mysql?-uroot?-p?-P3306?-h127.0.0.1 #修改Mysql密碼 alter?user?'root'@'localhost'?identified?by?'root'; #授權遠程訪問(這樣遠程客戶端才能訪問) grant?all?privileges?on?*.*?to?root@'%'?identified?by?'root'; #刷新配置 flush?privileges;
客戶端連接測試
7.數據庫唯一id配置
1.確定各個實例正常啟動無誤后進行主從配置
2.關閉實例分別在各個實例的my.cnf文件加入以下配置
#/usr/local/mysql/bin?關閉實例 ./mysqladmin?-uroot?-p?-P3307?-h127.0.0.1?shutdown ./mysqladmin?-uroot?-p?-P3306?-h127.0.0.1?shutdown #新加的配置 log-bin=mysql-bin??? #表示啟用二進制日志 server-id=3307? #表示server編號,編號要唯一?建議和端口保持一致
加入完畢后啟動各個實例
./mysqld_safe?--defaults-file=/usr/local/mysql/data/3306/my.cnf?& ./mysqld_safe?--defaults-file=/usr/local/mysql/data/3307/my.cnf?&
7.主機設置
1.在主服務器上創建復制數據的賬號并授權
#在/usr/local/mysql/bin目錄下執行? ?./mysql?-uroot?-p?-P3306?-h127.0.0.1 ?grant?replication?slave?on?*.*?to?'copy'@'%'?identified?by?'root';
2.查看主服務器狀態
#?mysql主服務器默認初始值: # File:mysql-bin.000001 # Position:154 show?master?status;
3.如果主服務狀態不是初始狀態,需要重置狀態
reset?master;
7.從機設置
1.需要登錄到 3306|3307|3308的從機客戶端
#在/usr/local/mysql/bin目錄下執行??多臺從機‘|’分隔 ./mysql?-uroot?-p?-P3308|3309|3310?-h127.0.0.1
2.查看從機狀態
#初始狀態:Empty?set? show?slave?status;
3.若不是初始狀態,重置一下
stop?slave;? #停止復制,相當于終止從服務器上的IO和SQL線程 reset?slave;
4.設置從機設置主機配置
change?master?to? master_host='主機ip',master_user='copy', master_port=主機端口,master_password='連接主機密碼', master_log_file='mysql-bin.000001',master_log_pos=154;
5.執行 開始復制命令
start?slave;
6.查看從機狀態
show?slave?status?G;
7.測試主從復制
在主數據庫中進行創建表,從庫同步就算搭建成功了!
若你在從庫進行寫操作,則從服務器不再同步主庫數據,在從庫中執行此命令即可解決!
stop?slave; set?global?sql_slave_skip_counter?=1; start?slave; show?slave?statusG;
若主從復制速度較慢的話,執行此命令
?slave-parallel-type=LOGICAL_CLOCK ?slave-parallel-workers=16 ?master_info_repository=TABLE ?relay_log_info_repository=TABLE ?relay_log_recovery=ON
更多編程相關知識,請訪問:編程入門!!