服務器準備
準備服務器Server1和Server2,如果在同一個服務器的話則安裝mysql時需要改變其端口。
卸載mysql
在安裝之前必須先檢查主機上有沒有安裝過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
設為開機啟動:
systemctl enable mysqld
systemctl daemon-reload
啟動mysql:
systemctl start mysqld
以上步驟就安裝好mysql8了。
獲取mysql的臨時密碼:
grep 'temporary password' /var/log/mysqld.log
登錄mysql:
mysql -uroot -p
會提示輸入密碼,輸入之前獲取的臨時密碼即可登錄。
此時需要修改mysql的密碼,要不然之后的步驟也會強制提示你需要修改密碼:
ALTER USER 'root'@'localhost' IDENTIFIED BY '121b33dAj934J1^Sj9ag';
mysql8默認對密碼的強度有要求,需要設置復雜一點,要不然也會提示錯誤。
刷新配置:
FLUSH PRIVILEGES;
主從配置
在主從配置之前需要確保兩臺mysql需要同步的庫狀態一致。
主
配置文件默認在/etc/my.cnf
下。
在配置文件中新增配置:
[mysqld]
## 同一局域網內注意要唯一
server-id=100
## 開啟二進制日志功能,可以隨便取(關鍵)
log-bin=mysql-bin
修改配置后需要重啟才能生效:
service mysql restart
重啟之后進入mysql:
mysql -uroot -p
在master數據庫創建數據同步用戶,授予用戶 slave REPLICATION SLAVE權限和REPLICATION CLIENT權限,用于在主從庫之間同步數據。
CREATE USER 'slave'@'%' IDENTIFIED BY '@#$Rfg345634523rft4fa';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
語句中的%
代表所有服務器都可以使用這個用戶,如果想指定特定的ip,將%
改成ip即可。
查看主mysql的狀態:
show master status;
記錄下File
和Position
的值,并且不進行其他操作以免引起Position
的變化。
從
在從my.cnf
配置中新增:
mysqld]
## 設置server_id,注意要唯一
server-id=101
## 開啟二進制日志功能,以備Slave作為其它Slave的Master時使用
log-bin=mysql-slave-bin
## relay_log配置中繼日志
relay_log=edu-mysql-relay-bin
修改配置后需要重啟才能生效:
service mysql restart
重啟之后進入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的端口號
master_user:用于數據同步的用戶
master_password:用于同步的用戶的密碼
master_log_file:指定 Slave 從哪個日志文件開始復制數據,即上文中提到的 File 字段的值
master_log_pos:從哪個 Position 開始讀,即上文中提到的 Position 字段的值
master_connect_retry:如果連接失敗,重試的時間間隔,單位是秒,默認是60秒
在從mysql中查看主從同步狀態:
show slave status \G;
此時的SlaveIORunning 和 SlaveSQLRunning 都是No,因為我們還沒有開啟主從復制過程。
開啟主從復制:
start slave;
再次查看同步狀態:
show slave status \G;
SlaveIORunning 和 SlaveSQLRunning 都是Yes說明主從復制已經開啟。
若SlaveIORunning一直是Connecting,有下面4種原因:
1、網絡不通,檢查ip端口
2、密碼不對,檢查用于同步的用戶名和密碼
3、pos不對,檢查Master的Position
4、mysql8特有的密碼規則問題引起:
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '@#$Rfg345634523rft4fa';
將密碼規則修改為:mysql_native_password
如果需要指定想要主從同步哪個數據庫,可以在master的my.cnf
添加配置:
binlog-do-db:指定mysql的binlog日志記錄哪個db
或者在slave的my.cnf
添加配置:
replicate-do-db=需要復制的數據庫名,如果復制多個數據庫,重復設置這個選項即可 replicate-ignore-db=需要復制的數據庫名,如果復制多個數據庫,重復設置這個選項即可
如果想要同步所有庫和表,在從mysql執行:
STOP SLAVE SQL_THREAD;
CHANGE REPLICATION FILTER REPLICATE_DO_DB = ();
start SLAVE SQL_THREAD;
如果以上步驟出現問題,可以查看日志:
/etc/log/mysqld.log