linux下mysql 5.5.8 源碼編譯安裝記錄分享,需要的朋友可以參考下。
系統(tǒng):Ubuntu 10.10
mysql源碼文件:mysql-5.5.8.tar.gz
安裝所需工具:cmake, GNU make, gcc, Perl, libncurses5-dev, bison(可選), chkconfig
注:
1.官方2010-11-18的源碼有幾處bug,在編譯之前參照官方的說(shuō)明,進(jìn)行了手動(dòng)修改。
官方說(shuō)明鏈接:http://lists.mysql.com/commits/126782
2.官方5.5版本參考手冊(cè):http://dev.mysql.com/doc/
汗了一下,3392頁(yè)的參考手冊(cè)!
=>工具安裝:
1. cmake
—-沒(méi)有自己編譯安裝cmake
—-shell:~$ sudo apt-get install cmake
—-版本:2.8.2
2. GNU make
—-Ubuntu自帶
—-版本:3.81
3.GCC
—-Ubuntu自帶
—-版本:4.4.5(官方文檔:必須3.2以上)
4.Perl
—-Ubuntu自帶
—-版本:5.10.1
5.libncurses5-dev (ncurses-devel)
—-若差了這個(gè)包,在cmake的時(shí)候會(huì)報(bào)錯(cuò)。
—-Debian/Ubuntu上的包名是libncurses5-dev,RedHat和其他版本對(duì)應(yīng)的是ncurses-devel
—-shell:~$ sudo apt-get install libncurses5-dev
—-報(bào)錯(cuò)信息
——————www.linuxidc.com—————
— MySQL 5.5.8
— Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:82 (MESSAGE):
Curses library not found. Please install appropriate package,
remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu , package name is libncurses5-dev ,
on RedHat and derivates it is ncurses-devel.
Call Stack (most recent call first):
cmake/readline.cmake:126 (FIND_CURSES)
cmake/readline.cmake:216 (MYSQL_USE_BUNDLED_LIBEDIT)
CMakeLists.txt:256 (MYSQL_CHECK_READLINE)
— Configuring incomplete, errors occurred!
———————————
6. bison
—-shell:~$ sudo apt-get install bison
—-可選。沒(méi)有這個(gè)工具,在make的時(shí)候報(bào)出警告。
—-警告記錄:
———————————
Warning: Bison executables not found in PATH
———————————
7.chkconfig
—-后面配置mysql服務(wù)自啟動(dòng)的時(shí)候需要。
—-shell:~$ sudo apt-get install chkconfig
=>mysql安裝:
1.解壓源代碼文件
—-shell定位到源代碼文件所在目錄
—-解壓
shell:~$ tar zxvf mysql-5.5.8.tar.gz
2.cmake操作
—-shell定位到解壓出的源代碼文件夾目錄(文件夾:mysql-5.5.8)
—-cmake執(zhí)行:
———————————
shell:~$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/home/system_username/Programming/mysql/mysqldata
-DSYSCONFDIR=/etc
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
-DWITH_PARTITION_STORAGE_ENGINE=1
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock
-DMYSQL_TCP_PORT=3306
-DENABLED_LOCAL_INFILE=1
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8-general_ci
-DMYSQL_USER=mysql
注:沒(méi)有換行。官方文檔上,cmake 命令后面加個(gè)點(diǎn)不懂什么意思。在這里加上命令執(zhí)行不了
———————————
源代碼配置選項(xiàng)說(shuō)明:
//mysql安裝的主目錄,5.5.8版本默認(rèn)為/usr/local/mysql,所以可以不添加
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
//mysql數(shù)據(jù)保存的路徑,自定義
-DMYSQL_DATADIR=/home/system_username/mysql/mysqldata
//mysql配置文件地址——The default my.cnf option file directory
-DSYSCONFDIR=/etc
//Compile storage engine xxx statically into server
/*Storage engines are built as plugins. You can build a plugin as a static module (compiled into the server)
*or a dynamic module (built as a dynamic library that must be installed into the server using the INSTALL
*PLUGIN statement or the –plugin-load option before it can be used). Some plugins might not support static
*or dynamic building.
*/
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1
-DWITH_PARTITION_STORAGE_ENGINE=1
//Unix socket file
/*
*The Unix socket file path on which the server listens for socket connections. This must be an absolute path
*name. The default is /tmp/mysql.sock
*/
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock
//數(shù)據(jù)庫(kù)服務(wù)器TCP/IP連接的監(jiān)聽(tīng)端口,默認(rèn)為3306
-DMYSQL_TCP_PORT=3306
//Whether to enable LOCAL capability in the client library for LOAD DATA INFILE
//默認(rèn)為關(guān)閉,這里開(kāi)啟
-DENABLED_LOCAL_INFILE=1
//數(shù)據(jù)庫(kù)編碼設(shè)置
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8-general_ci
3.編譯和安裝
—-shell定位到源代碼文件夾目錄
—-執(zhí)行:(編譯用了大概20分鐘)
shell:~$ make
shell:~$ make install
4.后續(xù)配置
—-進(jìn)入mysql安裝目錄下的腳本目錄
shell:~$ cd /usr/local/mysql/scripts
—-利用mysql_install_db腳本生成新的MySQL 授權(quán)表
./mysql_install_db –basedir=/usr/local/mysql –datadir=/home/system_username/Programming/mysql/mysqldata
–user=mysql
—-進(jìn)入mysql安裝目錄下的支持文件目錄
shell:~$ cd /usr/local/mysql/support-files
—-復(fù)制mysql配置文件
shell:~$ sudo cp my-medium.cnf /etc/my.cnf
—-復(fù)制服務(wù)文件并修改
shell:~$ sudo cp mysql.server mysqld
—-修改mysqld
basedir=/usr/local/mysql
datadir=/home/mysql
mv mysqld /etc/init.d/mysqld
—-啟動(dòng)服務(wù)
shell:~$ service mysqld start
—-關(guān)閉服務(wù)
shell:~$ service mysqld stop
———————————
service命令:
1. 用于管理Linux系統(tǒng)中服務(wù)的命令
2. 作用是去/etc/init.d目錄下尋找相應(yīng)的服務(wù),進(jìn)行開(kāi)啟和關(guān)閉等操作
3. 上述操作后,mysqld服務(wù)文件對(duì)應(yīng)mysql.server文件
———————————
—-添加服務(wù)到自啟動(dòng)項(xiàng)
shell:~$ sudo chkconfig –level 3 mysqld on
—-設(shè)置軟連接使mysql, mysqldump, mysqladmin這三個(gè)命令能在shell中直接運(yùn)行
shell:~$ sudo ln -s /usr/local/mysql/bin/mysql /usr/bin
shell:~$ sudo ln -s /usr/local/mysql/bin/mysqldump /usr/bin
shell:~$ sudo ln -s /usr/local/mysql/bin/mysqladmin /usr/bin
———————————
=>mysql數(shù)據(jù)庫(kù)中文亂碼解決 :
1. 亂碼分析
—-從終端shell進(jìn)入mysql
shell:~$ mysql
…………
…………
mysql> show variables like ‘%character%’
—-得到以下數(shù)據(jù)庫(kù)編碼信息表:
+———————————– +——————————————-+
| Variable_name | Value |
+————————————+——————————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+———————————— +——————————————-+
可以看出character_set_database ,character_set_server 的編碼還是默認(rèn)的latin1。
不知道為什么,之前DEFAULT_CHARSET設(shè)置成為utf8的,好像沒(méi)起作用。查看官方文檔
發(fā)現(xiàn),character_set_database不支持配置文件(/etc/my.cnf)變量設(shè)置,
但是character_set_server 支持配置文件變量設(shè)置。
2. 解決辦法
—-打開(kāi)配置文件
shell:~$ sudo gedit /etc/my.cnf
然后在[mysqld]配置選項(xiàng)下添加
character-set-server = utf8
—-然后進(jìn)入mysql
執(zhí)行:
mysql> show variables like ‘%character%’
結(jié)果:character_set_database ,character_set_server兩項(xiàng)都變?yōu)閡tf8了
—-測(cè)試:
往數(shù)據(jù)庫(kù)表中插入中文字段,中文就正常顯示了。
注:1.用5.1版本的時(shí)候如下方法是可以解決中文編碼問(wèn)題的
—-在配置文件[mysqld]和[client]節(jié)下分別添加: default-character-set = utf8
2.不知到是不是手動(dòng)編譯的原因,在5.5.8中配置文件中用上述方法會(huì)造成數(shù)據(jù)庫(kù)服務(wù)無(wú)法啟動(dòng)。
—-錯(cuò)誤日志如下:( datadir/username.err為錯(cuò)誤日志文件)
—————————————————-
mysqld_safe mysqld from pid file /home/cyberwym/Programming/mysql/mysqldata/cyberwym.pid ended
………..
………..
[ERROR] /usr/local/mysql/bin/mysqld: unknown variable ‘default-character-set=utf8’
[ERROR] Aborting
—————————————————-
—-這樣會(huì)造成pid文件(datadir/username.pid)無(wú)法更新
—-在配置文件[mysqld]和[client]節(jié)下分別去掉: default-character-set = utf8 后,數(shù)據(jù)庫(kù)服務(wù)就啟動(dòng)正常了