CentOS上的MySQL主/從複製

的MySQL 複製品 易於維護的過程 多份MySQL數據 通過自動複製它們 主從數據庫。由於許多原因,這很有用。 後備 對於 資料如何進行分析,而無需使用主數據庫或僅作為一種擴展手段。

本教程涵蓋以下非常簡單的示例: mysql複製—一個主機將信息發送到單個從機。為了使該過程正常進行,您需要兩個IP地址。一個是主服務器,另一個是從服務器。

1.運行Linux操作系統(在本例中為CentOS 6.5)2.主服務器和從服務器是CentOS 6.5 Linux服務器。 3.主IP地址為192.168.100.1。 4.從站IP地址為192.168.100.2。

配置主服務器進行複製

如果你沒有 MySQL的可以使用安裝 YUM命令。如果你已經有 的MySQL 安裝方式,您可以跳過此步驟。

# yum install mysql-server mysql

在主服務器上配置MySQL

在nano編輯器中打開my.cnf配置文件。

# nano /etc/my.cnf

添加以下條目 [mysqld] 在本節中,請不要忘記將lintut替換為要在從屬服務器上複製的數據庫的名稱。

# [mysqld] section
# Start Modification
# First line is probably already there
server-id = 1
binlog-do-db=lintut
expire-logs-days=7
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql-bin.log

重新啟動MySQL服務。

# service mysqld restart

現在您需要告訴MySQL在哪裡複製和向誰複製。以root用戶身份登錄到MySQL,創建一個slave用戶,並授予複製特權。將“ slave_user”替換為“ user”,將“ your_password”替換為您的密碼。

# mysql -u root -p
mysql -u root -p
mysql> STOP SLAVE;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | POSITION | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 451228 | lintut | |
+------------------+----------+--------------+------------------+
1 ROW IN SET (0.00 sec)

記下文件和位置號,因為這是複製開始的位置。在這裡,建議您創建主數據庫的轉儲並將其通過管道傳輸到從服務器。

mysqldump -u root --all-databases --single-transaction --master-data=1 > /home/datadump.sql

轉儲所有數據庫後,以root用戶和unlcok表的身份再次連接到mysql。

mysql> UNLOCK TABLES;
mysql> quit;

將數據庫轉儲上載到從屬服務器(使用scp命令):

scp datadump.sql [email protected]:/root

主服務器已成功配置。

配置從屬服務器

首先安裝mysql服務器(使用yum逗號):

yum install mysql mysql-server -y

將SQL轉儲文件導入MySQL。

mysql -u root -p < datadump.sql

然後在從屬服務器上執行相同的操作

nano /etc/my.cnf
# [mysqld] section
# Start Modification
# First line is probably already there
server-id = 2
master-host=192.168.100.1
master-connect-retry=60
master-user=slave_user
master-password=yourpassword
replicate-do-db=lintut
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin
# Stop Modification

現在,配置從服務器從主服務器讀取,從您先前寫下的記錄位置開始。確保您已在數步之前使用過MASTER_LOG_FILE和MASTER_LOG_POS。

mysql> CHANGE MASTER TO MASTER_HOST='192.168.100.1', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=451228;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUSG;

驗證MySql複製

在主服務器上創建測試數據庫

mysql> create database lintut;
mysql> use lintut;
mysql> CREATE TABLE test (item int);
mysql> INSERT INTO test (item) VALUES (testitem);
mysql> SELECT * FROM test;
+------------+
| item |
+------------+
| testitem |
+------------+
1 row in set (0.00 sec)

在從屬服務器上執行命令。

mysql> use lintut;
mysql> SELECT * FROM test;
+------------+
| item |
+------------+
| testitem |
+------------+
1 row in set (0.00 sec)

如果不是,請檢查MySQL錯誤日誌以找到問題的根源。

Sidebar