什么是Mysql的多实例?
  简单的说,Mysql多实例就是一台服务器上同时开启多个不同的服务端口(如3306、3307)同时运行多个Mysql服务进程,这些服务进程通过不同socket监听不同的服务端口来提供服务。
Msyql的多实例特点:
  这些Mysql共用一套Mysql的安装程序,使用不用的配置文件(my.cnf)启动程序和数据文件。在提供服务时,多实例Mysql在逻辑上看起来是各自独立的,它们根据配置文件的对应设定值,获得服务器响应数量的硬件资源。

补充:
其实很多网络服务器都是可以配置多实例的,例如Nginx Apache Redis Memcache 都可以配置多实例。

mysql多实例的作用:

1)有效的利用服务器资源
当单个服务器资源有剩余的时候,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离。
2)节约服务器资源
当公司资金紧张,但是数据库又需要各自尽量独立提供服务,而且,需要主从复制等多实例就再好不过了。
但是 mysql多实例也有弊端,当某个数据库实例并发很高或者SQL满查询时,会存在资源相互抢占的问题。

Mysql多实例的生产应用场景
1.资金紧张型公司的选择
比如: 3台服务器部署9-15个实例,交叉做主从复制,数据备份及读写分离,这样就可以达到9-15台服务器每个只装一个数据库才有的效果。所谓的独立是相对的。
2.并发访问不是很大的业务
当公司业务量不太大时候,服务器的资源基本都是浪费的,这时就很适合多实例的应用,如果对SQL语句的优化做的比较好,Mysql多实例会是一个很值得使用的技术,即可并发很大,合理分配系统资源以及搭配好服务,也不会有太大问题。
3.门户网站应用Mysql多实例场景
例如:百度公司,某部门中IBM服务器为48核CPU,内存96GB 。这样配置服务器可以跑3-4个实例;sina网也是用的多实例,内存48G左右。
补充:sina网的数据库单机1-4数据库实例居多,其中多数1-2个的最多,因为大业务占用的机器多。服务器是DELL R510居多,CPU E5210 48G内存 硬盘 12*300G SAS 做RAID10 ;另外,sina网站安装数据库时,一般采用编译安装方式安装,并在做好优化之后定制成rpm包,以便统一使用.

Mysql多实例配置方案

1.单一配置文件,单一启动程序多实例部署方案
Mysql官方文档提到的单一配置文件,单一启动程序多实例部署实例,不推荐此方案,这里作为知识点提及。官方my.cnf配置文件示例配置如下:

[mysqld_multil]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = mysql
[mysqld1]
socket = /var/lib/mysql/mysql.sock
port = 3306
pid-file = /var/lib/mysql/mysql.pid
datadir = /var/lib/mysql/
user = mysql
[mysqld2]
socket =/mnt/data/db1/mysql.sock
port = 3302
pid-file = /mnt/data/db1/mysql.pid
datadir = /mnt/data/db1/
user = mysql
skip-name-resolve
server-id=10
dafault-storage-engine=innodb
innodb_buffer_pool_size=512M
innodb_additional_mem_pool=10M
default_character_set=utf8
character_set_server=utf8
#read-only
relay-log-space-limit=3G
expire_logs_day=20

启动命令如下:
mysqld_multi --config-file=/data/mysql/my_multi.cnf start 1,2
对于该方案,缺点是耦合度太高,一个配置文件,不好管理,工作开发和运维的统一原则,降低耦合度
2.多配置文件多启动程序部署方案
多配置文件,多启动程序部署方案,是推荐的方案。下面来看配置示例:

[root@Mysql /]tree /data
/data
|-- 3306
| |--data 《==3306实例的数据文件
| |--my.cnf 《==3306实例的配置文件
| |--mysql 《==3306实例的启动文件
--3307
| |--data 《==3307实例的数据文件
| |--my.cnf 《==3307实例的配置文件
| |--mysql 《==3307实例的启动文件

Mysql多实例配置流程:

  1.安装Msyql需要的依赖包
  2.编译安装Mysql需要的软件
  3.开始安装Mysql
  4.配置多实例
  5.初始化Mysql数据库
  6.启动Mysql
  7.登录mysql
  8.故障排除说明
  9.开机自启动

Mysql多实例数据库安装

1.安装Msyql需要的依赖包

yum install ncurses-devel libaio-devel -y
rpm -qa ncurses-devel libaio-devel
libaio-devel-0.3.107-10.e16x86_64
ncurses-devel-5.7-3.20090208.c16x86_64

数据库:

服务器名字           IP地址             host
C3-Mysql数据库 172.16.1.52/24 db02

