參考資料:winyee先生,謝謝
Redhat5,mysql 6.0
實驗環境:mysql主服務器A 192.168.0.2 從服務器:192.168.0.3 搭建雙機熱備的mysql集羣
① 分別在主機A,B上面建立用於Replication的用戶.給予REPLICATION SLAVE權限即可
shell>mysqld_safe -user=mysql&
shell>mysql -uroot -ppassword
mysql>GRANT REPLICATION SLAVE ON *.*
-> TO 'repl'@'192.168.0.%' IDENTIFIED BY 'repl';
mysql>quit;
##停止mysql Server.
shell>mysqladmin shutdown -uroot -ppassword
②如若兩臺機器的數據庫不一致,則將某一臺的數據轉移到另外一臺,例如將A數據庫備份到B.主機A打包要複製的數據庫,轉移到B機器.否則,直接執行步驟③即可..
shell> cd /usr/local/mysql/
/usr/local/mysql/#shell#> tar -zcvf var.tar.gz var
這樣,我們得到一個mysql數據庫的打包文件var.tar.gz
在B機器上刪除以前的數據庫文件,將var.tar.gz複製到此處,修改權限
shell> cd /usr/local/mysql/
/usr/local/mysql/#shell#>rm -fr var
/usr/local/mysql/#shell#>tar -zxvf var.tar.gz
/usr/local/mysql/#shell#>cd var
/usr/local/mysql/var/#shell#>chown -R root .
/usr/local/mysql/var/#shell#>chown -R mysql .
③分別修改A,B主機的mysql 配置文件.均如下操作
shell>vi /etc/my.cnf
##找到[mysqld],添加一行'log-bin',並且設置A,B主機的server-id爲兩個不同的整數即可.例如##
## A主機修改爲
[mysqld]
log-bin
server-id=1
## B主機修改爲
[mysqld]
log-bin
server-id=2
##保存退出
④A主機用如下方式啓動mysql.
shell>mysqld_safe --skip-slave-start --user=mysql&
##登陸mysql
shell>mydql -uroot -ppassword
mysql>change master to
->MASTER_HOST='192.168.0.3', ##主機B的ip
->MASTER_USER='repl',
->MASTER_PASSWORD='repl';
mysql> start slave;
⑤B主機也用如下方式啓動mysql.
shell>mysqld_safe --skip-slave-start --user=mysql&
##登陸mysql
shell>mydql -uroot -ppassword
mysql>change master to
->MASTER_HOST='192.168.0.2', ##主機A的ip
->MASTER_USER='repl',
->MASTER_PASSWORD='repl';
mysql> start slave;
⑥現在已基本完成了操作,在任意一臺運行如下命令查看master/slave狀態
mysql> show master status; ##如果Server-id沒有設置,此處將會有警告信息
+----------------------+--------------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+--------------+--------------+------------------+
| localhost-bin.000003 | 98 | | |
+----------------------+--------------+--------------+------------------+
1 row in set (0.03 sec)
****************************************
mysql> show slave status;
-----+--------------------+-----------------+-------------------+----------------+-----------------------+
| Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table
-----+--------------------+-----------------+-------------------+----------------+-----------------------+
| Waiting for master to send event | 192.168.0.3 | repl | 3306 | 60 | localhost-bin.000003 | 98 | localhost-relay-bin.000008 | 239 | localhost-bin.000003 | Yes | Yes | | | | | | | 0 | | 0 | 98 | 239 |
......
1 row in set (0.01 sec)
*****************************************
mysql> show processlist;
+---+-------------+-------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+
| Id| User | Host | db | Command | Time | State | Info |
+---+-------------+-------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+
| 1 | system user | | NULL | Connect | 2073 | Waiting for master to send event | NULL |
| 2 | system user | | NULL | Connect | 1426 | Has read all relay log; waiting for the slave I/O thread to update it | NULL |
| 5 | repl | 192.168.0.3:48356 | NULL | Binlog Dump | 832 | Has sent all binlog to slave; waiting for binlog to be updated | NULL |
| 6 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+----+-------------+-------------------+------+-------------+------+----------------------------------------------------------------------+------------------+
4 rows in set (0.00 sec)
***此處應該有3個以上的id才正確.
****************************************************************************************************************************************
爲了方便,AB主機都添加了repl熱備用戶,此處用戶名,密碼等你可以任意選擇,只要在change master 的時候,添加正確即可.初次做這個的時候,你也可以給予all privileges. mysql並
不贊同這麼給予權限,說是因爲安全的原因. GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'repl';這個語句授權的前提是兩臺主機位於同一
個網段.其實,隨你怎麼設置,只要主機A能在主機B上用repl用戶訪問,主機B能在主機A上用 repl用戶訪問即可.
配置文件:按照官方手冊,添加log-bin即表示當前主機將作爲master. log-bin也可以帶參數:log-bin=sql-bin (用與記錄操作的二進制文件名). 初次做這個的朋友,最好不要帶
參數,否則會比較麻煩的.在任何時候,你都可以用
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password';
後重啓來更改master.