mysql5.5多实例安装

  最近mysql数据库遇到了几个问题:

  • 由于多个应用使用的是同一个数据库实例,当其中一个应用由于sql问题卡死的时候,导致其他应用也被连累的宕机了

  • 公司有多个产品,其中一个产品的数据库要求大小写不区分,但是如果给他不区分之后,其他应用的数据库是要求必须区分的

  • 某产品是公司的主打产品,它使用了4个数据库,都放在一个实例下,但是有一个数据库是用来保存接口访问日志的,并且后台会对这些数据进行分析,平时运行的还正常。突然有一天,直接卡死了,导致这个应用无法登陆,无法访问了。后来分析原因,有个sql无法命中索引,导致数据库卡死!


   由于经验的缺乏,导致了以上各种问题的发生,后来考虑到这台服务器资源还很充足,就考虑用多实例解决这个问题。以下是我搭建多实例的过程。


操作系统:centos6.5 64位

mysql版本:mysql-5.5.42


  1. 使用yum安装一些依赖包

yum -y install gcc gcc-c++ zlib*  ncurses-devel libmcrypt* libtool-ltdl-devel*  openssl pcre* telnet sysstat mlocate bison cmake


创建mysql用户,以及创建多实例需要的目录
groupadd mysql
useradd -g mysql mysql
mkdir -p /data/3307mysql/{server,data}
mkdir -p /data/3308mysql/{server,data}
mkdir -p /data/3309mysql/{server,data}
修改mysql数据目录的权限,以保证mysql正常启动
chown -R mysql.mysql /data/3307mysql
chown -R mysql.mysql /data/3308mysql
chown -R mysql.mysql /data/3309mysql
编译安装mysql
cd /usr/src
tar -zxvf mysql-5.5.42.tar.gz 
cd mysql-5.5.42
cmake . -DCMAKE_INSTALL_PREFIX=/data/3309mysql/server -DMYSQL_DATADIR=/data/3309mysql/data -DMYSQL_UNIX_ADDR=/data/3309mysql/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_TCP_PORT=3309 -DEXTRA_CHARSETS=all \-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  -DMYSQL_USER=mysql -DWITH_DEBUG=1
make
make install
cmake . -DCMAKE_INSTALL_PREFIX=/data/3308mysql/server -DMYSQL_DATADIR=/data/3308mysql/data -DMYSQL_UNIX_ADDR=/data/3308mysql/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_TCP_PORT=3308 -DEXTRA_CHARSETS=all \-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  -DMYSQL_USER=mysql -DWITH_DEBUG=1
make
make install
cmake . -DCMAKE_INSTALL_PREFIX=/data/3307mysql/server -DMYSQL_DATADIR=/data/3307mysql/data -DMYSQL_UNIX_ADDR=/data/3307mysql/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_TCP_PORT=3307 -DEXTRA_CHARSETS=all \-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  -DMYSQL_USER=mysql -DWITH_DEBUG=1
make
make install
复制my.cnf到指定的位置
cd /data/3307mysql/server
cp support-files/my-innodb-heavy-4G.cnf ./my.cnf
cd /data/3308mysql/server
cp support-files/my-innodb-heavy-4G.cnf ./my.cnf
cd /data/3309mysql/server
cp support-files/my-innodb-heavy-4G.cnf ./my.cnf
准备各个实例的启动脚本
#3307数据库启动脚本
#!/bin/bash
#author:sqw 2015年6月5日
mysql_port=3307
mysql_username="root"
mysql_password="123qwe"
mysql_safe="/data/3307mysql/server/bin/mysqld_safe"
mysql_cnf="/data/3307mysql/server/my.cnf"
mysql_sock="/data/3307mysql/mysql.sock"
function_start_mysql()
{
printf "Starting MySQL...\n"
/bin/sh ${mysql_safe} --defaults-file=${mysql_cnf} 2>&1 > /dev/null &
printf "Starting MySQL...success!\n"
}
function_stop_mysql()
{
printf "Stoping MySQL...\n"
/data/3307mysql/server/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S ${mysql_sock} shutdown 2>/dev/null
printf "Stoping MySQL...success!\n"
}
function_kill_mysql()
{
kill -9 $(ps -ef | grep '3307mysql/server' |grep -v grep| grep -v mysqld_safe|  awk '{print $2}')
kill -9 $(ps -ef | grep '3307mysql/server' |grep -v grep|  awk '{print $2}')
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
function_start_mysql
}
case $1 in
start)
function_start_mysql;;
stop)
function_stop_mysql;;
kill)
function_kill_mysql;;
restart)
function_stop_mysql
function_start_mysql;;
*)
echo "Usage: /data/3307mysql/my3307.sh {start|stop|restart|kill}
------start    启动
------stop     停止
------restart  重启
------kill     强制杀掉进程
";;
esac