2.编译安装Mysql需要的软件

ls -lh cmake-2.8.8.tar.gz
tar xf cmake-2.8.8.tar.gz
cd cmake-2.8.8
./configure
gmake
gmake install
which cmake
/usr/local/bin/cmake
cd ../

或者也可以使用yum安装 (推荐yum安装)
yum install cmake -y
3.开始安装Mysql

#创建mysql用户
useradd mysql -s /sbin/nologin -M
id mysql
#进入程序下载的路径
cd /home/oldboy/tools
wget http://downloads.mysql.com/archives/get/file/mysql-5.5.32.tar.gz

Mysql源码包和二进制包名称

Mysql软件                 软件名
Msyql源码安装包 mysql-5.5.32.tar.gz(本文使用的安装包)
Mysql二进制安装包 mysql-5.5.32-linux-x86_64.tar.gz

#解压安装包

tar xf mysql-5.5.32.tar.gz
cd mysql-5.5.32
[root@db02 mysql-5.5.32]# cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \
-DMYSQL_DATADIR=/application/mysql-5.5.32/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0
[root@db02 mysql-5.5.32]# make && make install
[root@db02 mysql-5.5.32]# ln -s /application/mysql-5.5.32/ /application/mysql
[root@db02 mysql-5.5.32]# cd /application/mysql
[root@db02 mysql]# ls
bin data include lib mysql-test scripts sql-bench
COPYING docs INSTALL-BINARY man README share support-files

4.配置多实例

[root@db02 mysql]# mkdir -p /data/{3306,3307}/data
[root@db02 ~]# tree /data/
/data/
├── 3306
│ ├── data
│ ├── my.cnf
│ └── mysql
└── 3307
├── data
├── my.cnf
└── mysql
4 directories, 4 files

3306文件夹说明:
####vim my.cnf####

[client]
port = 3306
socket = /data/3306/mysql.sock
[mysql]
no-auto-rehash
[mysqld]
user = mysql
port = 3306
socket = /data/3306/mysql.sock
basedir = /application/mysql
datadir = /data/3306/data
open_files_limit = 1024
back_log = 600
max_connections = 800
max_connect_errors = 3000
table_cache = 614
external-locking = FALSE
max_allowed_packet =8M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 100
thread_concurrency = 2
query_cache_size = 2M
query_cache_limit = 1M
query_cache_min_res_unit = 2k
#default_table_type = InnoDB
thread_stack = 192K
#transaction_isolation = READ-COMMITTED
tmp_table_size = 2M
max_heap_table_size = 2M
long_query_time = 1
#log_long_format
#log-error = /data/3306/error.log
#log-slow-queries = /data/3306/slow.log
pid-file = /data/3306/mysql.pid
log-bin = /data/3306/mysql-bin
relay-log = /data/3306/relay-bin
relay-log-info-file = /data/3306/relay-log.info
binlog_cache_size = 1M
max_binlog_cache_size = 1M
max_binlog_size = 2M
expire_logs_days = 7
key_buffer_size = 16M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
bulk_insert_buffer_size = 1M
#myisam_sort_buffer_size = 1M
#myisam_max_sort_file_size = 10G
#myisam_max_extra_sort_file_size = 10G
#myisam_repair_threads = 1
#myisam_recover
lower_case_table_names = 1
skip-name-resolve
slave-skip-errors = 1032,1062
replicate-ignore-db=mysql
server-id = 1
innodb_additional_mem_pool_size = 4M
innodb_buffer_pool_size = 32M
innodb_data_file_path = ibdata1:128M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 2M
innodb_log_file_size = 4M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0
[mysqldump]
quick
max_allowed_packet = 2M
[mysqld_safe]
log-error=/data/3306/mysql_oldboy3306.err
pid-file=/data/3306/mysqld.pid

####vim mysql####

#!/bin/sh
################################################
#this scripts is created by liuliya at 2016-12-09
#oldboy QQ:865205026
#site:http://www.liuliya.com
################################################
#init
port=3306
mysql_user="root"
mysql_pwd="oldboy"
CmdPath="/application/mysql/bin"
mysql_sock="/data/${port}/mysql.sock"
#startup function
function_start_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
else
printf "MySQL is running...\n"
exit
fi
}
#stop function
function_stop_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit
else
printf "Stoping MySQL...\n"
${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
fi
}
#restart function
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
sleep 2
function_start_mysql
}
case $1 in
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
*)
printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
esac

3307文件夹说明:
####vim my.cnf

