1. 概述

1.1 mysql多实例的原理

mysql多实例,简单的说,就是在一台服务器上开启多个不同的mysql服务端口(如3306,3307),运行多个mysql服务进程。这些服务进程通过不同的socket监听不同的服务端口,来提供各自的服务。这些mysql实例共用一套mysql安装程序,使用不同的my.cnf配置文件、启动程序、数据文件。在提供服务时,mysql多实例在逻辑上看来是各自独立的,各个实例之间根据配置文件的设定值,来取得服务器的相关硬件资源。

2. mysql多实例的特点

2.1 有效的利用服务器资源

当单个服务器资源有剩余时,可以充分利用剩余的服务器资源来提供更多的服务。

2.2 节约服务器资源

当公司资金紧张,但是数据库需要各自提供独立服务,而且需要主从同步等技术时,使用多实例就最好了。

2.3 出现资源互相抢占问题

当某个实例服务并发很高或者有慢查询时,会消耗服务器更多的内存、CPU、磁盘IO等资源,这时就会导致服务器上的其它实例提供访问的质量下降,出现服务器资源互相抢占的现象。

3. mysql5.6多实例部署方法

3.1 mysql5.5多实例部署方法

mysql5.5多实例部署方法一个是通过多个配置文件启动多个不同进程的方法,第二个是使用官方自带的mysqld_multi来实现。

第一种方法我们可以把各个实例的配置文件分开,管理比较方便。第二种方法就是把多个实例都放到一个配置文件中,这个管理不是很方便。所以在此我们选择第一种方法,而且以下实验我们全部是在此方法下进行的。

3.2 mysql5.5的安装及配置

要配置mysql5.5多实例,我们首先要安装mysql5.5,有关mysql5.5的安装可以查看《烂泥:mysql5.5数据库cmake源码编译安装》这篇文章。

mysql5.5安装完毕后,我们不要启动mysql,因为此时mysql是单实例的。

3.3 创建mysql多实例的数据目录

现在我们来创建mysql5.5多实例的数据目录,在此我们创建两个mysql实例3306和3307。创建各自的数据目录,如下:

[root@testdb2 data]# mkdir -p /data/{3306,3307}/data

[root@testdb2 data]# tree -L 2 /data

/data

|-- 3306

| `-- data

|-- 3307

| `-- data

`-- mysql

|-- auto.cnf

|-- db2

|-- db3

|-- db_gbk

|-- ib_logfile0

|-- ib_logfile1

|-- ibdata1

|-- master.info

|-- mysql

|-- performance_schema

|-- relay-log.info

|-- relaylog

|-- test

`-- testdb2.err

12 directories, 7 files

3.4 修改mysql5.5多实例my.cnf文件

实例3306和3307的数据目录创建完毕后,我们来配置实例3306与3307的my.cnf配置文件。

复制mysql5.5安装目录support-files下的my-medium.cnf为my.cnf,并把内容修改为下。现在以3306这个实例为例,如下:

以上是实例3306的my.cnf配置文件,现在我们来配置实例3307的my.cnf。实例3307的配置文件my.cnf我们直接复制实例3306的my.cnf文件,然后通过sed命令把该文件中的3306修改为3307即可。如下:

--配置文件

[client]

port = 3306

socket = /data/3306/mysql.sock

[mysqld]

port = 3306

socket = /data/3306/mysql.sock

basedir = /usr/local/mysql

datadir = /data/3306/data

skip-external-locking

key_buffer_size = 16M

max_allowed_packet = 1M

table_open_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M

skip-name-resolve

log-bin=mysql-bin

binlog_format=mixed

max_binlog_size = 500M

server-id = 1

[mysqld_safe]

log-error=/data/3306/ilanni.err

pid-file=/data/3306/ilanni.pid

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size = 20M

sort_buffer_size = 20M

read_buffer = 2M

write_buffer = 2M

[mysqlhotcopy]

interactive-timeout

cp /data/3306/my.cnf /data/3307/my.cnf

sed -i 's/3306/3307/g' /data/3307/my.cnf

或者

sed -e 's/3306/3307/g' /data/3306/my.cnf >/data/3307/my.cnf

备注:修改 server-id

3.5 初始化mysql多实例

先授权

[root@testdb2 data]# chown -R mysql:mysql /data/3306

[root@testdb2 data]#

[root@testdb2 data]#

[root@testdb2 data]# chown -R mysql:mysql /data/3307

实例3306和3307的my.cnf配置文件修改完毕后,我们需要来初始化这两个实例,使用mysql_install_db命令。如下:

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3306/data --user=mysql

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3307/data --user=mysql

注意mysql5.5的mysql_install_db在mysql5.5的/usr/local/mysql/scripts/mysql_install_db目录下。

[root@testdb2 3307]# tree -L 3 /data

/data

|-- 3306

| |-- data

| | |-- ib_logfile0

| | |-- ib_logfile1

| | |-- ibdata1

| | |-- mysql

| | |-- performance_schema

