標籤:mysql
環境準備:
在虛擬機器上安裝Cenos6.3,然後下載安裝mysql,
關於在CenOS6.3下安裝mysql-5.5.25這裡就不在重複了,請看前面的部落格http://shansongxian.blog.51cto.com/5040181/1429804 ,因為我們是作mysql主從伺服器,肯定需要兩台虛擬機器來測試,如果再次去安裝太麻煩了,這裡我們使用vmware虛擬機器的複製功能,先將安裝好的mysql伺服器關閉,在所有的選項卡上右擊----管理----複製----複製自“虛擬機器中的目前狀態----建立連結複製,然後選擇複製儲存路徑即可,之所有不選擇完全複製是因為到時時間太長
啟動複製的虛擬機器,這裡我們還需要解決一個問題,複製的虛擬機器網卡裝置無法識別啟動
解決方案:1.刪除/etc/udev/rules.d/70-persistent-net.rules後重啟伺服器
70-persistent-net.rules這個檔案確定了網卡與MAC地址的綁定
2.重啟伺服器後使用vi開啟/etc/udev/rules.d/70-persistent-net.rules這個檔案,記住MAC地址,開啟網路設定檔,將HWADDR= 修改為剛才的MAC地址再次重啟伺服器,網卡就可以使用了
mysql主伺服器 IP=192.168.100.230 HOSTNAME=master.abc.com
mysql從伺服器 IP=192.168.100.231 HOSTNAME=slave.abc.com
主伺服器的配置
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必須]啟用二進位日誌
server-id=230 //[必須]伺服器唯一ID,預設是1,一般取IP最後一段
修改好設定檔後需要重啟mysql服務
service mysqld restart
2.在主伺服器上建立賬戶並授權
使用root使用者登入mysql伺服器
mysql>GRANT REPLICATION SLAVE ON *.* to ‘huqiang‘@‘%‘ identified by ‘hdzzjsj‘;
//一般不用root帳號,“%”表示所有用戶端都可能連,只要帳號,密碼正確,此處可用具體用戶端IP代替,如192.168.100.231,加強安全。
mysql>flush privileges; //重新整理系統許可權表
3.查詢主伺服器master狀態
mysql> mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 | 328 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
到這一步就不要動主伺服器了,防止狀態值發生變化
4.從伺服器的配置
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必須]啟用二進位日誌
server-id=231 //[必須]伺服器唯一ID,預設是1,一般取IP最後一段
修改好設定檔後需要重啟mysql服務
service mysqld restart
5.使用root使用者進入從伺服器
mysql> change master to master_host=‘192.168.100.230‘,master_user=‘huqiang‘,mync‘,master_password=‘hdzzjsj‘,master_log_file=‘mysql-bin.000006‘,master_log_pos=328;
//注意to後面是空格不要斷開,“328”無單引號。
mysql> start slave; //啟動從伺服器複製功能
6.檢查從伺服器複製功能狀態:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.100.230 //主伺服器地址
Master_User: huqiang //授權操作的使用者,盡量不用root使用者
Master_Port: 3306 //連接埠
Connect_Retry: 60
Master_Log_File: mysql-bin.000006
Read_Master_Log_Pos: 328
Relay_Log_File: www-relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes //此狀態必須YES
Slave_SQL_Running: Yes //此狀態必須YES
Replicate_Do_DB:
Replicate_Ignore_DB:
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: 328
Relay_Log_Space: 407
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 230
1 row in set (0.00 sec)
Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。
以上操作過程,主從伺服器配置完成。
7.
主從伺服器測試:
主伺服器Mysql,建立資料庫,並在這個庫中建表插入一條資料:
mysql> create database jack;
mysql> use jack;
mysql> create table abc(
-> id int primary key auto_increment,
-> sname varchar(40) not null default ‘‘,
-> sex char(1) not null default ‘‘
-> )engine myisam charset utf8;
mysql> insert into abc (sname,sex) values (‘張三‘,‘男‘);
mysql> select * from abc;
+----+--------+-----+
| id | sname | sex |
+----+--------+-----+
| 1 | 張三 | 男 |
+----+--------+-----+
1 row in set (0.00 sec)
登入從mysql伺服器,查看,OK了
如果從伺服器並沒有同步主伺服器的資料,並且查看從伺服器狀態時,發現有一下錯誤資訊:
“Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file‘”
這是由於主從伺服器資料不同步造成的,這時可以通過以下幾步來處理:
在從伺服器上使用命令stop slave停止從伺服器。
在主伺服器上使用命令flush logs 重新整理主伺服器日誌資訊。
在主伺服器上使用命令show master status ;查看主伺服器狀態,主要關注記錄檔名稱和位置位移量(position)。
在從伺服器上執行命令change master to master_log_file=‘mysql-bin.00004‘,master_log_pos=397;注意檔案名稱和position和主伺服器上對應。
使用命令start slave;啟動從伺服器的slave線程。
再次在主伺服器表中插入資料,就應該能夠正常同步了。
本文出自 “不變的時光” 部落格,謝絕轉載!
CenOS 6.3下mysql-5.5.25主從伺服器配置