MySQL節點部署說明

來源:互聯網
上載者:User

標籤: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.