Centos7.4搭建Mysql主從

2020-08-10 10:15:49

此文章使用測試環境的參數設定
一、準備環境
操作系統:Centos7.4
Mysql版本:5.7
主:10.1.11.22
從:10.1.11.23
操作步驟:
搭建MySQL服務這裏就不描述搭建過程
啓動MySQL登錄設定root密碼

mysql -uroot -p$(awk '/temporary password/{print $NF}' /var/log/mysqld.log)
mysql> alter user root@localhost identified by 'Password';

二、設定my.cnf 檔案 只需修改server_id
server-id做什麼用的?
1、 mysql的同步的數據中是包含server-id的,用於標識該語句最初是從哪個server寫入的,所以server-id一定要有的
2、 每一個同步中的slave在master上都對應一個master執行緒,該執行緒就是通過slave的server-id來標識的;每個slave在master端最多有一個master執行緒,如果兩個slave的server-id 相同,則後一個連線成功時,前一個將被踢掉。 這裏至少有這麼一種考慮:
slave主動連線master之後,如果slave上面執行了slave stop;則連線斷開,但是master上對應的執行緒並沒有退出;當slave start之後,master不能再建立一個執行緒而保留原來的執行緒,那樣同步就可能有問題;
3、 在mysql做主主同步時,多個主需要構成一個環狀,但是同步的時候有要保證一條數據不會陷入死回圈,這裏就是靠server-id來實現的

vi /etc/my.cnf
[mysqld]
basedir=/data/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
server_id=22
port=3306
secure-file-priv=/tmp
autocommit=0
log_bin=/data/binlog/mysql-bin
binlog_format=row
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
[mysql]
prompt=db01 [\\d]>

#autocommit=0指事務非自動提交,自此句執行以後,每個SQL語句或者語句塊所在的事務都需要顯示"commit"才能 纔能提交事務
#binlog_format binlog日誌格式,mysql預設採用statement,建議使用mixed

三、檢視所有節點server_id

[root@Test01 ~]# mysql -uroot -p -e "select @@server_id"
Enter password:
+-------------+
| @@server_id |
+-------------+
| 22          |
+-------------+
[root@Test02 ~]# mysql -uroot -p -e "select @@server_id"
Enter password:
+-------------+
| @@server_id |
+-------------+
| 23          |
+-------------+

四、主伺服器建立複製使用者

mysql> grant replication slave on *.* to repl@'10.1.11.%' identified by 'Test@101#Qm';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host				 |
+---------------+-----------+
| repl 		| 10.1.11.% 	|
| mysql.session | localhost |
| mysql.sys 	| localhost |
| root 			| localhost |
+---------------+-----------+
4 rows in set (0.07 sec)

五、10.1.11.22(主)備份數據庫

[root@Test01 ~]#mysqldump -uroot -p -A --master-data=2 --single-transaction -R --triggers > /mnt/all.sql

六、記錄 binlog日誌及position號

mysql> show master status;
+-------------------------+-----------+
|File					  |Position   |
+-------------------------+-----------+
|mysql-bin.0000003        |		484   |
+-------------------------+-----------+

七、將主庫備份的數據匯入從庫
[root@Test01 ~]#mysql -uroot -p
mysql>source /mnt/all.sql
八、從庫執行同步資訊

mysql> CHANGE MASTER TO
-> MASTER_HOST='10.1.11.22',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='Test@101#Qm',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000003',
-> MASTER_LOG_POS=484,
-> MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

九、開啓主從執行緒

從庫執行
mysql> start slave;
檢視從庫複製狀態
mysql> show slave  status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

主從複製設定完成