本文作者系马哥linux学员云中鹤。

学习联系QQ:1660809109、1661815153、2813150558

马哥Linux运维 更多资讯:www.magedu.com

目录

一、基本概念

1、MySQL多实例

就是在一台机器上面开启多个不同的端口,运行多个MySQL服务进程。这些MySQL多实例公用一套安装程序,使用不同的(也可以是相同的)配置文件,启动程序,数据文件。在提供服务时候,多实例MySQL在逻辑上看来是各自独立的,多个实例的自身是根据配置文件对应的设定值,来取得相关硬件资源的多少。

2、应用场景

1).采用了数据伪分布式架构的原因,而项目启动初期又不一定有那多的用户量,为此先一组物理数据库服务器,但部署多个实例,方便后续迁移

2).为规避mysql对SMP架构不支持的缺陷,使用多实例绑定处理器的办法,把不同的数据库分配到不同的实例上提供数据服务

3).一台物理数据库服务器支撑多个数据库的数据服务,为提高mysql复制的从机的恢复效率,采用多实例部署

4).已经为双主复制的mysql数据库服务器架构,想部分重要业务的数据多一份异地机房的热备份,而mysql复制暂不支持多主的复制模式,且不给用户提供服务,为有效控制成本,会考虑异地机房部署一台性能超好的物理服务器,甚至外加磁盘柜的方式,为此也会部署多实例;

5).传统游戏行业的MMO/MMORPG,以及Web Game,每一个服都对应一个数据库,而可能要做很多数据查询和数据订正的工作,为减少维护而出错的概率,也可能采用多实例部署的方式,按区的概念分配数据库;

3、作用与问题

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

2).资源互相争抢问题,比如 内存 ,cpu 需要开启 numa,并把 mysql 绑定到固定的核心上,网卡的中断请求,资源争用,最重要的是磁盘 IO

MySQL多实例配置方法

1.单一配置文件

2.多配置文件。

二、实战步骤:

1、同步时间

2、准备mysql依赖包

3、环境准备

3.1添加mysql用户

3.2编译安装mysql

4、安装MySQL多实例

5、准备配置文件

6、启动MySQL

7、登录mysql与一些安全措施

8、关闭MySQL

9,、提供简易管理脚本

10、为mysql的root用户创建密码

11、附,多配置文件安装mysql多实例,这里增加mysql 的3309端口

12、总结

1、同步时间

yum install epel*

ntp 202.120.2.101

yum install -y ntp

ntpdate 202.120.2.101

hwclock -w

2、准备mysql依赖包

yum install -y autoconf* automake* zlib* libxml* ncurses-devel* libgcrypt* libtool* openssl*

yum install cmake -y

3、环境准备

3.1添加mysql用户

groupadd mysql

useradd -g mysql mysql

mkdir -pv /data/{3306,3307,3308}/data

chown -R mysql.mysql /data/

cd /usr/local/src/

3.2编译安装mysql

tar -xf mysql-5.5.45.tar.gz

cd mysql-5.5.45

chown mysql.mysql -R .

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DMYSQL_DATADIR=/data \

-DSYSCONFDIR=/etc \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DWITH_SSL=system \

-DWITH_ZLIB=system \

-DWITH_LIBWRAP=0 \

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci

gmake

make install

4、安装MySQL多实例

5、准备配置文件

mysqld_multi --example > /data/multi.cnf   #提供多配置文件模板

vim /data/multi.cnf   #修改模板,这里比较简易

[mysqld_multi]

mysqld     = /usr/local/mysql/bin/mysqld_safe

mysqladmin = /usr/local/mysql/bin/mysqladmin

user       = root

#这个用户应该有关机权限,然后没有其他的权限。建议创建一个通用的,multi_admin用户控制其它的MySQL用户,这里有个例子

#GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'password'

[mysqld1]

socket     = /tmp/mysql.sock1

port       = 3306

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

datadir    = /data/3306/data

[mysqld2]

socket     = /tmp/mysql.sock2

port       = 3307

pid-file   = /data/3307/mysql.pid

datadir    = /data/3307/data

#language   = /usr/local/mysql/share/mysql/english

#user       = unix_user1

[mysqld3]

#mysqld     = /path/to/mysqld_safe

#ledir      = /path/to/mysqld-binary/

#mysqladmin = /path/to/mysqladmin

socket     = /tmp/mysql.sock3

port       = 3308

pid-file   = /data/3308/mysql.pid

datadir    = /data/3308/data

#language   = /usr/local/mysql/share/mysql/swedish

#user       = unix_user2

