完全屬於我自己的Blog,運行在我的路由器H218N上.記錄著我想記錄的文字.

04月 24

Ubuntu 下的MySQL多实例运行

创建配置文件

举例如下,多运行一个监听3309端口的MySQL实例,把原来的my.cnf复制一份到/etc/mysql/my3309.cnf
修改成以下配置

[client]
port        = 3309
socket        = /var/run/mysqld/mysqld3309.sock

[mysqld_safe]
socket        = /var/run/mysqld/mysqld3309.sock
nice        = 0

[mysqld]
user        = mysql
pid-file    = /var/run/mysqld/mysqld3309.pid
socket        = /var/run/mysqld/mysqld3309.sock
port        = 3309
datadir        = /var/lib/mysql3309

由于Ubuntu使用了一种安全软件叫做AppArmor,这个安全软件会在你的文件系统中创建一个允许应用程序访问的区域(专业术语:应 用程序访问控制)。如果不为MySQL修改AppArmor配置文件,永远也无法为新设置的存储位置启动服务。

修改AppArmor配置文件

$sudo nano /etc/apparmor.d/usr.sbin.mysqld

为了方便,修改如下(某些地方直接添加了一个通配符*)

  /var/log/mysql*.log rw,
  /var/log/mysql*.err rw,
  /var/lib/mysql3308/ r,
  /var/lib/mysql3308/** rwk,
  /var/lib/mysql3309/ r,
  /var/lib/mysql3309/** rwk,
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld*.pid w,
  /var/run/mysqld/mysqld*.sock w,
  /run/mysqld/mysqld*.pid w,
  /run/mysqld/mysqld*.sock w,

修改完毕,重新载入AppArmor

$sudo /etc/init.d/apparmor reload 

初始化新实例

创建新的数据存放目录,并设置MySQL的root用户密码

$sudo mysql_install_db --defaults-file=/etc/mysql/my3309.cnf --datadir=/var/lib/mysql3309 #初始化新数据目录
$sudo mysqld --defaults-file=/etc/mysql/my3309.cnf &  #启动新实例
$sudo mysqladmin -S /var/run/mysqld/mysqld3309.sock -u root password '3309'  #设置root用户密码为3309

添加启动脚本

$sudo touch /usr/bin/mysql3309.sh
$sudo chmod +x /usr/bin/mysql3309.sh
$sudo vim /usr/bin/mysql3309.sh

贴入以下内容

#!/bin/sh
case $1 in
    start)
    echo start mysql3309
    mysqld --defaults-file=/etc/mysql/my3309.cnf >/dev/null 2>&1 &
    exit 0;
    ;;
    stop)
    PID=`cat /var/run/mysqld/mysqld3309.pid`
    kill -9 $PID
    echo stop
    ;;
    restart)
    $0 stop
    $0 start
    ;;
   *)
    echo "Usage:"$0" {start|stop|restart}"
    ;;
esac

启动,关闭,重启新实例时,使用以下命令

$sudo mysql3309.sh start #启动
$sudo mysql3309.sh stop #关闭
$sudo mysql3309.sh restart #重启

标签:MySQL, Ubuntu, 多实例, AppArmor

还不快抢沙发

添加新评论