A-A+

yum安装的mysql和编译安装的mysql共同运行(双实例)

2016年02月27日 mysql 评论 1 条 阅读 1,839 次
因为网站要把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实例,可以安装两个,运行一个,运行哪一个就把配置文件改为默认名,并注意启动脚本。

1 条留言  访客:1 条  博主:0 条

  1. 回复测试

    测试回复提醒

给我留言