ubuntu10.04编译安装mysql5.5.10成功小记

星期一, 2011-03-28 | Author: Lee | JAVA-and-J2EE, linux, php | 4,756 views

在ubuntu下安装和在centos下还是有点不一样的,主要是依赖包的不同,编译安装新版本的mysql5.5.10的时候又使用来cmake,自己不熟悉,有到处学习下,找来下资料,了解下,主要操作如下,中间最郁闷的莫过于,在系统中默认给来个/etc/mysql/my.cnf这个文件一定要改个名字,或者注释掉,我就有很多莫名的问题由起引起,自己倒是看到过他,没有在于,最后还是在网上查到有人有同样问题,自己才恍然大悟,后面的就很顺利了:

系统:ubuntu10.04/ubuntu10.10这两个版本应该都行,我测试的是10.04
mysql源码文件:mysql-5.5.10.tar.gz

安装所需工具:cmake, GNU make, gcc(这个我一开始没有装,郁闷的找来好久的原因), Perl, libncurses5-dev(这个和centos不同[ncurses-devel]), bison(可选), chkconfig
安装完成mysql前,可以跳过此部分,到红的地方开始找安装部分:
补充执行语句: 下面来源于网络上的一篇算是蛮详细的,自己又整理下来,对自己出的问题,还有几个,几下命令执行如下:
1.chmod +w /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql

2.创建MySQL数据库存放目录
mkdir -p /home/mydev/lamp/mysql/data/
mkdir -p /home/mydev/lamp/mysql/binlog/
mkdir -p /home/mydev/lamp/mysql/relaylog/
chown -R mysql:mysql /home/mydev/lamp/mysql/mysql/
(记得chown赋予权限就好)
创建my.cnf配置文件:
vi /etc/my.cnf

  输入以下内容:
引用
[client]
#character-set-server = utf8
port = 3306
socket = /tmp/mysql.sock

[mysqld]
#character-set-server = utf8
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-ignore-db = information_schema
user = mysql
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /home/mydev/lamp/mysql/data
log-error = /home/mydev/lamp/mysql/mysql_error.log
pid-file = /home/mydev/lamp/mysql/mysql.pid
open_files_limit = 10240
back_log = 600
max_connections = 5000
max_connect_errors = 6000
table_cache = 614
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 300
#thread_concurrency = 8
query_cache_size = 512M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
default-storage-engine = MyISAM
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 246M
max_heap_table_size = 246M
long_query_time = 3
#log-slave-updates
#log-bin = /home/mydev/lamp/mysql/binlog/binlog
#binlog_cache_size = 4M
#binlog_format = MIXED
#max_binlog_cache_size = 8M
#max_binlog_size = 1G
#relay-log-index = /home/mydev/lamp/mysql/relaylog/relaylog
#relay-log-info-file = /home/mydev/lamp/mysql/relaylog/relaylog
#relay-log = /home/mydev/lamp/mysql/relaylog/relaylog
#expire_logs_days = 30
key_buffer_size = 256M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover

interactive_timeout = 120
wait_timeout = 120

skip-name-resolve
#master-connect-retry = 10
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396

#master-host = 192.168.1.2
#master-user = username
#master-password = password
#master-port = 3306

server-id = 1

innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 512M
innodb_data_file_path = ibdata1:256M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0

#log-slow-queries = / /home/mydev/lamp/mysql/slow.log
#long_query_time = 10

[mysqldump]
quick
max_allowed_packet = 32M
(日志信息,我已经关闭,需要保留日志的可以打开)

启动MySQL:
service mysqld start

 通过命令行登录管理MySQL服务器(提示输入密码时直接回车):