#mysql3308启动脚本
#!/bin/bash
#author:sqw 2015年6月5日
mysql_port=3308
mysql_username="root"
mysql_password="123qwe"
mysql_safe="/data/3308mysql/server/bin/mysqld_safe"
mysql_cnf="/data/3308mysql/server/my.cnf"
mysql_sock="/data/3308mysql/mysql.sock"
function_start_mysql()
{
printf "Starting MySQL...\n"
/bin/sh ${mysql_safe} --defaults-file=${mysql_cnf} 2>&1 > /dev/null &
printf "Starting MySQL...success!\n"
}
function_stop_mysql()
{
printf "Stoping MySQL...\n"
/data/3308mysql/server/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S ${mysql_sock} shutdown 2>/dev/null
printf "Stoping MySQL...success!\n"
}
function_kill_mysql()
{
kill -9 $(ps -ef | grep '3308mysql/server' |grep -v grep| grep -v mysqld_safe|  awk '{print $2}')
kill -9 $(ps -ef | grep '3308mysql/server' |grep -v grep|  awk '{print $2}')
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
function_start_mysql
}
case $1 in
start)
function_start_mysql;;
stop)
function_stop_mysql;;
kill)
function_kill_mysql;;
restart)
function_stop_mysql
function_start_mysql;;
*)
echo "Usage: /data/3308mysql/my3308.sh {start|stop|restart|kill}
------start    启动
------stop     停止
------restart  重启
------kill     强制杀掉进程
";;
esac


#mysql3309数据库启动脚本
#!/bin/bash
#author:sqw 2015年6月5日
mysql_port=3309
mysql_username="root"
mysql_password="123qwe"
mysql_safe="/data/3309mysql/server/bin/mysqld_safe"
mysql_cnf="/data/3309mysql/server/my.cnf"
mysql_sock="/data/3309mysql/mysql.sock"
function_start_mysql()
{
printf "Starting MySQL...\n"
/bin/sh ${mysql_safe} --defaults-file=${mysql_cnf} 2>&1 > /dev/null &
printf "Starting MySQL...success!\n"
}
function_stop_mysql()
{
printf "Stoping MySQL...\n"
/data/3309mysql/server/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S ${mysql_sock} shutdown 2>/dev/null
printf "Stoping MySQL...success!\n"
}
function_kill_mysql()
{
kill -9 $(ps -ef | grep '3309mysql/server' |grep -v grep| grep -v mysqld_safe|  awk '{print $2}')
kill -9 $(ps -ef | grep '3309mysql/server' |grep -v grep|  awk '{print $2}')
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
function_start_mysql
}
case $1 in
start)
function_start_mysql;;
stop)
function_stop_mysql;;
kill)
function_kill_mysql;;
restart)
function_stop_mysql
function_start_mysql;;
*)
echo "Usage: /data/3309mysql/my3309.sh {start|stop|restart|kill}
------start    启动
------stop     停止
------restart  重启
------kill     强制杀掉进程
";;
esac
初始化各个实例
cd /data/3309mysql/server
bash scripts/mysql_install_db --user=mysql --basedir=/data/3309mysql/server --datadir=/data/3309mysql/data

cd /data/3308mysql/server
bash scripts/mysql_install_db --user=mysql --basedir=/data/3308mysql/server --datadir=/data/3308mysql/data

cd /data/3307mysql/server
bash scripts/mysql_install_db --user=mysql --basedir=/data/3307mysql/server --datadir=/data/3307mysql/data
修改各个数据库实例的root密码
bash /data/3307mysql/my3307.sh start
bash /data/3308mysql/my3308.sh start
bash /data/3309mysql/my3309.sh start

/data/3307mysql/server/bin/mysqladmin -u root -S /data/3307mysql/mysqld.sock password '123qwe'
/data/3307mysql/server/bin/mysqladmin -u root -S /data/3308mysql/mysqld.sock password '123qwe'
/data/3307mysql/server/bin/mysqladmin -u root -S /data/3309mysql/mysqld.sock password '123qwe'
登录各个实例查看是否可以正常使用
mysql -uroot -p123qwe -S /data/3307mysql/mysqld.sock
mysql -uroot -p123qwe -S /data/3308mysql/mysqld.sock
mysql -uroot -p123qwe -S /data/3309mysql/mysqld.sock

  

  

OK,到此为止,3307,3308,3309这三个实例已经建立完成,可以把哪些需要分割的数据库单独转移过来了。

不过,还有几个问题需要注意:

1、登录的时候请注意加参数

-S /data/3307mysql/mysqld.sock

选对对应的sock文件,才能正常登录到对应的实例中

2、使用mysql命令往对应的实例中导入数据的时候,也需要加入这个参数,否则,就导入到默认的第一个实例里面了

  

  

最后,作为一个菜鸟,请各位大侠多多批评指正!

你可能感兴趣的:(mysql数据库)