設為首頁

收藏本站

導覽首頁 | 新登場    ◇聯盟溫泉 | 民宿 | 人力銀行 | 女性 |

類型:mysql_article

Setting up MySQL Master Slave Replication with rsync
本文是一系列設置MySQL複製的一部分。 與大多數事情一樣,總有不止一種方法可以做某事。 在設置MySQL複製或重建它的情況下,根據您的使用情況,某些選項比其他選項更好。
本指南將介紹如何使用Rsync設置MySQL主/從復制。 那麼為什麼要使用Rsync來設置或重建MySQL Replication呢? 如果您的數據庫和表格很大但相當安靜,您可以通過使用Rsync同步大部分內容來限制停機時間,然後在計劃維護窗口期間執行最終Rsync以捕獲可能具有的任何表格 通過使用READ LOCK更改。 當您沒有足夠的磁盤空間在db01上使用mysqldump或使用Percona的XtraBackup執行傳統備份時,這也非常有用,因為數據直接rsync到db02。

這是一種相當簡單的設置MySQL Replication或重建它的方法。 因此,在下面的部分中,我們將配置Master和Slave MySQL服務器進行複制,然後我們將通過數據庫進行同步。
設置Master MySQL服務器
配置my.cnf如下所示:
log-bin=/var/lib/mysql/db01-binary-log
expire-logs-days=5
server-id=1

然後重啟MySQL以應用設置:
# CentOS / RHEL:
[root@db01 ~]# service mysqld restart
# Ubuntu / Debian:
[root@db01 ~]# service mysql restart
最後,授予對Slave的訪問權限,以便它可以與Master進行通信:
mysql> GRANT REPLICATION SLAVE ON *.* to 'repl’@’10.x.x.x’ IDENTIFIED BY 'your_password';
設置Slave MySQL服務器
配置my.cnf如下所示:
relay-log=/var/lib/mysql/db02-relay-log
relay-log-space-limit = 4G
read-only=1
server-id=2
然後重啟MySQL以應用設置:
# CentOS / RHEL:
[root@db02 ~]# service mysqld restart
# Ubuntu / Debian:
[root@db02 ~]# service mysql restart
Rsync the databases
作為參考,本指南的其餘部分將參考服務器,如下所示:
db01 - Master MySQL Server
db02 - Slave MySQL Server
On db02 only, rename the existing MySQL datadir, and create a fresh folder:(僅在db02上,重命名現有的MySQL數據庫,並創建一個新文件夾:)
[root@db02 ~]# service mysqld stop
[root@db02 ~]# mv /var/lib/mysql /var/lib/mysql.old
[root@db02 ~]# mkdir /var/lib/mysql
On db01 only, perform the initial sync of data over to db02:(僅在db01上,執行數據到db02的初始同步:)
[root@db01 ~]# rsync -axvz /var/lib/mysql/ root@db02:/var/lib/mysql/
現在您已經移動了大部分數據庫,它是時間在計劃的維護窗口期間執行數據的最終同步,因為您將使用READ LOCK刷新表,然後同步數據。

僅在db01上,使用READ LOCK刷新表,並獲取我們稍後需要的主狀態信息。 在READ LOCK就位時,不要退出MySQL是至關重要的。 退出MySQL後,將刪除READ LOCK。 因此,下面的示例將在屏幕會話中運行此示例,以便它繼續在後台運行:
[root@db01 ~]# screen -S mysql
[root@db01 ~]# mysql
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
(detach screen session with ctrl a d)

On db01 only, perform the final rsync of the databases to db02, then release the READ LOCK on db01:(僅在db01上,執行數據庫的最終rsync到db02,然後在db01上釋放READ LOCK:)
[root@db01 ~]# rsync -axvz --delete /var/lib/mysql/ root@db02:/var/lib/mysql/
[root@db01 ~]# screen -dr mysql
mysql> quit
[root@db01 ~]# exit
On db02 only, remove the stale mysql.sock file, startup MySQL, configure db02 to connect to db01 using the information from the show master status command you ran on db01 previously, and start replication:(僅在db02上,刪除陳舊的mysql.sock文件,啟動MySQL,使用先前在db01上運行的show master status命令中的信息配置db02以連接到db01,然後啟動複製:)
[root@db02 ~]# rm /var/lib/mysql/mysql.sock
[root@db02 ~]# service mysqld start
[root@db02 ~]# mysql
mysql> CHANGE MASTER TO MASTER_HOST='10.x.x.x', MASTER_USER='repl', MASTER_PASSWORD='your_password', MASTER_LOG_FILE='db01-bin-log.000001', MASTER_LOG_POS=1456783;
mysql> start slave;
mysql> show slave status\G
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
...
If those values are the same as what is shown above, then replication is working properly! Perform a final test by creating a test database on the Master MySQL server, then check to ensure it shows up on the Slave MySQL server. Afterwards, feel free to drop that test database on the Master MySQL server.
https://www.stephenrlang.com/2016/08/setting-up-mysql-master-slave-replication-with-rsync/

104休閒信箱 2.3.0 © 104mm.com 2001 - 2018. 您尚未登錄
Page generated in 0.01709700 seconds with 3 Queries