1. 程式人生 > 實用技巧 >Snort***檢測系統安裝配置

Snort***檢測系統安裝配置

在實際企業應用環境當中,單臺mysql資料庫是不足以滿足日後業務需求的。譬如伺服器發生故障,沒有備份伺服器來提供服務的話,業務就得停止。介於這種情況,mysql經常採用主從構架,或者主主架構,這樣可以實現mysql伺服器的負載均衡,提升mysql伺服器的效能.而關鍵是,可以實現mysql的資料同步複製功能,來為企業資料備份提供一種方便的機制。

MySQL支援單向、非同步複製,複製過程中一個伺服器充當主伺服器,而一個或多個其它伺服器充當從伺服器。主伺服器將更新寫入二進位制日誌檔案,並維護檔案的一個索引以跟蹤日誌迴圈。這些日誌可以記錄傳送到從伺服器的更新。當一個從伺服器連線主伺服器時,它通知主伺服器從伺服器在日誌中讀取的最後一次成功更新的位置。從伺服器接收從那時起發生的任何更新,然後封鎖並等待主伺服器通知新的更新。

請注意當你進行復制時,所有對複製中的表的更新必須在主伺服器上進行。否則,你必須要小心,以避免使用者對主伺服器上的表進行的更新與對從伺服器上的表所進行的更新之間的衝突。

預設情況下,MySQL5.5的複製功能是非同步的,這意味著當談到資料一致性時,主伺服器及其從伺服器是獨立的。非同步複製可以提供最佳的效能,因為主伺服器在將更新的資料寫入它的二進位制日誌(Binlog)檔案中後,無需等待驗證更新資料是否已經複製到至少一臺拓撲從伺服器中,就可以自由處理其它進入的事務處理請求。雖然快,但這也同時帶來了很高的風險,如果在主伺服器或從伺服器端發生故障,會造成主伺服器/從伺服器資料的不一致,甚至在恢復時造成資料丟失。

因此MySQL5.5引入了一種半同步複製功能,該功能可以確保主伺服器和訪問鏈中至少一臺從伺服器之間的資料一致性和冗餘。在這種配置結構中,一臺主伺服器和其許多從伺服器都進行了配置,這樣在複製拓撲中,至少有一臺從伺服器在父主伺服器進行事務處理前,必須確認更新已經收到並寫入了其中繼日誌(Relay Log)。當出現超時,源主伺服器必須暫時切換到非同步複製模式重新複製,直到至少有一臺設定為半同步複製模式的從伺服器及時收到資訊。


主要注意的地方:
1) mysql複製過程在網路上傳輸時是明文的,不過支援SSL加密。
2) mysql複製要求主從架構的伺服器的server id 不能相同。
3) 半同步複製模式必須在主伺服器和從伺服器端同時啟用,否則主伺服器預設使用非同步複製模式。

使用mysql主從複製的好處有:

1) 採用主從伺服器這種架構,穩定性得以提升。如果主伺服器發生故障,我們可以使用從伺服器來提供服務。

2) 在主從伺服器上分開處理使用者的請求,可以提升資料處理效率。

3) 將主伺服器上的資料複製到從伺服器上,保護資料免受意外的損失。



主從配置例項:

注意:如果主伺服器的master事先存在,並且裡面已經有資料,此時再想做主從複製,就得先將主伺服器上的資料庫拷貝一份到從伺服器上,保證目前主從資料一致後再做主從設定。

可以使用mysqldump先從主伺服器上備份一份資料,然後鎖表,將資料拷貝到從伺服器上,然後做主從設定,再解表!

mysqldump-uroot-p123--all-databases--lock-all-tables>/data/mysql_bak/all_databak.sql
mysqldump-uroot-p123-R--single_transaction--master-data=2--all-databases>/data/mysql_bak/all_databak.sql


以下是全新安裝mysql主從複製(主從服務都是新裝的,資料相同)

1、主從伺服器分別作以下操作:

1.1、版本一致
1.2、初始化表,並在後臺啟動mysql
1.3、修改root的密碼

2、修改主伺服器master:

cat/etc/my.cnf
[mysqld]
log-bin=mysql-bin#[必須]啟用二進位制日誌
server-id=200#[必須]伺服器唯一ID,預設是1,一般取IP最後一段

3、修改從伺服器slave:

cat/etc/my.cnf
[mysqld]
log-bin=mysql-bin#[必須]啟用二進位制日誌
server-id=201#[必須]伺服器唯一ID,預設是1,一般取IP最後一段

注意!!!master 和 slave 的server_id 不能一樣

4、重啟兩臺伺服器的mysql

/etc/init.d/mysqldrestart

5、在主伺服器上建立帳戶並授權slave:

/usr/local/mysql/bin/mysql-uroot-p123456
mysql>GRANTreplicationSLAVEON*.*to'slave'@'%'identifiedby'123456';
#一般不用root帳號,“%”表示所有客戶端都可能連,只要帳號,密碼正確,此處可用具體客戶端IP代替,如192.168.0.250,加強安全。

6、登入主伺服器的mysql,查詢master的狀態,並記錄File和Position的值

mysql>showmasterstatus;
+------------------+----------+--------------+------------------+
|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|
+------------------+----------+--------------+------------------+
|mysql-bin.000004|308|||
+------------------+----------+--------------+------------------+
1rowinset(0.00sec)
注:執行完此步驟後不要再操作主伺服器MYSQL,防止主伺服器狀態值變化
mysql>flushtableswithreadlock;#同時可以鎖定MYSQL

