目的: 讓兩台mysql服務器可以互為主從提供同步服務.
優點:
1. mysql的主從復制的主要優點是同步"備份", 在從機上的數據庫就相當於一個(基本實時)備份庫.
2. 在主從復制基礎上, 通過mysqlproxy可以做到讀寫分離, 由從機分擔一些查詢壓力.
3. 做一個雙向的主從復制, 兩台機器互相為主機從機, 這樣, 在任何一個機器的庫中寫入, 都會"實時"同步到另一台機器, 雙向的優點在於當一台主機發生故障時, 另一台主機可以快速的切換過來繼續服務.
步驟:
1. 在兩台機器上添加一個用於從機訪問的帳號, 賦予REPLICATION SLAVE權限.
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave';
為slave用戶賦予任何數據庫中任何表上的REPLICATION SLAVE權限, 此用戶可以在網絡任意位置訪問, 訪問時以密碼slave標記.
當使用的是ubuntu的時候, 需要注意一點, /etc/mysql/my.cnf配置文件下的bind-address = 127.0.0.1這一行需要注釋, 不然從機在請求時是連接不到的.(我的是ubuntu, 其他版linux不知道會不會一樣)
為了保證工作的步驟明細, 可以采用在配置完用戶相關信息之后, 在另一台機器上以分配的用戶密碼連接一次, 能成功則能保證當前步驟是正確的.
2. 配置服務器編號, 開啟bin-log
編輯mysql配置文件, linux: /etc/mysql/my.cnf, windows: c:/program files/mysql/mysql 5.0/my.ini
找到[mysqld]這個標簽,
在它的下面有兩行
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
打開這兩行的注釋, 注意這里的server-id是服務器編號, 所以, 兩台服務器上的值要設置的不一樣. 比如1和2
3. 使server-id和log-bin的配置修改生效:
sudo /etc/init.d/mysql restart
或者windows下在服務里重啟mysql服務
4. 將兩台數據庫服務器的mysql都鎖定
在mysql命令模式下:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
此時請保證執行這兩條命令的mysql控制台不要退出.
5. 分別重新打開一個mysql控台台, 配置主機
CHANGE MASTER TO
MASTER_HOST = 'host', #另一台機器的地址
MASTER_PORT = 3306, #另一台機器的端口
MASTER_USER = 'slave',#另一台機器上第一步分配的用戶名
MASTER_PASSWORD = 'slave', #另一台機器上第一步分配的密碼
MASTER_LOG_FILE = 'mysql-bin.000001',#另一台機器上執行SHOW MASTER STATUS得到的文件名
MASTER_LOG_POS = 192; #另一台機器上執行SHOW MASTER STATUS得到的偏移量
6. 開啟同步
START SLAVE;
