CentOS 7 MySQL(MariaDB) Replication 主從式架構設定
安裝MySQL(MariaDB)的流程,可以參考這篇(CentOS 7 安裝MySQL (更新為MariaDB))
這邊直接進行Replication 設定的部分。
1. 設定Master
#開通防火牆 firewall-cmd --permanent --add-port=3306/tcp #套用規則 firewall-cmd --reload #開啟my.cnf檔 vim /etc/my.cnf
在[mysqld]部分新增以下幾行
[mysqld] #---------- replication master set ---------- server_id=1 log-basename=master log-bin binlog-format=row binlog-do-db=輸入要同步的DB名稱(這邊用test) ...
如果要多個Database可以這樣輸入
binlog-do-db=db1 binlog-do-db=db2 ...
儲存後,重啟mariadb
systemctl restart mariadb
#登入mysql mysql -u root -p #停止Slave MariaDB [(none)]> STOP SLAVE; #新建replication的使用者 MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO '輸入使用者名稱'@'輸入來源(%為任意主機)' IDENTIFIED BY '輸入密碼'; #讓新增的使用者設定權限立即生效 MariaDB [(none)]> FLUSH PRIVILEGES; #鎖定寫入功能在所有的Table,避免同步過程中資料不同步的情況 MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; #查看Master狀態 MariaDB [(none)]> SHOW MASTER STATUS; +--------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------+----------+--------------+------------------+ | mariadb-bin.000001 | 479 | test | | +--------------------+----------+--------------+------------------+ #離開MySQL MariaDB [(none)]> exit
這邊的File (mariadb-bin.000001) 跟Position (479)欄位等等設定Slave時會用到,可以先記起來,我們先將master DB備份一份出來
mysqldump --all-databases --user=root --password --master-data > masterdatabase.sql
#登入mysql mysql -u root -p #解除Table的鎖定 MariaDB [(none)]> UNLOCK TABLES; #離開 MariaDB [(none)]> exit將剛才產生的備份sql檔,複製到slave主機home中,
scp masterdatabase.sql root@輸入slave主機來源:/home
2. 設定Slave
同樣的必須先裝好MariaDB套件,裝好後繼續以下動作。#開啟my.cnf檔 vim /etc/my.cnf
在[mysqld]部分新增以下幾行
[mysqld] server-id = 2 replicate-do-db=輸入要同步的DB名稱(這邊用test) ...
將複製過來的sql檔倒進去
mysql -u root -p < /home/masterdatabase.sql
重啟MariaDB
systemctl restart mariadb
#登入mysql mysql -u root -p #停止Slave MariaDB [(none)]> STOP SLAVE; #設定Master參數 MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='輸入Master主機ip', MASTER_USER='輸入使用者名稱', MASTER_PASSWORD='輸入密碼', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=479; #啟動Slave MariaDB [(none)]> SLAVE START; #查看Slave狀態 MariaDB [(none)]> SHOW SLAVE STATUS\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 顯示Master IP Master_User: 使用者名稱 Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mariadb-bin.000001 Read_Master_Log_Pos: 479 Relay_Log_File: mariadb-relay-bin.000002 Relay_Log_Pos: 918 Relay_Master_Log_File: mariadb-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: test Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 479 Relay_Log_Space: 1214 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 1 row in set (0.00 sec)
3. Master 測試DB
#登入mysql mysql -u root -p #新增Database(輸入上述設定的資料庫名稱) MariaDB [(none)]> create database test; #使用此DB MariaDB [(none)]> use test; #新增測試Table MariaDB [test]> create table test_table (test_field int); #新增一筆測試資料 MariaDB [test]> insert into test_table (test_field) values (1); #查詢剛剛新增的資料 MariaDB [test]> select * from sample; +---------------+ | test_field | +---------------+ | 1 | +---------------+ 1 row in set (0.00 sec)
4. Slave 測試DB有無同步
#登入mysql mysql -u root -p #使用DB MariaDB [(none)]> use test; #查詢是否與Master MariaDB [test]> select * from test_table; +---------------+ | test_field | +---------------+ | 1 | +---------------+ 1 row in set (0.00 sec)
看到有資料後,即完成Replication 主從式架構設定
留言
張貼留言