Linux机上运行多个版本的MySQL

 

  在同一台服务器上部署多个MySQL服务,可以有效提高机器利用率。而且,将不同内容分属不同服务上,也相对更安全些。

  MySQL提供了mysqld_multi,但实际应用中没有人用它。弊端:

  1,暂停、重启,会导致所有服务都停下来。

  2,配置文件冗长,拆分、迁移时麻烦。

  业内比较常用的方法是,将数据库数据文件和配置文件,以及开启关闭脚本,共同放在一个目录下。启动服务时,作为一个单独的服务;关闭时对其他服务没有影响。搬迁时,只要将这个目录迁移到目标机器上就OK了。

  一个典型的例子:

  10.10.82.83 [server2]$ cat start.sh

  #!/bin/sh

  rundir="/opt/server2";

  echo $rundir;

  /usr/local/mysql/bin/mysqld_safe --defaults-file="$rundir"/my.cnf --pid-file="$rundir"/mysql.pid --datadir="$rundir"/var --socket="$rundir"/mysql.sock --log-error="$rundir"/err.log --log-slow-queries="$rundir"/slow_query.log&

  上例中使用的MySQL是按照官方建议安装在/usr/local/mysql下的。

  有时候需要在同一台服务器上使用多个不同版本,比如,测试新版本等。按照以上逻辑,将新MySQLD安装在 /usr/local/mysql-new下,修改 start.sh 为 /usr/local/mysql-new/bin/mysqld_safe。数据库可以正常启动,但是,观察发现并不是新版本。原因何在?

  官方的解释是:需要下载源代码版本,编译时指定运行目录。其实并非必须如此。

  研究mysqld_safe文件,发现其逻辑为:

  A,从命令行取配置参数

  B,从配置文件取配置参数

  C,对于mysqld的目录(basedir)和数据文件目录(datadir),如果以上都没有在配置中指定,则先检查当前目录是否可用,否则设置/usr/local/mysql为默认。

  所以,虽然使用的是mysql-new下的mysqld_safe,但运行的还是/usr/local/mysql/bin/mysqld,也就是旧版本。需要相应修改启动脚本,或者是配置文件:

  #!/bin/sh

  rundir="/opt/server0";

  echo $rundir;

  /usr/local/mysql-new/bin/mysqld_safe --defaults-file="$rundir"/my.cnf --ledir=/usr/local/mysql-new/bin --basedir=/usr/local/mysql-new --pid-file="$rundir"/mysql.pid --datadir="$rundir"/var --socket="$rundir"/mysql.sock --log-error="$rundir"/err.log --log-slow-queries="$rundir"/slow_query.log&

  这样就可以在同一台机器上同时运行多个版本的Mysql了。

  ##--------------------------下面部份是我偶实验出来滴...

  上面部分和我自己的做法有点不同,但原理都是一样,我在服务器上直接就用这样一句 /usr/local/mysql5/bin/mysqld_safe --defaults-file=/etc/my5.cnf & 里面的那些参数全都设置到 my5.cnf文件里了,所以看起来短一些,其实最重要的是--defaults-file,这个参数了,开始不知道有这东东,害偶走了很多弯 路.faint.共2页。

  至于安装mysql的时候我是带的如下参数

  ./configure --prefix=/usr/local/mysql5 --localstatedir=/var/data/mysql5 --with-unix-socket-path=/tmp/mysql5.sock

  这样来区分开不同的数据库的安装路径

  如果还想可以使用 /etc/mysqld5 stop 之类的命令,就需要改 /etc/mysqld5 中的stop段,像下面这段代码一样(注意 pid_file='/var/data/mysql5/lookyellowpage.com.pid' #Jack added 这行是加进去了,里面的路径你可以自己指定,目的是为了运行stop时它不去取 /etc/my.cnf 变量里的内容,因为取出来的东西有可能是其它数据库服务的,有可能会出错).

  'stop')

  # Stop daemon. We use a signal here to avoid having to know the

  # root password.

  # The RedHat / SuSE lock directory to remove

  lock_dir=/var/lock/subsys/mysqlmanager

  # If the manager pid_file doesn't exist, try the server's

  if test ! -s "$pid_file"

  then

  pid_file=$server_pid_file

  lock_dir=/var/lock/subsys/mysql

  fi

  pid_file='/var/data/mysql5/lookyellowpage.com.pid' #Jack added

  echo $pid_file

  if test -s "$pid_file"

  then

  mysqlmanager_pid=`cat $pid_file`

  echo $mysqlmanager_pid

  echo $echo_n "Shutting down MySQL"

  kill $mysqlmanager_pid

  # mysqlmanager should remove the pid_file when it exits, so wait for it.

  wait_for_pid removed

  # delete lock for RedHat / SuSE

  if test -f $lock_dir

  then

  rm -f $lock_dir

  fi

  else

  log_failure_msg "MySQL manager or server PID file could not be found!"

  fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值