MySQL Server是個非常受人歡迎, 好用的資料庫軟體, 不過在MySQL AB被Sun Microsystems收購, 其後Sun又被Oracle給買了, 雖然維持了MySQL Server社群版(Community Edition)仍是開源軟體, MySQL Server用戶眾多疑慮下, MySQL的創始人開發了完全相容MySQL的MariaDB, 所以MySQL的愛用者也不用過於擔心。

您可以繼續使用MySQL或MariaDB, 在本系列文章, 我們採用從MySQL分支出來的Percona Server, 它與MySQL完全相容, 是個MySQL Server的強化版本, 還有方便的工具程式可以使用。

本系列文章將分成四段, 避免過於冗長, 方便各位閱讀:
一、DRBD安裝與設定
二、MySQL資料庫安裝與設定
三、Heartbeat服務監測安裝與設定
四、MySQL資料庫伺服器Master-Slave Replication安裝與設定


Percona Server安裝
Percona提供了Debian用的套件, 經由修改系統/etc/apt/sources.list後以apt-get安裝, 十分方便; 在此之前, 我們必須先完成幾個步驟, 才能順利安裝。db1與db2都需要安裝Percona Server, 大致上是一樣的, 有差異的部分我會標示出來讓各位注意。

慣例我們給MySQL Server的用戶與群組名稱都叫"mysql", 由此方法增加:
groupadd -g 3306 mysql
useradd -g 3306 -u 3306 -r mysql

group id與user id都是3306, 一如MySQL Server預設的服務port 3306。

增加Percona的public key, 並匯到apt
gpg --keyserver hkp://keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
gpg -a --export CD2EFD2A | apt-key add -



看到"OK"訊息代表匯入成功

編輯apt的sources.list
nano /etc/apt/sources.list


將以下Percona提供的套件伺服器位址加入
deb http://repo.percona.com/apt wheezy main
deb-src http://repo.percona.com/apt wheezy main



儲存後離開。


執行apt-get update更新套件資訊, 當然接著你也能跑apt-get upgrade把系統都升級, 不過已經用了Debian 7.6了, 所以沒有新東西需要安裝。

安裝Percona Server
目前的最新版是版號5.6, 所以採用套件名稱"percona-server-server-5.6"
apt-get install percona-server-server-5.6



同樣按下"Y"開始安裝Percona Server, 在安裝期間會詢問資料庫伺服器帳號root的密碼, 需要輸入兩次以確保你的密碼是正確的。


安裝完後, 資料庫伺服器已自動起動, 不過我們後續還有很多變動, 所以先關掉資料庫伺服器。

停止Percona Server的服務
/etc/init.d/mysql stop



MySQL伺服器停止了。


安裝Percona Tool Kit與XtraBackup
apt-get install percona-toolkit
apt-get install percona-xtrabackup

XtraBackup備份工具能支援MyISAM與InnoDB(在Percona Server叫XtraDB)類型的資料表。

設定my.cnf
將建議的預設值放到my.cnf, 並且放在/etc/mysql下, 我將系統原本的my.cnf做個備份, 叫"my_backup.cnf", 或是刪掉它也可以。
nano /etc/mysql/my.cnf



製作新的/etc/mysql/my.cnf
請貼上以下內容到my.cnf, 然後存檔
[mysqld]
binlog_format = STATEMENT
character_set_server = utf8
collation_server = utf8_unicode_ci
datadir = /var/lib/mysql
default_storage_engine = InnoDB
expire_logs_days = 7
innodb_buffer_pool_instances = 1 # 1 CPU = 1, 12 CPU = 12
innodb_buffer_pool_size = 3276M   # 4GB RAM, 80%
innodb_data_file_path = ibdata1:64M;ibdata2:64M:autoextend
innodb_file_format = Barracuda
innodb_file_per_table
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_io_capacity = 200 # 1 CPU = 200, 12 CPU = 2400
innodb_log_file_size = 64M
innodb_print_all_deadlocks = 1
innodb_support_xa = FALSE
key_buffer_size = 32M
log-bin = mysqld-bin
log-queries-not-using-indexes
log-slave-updates
long_query_time = 1
max_allowed_packet = 64M
max_connect_errors = 4294967295
max_connections = 4096
port = 3306
skip-name-resolve
slow_query_log = 1
thread_cache = 1024
tmpdir = /srv/tmp
transaction_isolation = REPEATABLE-READ
user = mysql
wait_timeout = 60
# You *MUST* change!
server-id = 1

以上的設定可以參考您自己機器的規格修改, innodb_buffer_pool_size建議使用80%的總記憶體容量, 像我這測試機有4GB RAM, 所以設3276M; 另外server-id在後續的Master-Slave Replication會用到, 這裡我們給它server-id = 1


建好my.cnf

以下的步驟, 只有db1需要做
將mysql目錄的所有資料移到DRBD的/srv/mysql
cd /var/lib
mv mysql /srv/mysql
ln -s /srv/mysql /var/lib/mysql
chown -R mysql:mysql /srv/mysql


移除InnoDB初始資料
cd /srv/mysql
rm ibdata1
rm ib_logfile*


測試啟動Percona Server
/etc/init.d/mysql start


再次停止Percona Server, 後面需要安裝Heartbeat
/etc/init.d/mysql stop



起動Percona Server成功後, 再次把它關閉。

db2依照前面的安裝步驟設好Percona Server, 移除/var/lib/mysql下的資料。
cd /var/lib
rm -rf mysql
ln -s /srv/mysql

也就是說standby的db2不需要/var/lib/mysql, 因為之後安裝Heartbeat監視服務狀態若db1有異常掛點了, 會把db2 online並掛載上/srv, 而/srv已經存在了我們正在使用的資料表與其所需檔案, 所以砍掉db2在安裝期間所產生的檔案。


db2是standby機器, 所以實際上/srv沒有掛載, 不過當它接手後就有作用了。

回到db1, 看看/etc/mysql/debian.cnf
取得user與password


修改db2 Percona Server的debian.cnf
nano /etc/mysql/debian.cnf

修改user與password為root與其密碼跟db1的debian.cnf一樣。


儲存後, 不需要啟動db2的Percona Server。

最後移除Percona Server的開機啟動程序, 因為交由給Heartbeat處理, 所以移除它, db1與db2都需移除。
update-rc.d -f mysql remove


以上MySQL資料庫安裝與設定就完成了, 次回: Heartbeat服務監測安裝與設定
Mobile01 FB粉絲團 http://www.facebook.com/TheMobile01