以上是简易的配置文件。这个配置文件只能让MySQL启动起来。

6、启动MySQL

mysqld_multi --defaults-file=/data/multi.cnf start 1,2,3

ss -tnl   #查看监听端口

LISTEN     0      50                        *:3306                     *:*

LISTEN     0      50                        *:3307                     *:*

LISTEN     0      50                        *:3308                     *:*

7、登录mysql与一些安全措施

mysql -S /tmp/mysql.sock1       #指定socket登录

mysql> show databases;

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

| Database           |

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

| information_schema |

| mysql              |

| performance_schema |

| test               |

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

4 rows in set (0.01 sec)

mysql> drop database test;

Query OK, 0 rows affected (0.04 sec)

mysql> select User,Host from mysql.user;

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

| User | Host      |

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

| root | 127.0.0.1 |

| root | ::1       |

|      | localhost |

| root | localhost |

|      | node1     |

| root | node1     |

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

6 rows in set (0.01 sec)

mysql> delete from mysql.user where User='';

Query OK, 2 rows affected (0.00 sec)

mysql> delete from mysql.user where Host='::1';

Query OK, 1 row affected (0.00 sec)

mysql> delete from mysql.user where Host='node1';

Query OK, 1 row affected (0.00 sec)

其余的操作类似,就不在演示

8、关闭MySQL

mysqladmin -S /tmp/mysql.sock1 shutdown  建议使用

musqld_multi --defaults-file stop [#,#]

killall mysqld  不建议使用

9,、提供简易管理脚本

#!/bin/bash

#

basedir=/usr/local/mysql

bindir=/usr/local/mysql/bin

conf=/data/multi.cnf

export PATH=$bindir:/$PATH

if test -x $bindir/mysqld_multi

then

mysqld_multi="$bindir/mysqld_multi";

else

echo "Can't execute $bindir/mysqld_multi from dir $basedir";

exit;

fi

case "$1" in

'start' )

"$mysqld_multi" --defaults-extra-file=$conf start $2

;;

'stop' )

"$mysqld_multi" --defaults-extra-file=$conf stop $2

;;

'report' )

"$mysqld_multi" --defaults-extra-file=$conf report $2

;;

'restart' )

"$mysqld_multi" --defaults-extra-file=$conf stop $2

"$mysqld_multi" --defaults-extra-file=$conf start $2

;;

*)

echo "Usage: $0 {start|stop|report|restart}" >&2

;;

esac

10、为mysql的root用户创建密码

mysqladmin -uroot -S /tmp/mysql.sock2 password "123456"   #指定socket文件位置即可

其余的操作一样

11、附,多配置文件安装mysql多实例,这里增加mysql 的3309端口

mkdir -pv /data/3309/data

chown mysql.mysql -R 3309/

cd /usr/local/mysql

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

cp support-files/my-small.cnf /data/3309/my.cnf

vim /data/3309/my.cnf

[client]

port        = 3309                 #这里也需要注意下吧

socket            = /tmp/mysql.sock4

[mysqld]

port        = 3309             #注意端口

socket            = /tmp/mysql.sock4           #注意socket

skip-external-locking

key_buffer_size = 16K

max_allowed_packet = 1M

table_open_cache = 4

sort_buffer_size = 64K

read_buffer_size = 256K

read_rnd_buffer_size = 256K

net_buffer_length = 2K

thread_stack = 128K

datadir=/data/3309/data        #注意datadir

server-id  = 1

[mysqldump]

quick

max_allowed_packet = 16M

mysqld_safe --defaults-file=/data/3309/my.cnf 2&1> > /dev/null    #启动mysqld

ss -tnl | grep 330                #查看端口

LISTEN     0      50                        *:3306                     *:*

LISTEN     0      50                        *:3307                     *:*

LISTEN     0      50                        *:3308                     *:*

LISTEN     0      50                        *:3309                     *:*

其余启动方法与关闭方法类似

12、总结:

1).通过这次mysql多实例安装,我们已经可以根据自己的喜好决定是通过多配置文件安装mysql多实例,还是但配置单文件安装。

2).过程比较简单,也没有什么特别高明的技巧,但是由小见大,以后配置文件可以在完善完善。

3).就是下面还会用心的写一系列的mysql博客,希望高手指点,不胜感激

参考链接:http://freeloda.blog.51cto.com/2033581/1349312

学习联系QQ:1660809109、1661815153、2813150558

马哥Linux运维 更多资讯:www.magedu.com