/usr/local/mysql/bin/mysql -u root -p -S /tmp/mysql.sock
输入以下SQL语句,创建一个具有root权限的用户(admin)和密码(12345678):
GRANT ALL PRIVILEGES ON *.* TO ‘admin’@’localhost’ IDENTIFIED BY ‘123456’;
GRANT ALL PRIVILEGES ON *.* TO ‘admin’@’127.0.0.1’ IDENTIFIED BY ‘123456’;
上面的是配置好的东东,应该是安装好mysql的后续工作,下面是开始安装的开始:
——————————————————————————————————————————————————————-
=>工具安装:
——————————————————————————————————————————————————————–
1. cmake
shell:~$ sudo apt-get install cmake
—-版本:2.8.4
2. GNU make
—-ubuntu自带
—-版本:3.81
3.GCC
shell:~$ sudo apt-get install gcc
—-版本:4.4.3(官方文档:必须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
—-报错信息
———————————————————————-
— MySQL 5.5.10
— 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.10.tar.gz

2.cmake操作

—-shell定位到解压出的源代码文件夹目录(文件夹:mysql-5.5.10)
—-cmake执行:

—————————————————————————————————————————-
shell:~$ cmake -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8-general_ci -DMYSQL_DATADIR=/home/mysql/mysqldata -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 -DENABLED_LOCAL_INFILE=1
—————————————————————————————————————————-

额外说明:此处我参照网上的一篇5.5.10应该是原因的 【(以下配置参数在5.5.8版本中都是以一下为默认值,所以cmake时不必自行添加)】

-DEXTRA_CHARSETS=all

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql

-DSYSCONFDIR=/etc

-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock

-DMYSQL_TCP_PORT=3306

源代码配置选项说明:(-D 是cmake命令的一个参数,后面跟一个键值对来生成一个配置参数)

//mysql安装的主目录 ,5.5.8版本默认为/usr/local/mysql,所以可以不添加

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql

//mysql数据保存(数据库,表,错误日志等等)的路径,自定义

-DMYSQL_DATADIR=/home/mysql/mysqldata

//mysql配置文件 my.cnf的地址

-DSYSCONFDIR=/etc
注:记得移除(/etc/mysql/my.cnf )要不你会很多痛苦的问题

//下面是开启额外数据库引擎的配置,要开启必须如下手动配置

//MyISAM, MERGE, MEMORY, and CSV引擎是默认安装的

-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

//下面这个参数是开启本地文件数据库导入

//解释:比如可以建立一个文本文件,在里面按照一定格式写入一个表的n条记录,

// 就可以用专门的命令从这个文本文件把数据导入到一个数据库表中。

-DENABLED_LOCAL_INFILE=1

//Unix socket file

//Unix套接字文件 地址。

/**

*解释:1.从本地客户端登入数据库的时候默认是按Unix套接字进行连接的。即如下情形:

* shell:~$ mysql -uroot -padmin

* 此种情况,mysql服务器认为客户端是来源于本地的,即root@localhost

* 2. 另一种是利用TCP/IP协议进行连接。即如下情形:

* shell:~$ mysql -h127.0.0.1 -uroot -padmin

* 此中情形,mysql服务器认为客户端,不是来源于本地,所以按TCP/IP连接,即root@127.0.0.1

* 但是127.0.0.1恰好是一个本地回环IP。

* 更广的情形是客户端账户不是在本地登录的,客户端链接服务端的时候即:root@server_ip

* 但是一般处于安全考虑,服务器端不应该赋予root帐号在外部连接服务器的权利。

* 一般是为不能在本地进行登录的用户建立一个有限权限的账户来进行这种外部登录。

*/

//补充:此套接字文件只有在mysql server服务启动时临时创建。服务关闭时,自动清除。

-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock

//数据库服务器TCP/IP连接的监听端口 ,默认为3306

-DMYSQL_TCP_PORT=3306

//数据库编码 设置

-DEXTRA_CHARSETS=all

-DDEFAULT_CHARSET=utf8

-DDEFAULT_COLLATION=utf8-general_ci

3.编译和安装

—-shell定位到源代码文件夹目录

—-执行:(编译用了大概20分钟)
Shell代码 收藏代码

1. shell:~$ make
2. shell:~$ sudo make install

注意 :make install 必须加root权限sudo。 因为默认安装在/usr/local/mysql目录下,

而在此目录下进行文件读写是需要root权限的。

4.后续配置

—-生成新的MySQL 授权表

—-进入mysql安装目录下的脚本目录

shell:~$ cd /usr/local/mysql/scripts

—-利用mysql_install_db脚本生成新的MySQL 授权表

./mysql_install_db –basedir=/usr/local/mysql –datadir=/home/sky/mysql/mysqldata –user=mysql

注意 : –basedir=/usr/local/mysql –datadir=/home/system_username/Programming/mysql/mysqldata

这两个参数是必须的。因为mysql_install_db要利用basedir在datadir下建立授权表。

—-配置文件my.cnf设置

—-进入mysql安装目录下的支持文件目录
shell:~$ cd /usr/local/mysql/support-files

—-复制mysql配置文件

shell:~$ sudo cp my-medium.cnf /etc/my.cnf

—-mysql server在系统中的服务项设置

—-复制服务文件并修改

shell:~$ sudo cp mysql.server mysqld

—-修改mysqld
Txt代码 收藏代码

1. basedir=/usr/local/mysql
2. datadir=/home/sky/mysql/mysqldata

shell:~$ mv mysqld /etc/init.d/mysqld

解释: linux的/etc/init.d/目录下存放的是系统的各种服务文件,可以对其设置达到开机服务自启动。

—-启动服务
Shell代码 收藏代码

1. shell:~$ service mysqld start

shell:~$ service mysqld start

—-关闭服务

Shell代码 收藏代码

1. shell:~$ service mysqld stop

shell:~$ service mysqld stop

———————————————————————————————-

service命令:

1. 用于管理Linux系统中服务的命令

2. 作用是去/etc/init.d目录下寻找相应的服务,进行开启和关闭等操作

3. 上述操作后,mysqld服务文件对应mysql.server文件

———————————————————————————————-

—-添加服务到自启动项
Shell代码 收藏代码

1. shell:~$ sudo chkconfig –level 3 mysqld on

shell:~$ sudo chkconfig –level 3 mysqld on

—-设置软连接使mysql, mysqldump, mysqladmin这三个bin命令能在shell中直接运行
Shell代码 收藏代码

1. shell:~$ sudo ln -s /usr/local/mysql/bin/mysql /usr/bin
2. shell:~$ sudo ln -s /usr/local/mysql/bin/mysqldump /usr/bin
3. 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 后,数据库服务就启动正常了

Tags: , , , ,

文章作者: Lee

本文地址: https://www.pomelolee.com/741.html

除非注明,Pomelo Lee文章均为原创,转载请以链接形式标明本文地址

2 Comments to ubuntu10.04编译安装mysql5.5.10成功小记

别出心裁
2011 年 03 月 31 日

哇,我对于后台程序方面的不的太懂,读书的时候接触过一段时间的数据库。。

I5A6
2011 年 04 月 01 日

呵呵,我是作程序开发的,这个熟悉点;看你的网站的界面很舒服,挺赞的~

Leave a comment

Search

文章分类

Meta