本文章給大家轉一篇不錯的關於Linux MySQL主從復制(Replication)(MySQL數據同步)配置教程,歡迎各位同學進入參考。
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 [email protected]:/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 ‘[email protected]: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執行與時間相關的函數將會導致數據不一致