马哥 mysql教学笔记_【马哥linux学员学习笔记】MySQL多实例详解相关推荐

  1. 2008 mysql 本地安全_如何在Linux系统中建立mysql的本地安全机制?

    如何在Linux系统中对MySQL进行本地的安全机制?今天我们将给大家介绍下具体的操作方法. local-infile=0#关闭远程连接,即3306端口.这是LinuxMySQL的默认监听端口.由于此 ...

  2. mysql数据库truncate 夯住_MySQL如何优雅的删除大表实例详解

    前言 删除表,大家下意识想到的命令可能是直接使用DROP TABLE "表名",这是初生牛犊的做法,因为当要删除的表达空间到几十G,甚至是几百G的表时候.这样一条命令下去,MySQ ...

  3. python apscheduler 阻塞方式只用一个线程_框架APScheduler在python中调度使用的实例详解...

    本篇文章主要介绍了详解python调度框架APScheduler使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 最近在研究python调度框架APScheduler使 ...

  4. ubuntu mysql 修改 端口_在Ubuntu/Linux环境下使用MySQL:开放/修改3306端口、开放访问权限...

    操作系统:Ubuntu 17.04 64位 MySQL版本:MySQL 5.7 一.查看3306端口是否开放 netstat -an|grep 3306 如果看到下图这样的,说明端口并未打开: 二.修 ...

  5. iif能用到mysql中吗_数据库基础知识:SQL中的IIF语句详解

    IIf 返回由逻辑测试确定的两个数值或字符串值之一. 语法 数字 IIf(Logical EXPression, Numeric Expression1, Numeric Expression2) 如 ...

  6. python判断是否回文_对python判断是否回文数的实例详解

    设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 上面的解释就是说回文数和逆 ...

  7. python当型循环_对python while循环和双重循环的实例详解

    废话不多说,直接上代码吧! #python中,while语句用于循环执行程序,即在某个条件下,循环执行某段程序,以处理需要重复处理的相同任务. #while是"当型"循环结构. i ...

  8. netstat详解_需要!Linux常用监视和故障排查命令详解

    作者:老油条IT记 公众号:老油条IT记 #命令预览 1.top 2.ps 3.nice 4.kill 5.iostat 6.mpstat 7.vmstat 8.df 9.du 10.netstat ...

  9. imagepreview使用案例_微信小程序wx.previewImage预览图片实例详解

    一.小知识 二.例子 1.wxml 2.wxss .container { box-sizing:border-box; padding:20px; } .previewimg{ float:left ...

最新文章

  1. Html5 Canvas 扫雷 (IE9测试通过)
  2. Zookeeper集群的搭建及遇到的问题
  3. [今日干货]短视频获得种子用户的途径
  4. 学习方法之06为什么你的计划总是完不成
  5. 10个人里有几个大学生?
  6. Log4Net 使用 AdoNetAppender (log4net 1.2.10.0)
  7. linux服务器数据备份到本地硬盘_等保数据备份和恢复关键点,这些你该知道!...
  8. 土壤高光谱数据预处理与变换
  9. vector性能调优之resize与reserve
  10. java将map输出到d盘_java后台的“/”相对路径不是代表webroot吗,为什么在这里代表了d盘,测试的文件都传到了d盘呀?...
  11. 【数据可视化】使用pyecharts绘制南丁格尔玫瑰图和水平堆叠条形图
  12. C语言 从入门到放弃
  13. Maven的基本使用操作
  14. 分享133个JSP源码,总有一款适合你
  15. Ubuntu16.04 + TITAN XP 深度学习服务器环境搭建(驱动安装,CUNN7.6.5, CUDA9.0) (避坑篇)
  16. 创品牌强农精品培育消费引领 国稻种芯百团计划行动发布
  17. iOS 获取手机的ip地址 并传给后台(三步搞定)
  18. 数据分析——房源分析项目
  19. BZOJ3698 XWW的难题(上下界网络流+gap优化的细节处理)
  20. Deep Residual Learning for Image Recognition浅读与实现

热门文章

  1. 想创业?从学会需求谈判开始
  2. __main__.py:AttributeError: module 'labelme.utils' has no attribute 'draw_label'
  3. mysql datapump_mysqlpump - 一个数据库备份程序
  4. 获取虚拟账号列表失败啥意思_「图」Windows 10 Build 18963发布:可显GPU温度 支持重命名虚拟桌面...
  5. Oracle 归档开启切换和归档日志删除(单实例和RAC)
  6. Python攻克之路-xml模块
  7. Java学习笔记-12.传递和返回对象
  8. 080 HBase的属性
  9. iOS SDK 介绍及导入
  10. 总结一下最近用到的技术(2)--JsonSchema和JsonSchemaValidator