最近由于业务需求只有一台服务器部署数据库,不过为了确保数据有得到实时备份,以便于数据分析备份就使用了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目录中对新实例执行初始化
[[email protected] 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,...] 启动: [[email protected] scripts]# mysqld_multi start 1-2 或 [[email protected] scripts]# mysqld_multi start 1 [[email protected] 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用于区分,这样同主机下的多实例的主从就部署完成了。