主從復(fù)制原理:
主服務(wù)器開(kāi)啟一個(gè)I/O進(jìn)程,同時(shí)把自己的操作保存到binlog日志里面,從服務(wù)器上面也啟動(dòng)一個(gè)I/O進(jìn)程,通過(guò)配置好的用戶和密碼,連接并讀取主服務(wù)器binlog日志,然后把它寫入到realy log(中繼日志)里面,從服務(wù)器(slave)會(huì)開(kāi)啟一個(gè)SQL進(jìn)程定時(shí)檢查realy log,如果發(fā)現(xiàn)有新數(shù)據(jù),再把新的數(shù)據(jù)在自己的數(shù)據(jù)庫(kù)里執(zhí)行一遍。
準(zhǔn)備兩臺(tái)機(jī)器,關(guān)閉防火墻和selinux肛鹏。---機(jī)器環(huán)境必須一致。時(shí)間也得一致
兩臺(tái)機(jī)器配置hosts解析
192.168.46.15 master
192.168.46.16 slave
開(kāi)始配置主服務(wù)器
[root@master ~]# systemctl start mysqld? ? --開(kāi)啟
[root@master ~]# systemctl enable mysqld? --設(shè)置為開(kāi)機(jī)自啟
1.在主服務(wù)器上改衩,必須啟用二進(jìn)制日志記錄并配置唯一的服務(wù)器ID。需要重啟服務(wù)器悉尾。 編輯主服務(wù)器的配置文件 my.cnf 世澜,添加如下內(nèi)容
添加配置
[mysqld]
log-bin=/var/log/mysql/mysql-bin
server-id=1
創(chuàng)建bin-log日志目錄并賦予權(quán)限
[root@master ~]# mkdir /var/log/mysql
[root@master ~]# chown mysql.mysql /var/log/mysql
重啟一下服務(wù)
[root@master ~]# systemctl restart mysqld
登錄mysql創(chuàng)建同步用戶
[root@master ~]# mysqladmin -uroot -p'123'? ? ? ? ? --實(shí)驗(yàn)所有密碼怔昨,一切從簡(jiǎn)
創(chuàng)建主從同步的用戶:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' identified by 'Aa@123.';
mysql> flush privileges;
查看主狀態(tài)
mysql> show master status\G
配置從服務(wù)器
配置文件my.cnf
[mysqld]
server-id=2
重啟服務(wù)
[root@slave ~]# systemctl restart mysqld
登錄mysql
mysql> CHANGE MASTER TO
-->MASTER_HOST='master',? //主服務(wù)器ip
-->MASTER_USER='repl',? ?//主服務(wù)器用戶
-->MASTER_PASSWORD='Aa@123.',? ?//用戶密碼
-->MASTER_PORT=3306,? ?//端口
-->MASTER_LOG_FILE='mysql-bin.00001',? ?//binlog日志文件名稱
-->MASTER_LOG_POS=4? //日志位置
-->雀久;
啟動(dòng)slave,查看從狀態(tài)
mysql> start slave;
mysql> show slave status\G
查看下面兩行數(shù)據(jù)是否為yes
Slave_IO_Runing:? Yes
Slave_SQL_Runing:? Yes
在master上面執(zhí)行:
mysql> create database testdb;? ? ? ?#創(chuàng)建一個(gè)庫(kù)
Query OK, 1 row affffected (0.10 sec)
mysql> \q
看看從庫(kù)上是否同步
總結(jié)
主從復(fù)制
主服務(wù)器配置
開(kāi)啟二進(jìn)制日志
設(shè)置 server-id
給從服務(wù)器授權(quán)
兩種情況:
1.主服務(wù)器中沒(méi)有原來(lái)的數(shù)據(jù)
重啟 MySQL 服務(wù)
2. 主服務(wù)器有原來(lái)的數(shù)據(jù)
備份出來(lái)原來(lái)的數(shù)據(jù)朱监,用于把這些數(shù)據(jù)導(dǎo)入到從服務(wù)器中
可以保證此時(shí)主和從的數(shù)據(jù)是一致的岸啡。
(原因:開(kāi)啟二進(jìn)制日志只會(huì)記錄開(kāi)啟之后的數(shù)據(jù)更改語(yǔ)句)
mysqldump -A --master-data? > all.sql
從服務(wù)器配置
關(guān)閉防火墻和 SELinux
配置? server-id
假入有數(shù)據(jù),導(dǎo)入數(shù)據(jù)
重啟服務(wù)
配置連接到 master 的信息
啟動(dòng) slave
start slave
查看狀態(tài)
show slave status\G
---------------------------
Slave_IO_Running: Yes
Slave_SQL_Running: Yes