由於需要配置MySQL的主從同步配置,現將配置過程記錄下,已被以后不時之需
MySql數據主從同步
1.1. 同步介紹
Mysql的 主從同步 是一個異步的復制過程,從一個 Master復制到另一個 Slave上。在 Master 與 Slave 之間的實現整個復制過程主要由三個線程來完成,其中兩個線程(Sql線程和IO線程)在 Slave 端,另外一個線程(IO線程)在 Master 端。
要實現 MySQL 的 主從同步 ,首先必須打開 Master 端的BinaryLog(mysql-bin)功能,否則無法實現。因為整個復制過程實際上就是Slave從Master端獲取該日志然后再在自己身上完全順序的執行日志中所記錄的各種操作。打開 MySQL 的 Binary Log 可以通過在啟動 MySQL Server 的過程中使用 “—log-bin” 參數選項,或者在 my.cnf 配置文件中的 mysqld 參數組([mysqld]標識后的參數部分)增加 “log-bin” 參數項。
1.2. Mysql主從服務器配置
主服務器IP:192.168.1.60
從服務IP:192.168.1.61
Linux:centOS
Mysql版本:5.1.58
以下配置皆在此服務上進行配置
一、主數據庫操作
查看主庫服務器的my.cnf配置文件,根據mysql安裝包、版本不同,相關的路徑和配置文件路徑會大致不一樣,不過大多情況下是一樣的。該文件在 etc/目錄下。Mysql服務也提供了對不同服務器配置使用不同的配置文件,要使用它們的時候,只需用它們任一一個替換上面的my.cnf文件即可。注:替換文件名必須為my.cnf。
cnf配置文件一般會有四個,可以根據命令 # ll /usr/share/mysql/*.cnf 查看;
my-small.cnf 內存少於或等於64M,只提供很少的的數據庫服務;
my-medium.cnf 內存在32M--64M之間而且和其他服務一起使用,例如web;
my-large.cnf 內存有512M主要提供數據庫服務;
my-huge.cnf 內存有1G到2G,主要提供數據庫服務;
my-innodb-heavy-4G.cnf 內存有4G,主要提供較大負載數據庫服務(一般服務器都使用這個);
可以根據服務器配置的不同選擇不同的cnf配置文件。
1、 配置my.cnf文件
采用系統默認的etc/my.cnf配置文件進行配置,對主服務器進行配置主要需要在配置文件中添加以下幾項(在添加的時候要確保它們不在文件中存在,因為如選擇上面幾種不同的配置文件,配置里的內容會不一樣,如果沒有相應的項,需要添加)。
用vi etc/my.cnf打開文件,對文件進行修改,在[mysqld]下面進行添加修改:
Server-id = 1 #這是數據庫ID,此ID是唯一的,主庫默認為1,其他從庫以此ID進行遞增,ID值不能重復,否則會同步出錯;
log-bin = mysql-bin 二進制日志文件,此項為必填項,否則不能同步數據;
binlog-do-db = testcreate #需要同步的數據庫,如果需要同步多個數據庫;
則繼續添加此項。
binlog-do-db = testcreate1
binlog-do-db = testcreate2
binlog-ignore-db = mysql 不需要同步的數據庫;
至此主服務器配置my.cnf配置完成,保存退出文件。
現在對Mysql服務器進行重啟:#servicemysqld restart 如果重啟失敗,則證明配置文件錯誤,需重新檢查。
建議:對my.cnf修改之前最好對其進行備份,以免配置文件修改失敗不能及時重啟服務器。
2、 配置完成后需要建立同步用的數據庫賬戶
主庫需要提供一個賬戶讓從庫對起連接並同步,用命令mysql服務器
mysql>grantreplication slave on *.* to ‘testcreate’@’192.168.1.61’ identified by ‘123456’;
說明:’testcreate’:同步的數據庫;
‘192.168.1.61’:同步的數據庫地址;
‘123456’ :同步的數據庫密碼,在從庫配置時需要設置。
3、顯示主庫信息
mysql>showmaster status;
執行上述命令顯示:
看到上述信息則表示主庫建立成功。
4、備份數據庫(如果從服務器也為新建庫,則不需要此操作)
備份數據庫的方法有很多種:如果在同一局域網可以直接復制數據庫,也可以用工具直接進行數據導入。
復制數據庫用打包的方法:
# cd/data 轉到存放Mysql數據庫的路徑下
# tarcvfz testcreate.tar.gz db/
再從數據庫中進行復制解壓
# cd/data
# scp192.168.1.61:/data/testcreate.tar.gz
#tarxvfz testcreate.tar.gz
數據復制完畢;
二、 從庫配置
從服務器的配置基本與主庫配置差不多,選擇的從庫服務器為:192.168.1.61
1. 配置從庫服務my.cnf文件
# vietc/my.cnf 對其進行如下修改:
Server-id = 2 #這里ID改為2 因為主庫為1;
log-bin = mysql-bin 必填項,用於數據同步;
master-host = 192.168.1.60 主庫IP;
master-user = test 同步用的賬戶;
master-password = 123456 同步賬戶密碼,主庫時的設置;
master-port = 3306 同步數據庫的端口號。
2. 重啟從庫服務器
#service mysqld restart
如果重啟失敗則配置文件有問題,需重新檢查配置。
3. 調整復制過來的數據庫的權限(如果有從主庫復制過來的數據庫)
主庫復制過來的數據庫權限都為root權限,需要修改為mysql權限
#chown–R mysql:mysql /var/lib/mysql
如果從庫是新建的庫就不需要進行此步驟
4. 顯示從服務器狀態
進行mysql服務器:
mysql>showslave status\G; 顯示如圖:
如果slave_io_running和slave_sql_running都為yes則表示從服務器配置成功。
如果遇到關於position相關的錯誤,就需要再手動設置以下File/Postion的信息
mysql>Changemaster to master_host = ‘192.168.1.60’
master_user= ‘test’
master_password=’123456’
master_log_file=’mysql-bin.000001’, 主庫的文件信息
master_log_pos=’106’;主庫的Position信息
三、 主從服務器測試
在主服務器和從服務器建立同樣的數據庫:testCreate 表為:test,字段為ID,name
往主服務器添加數據
此時從服務器192.168.1.61中testcreate數據庫顯示為
表示主從服務器同步成功。
四、 常見問題
在配置成服務器時,從庫不能進行修改操作,即從庫只有讀的權限,如果修改了從庫數據庫,則會造成同步失敗:如發現失敗,用showslave status\G;查看從服務器的狀態信息
如果出現slave_IO_Running:為NO時,則表示從數據庫連接失敗
Last_Error:會顯示出出錯日志信息
出現此問題主要是事物回滾問題,解決方法有:
1、
mysql>slave stop; 停止從服務
mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql>slave start; 啟動從服務
2、手動重設從服務器
mysql>Changemaster to
master_host= ‘192.168.1.60’
master_user= ‘test’
master_password=’123456’
master_log_file=’mysql-bin.000001’; 主庫的文件信息
master_log_pos=’106’;主庫的Position信息
到此Mysql主從服務配置完畢
在主服務器中,主要是以寫數據為主,建議用InnoDB數據引擎,在讀方面用Mysql中的MyISAM引擎讀的效率很不錯。
MyIsAM引擎支持全文索引,但不支持事務,而InnoDB恰好相反!