| | `-- test

| `-- my.cnf

|-- 3307

| |-- data

| | |-- ib_logfile0

| | |-- ib_logfile1

| | |-- ibdata1

| | |-- mysql

| | |-- performance_schema

| | `-- test

| `-- my.cnf

3.6 修改mysql实例的数据库目录权限

mysql实例初始化完毕后,我们现在把实例3306和实例3307的数据目录权限重新赋予给mysql用户。如下:

chown -R mysql:mysql /data/3306

chown -R mysql:mysql /data/3307

这个地方建议一定要操作一遍,否则在启动mysql实例时,会提示出错。导致mysql实例无法启动。

3.7 启动mysql5.5多实例

我们现在来启动实例。使用如下命令:

/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf &

/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf &

[root@testdb2 data]# ps -ef |grep mysql

root 6950 6502 0 19:07 pts/2 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf

mysql 7261 6950 0 19:07 pts/2 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf --basedir=/usr/local/mysql --datadir=/data/3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3306/ilanni.err --pid-file=/data/3306/ilanni.pid --socket=/data/3306/mysql.sock --port=3306

root 7302 6502 0 19:09 pts/2 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf

mysql 7613 7302 0 19:09 pts/2 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --basedir=/usr/local/mysql --datadir=/data/3307/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3307/ilanni.err --pid-file=/data/3307/ilanni.pid --socket=/data/3307/mysql.sock --port=3307

root 7645 6502 0 19:09 pts/2 00:00:00 grep mysql

其实单实例mysql的启动也是通过mysqld_safe命令来启动。它默认会加载/etc/my.cnf文件。

3.8 登录mysql5.5多实例

登录多实例数据库时,我们需要加入该实例的socket文件,才能正常登录。现在以3306实例为例。

本地登录3306实例,如下:

mysql -uroot -p -S /data/3306/mysql.sock

[root@testdb2 data]# mysql -uroot -p -S /data/3306/mysql.sock

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.6.28-log Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

mysql> select user,host,password from mysql.user;

+------+-----------+----------+

| user | host | password |

+------+-----------+----------+

| root | localhost | |

| root | testdb2 | |

| root | 127.0.0.1 | |

| root | ::1 | |

| | localhost | |

| | testdb2 | |

+------+-----------+----------+

6 rows in set (0.00 sec)

mysql>

3307数据库

[root@testdb2 data]# mysql -uroot -p -S /data/3307/mysql.sock

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.6.28-log Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

现在我们远程登录实例3306,并查看刚刚新建的数据库。如下:

mysql -h192.168.1.213 -uroot -p -S /data/3306/mysql.sock

[root@testdb2 data]# mysql -uroot -p -h localhost -S /data/3306/mysql.sock

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.6.28-log Source distribution

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

或者:mysql -h192.168.1.213 -uroot -p –P 3306

3.9 修改mysql5.5多实例root密码

修改实例3306的root密码,使用mysqladmin命令。如下:mysqladmin -uroot -p password 123456 -S /data/3306/mysql.sock

多实例关闭数据库

[root@testdb2 data]# mysqladmin -uroot -p -S /data/3306/mysql.sock shutdown

Enter password:

160427 19:19:29 mysqld_safe mysqld from pid file /data/3306/ilanni.pid ended

[1]- Done /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf

[root@testdb2 data]# netstat -luntp |grep 33

tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 7613/mysqld

[root@testdb2 data]# mysqladmin -uroot -p -S /data/3307/mysql.sock shutdown

Enter password:

160427 19:21:26 mysqld_safe mysqld from pid file /data/3307/ilanni.pid ended

[2]+ Done /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf

3.10 总结

--配置root用户环境变量

PATH=$PATH:$HOME/bin:/usr/local/mysql/bin

export PATH

unset USERNAME

export LANG=en

多实例数据库启动

[root@testdb2 ~]# mysqld_safe --defaults-file=/data/3306/my.cnf &

[root@testdb2 ~]# mysqld_safe --defaults-file=/data/3307/my.cnf &

[root@testdb2 ~]# mysqld_safe --defaults-file=/data/3308/my.cnf &

[root@testdb2 ~]# ps -ef |grep mysql

root 8760 6502 0 19:41 pts/2 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf

mysql 9069 8760 0 19:41 pts/2 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf --basedir=/usr/local/mysql --datadir=/data/3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3306/ilanni.err --pid-file=/data/3306/ilanni.pid --socket=/data/3306/mysql.sock --port=3306

root 9095 6502 0 19:42 pts/2 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf

mysql 9404 9095 0 19:42 pts/2 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --basedir=/usr/local/mysql --datadir=/data/3307/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3307/ilanni.err --pid-file=/data/3307/ilanni.pid --socket=/data/3307/mysql.sock --port=3307

root 9428 6502 0 19:42 pts/2 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3308/my.cnf

mysql 9737 9428 0 19:42 pts/2 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf --basedir=/usr/local/mysql --datadir=/data/3308/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3308/ilanni.err --pid-file=/data/3308/ilanni.pid --socket=/data/3308/mysql.sock --port=3308

