MySQL是開源的關係型資料庫系統。複製(Replication)是從一台MySQL資料庫伺服器(主伺服器master)複製資料到另一個伺服器(從伺服器slave)的一個進程。
配置主伺服器(master)
1、編輯資料庫設定檔my.cnf,一般在/etc/目錄下。
1.#vi /etc/my.cnf
在[mysqld]的下面加入下面代碼:
1.log-bin=mysql-bin
2.server-id=1
3.innodb_flush_log_at_trx_commit=1
4.sync_binlog=1
5.binlog-do-db=wordpress
6.binlog_ignore_db=mysql
server-id=1中的1可以任定義,只要是唯一的就行。
binlog-do-db=wordpress是表示只備份wordpress。
binlog_ignore_db=mysql表示忽略備份mysql。
不加binlog-do-db和binlog_ignore_db,那就表示備份全部資料庫。
2、然後重啟MySQL:
1.#service mysqld restart
3、登入MySQL伺服器。
1.#mysql -uroot -p
在主伺服器建立一個使用者賦予“REPLICATION SLAVE”的許可權。你不需要再賦予其它的許可權。在下面的命令,把X.X.X.X替換為從伺服器的IP。
1.mysql>CREATE USER 'user'@ 'X.X.X.X' IDENTIFIED BY 'password';
2.mysql>GRANT REPLICATION SLAVE ON *.* TO 'user'@'X.X.X.X' IDENTIFIED BY 'password';
4、執行以下命令鎖定資料庫以防止寫入資料。
1.mysql>FLUSH TABLES WITH READ LOCK;
這時不要退出mysql命令列,因為退出命令列後,全域表鎖就失效,新開一個視窗繼續執行以下命令。
5、匯出資料庫
1.#mysqldump -u root -p123456 --all-databases > /root/all.sql
6、使用scp命令傳輸資料庫檔案all.sql到從伺服器。
1.#scp /root/all.sql root@www.example.com:/root
7、再次串連資料庫進入mysql命令列查看master狀態。
1.mysql>SHOW MASTER STATUS;
請記下顯示的資訊,配置從伺服器會用到。
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000003 | 1001741 | dbispconfig | mysql |
+——————+———-+————–+——————+
1 row in set (0.00 sec)
8、解鎖資料表。
1.mysql>UNLOCK TABLES;
配置從伺服器(slave)
登入從伺服器。
1、匯入主伺服器的資料庫。
1.#mysql -u root -p123456 < /root/all.sql
2、編輯設定檔my.cnf,在[mysqld]下面加入:
1.server-id=2
2可以自己定義,只要保證唯一的就行。
3、儲存檔案並重啟mysqld。
1.#service mysqld restart
4、登入mysql伺服器,執行以下命令。
1.mysql>CHANGE MASTER TO
2.MASTER_HOST='X.X.X.X',
3.MASTER_USER='user',
4.MASTER_PASSWORD='password',
5.MASTER_PORT=3306,
6.MASTER_LOG_FILE='mysql-bin.000001',
7.MASTER_LOG_POS=98,
8.MASTER_CONNECT_RETRY=10;
MASTER_HOST:主伺服器的IP。
MASTER_USER:配置主伺服器時建立的使用者名稱
MASTER_PASSWORD:使用者密碼
MASTER_PORT:主伺服器mysql連接埠,如果未曾修改,預設即可。
5、啟動slave進程。
1.mysql>START SLAVE;
6、查看mysql的日誌,一般在/var/log/目錄下,如果啟動成功,你應該會看到類似下面的日誌。
091104 8:42:02 [Note] Slave I/O thread: connected to master ‘root@X.X.X.X:3306?, replication started in log ‘mysql-bin.000001? at position 98
現在主伺服器和從伺服器已經配置好了。另外你可能需要設定主伺服器的資料庫二進位日誌的到期時間,可以在設定檔中使用參數expire_logs_days來設定。
檢查是否正常運行
1、在主伺服器上執行SHOW MASTER STATUS,如果已經記錄,Position應為非零。如果沒有記錄,確認正用log-bin和server-id選項運行主伺服器。
2、在從伺服器上執行SHOWSHOW SLAVE STATUS,檢查是否slave_IO_Running和slave_SQL_Running的值均為Yes。如果不是,驗證當啟動從伺服器時使用的選項。
3、 如果從伺服器正在運行,建立了與主伺服器的串連嗎?使用SHOW PROCESSLIST,找出I/O和SQL線程並檢查它們的State列看它們如何顯示。如果I/O線程狀態為Connecting to master,驗證主伺服器上複製使用者的許可權、主伺服器主機名稱、DNS設定,是否主伺服器真正在運行,以及是否可以從從屬伺服器訪問。
需要注意的問題
1、主伺服器與從伺服器的時區必須一致,否則mysql執行與時間相關的函數將會導致資料不一致