Mysql主從復(fù)制的基本原理
核心:Slave從Master讀取binlog進行數(shù)據(jù)同步
Mysql主從復(fù)制過程:
- Master將二進制日志事件寫入到binary log日志
- Slave將二進制日志事件寫入到它的relay log中
- Slave重新執(zhí)行relay log中的日志事件,將改變應(yīng)用到數(shù)據(jù)庫
復(fù)制的基本原則
- 每個Slave只有一個Master
- 每個Slave只能有一個服務(wù)器Id
- 每個Master可以有多個Slave
環(huán)境準(zhǔn)備
準(zhǔn)備兩臺服務(wù)器
192.168.10.241(主)、192.168.10.242(從)
安裝mysql
# 查看是否已經(jīng)安裝mysql
rpm -qa|grep -i mysql
# 查找到mysql的文件
find / -name mysql
# 刪除存在的mysql文件
rm -rf /etc/selinux/targeted/active/modules/100/mysql /usr/lib64/mysql /usr/share/mysql
# 下載mysql的RPM安裝包
cd /opt
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-server-5.7.31-1.el7.x86_64.rpm
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-client-5.7.31-1.el7.x86_64.rpm
# 使用rpm命令安裝
rpm -ivh mysql-community-server-5.7.31-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-client-5.7.31-1.el7.x86_64.rpm --force --nodeps
下載mysql

image.png
配置時間同步
# 查看時間
date
# 安裝網(wǎng)絡(luò)時鐘
yum install -y ntp
# 設(shè)置定時任務(wù)
crontab -e
# 輸入
*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com;
登陸mysql
# 登陸
mysql -u root -p
# 此時沒有密碼會報錯,編輯my.cnf文件,實現(xiàn)免密登陸
vi /etc/my.cnf
# 在[mysqld]下添加
skip-grant-tables
# 重啟mysql
service mysqld restart
# 重新登陸mysql
mysql -u root -p
# 刷新系統(tǒng)權(quán)限表
flush privileges;
# 設(shè)置密碼
alter user 'root'@'localhost' identified by 'root';
# 刷新系統(tǒng)權(quán)限表
flush privileges;
# 配置遠(yuǎn)程鏈接
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
# 刷新系統(tǒng)權(quán)限表
flush privileges;
# 退出mysql
exit
主從復(fù)制
配置主服務(wù)器
vi /etc/my.cnf
# 添加以下內(nèi)容
log_bin=master_bin
# 日志文件的格式
binlog-format=ROW
# 配置服務(wù)器的id(一定要是唯一的)
server_id=1
# 對應(yīng)需要實現(xiàn)主從復(fù)制的數(shù)據(jù)庫(具體的數(shù)據(jù)庫名稱)
binlog_do_db=test
# 設(shè)置不要復(fù)制的數(shù)據(jù)庫
binlog-ignore-db=mysql
# 添加完上述配置后,需要進入到數(shù)據(jù)庫為從庫添加授權(quán)
grant replication slave on *.* to 'root'@'192.168.10.%' identified by 'root';
# 在這里可能出現(xiàn)1819錯誤,可能是數(shù)據(jù)庫密碼長度導(dǎo)致的
# 查看要求的密碼長度
select @@validate_password_length;
# 修改密碼長度
set global validate_password_length=4;
set global validate_password_policy=0;
# set global validate_password_mixed_case_count=0;
# set global validate_password_number_count=0;
# 具體可查看 SHOW VARIABLES LIKE 'validate_password%';
# 刷新系統(tǒng)權(quán)限表
flush privileges;
配置從服務(wù)器
vi /etc/my.cnf
# 添加以下內(nèi)容
log_bin=master_bin
# 日志文件的格式
binlog-format=ROW
# 配置服務(wù)器的id(一定要是唯一的)
server_id=2
# 如果要配置雙機熱備的話
# log-slave-updates=true
驗證主從復(fù)制
# 重啟主服務(wù)器和從服務(wù)器
service mysqld restart
# 登陸主服務(wù)器,查看主服務(wù)器的狀態(tài)
show master status;

image.png
File:生成的日志文件名
Position:偏移量
Binlog_Do_DB:需實現(xiàn)主從復(fù)制的數(shù)據(jù)庫
# 登陸從服務(wù)器,執(zhí)行(指定了主服務(wù)器的相關(guān)信息,log文件和偏移量,方便文件傳輸和復(fù)制)
change master to master_host='192.168.10.241',master_user='root',master_password='root',master_log_file='master_bin.000001',master_log_pos=600;
# 啟動slave的數(shù)據(jù)同步
start slave;
# 關(guān)閉slave的數(shù)據(jù)同步
stop slave;
# 查看slave的配置信息
show slave status\G;
# 重置slave配置信息
rest slave;
# 重新配置主從
reset master;

image.png
發(fā)現(xiàn)slave端一直處在connecting狀態(tài)
可能原因:1.端口未開放 2.遠(yuǎn)程連接未授權(quán)
解決辦法:開放端口并配置遠(yuǎn)程連接即可
最終效果

image.png