MySQL數據庫雙機熱備------主-主備份配置
實驗環境:
主1數據庫 192.168.1.1 centos6.5 x86_64 +MySQL5.5.35
主2數據庫192.168.1.2 WindowsXP x64 +MySQL5.5.13
一、安裝數據庫
1.在centos6.5 x86_64 上面安裝MySQL5.5.35數據庫,下載rpm包的形式安裝,在MySQL的官網上面下載。
MySQL-client-5.5.35-1.el6.x86_64.rpm
MySQL-server-5.5.35-1.el6.x86_64.rpm
2.WindowsXP x64 上面安裝MySQL5.5.13,軟件在網上獲取。
二、兩個數據庫都修改root密碼,並且開啟遠程訪問權限。
1.# mysqladmin -u root -ppassword newpassword
Windows上面的是在dos下面進入到C:\Program Files\MySQL\MySQL Server 5.5\bin目錄然后執行上面的命令。
2.mysql> grant all privileges on *.* to root@'% 'identified by 'newpassword';
mysql>flush privileges;
修改好之后,相互遠程測試一下看是否能夠相互遠程。
三、主1數據庫配置
1.添加同步賬號
登陸mysql操作界面,在主1服務器上為主2服務器建立一個用來同步的連接帳戶,該帳戶必須授予REPLICATION SLAVE權限。因為從mysql版本3.2以后就可以通過REPLICATION對其進行雙機熱備的功能操作。
操作指令如下:
mysql> grant replication slave on*.* to bak@'192.168.1.2' identified by 'bak';
mysql> flush privileges;
2.測試同步賬號的連接性
創建好同步連接帳戶后,我們可以通過在主2服務器上用bak帳戶對主1服務器數據庫進行訪問,看下是否能連接成功。主2上輸入如下指令:
# mysql –h192.168.1.1 –u bak –p 回車之后要求輸入密碼,密碼為bak,如果登陸成功,則可以繼續進行雙擊熱備,否則請找到問題並解決。
3.修改配置文件
修改配置文件/etc/my.cnf 打開在[mysqld]下修改即可:
[mysqld]
server-id= 1
log-bin=mysql-bin #啟用日志文件
binlog-do-db= test #需要同步的數據庫
binlog-ignore-db= mysql #不需要同步的數據庫
log-slave-updates
sync_binlog= 1
auto_increment_offset= 1
auto_increment_increment= 2
replicate-do-db= test
replicate-ignore-db= mysql,information_schema
修改完配置文件后,保存后,重啟一下mysql服務,如果成功則沒問題。
4.查看主服務器 mysql的狀態文件
#servicemysql restart
登陸mysql 輸入命令:
mysql>flush tables whit read lock; 鎖表以便在同步之前寫數據進去。
mysql>show master status\G
***************************1. row ***************************
File: mysql-bin.000003
Position: 107
Binlog_Do_DB: test
Binlog_Ignore_DB:mysql
1row in set (0.00 sec)
注意看里面的參數,特別前面兩個File和Position,在從服務(Slave)配置主-主關系會有用到的。
注:這里使用了鎖表,目的是為了產生環境中不讓進新的數據,好讓從服務器定位同步位置,初次同步完成后,記得解鎖。
mysql>unlock tables;
QueryOK, 0 rows affected (0.00 sec)
四、主2數據庫配置
1.添加同步賬戶
登陸mysql操作界面,在主2服務器上為主1服務器建立一個用來同步的連接帳戶,該帳戶必須授予REPLICATION SLAVE權限。因為從mysql版本3.2以后就可以通過REPLICATION對其進行雙機熱備的功能操作。
操作指令如下:
mysql> grant replication slave on*.* to bak@'192.168.1.1' identified by 'bak';
mysql> flush privileges;
2.測試同步賬戶的連接性
創建好同步連接帳戶后,我們可以通過在從服務器(Slave)上用bak帳戶對主服務器(Master)數據庫進行訪問,看下是否能連接成功。在從服務器(Slave)上輸入如下指令:
# mysql –h192.168.1.2 –u bak –p 回車之后要求輸入密碼,密碼為bak,如果登陸成功,則可以繼續進行雙擊熱備,否則請找到問題並解決。
3.修改配置文件
修改配置文件 C:\ProgramFiles\MySQL\MySQL Server 5.5 中的my.ini
[mysqld]
server-id = 2
log-bin=mysql-bin
replicate-do-db = test
replicate-ignore-db =mysql,information_schema,performance_schema
binlog-do-db = test
binlog-ignore-db = mysql
log-slave-updates
sync_binlog = 1
auto_increment_offset = 2
auto_increment_increment = 2
修改完之后,重啟windows上的mysql的服務。
Netmysql restart 也可以手工去服務里面找到mysql重啟。
4.查看主2 mysql服務器的狀態文件
登陸mysql 輸入命令:
mysql>flush tables whit read lock; 鎖表以便在同步之前寫數據進去。
mysql>show master status\G
***************************1. row ***************************
File: mysql-bin.000004
Position: 536
Binlog_Do_DB: test
Binlog_Ignore_DB:mysql
1row in set (0.00 sec)
五、利用change master 語句指定同步位置
1.指定主1的同步源
主1的同步源為主2 mysql服務器。
在主1服務器上面操作,這步是最關鍵的一步了,在進入mysql操作界面后,輸入如下指令:
mysql>stopslave; //先停步slave服務線程,這個是很重要的,如果不這樣做會造成以下操作不成功。
mysql>change master to
>master_host='192.168.1.2',master_user='bak',master_password='bak',
> master_log_file='mysql-bin.000004',master_log_pos=536;
注:master_log_file,master_log_pos由主2服務器(Master)查出的狀態值中確定。master_log_file對應File, master_log_pos對應Position。Mysql 5.x以上版本已經不支持在配置文件中指定主服務器相關選項。
在mysql表中查詢 SHOW MASTER STATUS 查詢file position
如果遇到問題不成功,則需要重新設置slave命令如下:
mysql>stop slave;
mysql>reset slave;
之后停止slave線程重新設置。成功后,則可以開啟slave線程了。
mysql>start slave;
2.指定主2的同步源
主2的同步源為主1 mysql服務器。
在主2服務器上 使用changemaster語句
mysql>stopslave; //先停步slave服務線程,這個是很重要的,如果不這樣做會造成以下操作不成功。
指定主機的命令,主機操作后備機更新數據
mysql>change master to
>master_host='192.168.1.1',master_user='bak',master_password='bak',
> master_log_file='ysql-bin.000003',master_log_pos=107;
注:master_log_file,master_log_pos由主服務器(Master)查出的狀態值中確定。master_log_file對應File, master_log_pos對應Position。Mysql 5.x以上版本已經不支持在配置文件中指定主服務器相關選項。
六、查看同步狀態
在主1服務器上查看主2服務器的狀態(對於主1來說,主2就是slave;)用如下指令進行查看:
mysql> show slave status\G
*************************** 1. row***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.2
Master_User: bak
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 107
Relay_Log_File: CO6-relay-bin.000004
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test
Replicate_Ignore_DB: mysql,information_schema
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
查看下面兩項值均為Yes,即表示設置從服務器成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在主2服務器上查看主1服務器的狀態(對於主2來說,主1就是slave;)用如下指令進行查看:
mysql> show slave status\G
*************************** 1. row***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.1
Master_User: bak
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 536
Relay_Log_File: IT06-relay-bin.000004
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test
Replicate_Ignore_DB:mysql,information_schema,performance_schema
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 536
Relay_Log_Space: 408
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
查看下面兩項值均為Yes,即表示設置從服務器成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
七、測試
在主1數據庫的test庫中建表寫數據,查看主2數據庫中是否有同步數據。再在主2數據庫的test庫中建表寫數據,查看主1數據庫中是否有同步數據。
八、結論
主—主數據庫的雙機熱備操作比較復雜,遵循的原則是每一步必須都調試成功,否則下面就無法進行了。Mysql 5.x以上版本已經不支持在配置文件中指定主服務器相關選項。所以要使用changemaster語句,這一點很重要。