服務(wù)器準(zhǔn)備
準(zhǔn)備服務(wù)器Server1和Server2宵距,如果在同一個(gè)服務(wù)器的話則安裝mysql時(shí)需要改變其端口锐帜。
卸載mysql
在安裝之前必須先檢查主機(jī)上有沒有安裝過mysql,如果安裝過的話必須先卸載岭辣。
安裝mysql
下載軟件包:
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
本地安裝:
yum localinstall mysql80-community-release-el7-1.noarch.rpm
安裝mysql:
yum install mysql-community-server
設(shè)為開機(jī)啟動(dòng):
systemctl enable mysqld
systemctl daemon-reload
啟動(dòng)mysql:
systemctl start mysqld
以上步驟就安裝好mysql8了榄鉴。
獲取mysql的臨時(shí)密碼:
grep 'temporary password' /var/log/mysqld.log
登錄mysql:
mysql -uroot -p
會(huì)提示輸入密碼,輸入之前獲取的臨時(shí)密碼即可登錄胎食。
此時(shí)需要修改mysql的密碼,要不然之后的步驟也會(huì)強(qiáng)制提示你需要修改密碼:
ALTER USER 'root'@'localhost' IDENTIFIED BY '121b33dAj934J1^Sj9ag';
mysql8默認(rèn)對密碼的強(qiáng)度有要求蒙谓,需要設(shè)置復(fù)雜一點(diǎn)斥季,要不然也會(huì)提示錯(cuò)誤训桶。
刷新配置:
FLUSH PRIVILEGES;
主從配置
在主從配置之前需要確保兩臺(tái)mysql需要同步的庫狀態(tài)一致累驮。
主
配置文件默認(rèn)在/etc/my.cnf
下。
在配置文件中新增配置:
[mysqld]
## 同一局域網(wǎng)內(nèi)注意要唯一
server-id=100
## 開啟二進(jìn)制日志功能舵揭,可以隨便劝ā(關(guān)鍵)
log-bin=mysql-bin
修改配置后需要重啟才能生效:
service mysql restart
重啟之后進(jìn)入mysql:
mysql -uroot -p
在master數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)同步用戶,授予用戶 slave REPLICATION SLAVE權(quán)限和REPLICATION CLIENT權(quán)限午绳,用于在主從庫之間同步數(shù)據(jù)置侍。
CREATE USER 'slave'@'%' IDENTIFIED BY '@#$Rfg345634523rft4fa';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
語句中的%
代表所有服務(wù)器都可以使用這個(gè)用戶,如果想指定特定的ip拦焚,將%
改成ip即可蜡坊。
查看主mysql的狀態(tài):
show master status;
記錄下File
和Position
的值,并且不進(jìn)行其他操作以免引起Position
的變化赎败。
從
在從my.cnf
配置中新增:
mysqld]
## 設(shè)置server_id,注意要唯一
server-id=101
## 開啟二進(jìn)制日志功能秕衙,以備Slave作為其它Slave的Master時(shí)使用
log-bin=mysql-slave-bin
## relay_log配置中繼日志
relay_log=edu-mysql-relay-bin
修改配置后需要重啟才能生效:
service mysql restart
重啟之后進(jìn)入mysql:
mysql -uroot -p
change master to master_host='172.17.0.2', master_user='slave', master_password='@#$Rfg345634523rft4fa', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;
master_host :Master的地址
master_port:Master的端口號(hào)
master_user:用于數(shù)據(jù)同步的用戶
master_password:用于同步的用戶的密碼
master_log_file:指定 Slave 從哪個(gè)日志文件開始復(fù)制數(shù)據(jù),即上文中提到的 File 字段的值
master_log_pos:從哪個(gè) Position 開始讀僵刮,即上文中提到的 Position 字段的值
master_connect_retry:如果連接失敗据忘,重試的時(shí)間間隔,單位是秒搞糕,默認(rèn)是60秒
在從mysql中查看主從同步狀態(tài):
show slave status \G;
此時(shí)的SlaveIORunning 和 SlaveSQLRunning 都是No勇吊,因?yàn)槲覀冞€沒有開啟主從復(fù)制過程。
開啟主從復(fù)制:
start slave;
再次查看同步狀態(tài):
show slave status \G;
SlaveIORunning 和 SlaveSQLRunning 都是Yes說明主從復(fù)制已經(jīng)開啟窍仰。
若SlaveIORunning一直是Connecting汉规,有下面4種原因:
1、網(wǎng)絡(luò)不通驹吮,檢查ip端口
2针史、密碼不對,檢查用于同步的用戶名和密碼
3钥屈、pos不對悟民,檢查Master的Position
4、mysql8特有的密碼規(guī)則問題引起:
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '@#$Rfg345634523rft4fa';
將密碼規(guī)則修改為:mysql_native_password
如果需要指定想要主從同步哪個(gè)數(shù)據(jù)庫篷就,可以在master的my.cnf
添加配置:
binlog-do-db:指定mysql的binlog日志記錄哪個(gè)db
或者在slave的my.cnf
添加配置:
replicate-do-db=需要復(fù)制的數(shù)據(jù)庫名射亏,如果復(fù)制多個(gè)數(shù)據(jù)庫近忙,重復(fù)設(shè)置這個(gè)選項(xiàng)即可 replicate-ignore-db=需要復(fù)制的數(shù)據(jù)庫名,如果復(fù)制多個(gè)數(shù)據(jù)庫智润,重復(fù)設(shè)置這個(gè)選項(xiàng)即可
如果想要同步所有庫和表及舍,在從mysql執(zhí)行:
STOP SLAVE SQL_THREAD;
CHANGE REPLICATION FILTER REPLICATE_DO_DB = ();
start SLAVE SQL_THREAD;
如果以上步驟出現(xiàn)問題,可以查看日志:
/etc/log/mysqld.log