[client]
port = 3307
socket = /data/3307/mysql.sock
[mysql]
no-auto-rehash
[mysqld]
user = mysql
port = 3307
socket = /data/3307/mysql.sock
basedir = /application/mysql
datadir = /data/3307/data
open_files_limit = 1024
back_log = 600
max_connections = 800
max_connect_errors = 3000
table_cache = 614
external-locking = FALSE
max_allowed_packet =8M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 100
thread_concurrency = 2
query_cache_size = 2M
query_cache_limit = 1M
query_cache_min_res_unit = 2k
#default_table_type = InnoDB
thread_stack = 192K
#transaction_isolation = READ-COMMITTED
tmp_table_size = 2M
max_heap_table_size = 2M
#long_query_time = 1
#log_long_format
#log-error = /data/3307/error.log
#log-slow-queries = /data/3307/slow.log
pid-file = /data/3307/mysql.pid
#log-bin = /data/3307/mysql-bin
relay-log = /data/3307/relay-bin
relay-log-info-file = /data/3307/relay-log.info
binlog_cache_size = 1M
max_binlog_cache_size = 1M
max_binlog_size = 2M
expire_logs_days = 7
key_buffer_size = 16M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
bulk_insert_buffer_size = 1M
#myisam_sort_buffer_size = 1M
#myisam_max_sort_file_size = 10G
#myisam_max_extra_sort_file_size = 10G
#myisam_repair_threads = 1
#myisam_recover
lower_case_table_names = 1
skip-name-resolve
slave-skip-errors = 1032,1062
replicate-ignore-db=mysql
server-id = 3
innodb_additional_mem_pool_size = 4M
innodb_buffer_pool_size = 32M
innodb_data_file_path = ibdata1:128M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 2M
innodb_log_file_size = 4M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0
[mysqldump]
quick
max_allowed_packet = 2M
[mysqld_safe]
log-error=/data/3307/mysql_oldboy3307.err
pid-file=/data/3307/mysqld.pid

####vim mysql####

#!/bin/sh
################################################
#this scripts is created by liuliya at 2016-12-09
#oldboy QQ:865205026
#site:http://www.liuliya.com
################################################
#init
port=3307
mysql_user="root"
mysql_pwd="oldboy"
CmdPath="/application/mysql/bin"
mysql_sock="/data/${port}/mysql.sock"
#startup function
function_start_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
else
printf "MySQL is running...\n"
exit
fi
}
#stop function
function_stop_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit
else
printf "Stoping MySQL...\n"
${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
fi
}
#restart function
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
sleep 2
function_start_mysql
}
case $1 in
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
*)
printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
esac

#为mysql启动命令增加执行权限
find /data -type f -name "mysql"|xargs chmod +x
#更改/data目录的属组
chwon -R mysql.mysql /data/
5.初始化Mysql数据库(mysql加载自身的管理的库和表)

[root@db02 ~]# cd /application/mysql/scripts/
[root@db02 scripts]# ls
mysql_install_db

