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 <
> 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 <
> 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