Linux下使用源代码编译方式安装MySQL

PS:本文用于安装MySQL 5.1.x,安装MySQL 5.5.x请见 MySQL 5.1.x升级到MySQL 5.5.x

安装之前最好安装和升级一下所需要的依赖库,参见CentOS中使用yum更新安装依赖库

一、卸载系统中原有的mysql

首先检查一下系统中是否安装了MySQL,如果安装的话先将其卸载。

#查看系统中是否有以rpm方式安装的mysql
[root@localhost /]# rpm -qa | grep -i mysql
# 如果有的话就使用 rpm -e 命令将其卸载,如:
[root@localhost /]# rpm -e MySQL-server-5.1.65-1.glibc23
# 检查系统中是否有mysql服务
[root@localhost /]# chkconfig --list | grep -i mysql
# 如果有的话使用chkconfig --del命令卸载
[root@localhost /]# chkconfig --del mysql
# 查找是否还有mysql文件,然后使用rm -rf将其删除
[root@localhost /]# whereis mysql
# 查找mysql的配置文件,打开my.cnf文件,搜索datadir,然后将对应的目录也删除
[root@localhost /]# whereis my.cnf
# 最后再删除my.cnf文件

二、下载源代码并安装
1. 下载并解压mysql

[root@localhost downloads]# wget -c http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.65.tar.gz/from/http://cdn.mysql.com/
[root@localhost downloads]# tar xzvf mysql-5.1.65.tar.gz

2. 编译安装MySQL

[root@localhost downloads]# cd mysql-5.1.65
[root@localhost mysql-5.1.65]# ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charsets=all --without-debug --enable-thread-safe-client --enable-assembler --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile
[root@localhost mysql-5.1.65]# make && make install

其中configure是用于配置的信息,可以使用./configure --help来查看所有参数的含义。

几个常用的参数:
--prefix=/usr/local/mysql		# 指定MySQL程序的安装目录
--with-charset=utf8			# 指定数据库默认的编码
--with-extra-charsets=all		# 指定数据库支持的编码,all表示所有,也可以使用gbk,gb2312,utf8指定具体的编码
--without-debug				# 去除debug模式,建议启用,提升MySQL性能
--enable-thread-safe-client		# 以线程方式编译客户端
--enable-assembler			# 使用汇编x86的普通操作符,可以提高性能
--with-client-ldflags=-all-static	# 以纯静态方式编译客户端,提高性能
--with-mysqld-ldflags=-all-static	# 以纯静态方式编译服务端,提高性能
--with-big-tables			# 默认情况下MyISAM单表最大支持2^32条数据,这个参数可以使得这个数字变成(2^32)^2
--with-readline				# 通过 readline,可以方便的在命令行上面移动,增删,复制,粘贴,搜索
--with-ssl				# 支持SSL连接
--with-embedded-server			# 编译成embedded mysql library (libmysqld.a)
--enable-local-infile			# 让MySQL支持从本地文件导入数据库
--without-innodb			# 禁用InnoDB引擎(MySQL5.1.x之后系统默认不支持innodb引擎)
--with-plugins=innobase			# MySQL5.1.x之后,需要使用该方法使MySQL支持innodb引擎
--sysconfdir=/etc/			# MySQL配置文件存放路径,默认为/etc
# 以下选项可以直接在mysql配置文件中设置
--with-tcp-port=3306				# 设定数据库的端口,默认为3306
--with-unix-socket-path=/tmp/mysql.sock		# 使用unix套接字链接提高性能,默认为/tmp/mysql.sock
--localstatedir=/usr/local/mysql/database	# 日志、数据文件目录

PS:如果发现安装完成之后mysql的安装目录下面没有文件的话,可以看看是否安装的命令打错了。我就是把make && make install 打成了 make && install ,搞了一个下午才找到原因。

3. 创建mysql专用的用户名和用户组

[root@localhost mysql-5.1.65]# groupadd mysql
[root@localhost mysql-5.1.65]# useradd -s /sbin/nologin -M -g mysql mysql

4. 设置权限并安装数据库

[root@localhost mysql-5.1.65]# cd /usr/local/mysql
# 设置安装目录权限给mysql用户和用户组
[root@localhost mysql]# chown -R mysql .
[root@localhost mysql]# chgrp -R mysql .
# 安装数据库
[root@localhost mysql]# bin/mysql_install_db --user=mysql
[root@localhost mysql]# chown -R root .
[root@localhost mysql]# chown -R mysql var

5. 设置mysql的配置文件

# 设置mysql的配置文件,可以根据具体情况来选择
[root@localhost mysql]# cp share/mysql/my-medium.cnf /etc/my.cnf
# 将配置文件中的skip-locking替换为skip-external-locking
[root@localhost mysql]# sed -i 's/skip-locking/skip-external-locking/g' /etc/my.cnf

6. 启动MySQL、设置数据库root的密码并设置为开机启动

[root@localhost mysql]# cp share/mysql/mysql.server /etc/init.d/mysql
[root@localhost mysql]# chmod +x /etc/init.d/mysql
[root@localhost mysql]# /etc/init.d/mysql start
# 设置mysql的root密码
[root@localhost mysql]# bin/mysqladmin -uroot password 123
# 因为操作记录中有密码,所以去除操作记录(可选)
[root@localhost mysql]# history -c
[root@localhost mysql]# /etc/init.d/mysql restart
# 将mysql设置为开机启动(如果使用下面步骤设置为服务则此步骤可以省略)
[root@localhost mysql]# cat >> /etc/rc.local < /etc/init.d/mysql start
> EOF

