標籤:mysql 節點 部署
MySQL節點部署說明
1.MySQL的編譯安裝
考慮到MySQL多版本和多分支的特點,綜合效能、可用性、成本等因素,我們建議使用Percona公司開發的MySQL,該版本主要使用了XtraDB儲存引擎(對於這個儲存引擎的特性,以後再專門介紹),完全相容Innodb,在Innodb_Plugin基礎之上進行了增強,支援標準事務的ACID(原子性、一致性、隔離性、持久性)、支援MVCC(Multi-Version Concurrency Control,提供並發控制)、具備更佳的效能、開源可以免費使用,同時Percona公司還提供了開源的物理備份工具(xtrabackup),可以順利地對使用XtraDB儲存引擎的資料庫進行快速的物理備份。關於這個分支的詳細資料可以查看部落格: http://www.mysqlperformanceblog.com/ 。
考慮到版本的成熟性和穩定度,我們建議下載MySQL-5.1版本的原始碼,下載的地址清單見: http://www.percona.com/downloads/Percona-Server-5.1/ ,可以考慮選用5.1.47-11.2 (原始碼大小 23.7 MB),這個版本網易線上也在大規模的使用,從使用的效果來看,還是非常穩定的。
在安裝之前需要檢查編譯MySQL所需的一些庫是否已經安裝。在一般的Linux 系統中,可能需要用如下命令安裝這些依賴庫:
autoconf automake1.9 libtool m4 libncurses5-dev bison ncurses-devel gcc g++
從Percona網站上下載MySQL原始碼,儲存在本地
http://www.percona.com/downloads/Percona-Server-5.1/Percona-Server-5.1.47-11.2/source/Percona-Server.tar.gz ,或者可以從我這兒來取,對MySQL打了部分的Patch
將壓縮檔解壓到$dir目錄下
進入到$dir下,添加configure 檔案為可執行許可權
$ cd $dir
$ chmod +x configure
開始編譯安裝,分下面三步執行
$./configure--prefix=/usr/local/mysql --with-extra-charsets=all --enable-local-infile --enable-thread-safe-client --enable-assembler --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-plugins=innodb_plugin,partition --with-big-tables --with-readline
$ make
$ make install //由於是安裝在/usr目錄下,這步需要切換到root使用者下執行
MySQL 源碼編譯參數說明
參數涵義
--prefix指定MySQL安裝路徑,最好是安裝到指定的目錄
--with-extra-charsets指定安裝擴充字元集
--enable-local-infile指定允許本地匯入檔案
--enable-thread-safe-client指定安全執行緒模式
--enable-assembler指定支援彙編,可提升效能
--with-client-ldflags靜態編譯,提升效能13%
--with-mysqld-ldflags靜態編譯,提升效能13%
--with-plugins=innodb_plugin,partition 指定安裝xtradb儲存引擎,分區外掛程式,如果想要利用資料分割函數,必須指定partition外掛程式
--with-big-tables指定支援超大表
編譯完畢後,需要在相應的目錄下建立MySQL啟動時所需要的設定檔
編譯過程中的常見異常:
checking for termcap functions library... configure: error: No curses/termcap library found
ncurses-devel 沒有安裝
../depcomp: line 571: exec: g++: not found
g++ 沒有安裝
Warning: Bison executable not found in PATH
bision沒有安裝
2.MySQL的配置啟動
MySQL安裝完畢後,需要做相應的配置後,再啟動MySQL。
禁用swap
su root
echo 0 > /proc/sys/vm/swappiness
這樣修改的話,只是臨時有效,如果機器重啟,這個值會重新恢複為100 ;為了達到永
久生效,可以修改/etc/sysctl.conf檔案,在/etc/sysctl.conf上添加vm.swappiness=0 。這
裡需要解釋下原因。
Linux有很多很好的記憶體、IO調度機制,但是並不會適用於所有情境。對於DBA來說,
Linux比較讓人頭疼的一個地方是,它不會因為MySQL很重要就避免將分配給MySQL的
地址空間映射到swap上。對於頻繁進行讀寫操作的系統而言,資料看似在記憶體而實際上在
磁碟是非常糟糕的,回應時間的增長很可能直接拖垮整個系統。作為DBA,怎樣盡量避免
MySQL使用swap?比如說為什麼會產生swap。假設我們的實體記憶體是16G,swap是4G。
如果MySQL本身已經佔用了12G實體記憶體,而同時其他程式或者系統模組又需要6G記憶體,
這時候作業系統就可能把MySQL所擁有的一部分地址空間映射到swap上去)。
/etc/sysctl.conf上中的參數vm.swappiness決定了Linux是傾向於使用swap,還是傾向
於釋放檔案系統cache和buffer(這個大小是多少,可以在root使用者下利用FREE命令查看
之)。
在記憶體緊張的情況下,數值越低越傾向於釋放檔案系統cache。當然,這個參數只能減少
使用swap的機率,並不能避免Linux使用swap。想想有記憶體可以使用,幹嘛還要使用SWAP
呢?swappiness=0的時候表示最大限度使用實體記憶體,然後才是 swap空間,swappiness=
100的時候表示積極的使用swap分區,並且把記憶體上的資料及時的搬運到swap空間裡面。
建立MySQL帳號
useradd mysql
passwd mysql
建立MySQL資料目錄,這裡MySQL的資料目錄和設定檔最好放在統一的檔案
目錄下,資料目錄最好採用軟連結的形式,這裡要注意未經處理資料目錄的許可權,如:
[[email protected] mysql]$ ls -lh /home/mysql/mysql/
total 4.0K
-rw-r--r-- 1 mysql mysql 2.1K Jul 5 14:54 my1.cnf
lrwxrwxrwx 1 mysql mysql 16 Jul 4 10:50 mysql -> /opt/mysql-test/
[[email protected] mysql]$ ls -lh /opt/|grep mysql-test
drwxr-xr-x 4 mysql mysql 4.0K Jul 5 14:54 mysql-test
產生MySQL設定檔
根據MySQL設定檔範本產生MySQL設定檔my.cnf,放在/home/mysql/mysql這個目錄下,my.cnf根據模板進行以下修改:
替換#port_holder#為你自己打算使用的連接埠,這裡假設為4321
替換#path_holder#為資料存放的目錄,假定為 /home/mysql/mysql/mysql
替換#ip_holder#為當前主機的內網IP
替換#user_holder#為啟動MySQL的使用者,一般為mysql
模板設定檔如下:
[client]
port = #port_holder#
socket = #path_holder#/mysqld.sock
[mysqld_safe]
user = #user_holder#
nice = 0
ledir =/usr/local/mysql/libexec
[mysqld]
server-id= 3
bind-address = #ip_holder# //注意:如果是配置VIP的話,這個參數不要設定
port = #port_holder#
pid-file = #path_holder#/mysqld.pid
socket = #path_holder#/mysqld.sock
basedir = /usr/local/mysql
datadir = #path_holder#
innodb_data_home_dir = #path_holder#
innodb_log_group_home_dir = #path_holder#
tmpdir = #path_holder#
log-error = #path_holder#/mysqld.log
slow_query_log =1
slow_query_log_file = #path_holder#/mysql-slow.log
log_bin = #path_holder#/mysql-bin.log
log_slave_updates //中繼操作使用也記錄日誌到binary-log
skip-slave-start //MySQL啟動的時候,不啟動複製
auto_increment_increment =2 //如果是M-M結構,該參數為M的個數
auto_increment_offset =2 //如果是M-M結構,該參數為該執行個體的編號
user = #user_holder#
language = /usr/local/mysql/share/mysql/english
table_cache = 512
long_query_time = 4
max_connections = 800
query_cache_type = 0
default-character-set = utf8
default-storage-engine = innodb
skip-external-locking
expire_logs_days = 7
max_binlog_size = 100M
innodb_buffer_pool_size = 200M //根據機器的實際情況設定,一般為記憶體的75%
innodb_data_file_path = ibdata1:512M:autoextend
innodb_autoextend_increment = 128
innodb_log_files_in_group = 2
innodb_log_file_size = 512M
innodb_lock_wait_timeout = 5
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table= 1
innodb_file_format =Barracuda
innodb_file_format_check =Barracuda
innodb_adaptive_checkpoint =estimate
innodb_expand_import = 1
innodb_read_io_threads = 1
innodb_stats_method = nulls_unequal
innodb_thread_concurrency = 12
innodb_write_io_threads = 1
innodb_io_capacity =800
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
default-character-set = utf8
[mysql]
default-character-set = utf8
具體的各個參數的含義,在後續的最佳化文檔中介紹說明。
初始化MySQL資料庫
cd /home/mysql/mysql
mysql_install_db --defaults-file=my.cnf
啟動MySQL
mysqld_safe --defaults-file=/home/mysql/mysql/my.cnf &
查看檔案清單
[[email protected] mysql]$ ls -lh /home/mysql/mysql/mysql/
total 1.6G
-rw-rw---- 1 mysql mysql 512M Jul 5 14:54 ibdata1
-rw-rw---- 1 mysql mysql 512M Jul 5 14:54 ib_logfile0
-rw-rw---- 1 mysql mysql 512M Jul 4 10:51 ib_logfile1
-rw-rw---- 1 mysql mysql 63 Jul 5 14:54 master.info
drwx------ 2 mysql mysql 4.0K Jul 4 10:48 mysql
-rw-rw---- 1 mysql mysql 125 Jul 5 14:54 mysql-bin.000001
-rw-rw---- 1 mysql mysql 106 Jul 5 14:54 mysql-bin.000002
-rw-rw---- 1 mysql mysql 82 Jul 5 14:54 mysql-bin.index
-rw-rw---- 1 mysql mysql 19K Jul 5 14:54 mysqld.log
-rw-rw---- 1 mysql mysql 12K Jul 4 18:27 mysqld.log-old
-rw-rw---- 1 mysql mysql 5 Jul 5 14:54 mysqld.pid
-rw-rw---- 1 mysql mysql 156 Jul 5 14:54 mysqld-relay-bin.000003
-rw-rw---- 1 mysql mysql 251 Jul 5 14:54 mysqld-relay-bin.000004
-rw-rw---- 1 mysql mysql 52 Jul 5 14:54 mysqld-relay-bin.index
srwxrwxrwx 1 mysql mysql 0 Jul 5 14:54 mysqld.sock
-rw-rw---- 1 mysql mysql 2.8K Jul 5 14:54 mysql-slow.log
-rw-rw---- 1 mysql mysql 51 Jul 5 14:54 relay-log.info
drwx------ 2 mysql mysql 4.0K Jul 4 10:48 test
MySQL預設為產生一個名為root的超級使用者,且沒有密碼,安全性不好,因此先設定MySQL本機超級使用者密碼:
mysql --defaults-file=/home/mysql/mysql/my.cnf -u root
mysql> set password = password(‘xxxxxx‘);
至此MySQL的啟動已經完畢,遇到異常的情況下要多多查看錯誤記錄檔檔案mysqld.log,上面記錄了MySQL在運行過程中的詳細資料,類似於Oracle中的alter記錄檔。千萬不要執行rm -rf /home/mysql/mysql 操作,對於線上環境的話,盡量讓最少的人使用root帳號和mysql帳號,盡量在自己的帳號下進行操作(把自己的帳號添加到mysql這個使用者組下即可完成大部分的操作)。
本文出自 “DavideyLee” 部落格,請務必保留此出處http://davideylee.blog.51cto.com/8703117/1530105