7、配置從伺服器Slave:

mysql>changemastertomaster_host='192.168.0.200',master_port=3301,master_user='slave',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=308;#注意不要斷開,3301和308無單引號
mysql>unlocktables;#主伺服器解鎖
mysql>startslave;#啟動從伺服器複製功能

8、檢查從伺服器複製功能狀態:

mysql>showslavestatus\G
***************************1.row***************************
Slave_IO_State:Waitingformastertosendevent
Master_Host:192.168.0.200#主伺服器地址
Master_User:redhat#授權帳戶名,儘量避免使用root
Master_Port:3306#資料庫埠,部分版本沒有此行
Connect_Retry:60
Master_Log_File:mysql-bin.000004
Read_Master_Log_Pos:600#同步讀取二進位制日誌的位置,大於等於>=Exec_Master_Log_Pos
Relay_Log_File:ddte-relay-bin.000003
Relay_Log_Pos:251
Relay_Master_Log_File:mysql-bin.000004
Slave_IO_Running:Yes#此狀態必須YES
Slave_SQL_Running:Yes#此狀態必須YES
......
注:Slave_IO及Slave_SQL程序必須正常執行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。

以上操作過程,主從伺服器配置完成。

9、主從伺服器測試:

主伺服器Mysql,建立資料庫,並在這個庫中建表插入一條資料:

mysql>createdatabasetest01;
QueryOK,1rowaffected(0.00sec)
mysql>usetest01;
Databasechanged
mysql>createtableTable(idint(3),namechar(10));
QueryOK,0rowsaffected(0.00sec)
mysql>insertintoTablevalues(001,'Baidu');
QueryOK,1rowaffected(0.00sec)
mysql>showdatabases;
+--------------------+
|Database|
+--------------------+
|information_schema|
|test01|
|mysql|
|test|
+--------------------+
4rowsinset(0.00sec)

從伺服器Mysql查詢:

mysql>showdatabases;
+--------------------+
|Database|
+--------------------+
|information_schema|
|test01|#I'Mhere,大家看到了吧
|mysql|
|test|
+--------------------+
4rowsinset(0.00sec)
mysql>usetest01
Databasechanged
mysql>select*fromTable;#可以看到在主伺服器上新增的具體資料
+------+------+
|id|name|
+------+------+
|1|Baidu|
+------+------+
1rowinset(0.00sec)

10、監控從的狀態:

編寫一shell指令碼,用nagios監控slave的兩個“yes”,如發現只有一個或零個“yes”,就表明主從有問題了,發簡訊警報吧。

mysql-h127.0.0.1-P3306-uroot-p123456-e"showslavestatus\G"|grep-Ec"(Slave_IO_Running:Yes|Slave_SQL_Running:Yes)"|awk'{if($1==2){print"OKmysql-slave";exit(0);}else{print"Criticalmysql-slave";exit(2)}}'#簡單命令
以下是2個指令碼
1)catmysql_state1.sh
#!/bin/bash
DB_PW=123456
port="330133023303"
foriin$port;do
mysql-h127.0.0.1-P$i-uroot-p${DB_PW}-e"showslavestatus\G"|
grep-Ec"(Slave_IO_Running:Yes|Slave_SQL_Running:Yes)"|
awk'{if($1==2){print"OKmysql-slave";exit(0);}else{print"Criticalmysql-slave";exit(2)}}'
done

2)catmysql_state2.sh
#!/bin/bash
DB_PW=admin
Ports="330133023303"
Mysql_ip=`ifconfig|awk-F'[:]+''NR==2{print$4}'`
forportin${Ports};do
Num=`mysql-h127.0.0.1-P${port}-uroot-p${DB_PW}-e"showslavestatus\G"|grep-Ec"(Slave_IO_Running:Yes|Slave_SQL_Running:Yes)"`
Mysql_port=`netstat-tnlp|grep${port}|awk-F'[:]+''{print$5}'`
if[${Mysql_port}==${port}];then
echo"${Mysql_ip}_${port}Mysqlisrunning"
else
echo"Mysqlisnotrunning"|mail-s"Warning!Server:${Mysql_ip}_${port}mysqlisdown"[email protected]
echo"Waining!${Mysql_ip}_${port}mysqlisdown"
fi
if[$Num==2];then
echo"${Mysql_ip}_${port}Slaveisrunning"
else
echo"Slaveisnotrunning!"|mail-s"Warning!${Mysql_ip}_$portSlaveisnotrunning"[email protected]
echo"Warning!${Mysql_ip}_${port}Slaveisnotrunning"
fi
done


錯誤分析:

1)Slave_SQL_Running: No

原因:

1.程式可能在slave上進行了寫操作

2.也可能是slave機器重起後,事務回滾造成的.

解決辦法I:

1.首先停掉Slave服務:slave stop;

2.到主伺服器上檢視主機狀態:show master status\G 記錄File和Position對應的值。

3.到slave伺服器上執行手動同步:

change master to master_host='192.168.0.200',master_port=3301,master_user='redhat',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=308;

4.start slave;


解決方法二:

1.stop slave;

2.set global sql_slave_skip_counter=1;

3.start slave;


轉載於:https://blog.51cto.com/liumissyou/957344