Linux源码安装MySQL多版本共存
原来我的服务器上是MySQL 5.5.16。本来是用的挺稳定。但是当时编译的时候由于手误将DDEFAULT_COLLATION=utf8-general_ci \弄错啦。。。应该是utf8_general_ci。导致很多程序用的时候报错,或者需要修改。 最近发现MySQL更新到了5.5.18了,就打算迁移到新数据库正好修正原来问题。 为了不影响访问,就打算在5.5.16运行的情况下,继续安装好5.5.18.等顺利转移到5.5.18后,再关闭原来MySQL5.5.16版本。 也就有了今天这篇文章。在Linux下从源码安装多版本或者多个MySQL数据库。
重点:多版本或者多个MySQL同时运行,主要就是多个MySQL需要运行在不同目录,不同的端口,采用不同的数据库路径。
步骤
1、首先是下载需要安装的MySQL
下载mysql 5.5.16
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.16.tar.gz/from/http://mysql.mirrors.pair.com/
下载mysql 5.5.18
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.16.tar.gz/from/http://mysql.mirrors.pair.com/
2、安装支持程序
原来版本的MySQL源码安装都是采用./configure和make这些。但是新版本的都是用cmake来弄了。所以如果系统中没有的,需要先安装cmake
yum install cmake
3、创建MySQL用户和用户组
/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
4、解压、编译、安装MySQL
解压
tar zxvf mysql-5.5.16.tar.gz
cd mysql-5.5.16
编译参数
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql5516/ \
-DMYSQL_DATADIR=/data0/mysql/3306/data \
-DMYSQL_UNIX_ADDR=/data0/mysql/3306/mysqld.sock \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=0 \
-DWITH_ARCHIVE_STORAGE_ENGINE=0 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_TCP_PORT=3306 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=0 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_SSL=system \
-DWITH_READLINE=1
注意:编译参数里有几项需要根据自己具体情况设置。我这里将MySQL5.5.16运行于3306端口,并安装在mysql5516目录。
-DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql5516/ 设置mysql的安装目录
-DMYSQL_DATADIR=/data0/mysql/3306/data 设置mysql数据库文件的位置
-DMYSQL_UNIX_ADDR=/data0/mysql/3306/mysqld.sock 设置mysql启动后sock文件位置
-DMYSQL_TCP_PORT=3306 设置mysql的监听端口
以上这些设置需要根据不同版本的mysql相应修改。不然多个版本同时监听3306端口,肯定冲突了。
编译
make
安装
make install
5、配置目录权限、创建目录、建立初始数据。
配置目录权限
chmod +w /usr/local/webserver/mysql5516
chown -R mysql:mysql /usr/local/webserver/mysql5516
cd ../
创建相关目录
mkdir -p /data0/mysql/3306/data/
mkdir -p /data0/mysql/3306/binlog/
mkdir -p /data0/mysql/3306/relaylog/
chown -R mysql:mysql /data0/mysql/
建立初始数据
/usr/local/webserver/mysql5516/scripts/mysql_install_db --basedir=/usr/local/webserver/mysql --datadir=/data0/mysql/3306/data --user=mysql
6、创建My.cnf配置文件和Mysql启动脚本
创建my.cnf配置文件
cp support-files/my-small.cnf /usr/local/webserver/mysql5516/my.cnf
注意:原来mysql默认的配置文件放在/etc/my.cnf。现在多个版本同时运行,需要每个版本都将配置文件单独放在自己的安装目录内。
创建MySQL启动脚本
cp support-files/mysql.server /etc/init.d/mysql5516
注意:原来mysql默认采用mysqld脚本,现在每个mysql需要有自己的启动脚本,并通过修改启动脚本来为每个mysql指定采用的配置文件。
修改/etc/init.d/mysql5516,用来指定采用的配置文件位置。
# Try to find basedir in /etc/my.cnf
1 conf=/etc/my.cnf
在文件的213和214行内容如上,我们需要修改conf=/etc/my.cnf为我们指定的my.cnf文件位置。
在我们这里是
conf=/usr/local/webserver/mysql5516/my.cnf
修改mysqld5516权限为可执行
chmod +x mysqld5516
7、启动mysql并配置为开机运行
启动
service mysqld5516 start
开机运行
chkconfig mysqld5516 on
以上是MySQL 5.5.16的安装。下面5.5.18版本的安装
5.5.18版本的安装基本和MySQL 5.5.16版本一样。我们因为要两个数据库同时运行。所以再给cmake的参数时候,需要安装上面注意的内容设定5.5.18的安装目录为/usr/local/webserver/mysql5518 再调整运行端口为3307 具体的cmake参数如下
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql5518/ \
-DMYSQL_DATADIR=/data0/mysql/3307/data \
-DMYSQL_UNIX_ADDR=/data0/mysql/3307/mysqld.sock \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=0 \
-DWITH_ARCHIVE_STORAGE_ENGINE=0 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_TCP_PORT=3307 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=0 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_SSL=system \
还需要为mysql5518配置相应权限和建立3307端口的相关目录。因为上面已经有具体步骤,这里只是罗列下命令,不具体说明
chmod +w /usr/local/webserver/mysql5518
chown -R mysql:mysql /usr/local/webserver/mysql5518
cd ../
mkdir -p /data0/mysql/3307/data/
mkdir -p /data0/mysql/3307/binlog/
mkdir -p /data0/mysql/3307/relaylog/
chown -R mysql:mysql /data0/mysql/
最后的启动脚本也要修改为调用5518目录下的my.cnf配置。 而且my.cnf的[mysqld]段也要指定运行端口为3307 下面是我mysql5518目录下的my.cnf中的一些需要修改的项 注意:下面文件并不是完整的my.cnf,只是将需要修改的列出来了
[client]
port = 3307
socket = /data0/mysql/3307/mysql.sock
[mysqld]
port = 3307
socket = /data0/mysql/3307/mysql.sock
basedir = /usr/local/webserver/mysql5518
datadir = /data0/mysql/3307/data
log-error = /data0/mysql/3307/mysql_error.log
pid-file = /data0/mysql/3307/mysql.pid
log-bin = /data0/mysql/3307/binlog/binlog
relay-log-index = /data0/mysql/3307/relaylog/relaylog
relay-log-info-file = /data0/mysql/3307/relaylog/relaylog
relay-log = /data0/mysql/3307/relaylog/relaylog
这样弄完后,我服务器上就可以同时运行mysql5516与mysql5518两个版本的数据库了。
启动、关闭、重启mysql 5.5.16全部采用service mysqld5516脚本来控制。
启动、关闭、重启mysql 5.5.18全部采用service mysqld5518脚本来控制。
总结:同时运行多个版本数据库,可以方便我们升级数据库或者对不同版本进行测试。