A-A+
yum安装的mysql和编译安装的mysql共同运行(双实例)
因为网站要把web应用由apache更换为nginx,需要重新编译安装mysql和php,但又不想破坏原来的环境(主要是怕编译出差错导致网站访问异常,而且又只有一台服务器“囧”)并且是在没有卸载rpm安装的mysql和php的前提下,目前lnmp环境运行正常,在此记录一些注意事项,分享给需要的朋友,也留作以后参考,首先从mysql的安装说起,rpm方式安装的mysql会使用到的和可能发生冲突的文件有:
/etc/init.d/mysqld #此为mysql启动脚本。
/etc/my.cnf #此为mysql主配置文件,尤其重要。
/var/lib/mysql/mysql.sock #此为mysql套接字文件。
/var/lib/mysql #此为mysql数据文件位置
以上文件都是rpm方式安装完mysql后文件的默认位置,当再次编译安装另一个mysql的时候需要避免和这些文件或目录发生冲突,否则很容易出现问题。
两个mysql实例的安装过程如下:
rpm方式的安装不做介绍,直接yum就可以。
yum -y install mysql-server mysql
安装完成启动一次,完成初始化,就可以使用了。
接下来主要介绍第二个mysql实例的安装过程:
首先关闭第一个mysql实例,再做编译和安装。
1、下载mysql源码包:
wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.73.tar.gz
2、解压源码包到一指定目录:
tar zxf mysql-5.1.73.tar.gz -C /var/src
切换到解压目录,执行编译安装:
cd /var/src/mysql-5.1.73
#(编译过程中如果因为缺少安装包报错,直接用yum方式安装缺少的包即可。)
./configure --prefix=/usr/local/mysqld --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=gbk,gb2312
make && make install
3、接下来的步骤比较关键,首先复制第二个实例的主配置文件:
cp support-files/my-medium.cnf /etc/my2.cnf #为了与第一个实例主配置文件不发生冲突使用另一个名字。
编辑主配置文件
vim /etc/my2.cnf
[client] #password = your_password port = 3307 #只要和第一个实例不使用一个端口即可,我使用的是3307,下面也一样 socket = /tmp/mysql.sock #socket文件要和下面mysqld下的保持一致 # Here follows entries for some specific programs # The MySQL server [mysqld] port = 3307 socket = /tmp/mysql.sock datadir = /usr/local/mysqld/var #数据文件目录4、切换到mysql的安装目录,初始化数据库(需指定主配置文件): cd /usr/local/mysqld/bin ./mysql_install_db --defaults-file=/etc/my2.cnf --user=mysql 5、更改mysql目录权限 chown -R root:mysql /usr/local/mysqld/ chown -R mysql /usr/local/mysqld/var/ 6、建立相应库文件链接 ln -s /usr/local/mysql/lib/mysql/* /usr/lib/ ln -s /usr/local/mysql/include/mysql/* /usr/include/ 启动 因为没用研究明白mysql自带的启动脚本,所以自己写了一个脚本来启动和停止编译安装的这个实例 vim /etc/init.d/mysqld2 #区分第一个启动脚本名
#!/bin/bash path='/usr/local/mysqld/bin/' cmd_start='mysqld_safe' cmd_stop='mysqladmin' file='/etc/my2.cnf' case $1 in start) if [ -f /usr/local/mysqld/var/zhusl.tk.pid ];then echo "the mysqld2 is alread running.." exit else $path$cmd_start --defaults-file=$file --user=root >/dev/null & if [ $? == 0 ];then echo "start mysqld2 is ok...." else echo "error!! connot start mysqld2!!" fi fi ;; stop) $path$cmd_stop -u root shutdown >/dev/null if [ $? == 0 ] ;then echo "stop mysqld2 is ok..." else echo "stop mysqld2 is faild!!!" fi ;; *) echo "onle use 'start' or 'stop'" ;; esac编辑完,直接启动即可: /etc/init.d/mysqld2 启动之后,连接此数据库时,要在mysql前加上绝对路径,因为为了避免和第一个数据库命令冲突,没有把命令加入PATH变量。 /usr/local/mysqld/bin/mysql -u root -pxxxxxxx mysqldump,mysqladmin等命令也是一样。 启动第一个数据库 service mysqld start 测试连接: 根据socket可以看出是两个不同的数据库,运行和连接均正常。再重复一句一定要区分好两个mysql实例用到得文件和目录。 后记:在使用过程中发现同时启用两个数据库,在连接时经常出现问题 Can't connect to local MySQL server through socket '/var/lib/mysql.sock' (2) 因为mysql的连接程序默认会按照/etc/my.cnf文件中的sock文件路径连接数据库,所以连接配置文件本就是my.cnf的库,mysql命令可直接连接,而连接配置文件不是默认名的库时,需要指定sock路径,端口也一样指定一下:“mysql -u root -p -P 端口 -S sock文件路径”。总之,应尽量避免在同服务器上运行两个mysql实例,可以安装两个,运行一个,运行哪一个就把配置文件改为默认名,并注意启动脚本。
测试回复提醒