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命令往对应的实例中导入数据的时候,也需要加入这个参数,否则,就导入到默认的第一个实例里面了

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

时间: 2024-08-04 17:38:19

mysql5.5多实例安装的相关文章

MySQL5.6多实例安装

Linux:centos 6.8 mysql:5.6.23 一.安装多实例前准备 因为我的是新机器所以有好多软件没有,可能会导致之后编译出错 1.安装依赖包 [[email protected] ~]# yum install -y git gcc gcc-c++ ncurses-devel bison 2.mysql安装包 这里下载安装包时要注意了,不要选跟你的Linux系统不同的位数(64 and 32). 二.安装mysql 1.解压安装包 [[email protected] ~]# t

MySQL5.5 多实例安装

一.多实例介绍 1.1什么是MySQL多实例 简单的说,就是在一台服务器上开启不同的端口,运行多个MySQL服务进程,这些服务进程通过 不同的socket监听不同的服务端口来提供各自的服务 1.2MySQL多实例的作用与问题 1.2.1有效利用服务器的资源 注意:在企业中千万不要让服务器资源剩余太多,也不要将服务器的资源接近全部使用,你要流出一部分作冗余. 1.2.1节约服务器资源 1.2.2资源抢占问题 当某个MySQL并发很高,整个MySQL实例会消耗整个服务器的资源,这样会影响其他服务.所

mysql5.7多实例安装

[[email protected]]# cd /opt/source[[email protected]]#ls mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz[[email protected]]# tar -zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz[[email protected]]#ln -s /opt/source/mysql-5.7.21-linux-glibc2.12-x86_64 /us

MySQL5.5多实例编译安装——多配置文件

一.什么是MySQL多实例?MySQL多实例简单的说就是在一台服务器上安装一套MySQL程序,通过不同的端口对外提供访问,多实例不仅节省物理主机成本,还有效提升了单台物理主机的CPU.磁盘I/O使用效率,而且还可以在多实例之间做部署数据库HA方案.二.如何配置MySQL多实例?配置mysql多实例有两种方式1.根据官方提供的是通过mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理.2.使用多个配置文件和启动文件,配置文件之间

MySQL5.5多实例编译安装——mysqld_multi

一.MySQL多实例简介MySQL多实例,简单地说,就是在一台服务器上同时开启多个不同的服务端口(如:3306.3307),同时运行多个MySQL服务进程,这些服务进程通过不同的socket监听来自不同的端口来提供服务:多实例不仅节省物理主机成本,还有效提升了单台物理主机的CPU.磁盘I/O使用效率,而且还可以在多实例之间做部署数据库HA方案.随着实例数量的增加,就面临统一管理问题,这样我们就需要用MySQL自带的管理程序 mysqld_multi 来进行管理...二.MySQL启动流程mysq

mysql5.5 多实例的安装

多实例:也就是在一个服务器上开启多个端口,运行多个mysql服务进程, 这里的主要实现 方法是多个配置文件,多个启动程序 ,多个数据文件, 以下是安装过程 1.安装依赖, yum install ncurses-devel -y yum install libaio-devel -y cmake 的解压 cd cmake-2.8.8 ./configure gmake(注意这里是gmake) gmake install tar xf mysql-5.5.32.tar.gz cd mysql-5.

mysql-5.1.73多实例安装启动

1. 源码包下载:http://download.softagency.net/MySQL/Downloads/MySQL-5.1/ 2. 编译安装 groupadd mysql useradd -r -g mysql mysql mkdir /data/mysql_multi/mysql_exa1/ cd /data/mysql_multi/mysql_exa1/ mkdir data binlog log mkdir /data/mysql_multi/mysql_exa2/ cd /dat

MySQL5.7单实例二进制包安装方法

MySQL5.7单实例二进制包安装方法 一.环境 OS: CentOS release 6.9 (Final)MySQL: mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 说明:类似的操作系统也可以的.为了方便起见,涉及到的操作,均可以直接粘贴复制,比较直观快捷的实施,我没有将带有命令行的截图或者文字粘贴出来. 可能会与路径有关,本文档是基于实践而记录下的,可能与你的环境有所不同,请遇到问题,具体分析查找资料. 二.准备工作 2.1.修改主机名称 hostn

mysql5.6.40单实例安装二进制快捷安装

mysql5.6.40单实例安装二进制快捷安装 近期因不同环境需要不同版本的mysql实例,故为了方便操作,特此记录下来,方便自己查找. # 1.1.Centos最小化安装推荐常用依赖包 yum clean all yum -y update yum -y install gcc-c++ gd libxml2-devel libjpeg-devel libpng-devel net-snmp-devel wget telnet vim zip unzip yum -y install curl-