root 9772 6502 0 19:43 pts/2 00:00:00 grep mysql

[root@testdb2 ~]# netstat -lntup |grep 330

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 9069/mysqld

tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 9404/mysqld

tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 9737/mysqld

多实例登录数据库

[root@testdb2 data]# mysql -uroot -p -S /data/3306/mysql.sock

[root@testdb2 data]# mysql -uroot -p -S /data/3307/mysql.sock

多实例关闭数据库

[root@testdb2 ~]# mysqladmin -uroot -p -S /data/3306/mysql.sock shutdown

[root@testdb2 ~]# mysqladmin -uroot -p -S /data/3307/mysql.sock shutdown

[root@testdb2 ~]# mysqladmin -uroot -p -S /data/3308/mysql.sock shutdown

[root@testdb2 ~]# ss -lnutp |grep 330

转载于:https://www.cnblogs.com/rencheng/p/6601994.html

Mysql多实例实施文档相关推荐

  1. Mysql多实例配置文档

    一.安装cmake yuminstall gcc gcc-c++ ncurses-devel perl    #安装前准备 wgethttp://wwwNaNake.org/files/v2.8/cm ...

  2. promethues+alertmanager+grafana监控mysql和报警—详细文档

    promethues+alertmanager+grafana监控mysql和报警-详细文档 相关配套软件包网盘下载链接如下: 网盘地址: https://url28.ctfile.com/f/371 ...

  3. linux下,MySQL默认的数据文档存储目录为/var/lib/mysql。

    0.说明 Linux下更改yum默认安装的mysql路径datadir. linux下,MySQL默认的数据文档存储目录为/var/lib/mysql. 假如要把MySQL目录移到/home/data ...

  4. Jsoup解析HTML实例及文档方法详解

    转载自  Jsoup解析HTML实例及文档方法详解 这篇文章主要介绍了Jsoup如何解析一个HTML文档.从文件加载文档.从URL加载Document等方法,对Jsoup常用方法做了详细讲解,最近提供 ...

  5. 下载丨Linux+Oracle 11g+RAC+12cc+adg国内业界最详细生产系统下实施文档

    墨天轮文档:<Linux+Oracle 11g+RAC+12cc+adg国内业界最详细生产系统下实施文档>:https://www.modb.co/doc/2408(复制到浏览器中或者点击 ...

  6. java计算机毕业设计Web企业差旅在线管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计Web企业差旅在线管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计Web企业差旅在线管理系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈 ...

  7. java计算机毕业设计html5健身房信息管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计html5健身房信息管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计html5健身房信息管理系统源码+mysql数据库+系统+lw文档+部署 本源码技 ...

  8. java计算机毕业设计河南省农村多元化养老服务管理系统设计与实现源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计河南省农村多元化养老服务管理系统设计与实现源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计河南省农村多元化养老服务管理系统设计与实现源码+mysql数据库+系 ...

  9. java计算机毕业设计京东仓库管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计京东仓库管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计京东仓库管理系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S ...

最新文章

  1. java 冒泡排序和快速排序 实现
  2. Python设计模式-适配器模式
  3. python旅游推荐系统_用python写一个简单的推荐系统
  4. C语言开发笔记(三)自加和自减
  5. 逆向查找_「函数说12」数据逆向查找很复杂?match+index让你轻松搞定
  6. 51Nod 1085 01背包
  7. 双向循环链表涉及双向指针的基本操作(C语言)
  8. 权限系统设计学习总结(3)——多账户的统一登录
  9. DEDE的简略标题标签的使用问题
  10. mysql left join 右表数据不唯一的情况解决方法
  11. exls导入数据库 php_建站程序推荐:开源免费的PHP在线模拟考试系统PHPEMS可商用...
  12. CSS图片重叠效果~秒懂
  13. 【原】jQuery easyUI 快速搭建前端框架
  14. 【计算机图形学02】b-spline(b-样条曲线)
  15. AODV协议的仿真研究
  16. python爬取新浪博客_Python爬虫爬取一篇韩寒新浪博客
  17. ASCII字符绘图网站推荐及使用Python绘制ASCII字符画
  18. 焦点科技股份有限公司--软件测试--《社招、校招jd、公司介绍、培训发展、薪酬福利、公益慈善》整理
  19. C# winform Qrcoder二维码
  20. FLStudio21中文版本全部新功能讲解

热门文章

  1. 编写组件,使用JavaScript更新UpdatePanel
  2. NEO技术文章征集大赛
  3. 10-05 Java 内部类概述和讲解
  4. 不吐不快之EJB演练——开篇概述
  5. java 中缀式转后缀式
  6. 对Moss 2007中访问群体的设置和使用补充
  7. [ 逻辑锻炼] 用 JavaScript 做一个小游戏 ——2048 (详解版)
  8. 转载:::::简单分享一个轻量级自动化测试框架目录结构设计
  9. 需要友元的原因及使用
  10. Oracle Instance