7. 设置MySQL为服务(可选)

# 首先保证执行了 cp share/mysql/mysql.server /etc/init.d/mysql
# 添加mysql为服务
[root@localhost mysql]# chkconfig --add mysql
[root@localhost mysql]# chkconfig --level 345 mysql on
# 使用服务的方式启动mysql
[root@localhost mysql]# service mysql start

PS: 我在安装innodb支持的时候,看到 http://luoyahu.iteye.com/blog/838450 这篇文章中提到的方式,但是如果在配置项中没有添加--with-plugins=innobase的话,根本就找不到作者所说的“/usr/local/mysql/lib/mysql/plugin/ha_innodb.so”文件,我想应该是非源码安装的方式进行的。

三、启动多个MySQL实例

运行多个实例的话使用 bin/mysqld_multi 程序:

# 使用下面的命令查看配置的实例
[root@localhost mysql]# bin/mysqld_multi --example
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = my_password

[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/var2/hostname.pid2
datadir = /usr/local/mysql/var2
language = /usr/local/mysql/share/mysql/english
user = unix_user1

[mysqld3]
mysqld = /path/to/mysqld_safe
ledir = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/var3/hostname.pid3
datadir = /usr/local/mysql/var3
language = /usr/local/mysql/share/mysql/swedish
user = unix_user2

[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/var4/hostname.pid4
datadir = /usr/local/mysql/var4
language = /usr/local/mysql/share/mysql/estonia
user = unix_user3

[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/var6/hostname.pid6
datadir = /usr/local/mysql/var6
language = /usr/local/mysql/share/mysql/japanese
user = unix_user4

例子中[mysqld3]下面前三行的配置项是多余的,可以删除。
首先使用[mysqld_multi]说明一下需要运行多实例的mysql,然后下面的[mysqld2]...[mysqld6]表示多个实例,在实例中分别指定了配置项。mysqldn和mysqld下面的选项内容和含义是一样的。

1. 将下面的配置信息放在my.conf的最后面:

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin

[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/var2/hostname.pid2
datadir = /usr/local/mysql/var2 ##数据库的数据文件
user = mysql

[mysqld3]
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/var3/hostname.pid3
datadir = /usr/local/mysql/var3 ##数据库的数据文件
user = mysql

2. 初始化数据库

# 创建数据库所在的目录并设置权限,需要跟配置文件中设置的一致
[root@localhost mysql]# mkdir /usr/local/mysql/var2
[root@localhost mysql]# mkdir /usr/local/mysql/var3
# 设置权限
[root@localhost mysql]# chown -R mysql /usr/local/mysql/var2
[root@localhost mysql]# chown -R mysql /usr/local/mysql/var3
# 创建数据库文件
[root@localhost mysql]# bin/mysql_install_db --user=mysql --datadir=/usr/local/mysql/var2
[root@localhost mysql]# bin/mysql_install_db --user=mysql --datadir=/usr/local/mysql/var3

3. 启动mysql实例

[root@localhost mysql]# bin/mysqld_multi start 2
[root@localhost mysql]# bin/mysqld_multi start 3
# 查看运行状态
[root@localhost mysql]# bin/mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running

后面的数字对应配置文件中mysqld后面的数字。另外mysqld_multi也支持类似这样的启动/关闭方式:

# 启动选项组[mysql8]和[mysqld10]至[mysqld13],stop也类似
[root@localhost mysql]# bin/mysqld_multi start 8,10-13

注:如果在启动的时候出现 WARNING: my_print_defaults command not found. 的错误的话,需要将mysql安装目录下的bin目录加入环境变量中:

[root@localhost mysql]# vim /etc/profile
# 在文件最后增加一下内容
export PATH=/usr/local/mysql/bin:$PATH
[root@localhost mysql]# source /etc/profile

4. 设置数据库root的密码

# 如果当前root的密码为空则可以不加-p参数
[root@localhost mysql]# bin/mysqladmin -h127.0.0.1 -P3307 -uroot -p password 123
[root@localhost mysql]# bin/mysqladmin -h127.0.0.1 -P3308 -uroot -p password 123
# 使用mysql命令测试(一定加上-h127.0.0.1参数,否则会进入默认的数据库)
[root@localhost mysql]# bin/mysql -h127.0.0.1 -P3307 -uroot -p

5. 将mysql设置为开机启动

[root@localhost mysql]# cat >> /etc/rc.local < /usr/local/mysql/bin/mysqld_multi start 2-3
> EOF

参考资料:
linux 怎么完全卸载mysql数据库
Installing MySQL from a Standard Source Distribution
Linux 基于源码的mysql安装
MySql安装、优化和安全配置(转)(注:参数有错误)
MYSQL 编辑参数详解
mysql 安装innodb支持
mysqld_multi:管理多个MySQL服务器的程序
实践MySQL(mysqld)多实例/多版本同时运行
linux中源码安装mysql,并启动多个实例
Linux操作系统下三种配置环境变量的方法
InnoDB Plugin安装
Building the InnoDB Plugin from Source Code

发表评论

电子邮件地址不会被公开。 必填项已用*标注