一、前言
二、概述
三、环境准备
四、安装MySQL 5.5.35
五、新建支持多实例的配置文件(我这里配置的是四个实例)
六、初始化多实例数据库
七、提供管理脚本 mysqld_multi.server
八、整体备份方便后续迁移
九、管理MySQL多实例
十、登录MySQL多实例
十一、其它管理配置
十二、总结
注,测试环境 CentOS 6.4 x86_64,软件版本 MySQL 5.5.35,软件下载地址:http://dev.mysql.com/downloads/mysql/5.1.html#downloads。
1.应用场景
- 采用了数据伪分布式架构的原因,而项目启动初期又不一定有那多的用户量,为此先一组物理数据库服务器,但部署多个实例,方便后续迁移;
- 为规避mysql对SMP架构不支持的缺陷,使用多实例绑定处理器的办法,把不同的数据库分配到不同的实例上提供数据服务;
- 一台物理数据库服务器支撑多个数据库的数据服务,为提高mysql复制的从机的恢复效率,采用多实例部署;
- 已经为双主复制的mysql数据库服务器架构,想部分重要业务的数据多一份异地机房的热备份,而mysql复制暂不支持多主的复制模式,且不给用户提供服务,为有效控制成本,会考虑异地机房部署一台性能超好的物理服务器,甚至外加磁盘柜的方式,为此也会部署多实例;
- 传统游戏行业的MMO/MMORPG,以及Web Game,每一个服都对应一个数据库,而可能要做很多数据查询和数据订正的工作,为减少维护而出错的概率,也可能采用多实例部署的方式,按区的概念分配数据库;
上面的应用场景介绍主要参考这篇文章:http://www.zhdba.com/mysqlops/2011/07/30/multi-mysqld/,我们这里应用主要是基于前面三种场景。下面我们来说一下要注意的问题……
2.背景/需求、注意事项
(1).背景与需求
- 将所有的安装文件、配置文件、数据目录全部放存/data/mysql目录中,便于今后实现快速迁移、整体备份和快速复制;
- 在一台服务器上运行四个MySQL实例,分别绑定在3306、3307、3308、3309端口上;
- 四个实例都开启binlog日志,数据目录分别存放在/data/mysql/data、/data/mysql/data2、/data/mysql/data3、/data/mysql/data4
- 四个实例均采用InnoDB作为默认的存储引擎,字符编码采用UTF-8;
- 四个实例均采用相同的性能优化配置参数;
(2).注意事项
- 在编译安装时,将数据库的配置文件my.cnf以及data目录等均指向到/data/mysql目录中;
- 通过mysqld_multi的方式来管理四个不同的实例,采用相同的配置文件共享性能优化配置参数;
- 在同一个配置文件中,利用[mysqld1]、[mysqld2]、[mysqld3]、[mysqld4]标签实现不同实例的差异化配置;
三、环境准备
1.安装yum源
12 | |
2.同步时间
123 | |
3.安装mysql5.5依赖包
1 | |
4.安装cmake
1 | |
四、安装MySQL 5.5.35
1.创建安装目录与数据存放目录
12 | |
2.创建mysql用户与组
123 | |
3.授权安装目录与数据目录
12 | |
4.安装mysql
12345 | |
好了,到这里我们的mysql就安装完成了,下面我们为mysql提供多实例配置文件。
五、新建支持多实例的配置文件(我这里配置的是四个实例)
1.删除默认的数据目录
12 | |
2.创建多实例配置需要的目录
12 | |
3.提供配置文件
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 | |
注,MySQL自带了几个不同的配置文件,放置在/data/mysql/support-files目录下,分别是my-huge.cnf,my-innodb-heavy-4G.cnf,my-large.cnf,my-medium.cnf,my-small.cnf,通过名称我们可以很直观的了解到他们是针对不同的服务器配置的,本文的配置文件是来自于my-small.cnf的,因为我是在虚拟机上进行的设置;在生产环境中,我们可以通过参考my-huge.cnf或my-innodb-heavy-4G.cnf中的部分参数配置,来对服务器进行优化;
4.修改my.cnf读写权限
12 | |
好了,到这里我们的配置文件就设置完成了,下面我们来初始化一下数据库。
六、初始化多实例数据库
1.切换到mysql的安装目录
1 | |
2.初始化实例[mysqld1]
1 | |
3.初始化实例[mysqld2]
1 | |
4.初始化实例[mysqld3]
1 | |
5.初始化实例[mysqld4]
1 | |
好了,到这里我们初始化工作就完成了,下面我们来提供一下多实例的管理脚本。
七、提供管理脚本 mysqld_multi.server
1.创建管理脚本目录
1 | |
2.提供管理脚本
1 | |
3.简单修改一下脚本
12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | |
好了,到这里我们所有的配置就全部完成了,下面我们打包备份一下。
八、整体备份方便后续迁移
1234567 | |
注,备份完成后,直接将mysql-5.5.350-full.tar.gz拿到其他服务器上,解压后便可以直接启用。嘿嘿,方便吧……
九、管理MySQL多实例
1.同时启动四个mysql实例
(1).方法一:
1 | |
或方法二:
1 | |
(2).查看一下启动的实例
12345 | |
2.同时关闭四个mysql实例
(1).方法一:
1 | |
或方法二:
1 | |
3.单独启动或关闭mysql实例
(1).启动一个实例
123 | |
(2).关闭一个实例
1 | |
注,启动或关闭两个或者三个实例方法的上面相同这里就不再演示。
十、登录MySQL多实例
注,我们同时启动四个实例,下面我们来演示一下怎么分别登录这四个实例。为了演示四个实例的区别,我们分别在四个实例中创建mydb1、mydb2、mydb3、mydb4。
1.登录[mysqld1]
123456789101112131415161718192021222324252627282930313233 | |
2.登录[mysqld2]
123456789101112131415161718192021222324252627282930313233 | |
3.登录[mysqld3]
123456789101112131415161718192021222324252627282930313233 | |
4.登录[mysqld4]
123456789101112131415161718192021222324252627282930313233 | |
好了,我们的MySQL多实例登录就演示到这里了,下面我们来设置一下mysql的root密码。
十一、其它管理配置
1.为mysql的root用户创建密码
1234 | |
2.删除匿名连接的空密码帐号
注,分别登录实例[mysqld1]、[mysqld2]、[mysqld3]、[mysqld4],执行以下命令:
123456 | |
十二、总结
1.采用源码编译安装MySQL,可能在第一次会花费较多的时间,但却是非常值得的,因为我们可以自己组织所有MySQL相关文件的位置;并且经过源码编译安装后的MySQL,可以直接复制到其它服务器上运行,大大方便了我们以后的迁移、备份和新服务器的配置。
2.本文中仅仅用了四个实例[mysqld1]、[mysqld2]、[mysqld3]、[mysqld4]来举例,实际上我们可以通过这样的方式,实现[mysqld5]、[mysqld6]...等更多的实例,前提是你的服务器硬件配置得根得 上,但是一般我们这边不会超过6个实例。
3.在单机运行多实例的情况下,切忌不要使用 mysql -hlocalhost 或 直接忽略-h参数登录服务器,这应该算是MySQL的一个bug,就是如果使用localhost或忽略-h参数,而不是指定127.0.0.1的话,即使选择的端口是3307,还是会登陆到3306中去,因此应尽量避免这种混乱的产生,统一用127.0.0.1绑定端口或采用socket来登录,在mysql5.5中你不指定-h127.0.0.1选项,你是无法登录的。
最后,希望大家有所收获吧^_^……