Linux下MySQL 5.5.8 源碼編譯安裝記錄分享

來源:互聯網
上載者:User

系統:Ubuntu 10.10
mysql源碼檔案:mysql-5.5.8.tar.gz
安裝所需工具:cmake, GNU make, gcc, Perl, libncurses5-dev, bison(可選), chkconfig
註:
1.官方2010-11-18的源碼有幾處bug,在編譯之前參照官方的說明,進行了手動修改。

官方說明連結:http://lists.mysql.com/commits/126782
2.官方5.5版本參考手冊:http://dev.mysql.com/doc/
汗了一下,3392頁的參考手冊!
=>工具安裝:
1. cmake
----沒有自己編譯安裝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)
----若差了這個包,在cmake的時候會報錯。
----Debian/Ubuntu上的包名是libncurses5-dev,RedHat和其他版本對應的是ncurses-devel
----shell:~$ sudo apt-get install libncurses5-dev
----報錯資訊
------------------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
----可選。沒有這個工具,在make的時候報出警告。
----警告記錄:
---------------------------------

Warning: Bison executables not found in PATH
---------------------------------
7.chkconfig
----後面配置mysql服務自啟動的時候需要。
----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執行:
---------------------------------
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
註:沒有換行。官方文檔上,cmake 命令後面加個點不懂什麼意思。在這裡加上命令執行不了
---------------------------------
原始碼配置選項說明:
//mysql安裝的主目錄,5.5.8版本預設為/usr/local/mysql,所以可以不添加
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql

//mysql資料儲存的路徑,自訂
-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

//資料庫伺服器TCP/IP串連的監聽連接埠,預設為3306
-DMYSQL_TCP_PORT=3306

//Whether to enable LOCAL capability in the client library for LOAD DATA INFILE
//預設為關閉,這裡開啟
-DENABLED_LOCAL_INFILE=1

//資料庫編碼設定
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8-general_ci
3.編譯和安裝
----shell定位到原始碼檔案夾目錄
----執行:(編譯用了大概20分鐘)
shell:~$ make
shell:~$ make install

4.後續配置
----進入mysql安裝目錄下的指令碼目錄
shell:~$ cd /usr/local/mysql/scripts
----利用mysql_install_db指令碼產生新的MySQL 授權表
./mysql_install_db --basedir=/usr/local/mysql --datadir=/home/system_username/Programming/mysql/mysqldata
--user=mysql
----進入mysql安裝目錄下的支援檔案目錄
shell:~$ cd /usr/local/mysql/support-files
----複製mysql設定檔
shell:~$ sudo cp my-medium.cnf /etc/my.cnf

----複製服務檔案並修改
shell:~$ sudo cp mysql.server mysqld
----修改mysqld
basedir=/usr/local/mysql
datadir=/home/mysql
mv mysqld /etc/init.d/mysqld
----啟動服務
shell:~$ service mysqld start
----關閉服務
shell:~$ service mysqld stop
---------------------------------
service命令:
1. 用於管理Linux系統中服務的命令
2. 作用是去/etc/init.d目錄下尋找相應的服務,進行開啟和關閉等操作
3. 上述操作後,mysqld服務檔案對應mysql.server檔案
---------------------------------
----添加服務到自啟動項
shell:~$ sudo chkconfig --level 3 mysqld on

----設定軟串連使mysql, mysqldump, mysqladmin這三個命令能在shell中直接運行
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資料庫中文亂碼解決 :
1. 亂碼分析
----從終端shell進入mysql
shell:~$ mysql
............
............
mysql> show variables like '%character%'
----得到以下資料庫編碼資訊表:
+----------------------------------- +-------------------------------------------+
| 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 的編碼還是預設的latin1。
不知道為什麼,之前DEFAULT_CHARSET設定成為utf8的,好像沒起作用。查看官方文檔
發現,character_set_database不支援設定檔(/etc/my.cnf)變數設定,
但是character_set_server 支援設定檔變數設定。

2. 解決辦法
----開啟設定檔
shell:~$ sudo gedit /etc/my.cnf
然後在[mysqld]配置選項下添加
character-set-server = utf8
----然後進入mysql
執行:
mysql> show variables like '%character%'
結果:character_set_database ,character_set_server兩項都變為utf8了
----測試:
往資料庫表中插入中文欄位,中文就正常顯示了。

註:1.用5.1版本的時候如下方法是可以解決中文編碼問題的
----在設定檔[mysqld]和[client]節下分別添加: default-character-set = utf8
2.不知到是不是手動編譯的原因,在5.5.8中設定檔中用上述方法會造成資料庫服務無法啟動。
----錯誤記錄檔如下:( datadir/username.err為錯誤記錄檔檔案)
----------------------------------------------------
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
----------------------------------------------------
----這樣會造成pid檔案(datadir/username.pid)無法更新
----在設定檔[mysqld]和[client]節下分別去掉: default-character-set = utf8 後,資料庫服務就啟動正常了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.