轉自老男孩的部落格:MySQLhttp://blog.51cto.com/oldboy/1917295
資料庫多種安裝方法及企業級安裝實踐
3.1 MySQL資料庫的安裝方法及選擇
在當今的網際網路企業裡,MySQL資料庫大多運作在Linux系列作業系統上,當然,你也可以運作在Windows/Unix等商業作業系統上,本書主要以國内網際網路公司應用最多的資料庫服務作業系統——CentOS6最新版(6.8)x86_64 Linux系統為例進行講解,使用其他系統的讀者同樣可以從本書受益!
即使是在CentOS 6 x86_64 Linux系統環境下,若應用場景不同或版本不同,MySQL資料庫的安裝方法也會有所差別,下面我們就把最常見的幾種方法一一介紹給大家!
3.1.1 yum/rpm方式安裝MySQL
MySQL官方網站及相關鏡像網站提供了不同版本的RPM安裝包,并且針對不同的硬體或作業系統平台,安裝包的類型也會有差別。在使用時,可以到官方網站下載下傳頁面進行選擇,國内也有一些網際網路公司提供了鏡像,比如搜狐、阿裡雲公司提供的鏡像資源就非常不錯。
下面是搜狐網提供的資料庫軟體鏡像位址:http://mirrors.sohu.com/mysql
注意:yum/rpm安裝方式适合所有MySQL軟體産品。
1. rpm包方式安裝MySQL
rpm包的安裝方式非常簡單,這裡以el6平台下的mysql-5.6.34版本為例,首先,要通過上述搜狐鏡像位址下載下傳到如下四個MySQL相關軟體安裝包。
MySQL-client-5.6.34-1.el6.x86_64.rpm
MySQL-devel-5.6.34-1.el6.x86_64.rpm
MySQL-server-5.6.34-1.el6.x86_64.rpm
MySQL-shared-5.6.34-1.el6.x86_64.rpm
提示:我們可以從Linux的對應系統盤或系統鏡像裡找到類似的rpm包,但是版本一般會較低一些。
一般來說,其中的MySQL-server-5.6.34-1.el6.x86_64.rpm和MySQL-client-5.6.34-1.el6.x86_64.rpm這兩個軟體包是必須要安裝的,至于另外兩個軟體包,則可視實際需要進行安裝,不過一般建議一起安裝。
可以把這四個RPM包上傳到伺服器的目錄中,然後執行如下rpm指令進行安裝:
[[email protected]]# rpm -qa|grep mysql #<==查找已經安裝的mysql的包。
mysql-libs-5.1.73-7.el6.x86_64
rpm -e mysql-libs-5.1.73-7.el6.x86_64 --nodeps #<==解除安裝系統已經安裝的mysql依賴包。
rpm -ivh MySQL-client-5.6.34-1.el6.x86_64.rpm
rpm -ivh MySQL-devel-5.6.34-1.el6.x86_64.rpm
rpm -ivh MySQL-shared-5.6.34-1.el6.x86_64.rpm
rpm -ivh MySQL-server-5.6.34-1.el6.x86_64.rpm
這裡的el6表示适合作業系統的版本,還有el5、el7等。i686表示适合32位的系統,x86_64表示适合64位的系統。
執行上述指令即可完成MySQL軟體的安裝。
在采用rpm包安裝方式時,必須要官方或第三方提供了現成的rpm軟體包,否則是無法使用該方式安裝的。另外,和直接采用yum的安裝方式相比,rpm包的安裝方式往往可以選擇更新的版本,但是rpm包安裝也有自身的問題,例如,無法滿足定制化安裝,比如,不能進行編譯參數、路徑等的更改。
2. yum方式安裝MySQL
yum方式安裝MySQL資料庫時,隻需執行一個指令yuminstall mysql-server -y即可,yum方式的安裝原理是在執行yum安裝指令後,會自動從yum源位址下載下傳相應名稱的MySQL資料庫rpm包,然後到系統上安裝,并自動解決各種軟體包之間的依賴問題。這是一個非常不錯的安裝軟體的方式,不僅僅是針對MySQL,安裝其他軟體也是如此。
Yum安裝方式的最大優點就是超級簡單,但是它也有自身的問題,例如它繼承了rpm包的無法定制化安裝的問題,另外一個缺點是采用預設的yum安裝時,一般yum源帶的軟體版本都比較低,例如:截止作者寫作本文時,使用CentOS6.8Linux 預設yum安裝的MySQL版本僅為5.1.73。
3.1.2 正常方式編譯安裝MySQL
正常方式編譯安裝MySQL時,适合用第一條最正宗的MySQL産品線5.2及以前版本:
所謂正常方式編譯安裝MySQL就是延續早期MySQL的3部曲安裝方式,即./configure;make;make install,下面是老男孩在早期的企業生産場景下操作過的具體指令及參數:
tarzxf mysql-5.1.73.tar.gz
cdmysql-5.1.73
./configure\
--prefix=/application/mysql5.1.73\
--with-unix-socket-path=/application/mysql5.1.73/tmp/mysql.sock\
--localstatedir=/application/mysql5.1.73/data\
--enable-assembler\
--enable-thread-safe-client\
--with-mysqld-user=mysql\
--with-big-tables\
--without-debug\
--with-pthread\
--enable-assembler\
--with-extra-charsets=complex\
--with-readline\
--with-ssl\
--with-embedded-server\
--enable-local-infile\
--with-plugins=partition,innobase\
--with-mysqld-ldflags=-all-static\
--with-client-ldflags=-all-static
make
make install
ln -s/application/mysql-5.1.73/ /application/mysql
安裝到這裡,MySQL資料庫還不能正常啟動使用,還需要進行初始化資料庫等工作,具體可以參考後文安裝部分。
此種方式适合所有MySQL5.2.xx及以前的産品系列,是最正常的編譯方式,在當下的網際網路企業中,此種編譯安裝的方法已經很少使用了,原因是第一條産品線的産品(MySQL5.2.xx及以前的産品系列)用得越來越少了,被第二條産品線(MySQL5.4.xx及以後的産品系列)的産品逐漸替代了,是以,老男孩也不建議讀者再使用第一條産品線的産品作為對外的業務庫。
3.1.3采用cmake方式編譯安裝MySQL
考慮到MySQL5.4.xx及以後系列産品的特殊性,其編譯方式和早期的第一條産品線的有所不同,這裡采用cmake或gmake方式的編譯安裝。即./cmake;make;make install,生産場景的具體指令及參數為:
tarzxf mysql-5.6.34.tar.gz
cdmysql-5.6.34
cmake. -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.34 \
-DMYSQL_DATADIR=/application/mysql-5.6.34/data\
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.34/tmp/mysql.sock\
-DDEFAULT_CHARSET=utf8\
-DDEFAULT_COLLATION=utf8_general_ci\
-DWITH_EXTRA_CHARSETS=all\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_FEDERATED_STORAGE_ENGINE=1\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1\
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1\
-DWITH_ZLIB=bundled\
-DWITH_SSL=bundled\
-DENABLED_LOCAL_INFILE=1\
-DWITH_EMBEDDED_SERVER=1\
-DENABLE_DOWNLOADS=1\
-DWITH_DEBUG=0
#提示,編譯時可配置的選項很多,具體可參考本章最後一部分内容或官方文檔。
make
make install
ln -s/application/mysql-5.6.34/ /application/mysql
安裝到這裡,MySQL資料庫仍無法正常啟動使用,還需要進行初始化資料庫等工作,具體可以參考後文安裝部分,另外,cmake等用于編譯的工具也需要提前進行安裝。相關參數的說明,見後文。
如果上述操作未出現錯誤,則MySQL5.6.34軟體cmake方式的安裝就算成功了。
3.1.4采用二進制方式免編譯安裝MySQL
采用二進制免編譯方式安裝MySQL的方法和yum/rpm包安裝方式類似,适合各類MySQL産品系列,不需要複雜的編譯設定及編譯時間等待,直接解壓下載下傳的軟體包,就相當于編譯方式的make install步驟完成了,然後隻要進行初始化資料庫的操作,即可完成并啟動,此方式的MySQL軟體包一般都比較大,最大可達180MB,采用二進制方式免編譯安裝MySQL的方法在後文會詳細講解。
3.1.5如何正确選擇MySQL的安裝方式
若是對資料庫要求不太高的場景,可以采用yum/rpm方式安裝MySQL,例如并發不大,隻是在公司内部(wiki系統)、企業内部的應用(Zabbix監控系統,OpenStack背景管理)等需要資料庫的一些應用場景,當然,生産場景下也是可以選擇yum或rpm方式進行安裝的。
但是,有很多大型網站或門戶網站,往往在安裝MySQL時,會有各種定制化、初始化的需求,這時,要根據企業的需求先把源碼包制作成rpm包,然後搭建自己的yum倉庫,最終采用yum install mysql-server -y的方式安裝,這樣做的優點是即兼顧了yum/rpm安裝方式簡單的優點,又用到了源碼包安裝方式的可定制性,但是,使用這個方法需要一定的技術能力,此部分的内容讀者可以參考老男孩教育為讀者提供的如下博文。
自動化運維必備技能—定制屬于自己的RPM包http://blog.oldboyedu.com/autodeploy-rpm/。
自動化運維必備技能—搭建屬于自己的YUM倉庫http://blog.oldboyedu.com/autodeploy-yum/。
二進制免編譯安裝方式很簡單友善,且适合5.0-5.1和5.5-5.7系列,是不少專業DBA的選擇,普通Linux運維人員一般多采用編譯的方式安裝,對應到MySQL5.0-5.1系列就是正常編譯方式,對應到MySQL5.5-5.7系列就是cmake編譯方式。
是以綜合來講,這些安裝方式都是可以使用的,隻是不同層次的人習慣不同,實際應用的性能差距不是很大。
老男孩的建議:首先是選擇MySQL5.5或以上的資料庫版本,當資料庫伺服器機器數量少的話,可采用cmake編譯方式安裝,這是很多運維人員的習慣選擇。當資料庫伺服器機器數量多的情況,可用二進制免編譯方式安裝,這是某些DBA的偏愛,若是資料庫伺服器機器數量特别大,且對定制化要求很高,可以選擇通過源碼定制rpm包,搭建yum倉庫的安裝方式。當然了,采用此種方法的讀者也要具備這方面的能力才行,前文已經給出了做rpm定制以及yum倉庫搭建的位址,不再贅述。
3.2 安裝并配置MySQL資料庫
3.2.1 安裝MySQL資料庫
1.MySQL資料庫的安裝環境準備
如果讀者沒有實體伺服器環境,則可以搭建vmware等虛拟機環境學習,相應地則需準備如下内容:
1)請提前加大VM虛拟機硬體的記憶體,這樣編譯時候會更快,最好設定2GB以上的記憶體。
2)最好提前下載下傳好要安裝的MySQL相關軟體包(http://mirrors.sohu.com/mysql/)。
3)重視每個操作過程的輸出,有錯誤要解決掉再繼續,不能忽略掉操作中的錯誤(error)。
4)建議進入虛拟機界面去執行make以及make install,通過SSH操作有時會導緻網絡中斷。
有關vmware虛拟化學習軟體和CentOS6作業系統的安裝詳細步驟見《跟老男孩學Linux運維:Web叢集實戰》,或看免費部署文章:http://book.51cto.com/art/201605/510756.htm。
2.安裝MySQL需要的依賴包和編譯軟體
目前的Linux系統環境情況如下:
[[email protected]~]# cat /etc/redhat-release #<==作業系統版本
CentOSrelease 6.8 (Final)
[[email protected]~]# uname -r #<==核心版本
2.6.32-642.el6.x86_64
[[email protected]~]# uname -m
x86_64 #<==64位系統
(1)安裝MySQL需要的依賴包
安裝MySQL之前,最好先安裝MySQL需要的依賴包,不然後面會出現很多報錯資訊,到那時還得再回來安裝MySQL的依賴包。安裝指令如下:
[[email protected]~]# yum install ncurses-devel libaio-devel -y
[[email protected]~]# rpm -qa ncurses-devel libaio-devel
ncurses-devel-5.7-4.20090207.el6.x86_64
libaio-devel-0.3.107-10.el6.x86_64
提示:安裝後使用rpm -qa ncurses-devel libaio-devel指令檢查,如果出現兩行如上資訊表示安裝成功。
(2)安裝編譯MySQL需要的軟體
由于MySQL5.5及以上的系列産品要采用特殊的編譯方式安裝,是以,需要先安裝常用的編譯MySQL的工具cmake軟體包,指令為:
[[email protected]~]# yum install cmake -y
[[email protected]~]# rpm -qa cmake
cmake-2.8.12.2-4.el6.x86_64
提示:安裝後使用rpm-qa cmake檢查,如果出現一行如上資訊表示安裝成功。
此外,也有網友采用源碼包的方式安裝cmake的,但比較複雜,是以一般建議讀者選擇這個簡單的yum安裝方法。
3.開始安裝MySQL
為了讓大家學習更多的MySQL技術,本文選擇了相對複雜的源代碼安裝方式為例來講解MySQL多執行個體安裝,大型公司一般都會将MySQL軟體定制成rpm包,然後放到yum倉庫裡,使用yum安裝,中小企業裡的二進制和編譯安裝的差別不大。
使用二進制方式安裝MySQL方法見http://oldboy.blog.51cto.com/2561410/1893734。
(1)建立MySQL使用者賬号
首先以root身份登入到Linux系統中,然後執行如下指令建立mysql使用者賬号:
[[email protected]~]# useradd -s /sbin/nologin -M mysql #<==預設會建立和mysql使用者同名的組。
[[email protected]~]# id mysql
uid=500(mysql)gid=500(mysql) groups=500(mysql)
根據上述結果輸出,可以看到mysql使用者群組已經成功建立。
(2)擷取MySQL軟體包
MySQL軟體包的下載下傳位址為:http://dev.mysql.com/downloads/mysql/(如果位址變更無法下載下傳,可以去http://mirrors.sohu.com/mysql下載下傳)。可以把軟體下載下傳到用戶端電腦本地後,使用rz等工具傳到Linux裡,或者找到網絡下載下傳位址後,直接在Linux裡使用wget下載下傳。
提示:本例以MySQL編譯的方式來講解,使用二進制方式安裝的完整過程在本文結尾會提供給大家。在生産場景中,二進制和源碼包兩種安裝方法都是可以用的,其應用場景一般沒什麼太大差别。不同之處在于,二進制的安裝包較大,名字和源碼包也有些差別,二進制的安裝過程比源碼更快。
MySQL源碼包和二進制安裝包的名稱見表3-1。
表3-1MySQL二進制和源碼包
MySQL軟體 | 軟體名 |
MySQL源碼安裝包 | mysql-5.6.34.tar.gz(本章選擇的安裝包) |
MySQL二進制安裝包 | mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz |
(3)采用編譯方式安裝MySQL
配置及編譯安裝的步驟如下:
第一步,下載下傳mysql軟體包。
[[email protected]~]# mkdir -p /home/oldboy/tools
[[email protected]~]# cd /home/oldboy/tools/
[[email protected]]# wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.34.tar.gz
[[email protected]]# ls -lh
total31M
-rw-r--r--.1 root root 31M Nov 28 07:46 mysql-5.6.34.tar.gz
第二步,解壓配置mysql,指令如下:
[[email protected]]# tar xf mysql-5.6.34.tar.gz
[[email protected]]# cd mysql-5.6.34
[[email protected]]# cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.34 \
-DMYSQL_DATADIR=/application/mysql-5.6.34/data\
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.34/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8\
-DDEFAULT_COLLATION=utf8_general_ci\
-DWITH_EXTRA_CHARSETS=all\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_FEDERATED_STORAGE_ENGINE=1\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1\
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1\
-DWITH_ZLIB=bundled\
-DWITH_SSL=bundled\
-DENABLED_LOCAL_INFILE=1\
-DWITH_EMBEDDED_SERVER=1\
-DENABLE_DOWNLOADS=1\
-DWITH_DEBUG=0
提示:
1)編譯時可配置的選項很多,常見的參數選項見本章最後一部分内容,更詳細的可參考本章結尾附錄講解。
2)編譯MySQL需要安裝gcc等工具,此部分在安裝作業系統時已經安裝上了,具體參考CentOS6作業系統的安裝詳細步驟,見《跟老男孩學Linux運維:Web叢集實戰》書或免費部署文章http://book.51cto.com/art/201605/510756.htm。
第三步,編譯安裝MySQL,指令如下:
[[email protected]]# make #<==如果是多核cpu,可指定make -jcpu核數,加快編譯速度。
[[email protected]]# make install
第四步,為MySQL安裝路徑設定不帶版本号的軟連結/application/mysql,操作指令如下:
[[email protected]]# ln -s /application/mysql-5.6.34/ /application/mysql
#補充:如果系統裡有曾經安裝的資料庫檔案和啟動程式最好停掉或删除,以免沖突。
[[email protected]sql-5.6.34]# ls -l /application/
total 4
lrwxrwxrwx. 1 root root 26 Feb 26 17:49 mysql-> /application/mysql-5.6.34/
drwxr-xr-x.13 root root 4096 Feb 26 17:49 mysql-5.6.34
[[email protected]]# ls /application/mysql/
bin COPYING data docs include lib man mysql-test README scripts share sql-bench support-files
如果上述操作未出現錯誤(每個步驟結束後,都可以使用echo $?看傳回值是否為0,為0則表示正确),檢視/application/mysql/目錄,若其下有内容,則表示MySQL5.6.34源代碼包采用cmake方式安裝成功了。
3.2.2建立MySQL資料庫配置檔案并對資料庫目錄授權
MySQL5.5資料庫預設為使用者提供了多個配置檔案模闆,但是MySQL5.6的support-files目錄下已經沒有配置檔案模闆了。
[[email protected]]# ll support-files/*.cnf
-rw-r--r--.1 root root 1126 Feb 26 17:54 support-files/my-default.cnf
[[email protected]]# mv /etc/my.cnf /etc/my.cnf.bak
#提示:在CentOS6.8版作業系統最小化安裝完成後,在/etc目錄下會存在一個my.cnf,需要将此檔案更名為其他的名字,如:/etc/my.cnf.bak,否則,該檔案會幹擾源碼安裝的MySQL的正确配置,造成無法啟動。
#在啟動MySQL服務時,會按照一定的順序搜尋my.cnf,先在/etc目錄下找,找不到則會搜尋"$basedir/my.cnf",在本例中就是/application/mysql-5.6.34/my.cnf,這是新版MySQL的配置檔案的預設位置!
[[email protected]]# cp support-files/my-default.cnf /application/mysql-5.6.34/my.cnf
提示:此行操作可以省略,在下文初始化mysql時會自動生成my.cnf模闆檔案,如果已經執行上述指令,則初始化後會生成my-new.cnf檔案,my.cnf和my-new.cnf除了注釋以外是一緻的。
[[email protected]]# chown -R mysql.mysql /application/mysql/
#<==授權mysql使用者管理mysql的安裝目錄。
關于更多mysql my.cnf參數的說明及調優,請參看本書後面章節。
3.2.3初始化MySQL資料庫檔案
上述配置完畢後,就可以初始化資料庫檔案了,這個步驟其實也可以在編譯安裝MySQL之後就操作,隻不過放到這裡更合理一些。
(1)初始化MySQL資料庫
初始化資料庫的核心指令為:
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/--datadir=/application/mysql/data --user=mysql
提示:--basedir=/application/mysql/為MySQL的安裝路徑,--datadir為資料檔案目錄。另,注意mysql_install_db和MySQL5.1的路徑不同,MySQL5.1不在MySQL bin路徑下了。
整個初始化的操作過程為:
[[email protected] mysql-5.6.34]#/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/--datadir=/application/mysql/data --user=mysql
#<==初始化mysql資料庫檔案,會有很多資訊提示,如果沒有ERROR級别的錯誤,有兩個OK的字樣,表示初始化成功,否則就要解決初始化的問題。
InstallingMySQL system tables...2017-02-26 18:08:53 0 [Warning] TIMESTAMP with implicitDEFAULT value is deprecated. Please use --explicit_defaults_for_timestampserver option (see documentation for more details).
2017-02-2618:08:53 0 [Note] Ignoring --secure-file-priv value as server is running with--bootstrap.
2017-02-2618:08:53 0 [Note] /application/mysql//bin/mysqld (mysqld 5.6.34) starting asprocess 47993 ...
2017-02-2618:08:53 47993 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-02-2618:08:53 47993 [Note] InnoDB: The InnoDB memory heap is disabled
2017-02-2618:08:53 47993 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-02-2618:08:53 47993 [Note] InnoDB: Memory barrier is not used
2017-02-2618:08:53 47993 [Note] InnoDB: Compressed tables use zlib 1.2.3
2017-02-2618:08:53 47993 [Note] InnoDB: Using Linux native AIO
2017-02-2618:08:53 47993 [Note] InnoDB: Using CPU crc32 instructions
2017-02-2618:08:53 47993 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2017-02-2618:08:53 47993 [Note] InnoDB: Completed initialization of buffer pool
2017-02-2618:08:53 47993 [Note] InnoDB: The first specified data file ./ibdata1 did notexist: a new database to be created!
2017-02-2618:08:53 47993 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2017-02-2618:08:53 47993 [Note] InnoDB: Database physically writes the file full: wait...
...省略若幹...
2017-02-2618:08:54 47993 [Note] InnoDB: Waiting for purge to start
2017-02-2618:08:54 47993 [Note] InnoDB: 5.6.34 started; log sequence number 0
2017-02-2618:08:54 47993 [Note] Binlog end
2017-02-2618:08:54 47993 [Note] InnoDB: FTS optimize thread exiting.
2017-02-2618:08:54 47993 [Note] InnoDB: Starting shutdown...
2017-02-2618:08:55 47993 [Note] InnoDB: Shutdown completed; log sequence number 1625977
OK #<==兩個OK是初始化成功的标志。
Fillinghelp tables...2017-02-26 18:08:55 0 [Warning] TIMESTAMP with implicit DEFAULTvalue is deprecated. Please use --explicit_defaults_for_timestamp server option(see documentation for more details).
2017-02-2618:08:55 0 [Note] Ignoring --secure-file-priv value as server is running with--bootstrap.
2017-02-2618:08:55 0 [Note] /application/mysql//bin/mysqld (mysqld 5.6.34) starting asprocess 48015 ...
2017-02-2618:08:55 48015 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-02-2618:08:55 48015 [Note] InnoDB: The InnoDB memory heap is disabled
...省略若幹...
2017-02-2618:08:56 48015 [Note] InnoDB: FTS optimize thread exiting.
2017-02-2618:08:56 48015 [Note] InnoDB: Starting shutdown...
2017-02-2618:08:57 48015 [Note] InnoDB: Shutdown completed; log sequence number 1625987
OK #<==兩個OK是初始化成功的标志。
To startmysqld at boot time you have to copy
support-files/mysql.serverto the right place for your system
PLEASEREMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To doso, start the server, then issue the following commands:
/application/mysql//bin/mysqladmin-u root password 'new-password'
/application/mysql//bin/mysqladmin-u root -h oldboy password 'new-password'
Alternativelyyou can run:
/application/mysql//bin/mysql_secure_installation
whichwill also give you the option of removing the test
databasesand anonymous user created by default. This is
stronglyrecommended for production servers.
See themanual for more instructions.
You canstart the MySQL daemon with:
cd . ;/application/mysql//bin/mysqld_safe &
You cantest the MySQL daemon with mysql-test-run.pl
cdmysql-test ; perl mysql-test-run.pl
Pleasereport any problems at http://bugs.mysql.com/
Thelatest information about MySQL is available on the web at
http://www.mysql.com
SupportMySQL by buying support/licenses at http://shop.mysql.com
###請注意如下幾行英文的說明
New default config file was createdas /application/mysql//my.cnf and
will be used by default by theserver when you start it.
You may edit this file to changeserver settings
#從上文說明中可以指導mysql的預設配置檔案已經變到了/application/mysql//my.cnf
WARNING: Default config file/etc/my.cnf exists on the system
This file will be read by defaultby the MySQL server
If you do not want to use this,either remove it, or use the
--defaults-file argument tomysqld_safe when starting the server
#從上文說明中可以看到資料庫啟動時會讀取/etc/my.cnf,是以有可能會導緻無法啟動,避免的方法就是使用mysqld_safe啟動服務時采用--defaults-file參數指定配置檔案,前文已将/etc/my.cnf改名了,是以,就不需要指定參數了,這裡是一個坑,讀者要注意。
此步驟必須要初始化成功,否則,後面會出現登入不了資料庫等各種問題。
(2)初始化資料庫的原理及結果說明
初始化資料庫的實質就是建立基礎的資料庫系統的庫檔案,例如:生成MySQL庫表等。
初始化資料庫後,檢視資料目錄,可以看到多了如下檔案:
[[email protected]]# ls -l /application/mysql/data
total110604
-rw-rw----.1 mysql mysql 12582912 Feb 26 18:08 ibdata1
-rw-rw----.1 mysql mysql 50331648 Feb 26 18:08 ib_logfile0
-rw-rw----.1 mysql mysql 50331648 Feb 26 18:08 ib_logfile1
drwx------.2 mysql mysql 4096 Feb 26 18:08 mysql #<==用于存放管理mysql的資料。
drwx------.2 mysql mysql 4096 Feb 26 18:08performance_schema #<==5.5及以上增加的内部性能庫。
drwxr-xr-x.2 mysql mysql 4096 Feb 26 17:48test #<==用于測試的test資料庫。
[[email protected]]# tree /application/mysql/data #<==如果沒有tree,可以yuminstall tree –y安裝
/application/mysql/data
├──ibdata1
├──ib_logfile0
├──ib_logfile1
├──mysql
│ ├── columns_priv.frm
│ ├── columns_priv.MYD
│ ├── columns_priv.MYI
…省略若幹…
│ ├── general_log.CSV
│ ├── general_log.frm
│ ├── help_category.frm
│ ├── procs_priv.frm
│ ├── procs_priv.MYD
│ ├── procs_priv.MYI
│ ├── proxies_priv.frm
│ ├── proxies_priv.MYD
│ ├── proxies_priv.MYI
│ ├── servers.frm
…省略若幹…
│ ├── time_zone_name.MYI
│ ├── time_zone_transition.frm
│ ├── time_zone_transition.MYD
│ ├── time_zone_transition.MYI
│ ├── time_zone_transition_type.frm
│ ├── time_zone_transition_type.MYD
│ ├── time_zone_transition_type.MYI
│ ├── user.frm
│ ├── user.MYD
│ └── user.MYI
├──performance_schema
│ ├── accounts.frm
│ ├── cond_instances.frm
│ ├── db.opt
│ ├── events_stages_current.frm
│ ├── events_stages_history.frm
│ ├── events_stages_history_long.frm
│ ├──events_stages_summary_by_account_by_event_name.frm
…省略若幹…
│ ├── threads.frm
│ └── users.frm
└── test
└── db.opt
3directories, 136 files
(3)MySQL初始化故障排錯集錦
本節的所有故障必須要解除,否則,後面會出現登入不了MySQL資料庫等各種問題,故障集錦見本章結尾内容
3.2.4配置并啟動MySQL資料庫
1)設定MySQL啟動腳本
[[email protected]]# pwd
/home/oldboy/tools/mysql-5.6.34
[[email protected]]# cp support-files/mysql.server /etc/init.d/mysqld #<==拷貝mysql啟動腳本到mysql的指令路徑。
[[email protected]]# chmod 700 /etc/init.d/mysqld #<==使腳本可執行。
[[email protected]]# ls -l /etc/init.d/mysqld
-rwx------.1 root root 10929 Feb 26 18:26 /etc/init.d/mysqld
2)啟動MySQL資料庫
#<==這是啟動資料庫規範方法之一,還可以使用/application/mysql/bin/mysqld_safe--user=mysql &啟動。這個指令結尾 “&”符号作用是,在背景執行mysql服務,這條指令執行完 還需要按下回車才能進入到指令行狀态。
#<==注意,如果已執行上面/etc/init.d/mysqld start啟動指令,還想嘗試下面mysqld_safe的指令,請先執行/etc/init.d/mysqld stop結束mysql程序。
[[email protected]]# cd ~
[[email protected]]# /etc/init.d/mysqld start
StartingMySQL. SUCCESS!
提示:禁止使用pkill、kill -9、killall -9等指令強制殺死資料庫,這會引起資料庫無法啟動等故障發生。企業中曾發生過的血的教訓案例請看http://oldboy.blog.51cto.com/2561410/1431161。
3)檢查MySQL資料庫是否啟動。
[[email protected]~]# netstat -lntup|grep mysql
tcp 0 0 :::3306 :::* LISTEN 48065/mysqld
如發現3306端口沒起來。請使用tail-100 /application/mysql/data/機器名.err檢查日志報錯進行調試。經常檢視服務運作日志是個很好的習慣,也是高手的習慣,你要不要成為高手?嘿!
4)檢視MySQL資料庫啟動結果日志。
[[email protected]~]# tail /application/mysql/data/oldboy.err
2017-02-2617:38:36 48065 [Note] InnoDB: Waiting for purge to start
2017-02-2617:38:36 48065 [Note] InnoDB: 5.6.34 started; log sequence number 1625987
2017-02-2617:38:36 48065 [Warning] No existing UUID has been found, so we assume thatthis is the first time that this server has been started. Generating a newUUID: 4f94404a-fc74-11e6-8112-000c292ece3f.
2017-02-2617:38:36 48065 [Note] Server hostname (bind-address): '*'; port: 3306
2017-02-2617:38:36 48065 [Note] IPv6 is available.
2017-02-2617:38:36 48065 [Note] - '::' resolvesto '::';
2017-02-2617:38:36 48065 [Note] Server socket created on IP: '::'.
2017-02-2617:38:36 48065 [Note] Event Scheduler: Loaded 0 events
2017-02-2617:38:36 48065 [Note] /application/mysql-5.6.34/bin/mysqld: ready forconnections.
Version:'5.6.34' socket:'/application/mysql-5.6.34/tmp/mysql.sock' port: 3306 Source distribution
本例檢視了錯誤日志的指令及錯誤日志中的内容,這裡省略了大部分日志内容,隻給了預設10行,如果有錯誤,一般會顯示error字樣。
5)設定MySQL開機自啟動。
[[email protected]~]# chkconfig --add mysqld
[[email protected]~]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
此外,将啟動指令/etc/init.d/mysqld start放到/etc/rc.local裡面實作開機自啟動也可。
若MySQL安裝及使用出現故障,可根據下面的分析思路進行檢查。
q 細看所有執行指令傳回的螢幕輸出,不要忽略關鍵的輸出内容。
q 輔助檢視系統日志/var/log/messages。
q 如果是MySQL關聯了其他服務,要同時檢視相關服務的日志。
q 仔細閱讀,重新檢視操作的步驟是否正确,書寫的指令及字元是不是都對。
經常檢視各種服務運作日志是個很好的習慣,也是成長為高手的必經之路,你要不要成為高手?嘿!
3.2.5将MySQL相關指令加入全局路徑
如果不為MySQL的指令配置全局路徑,就無法直接在指令行輸入mysql這樣的指令,隻能用全路徑指令(/application/mysql/bin/mysql),這種帶着路徑輸入指令的方式很麻煩。下面來看看配置的具體方法。
1)确認mysql指令所在的路徑。
[[email protected]/]# ls /application/mysql/bin/mysql
/application/mysql/bin/mysql
2)在PATH變量前面增加/application/mysql/bin路徑,并追加到/etc/profile檔案中。
[[email protected]/]# echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
#<==注意,echo後是單引号呦,雙引号是不行滴。
[[email protected]/]# tail -1 /etc/profile
exportPATH=/application/mysql/bin:$PATH
[[email protected]/]# source /etc/profile
#<==執行source使上一行添加到/etc/profile中,内容直接生效
#<==以上指令的用途為,定義mysql全局路徑,實作在任意路徑執行mysql指令。
[[email protected]~]# echo $PATH
/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
#<==執行echo $PATH有/application/mysql/bin輸出表示配置成功。
提示:更簡單的設定方法為用下面指令做軟連結:ln -s /application/mysql/bin/* /usr/local/sbin/,把mysql指令所在路徑連結到全局路徑/usr/local/sbin/的下面。
要特别強調的是,務必把MySQL指令路徑放在PATH路徑中其他路徑的前面,否則,可能會導緻使用的mysql等指令和編譯安裝的mysql指令不是同一個,進而産生錯誤。下面的網址中給出了因為MySQL路徑配置問題導緻的錯誤案例:http://oldboy.blog.51cto.com/2561410/1122867,該錯誤實際上就是因為使用yum安裝的MySQL用戶端指令通路了編譯安裝的服務端而導緻的。
3.2.6登入MySQL測試
登入并測試的指令如下:
[[email protected] ~]# mysql#<==直接敲mysql就進入資料庫了,而且身份還是root。
Welcometo the MySQL monitor. Commands end with; or \g.
YourMySQL connection id is 2
Serverversion: 5.6.34 Source distribution
Copyright(c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracleis a registered trademark of Oracle Corporation and/or its
affiliates.Other names may be trademarks of their respective
owners.
Type'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
提示:你還可以使用如下三種指令寫法登入mysql:
mysql -uroot -p,
mysql -uroot,
mysql -uroot -p '密碼'
若出現登入故障,可通過以下方法排查。
如果這裡提示無法登入,排除了資料庫啟動問題後,則很可能是資料庫初始化檔案有問題。例如:
[[email protected] ~]# mysql
ERROR1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
解決辦法:重新初始化資料庫即可,此問題一般都是資料庫初始化問題,或者資料庫檔案損壞,以及目錄權限問題。
mysql>show databases; #<==檢視目前的資料庫
+--------------------+
|Database |
+--------------------+
|information_schema |
|mysql |
|performance_schema |
|test |
+--------------------+
4 rowsin set (0.00 sec)
mysql>select user(); #<==檢視目前的登入使用者
+----------------+
|user() |
+----------------+
|[email protected] |
+----------------+
1 row inset (0.00 sec)
mysql> #<==快捷鍵ctrl+d,也可以使用quit或exit等。
MySQL安裝完成後,預設情況下,管理者賬号root是無密碼的,極不安全,必須要處理一下。
3.2.7基本的MySQL安全配置
1. 為root使用者設定密碼
MySQL管理者的賬号root密碼預設為空,極不安全,可以通過mysqladmin指令為mysql不同執行個體的資料庫設定獨立的密碼。
[[email protected]~]# mysqladmin -u root password 'oldboy123' #<==為root使用者設定密碼oldboy123。
Warning:Using a password on the command line interface can be insecure. #<==這裡是一個警告,提醒使用者指令行放置密碼是不安全的,讀者盡量不要在指令行輸入密碼,而是采取互動式的輸入密碼。
[[email protected]~]# mysql #<==無法直接輸入指令登入了。
ERROR1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[[email protected]~]# mysql -uroot -p #<==新的登入方式,也可以直接帶密碼mysql -uroot -poldboy123。
Enterpassword: #<==輸入新密碼oldboy123,互動式輸入密碼不會記錄在指令記錄裡,是以更安全。
Welcometo the MySQL monitor. Commands end with; or \g.
YourMySQL connection id is 5
Serverversion: 5.6.34 Source distribution
Copyright(c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracleis a registered trademark of Oracle Corporation and/or its
affiliates.Other names may be trademarks of their respective
owners.
Type'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
讀者也可以執行mysql_secure_installation指令互動式地設定系統的使用者密碼。
2. 清理mysql伺服器内無用的使用者
mysql>select user,host from mysql.user;
+------+-----------+
| user |host |
+------+-----------+
| root |127.0.0.1 |
| root |::1 |
| | localhost |
| root |localhost |
| | oldboy |
| root |oldboy |
+------+-----------+
6 rowsin set (0.00 sec)
mysql>drop user [email protected]'::1';
QueryOK, 0 rows affected (0.00 sec)
mysql>drop user [email protected]'oldboy';
QueryOK, 0 rows affected (0.00 sec)
mysql>drop user ''@'oldboy';
QueryOK, 0 rows affected (0.00 sec)
mysql>drop user ''@'localhost';
QueryOK, 0 rows affected (0.00 sec)
mysql>select user,host from mysql.user;
+------+-----------+
| user |host |
+------+-----------+
| root |127.0.0.1 |
| root |localhost |
+------+-----------+
2 rowsin set (0.00 sec)
提示:對于drop指令及資料庫安全,後文會有詳細講解,此處不執行也可以。
有時用drop指令可能無法删除對應使用者。比如,當資料庫内的host等字段為大寫及特殊Linux主機名時,删除使用者就會遇到問題,例如:
mysql>drop user ' '@'MySQL';
ERROR1396 (HY000): Operation DROP USER failed for ' '@'mysql'
可使用DML語句,并采用delete指令删除來解決此問題,具體指令如下:
mysql>delete from mysql.user where user='' and host='MySQL';
QueryOK, 1 row affected (0.00 sec)
mysql>flush privileges;
QueryOK, 0 rows affected (0.00 sec)
3. 删除mysql資料庫内無用的test庫
mysql>drop database test;
QueryOK, 0 rows affected (0.00 sec)
mysql>show databases;
+--------------------+
|Database |
+--------------------+
|information_schema |
|mysql |
|performance_schema |
+--------------------+
3 rowsin set (0.00 sec)
有關更多的MySQL的安全措施,在後文會有更詳細的講解。
3.3 MySQL安裝FAQ
問題1:在配置mysql時遇到錯誤。
出現的錯誤如下:
checking for tgetent in -ltinfo... no
checking for termcap functions library... configure: error: No curses/termcap library found
原因:缺少ncurses安裝包。
解決方法:使用yum -y install ncurses-devel指令。
問題2:初始化MySQL資料庫時出現故障。
故障1:給出了警告資訊“WARNING: The host 'oldboy' could not be looked upwith resolveip.”
警告是可以忽略的,如果非要解決則需修改對主機名的解析,使其和uname -n指令的結果一樣,如下:
[[email protected]~]# grep "`uname -n`" /etc/hosts
127.0.0.1 oldboy
故障2:錯誤提示ERROR: 1004 Can't createfile '/tmp/#sql300e_1_0.frm' (errno: 13)
在執行初始化資料庫指令時可能就會遇到這樣的錯誤,錯誤提示如下:
ERROR: 1004 Can't create file '/tmp/#sql300e_1_0.frm'(errno: 13)
120406 15:47:02 [ERROR] Aborting
12040615:47:02 [Note] /application/mysql/libexec/mysqld: Shutdown complete
Installation of system tables failed! Examine the logs in
/application/mysql/datafor more information.
根據提示可知,/tmp目錄不能建立檔案,是以解決辦法為給/tmp目錄增權重限,如下:
解決辦法:還原/tmp目錄權限,操作指令如下:
[[email protected]~]# chmod 1777 /tmp #<==1777是/tmp的預設權限,除非曾經改動過此目錄權限才會報錯。
[[email protected]~]# ls -ld /tmp/
drwsrwxrwt.8 root root 4096 3月 10 18:07 /tmp/
本示例的故障必須要解除,否則,後面會出現登入不了MySQL資料庫等各種問題。
問題3:登入資料庫是提示“Access denied for user 'root'@'localhost'”
解答:正文裡已給出答案,不再累述。
問題4:有時drop删除MySQL使用者删不掉。
解答:正文裡已給出答案,不再累述。
3.4 MySQL編譯常見參數選項說明
編譯參數 | 說明 |
-DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.34 | 設定mysql安裝目錄 |
-DMYSQL_DATADIR=/application/mysql-5.6.34/data | 設定mysql資料檔案目錄 |
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.34/tmp/mysql.sock | 設定mysql.sock路徑 |
-DDEFAULT_CHARSET=utf8 | 設定預設的字元集為utf8 |
-DDEFAULT_COLLATION=utf8_general_ci | 設定預設排序規則 |
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii | 啟用額外的字元集類型 |
-DENABLED_LOCAL_INFILE=ON | 啟用本地資料導入支援 |
-DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITHOUT_PARTITION_STORAGE_ENGINE=1 | 若想啟用某個引擎的支援,-DWITH_<ENGINE>_STORAGE_ENGINE=1 若想禁用某個引擎的支援:-DWITHOUT_<ENGINE>_STORAGE_ENGINE=0 |
-DWITH_FAST_MUTEXES=1 | |
-DWITH_ZLIB=bundled | 啟用libz庫支援 |
-DENABLED_LOCAL_INFILE=1 | 這個參數重複了,啟用本地資料導入支援 |
-DWITH_READLINE=1 | 啟用readline庫支援(提供可編輯的指令行) |
-DWITH_EMBEDDED_SERVER=1 | 編譯嵌入式伺服器支援 |
-DWITH_DEBUG=0 | 禁用debug(預設為禁用) |
更多内容可以參考官方MySQL 5.6的cmake編譯參數http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html
轉載于:https://www.cnblogs.com/wutao1935/p/10149401.html