首页 > 代码库 > 二进制包中mysqld_multi实现单主机多实例及slave

二进制包中mysqld_multi实现单主机多实例及slave

   最近由于业务需求只有一台服务器部署数据库,不过为了确保数据有得到实时备份,以便于数据分析备份就使用了mysqld_multi来实现mysql的多实例以及同主机上的slave,这样以后添加新的slave的时候就可以在不影响线上的服务时来进行备份创建slave服务器,至于master与slave的同步设置以前有做过,在这里就不多做赘述了,需要可以参看:http://jim123.blog.51cto.com/4763600/1862808。

   先说一下mysqld_multi,它可以通过监听不同的socket和tcp/ip的端口来连接mysqld进程,这个在mysql的官网上可以找到详细的文档信息,在这里就简单的说一下实现的过程以及一些注意点。因为mysql是共用my.cnf文件,所以使用mysqld_multi只要在my.cnf中添加相应的配置就好。首先,先把mysld的配置复制下来,并且把mysqld的配置文件中的配置名字[mysqld]改成[mysqld1],然后再在下面添加[mysqld2]作为slave的配置文件,配置可以使用mysqld1的,但是有几个地方要改一下,要修改地方如下:

[mysqld2]
server-id = 2
#这个很重要,不能和master同一个ID
port            = 3307
socket          = /tmp/mysql3307.sock
log=slow-queries=/data/mysqldata3307/localhost-slow.log
datadir = /data/mysqldata3307
#主要改的就是端口、ip、datadir的路径和socket,其他的就是加上slave的相应配置
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
#添加上mysqld_safe和mysqladmin的路径,这以便于在使用mysqld_multi的时候方便管理mysqld的相应实例的启动和关闭

在修改好my.cnf配置文件后去basedir下的scripts目录中对新实例执行初始化

[root@localhost scripts]# ./mysql_install_db  --basedir=/usr/local/mysql --datadir=/data/mysqldata3307 --user=mysql --skip-name-resolve

然后再把mysqld的进程停掉,使用mysqld_multi来对多实例mysqld进行管理,用法很简单:

mysqld_multi [OPTIONS] {start|stop|report} [GNR,GNR,GNR...]
or     mysqld_multi [OPTIONS] {start|stop|report} [GNR-GNR,GNR,GNR-GNR,...]
启动:
[root@localhost scripts]# mysqld_multi start 1-2
或
[root@localhost scripts]# mysqld_multi start 1
[root@localhost scripts]# mysqld_multi start 2

   平时在登录mysql的交互界面的时候使用指定socket文件登录(http://jim123.blog.51cto.com/4763600/1855645),这样mysqld多实例就部署完毕了,接下来就是mysqld多实例的slave的一些配置,要注意的是在同一台主机上的ip是一样主从的区别是他们的端口以及socket的不同所以在master上使用grant语句配置slave账号时候给的host就要指定好,不然会出现ERROR 1133 (42000): Can‘t find any matching row in the user table的错误,相应的在slave上使用change master to语句的时候就要加上Master_Port = 3306用于区分,这样同主机下的多实例的主从就部署完成了。


本文出自 “技术随笔” 博客,转载请与作者联系!

二进制包中mysqld_multi实现单主机多实例及slave