#3306实例初始化
[root@db02 scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql
返回2个OK证明成功
#3307实例初始化
[root@db02 scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data --user=mysql
返回2个OK证明成功
6.启动Mysql

[root@db02 scripts]# /data/3306/mysql start
[root@db02 scripts]# /data/3307/mysql start

#查看端口
netstat -lntup|grep 330
#配置mysql的环境变量
cp /application/mysql/bin/* /usr/local/sbin/
#查看环境变量
echo $PATH
7.登录mysql(需要制定sock)

mysql -S /data/3306/mysql.sock
mysql -S /data/3307/mysql.sock

8.故障排除说明
1.查看日志
cat mysql_oldboy3306.err
2.启动如果发现没有显示Msyql对应实例的端口,请稍微等待几秒在检查,Mysql服务的启动比Web等慢一些。
PS:经常查看各种服务运行日志是个很好的习惯,也是成为高手的必经之路。
9.开机自启动
具体命令:

echo "//mysql mutil instances" >>/etc/rc.local
echo "/data/3306/mysql start" >>/etc/rc.local
echo "/data/3307/mysql start" >>/etc/rc.local

如何增加一个mysql实例
具体命令集合:

mkdir -p /data/3308/data
\cp /data/3306/my.cnf /data/3308/
\cp /data/3306/mysql /data/3308/
cd 3308/
sed -i 's/3306/3308/g' /data/3308/my.cnf
sed -i 's/server-id = 1/server-id = 8/g' /data/3308/my.cnf
sed -i 's/3306/3308/g' /data/3308/mysql
chown -R mysql.mysql /data/3308
chmod 700 /data/3308/mysql

#初始化3308 实例Mysql数据库

[root@db02 ~]# cd /application/mysql/scripts/

#3306实例初始化
[root@db02 scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3308/data --user=mysql
#启动3308实例的数据库
/data/3308/mysql start

Mysql多实例数据库的更多相关文章

  1. Linux平台下源码安装mysql多实例数据库

    Linux平台下源码安装mysql多实例数据库[root@linux-node1 ~]# netstat -tlunp | grep 330tcp6 0 0 :::3306 :::* LISTEN 6 ...

  2. Mysql多实例数据库安装应用

    第1章 MySQL多实例数据库企业级应用实践 1.1 MySQL多实例介绍 前文已经讲了为什么选择MySQL数据库,以及MySQL数据库在Linux系统下的多种安装方式,同时以单实例讲解了编译方式安装 ...

  3. Mysql单实例数据库安装

    第1章 MySQL数据库安装 在当今的大中型互联网企业里,MySQL数据库服务几乎都是运行在Linux系列操作系统上,当然,你在可以运行在Windows/Unix等商业操作系统上,大中型互联网企业使用 ...

  4. MySQL 多实例数据库还原脚本-备份集与端口对应

    版本:5.5.14 OS: ConetOS 6.3 1.创建recover.sh [root@yoon  export]# vi  recover.sh #!/bin/bash bakdir=/exp ...

  5. MySQL多实例,主从同步

    由于背景原因,所做的主从同步还是要基于MySQL 5.1的版本,主从同步主要是一个数据库读写访问原来的数据库热度过大,需要做到使用从库对读分压. MySQL主从同步介绍     MySQL 支持单双向 ...

  6. mysql多实例(个人的情况,不是大众的)里面有配置好的脚本+主从复制

    [root@DB-S ~]# ll /usr/local/|grep mysql lrwxrwxrwx. 1 root root 21 Jun 14 01:52 mysql -> /alidat ...

  7. Mysql多实例 安装以及配置

    MySQL多实例 1.什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的soc ...

  8. MySQL多实例介绍

    我们前面已经做了MySQL数据库的介绍以及为什么选择MySQL数据库,最后介绍了MySQL数据库在Linux系统下的多种安装方式,以及讲解了MySQL的二进制方式单实例安装.基础优化等,下面给大家讲解 ...

  9. 关系型数据库MySQL多实例

    简介 MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司.在2008年1月16号被Sun公司收购后Sun公司又被oracle公司收购.目前MySQL被广泛地应用在I ...

随机推荐

  1. Tomcat开启关闭常见问题

    启动 bin/startup.bat ,双击运行该文件即可 访问:浏览器输入: http://localhost:8080 回车访问自己 http://别人的ip:8080 访问别人 可能出现的问题: ...

  2. MyBatis直接执行sql语句mapper

    <select id="queryBySql" resultType="HashMap"> <![CDATA[ ${sql} ]]> & ...

  3. dubbo分布式Service不可以创建Error creating bean with name 'XXXXXX'

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'demoService' ...

  4. ASP.NET购物车Cookie获取,创建,添加,更新,删除的用法

    #region 添加购物车 public void GetShoppingCart(int skuId, int quanlity) { HttpCookie cookie = HttpContext ...

  5. 力扣(LeetCode)颠倒二进制位 个人题解

    颠倒给定的 32 位无符号整数的二进制位. 示例 1: 输入: 00000010100101000001111010011100 输出: 0011100101111000001010010100000 ...

  6. 附010.Kubernetes永久存储之GlusterFS超融合部署

    一 前期准备 1.1 基础知识 在Kubernetes中,使用GlusterFS文件系统,操作步骤通常是: 创建brick-->创建volume-->创建PV-->创建PVC--&g ...

  7. 操作系统——银行家算法(Banker's Algorithm)

    之前写过一篇关于死锁和银行家算法的详细描述的博客https://www.cnblogs.com/wkfvawl/p/11598647.html 写这篇博客的目的,主要是详细讲解一下银行家算法以及代码的 ...

  8. vim python extension

    1. 检查vim 版本,需高于7.3. 2. Install extension manager : Vundle git clone https://github.com/gmarik/Vundle ...

  9. 安卓开发之Java学习

    Java之素数(这里附上王智超大佬的博客地址)https://blog.csdn.net/weixin_43862765/article/details/103311286

  10. mybatis精讲(四)--ObjectFactory

    目录 前言 mybatis的ObjectFactory 源码 setProperties create instantiateClass 使用场景 # 加入战队 微信公众号 前言 ObjectFact ...