在数据库服务器上,可以架构多个Mysql服务器,进行单机多实例的读写分离;
可以通过mysqld_multi来进行多实例的管理,mysqld_multi是用perl写的脚本,原理是通过mysql_admin来进行多个数据库的操作;多实例的配置文件也有点不同,可以看作是多个mysql配置的集合;mysqld_multi命令使用如下:
mysqld_multi report/start/stop
可以使用 mysqld_multi --example来查看配置文件的例子;也可以直接复制下来当作自己的配置;注意备份以前的配置;
mv /etc/my.cnf /etc/my.cnf.bakmysqld_multi --example > /etc/my.cnf
按自己的需要修改配置文件,改成多个数据库;
[mysqld_multi]mysqld = /usr/bin/mysqld_safemysqladmin = /usr/bin/mysqladminuser = multi_adminpassword = my_password[mysqld1]socket = /tmp/mysql1.sockport = 3306pid-file = /data2/mysql1/mysql.piddatadir = /data2/mysql1[mysqld2]socket = /tmp/mysql2.sockport = 3307pid-file = /data2/mysql2/mysql.piddatadir = /data2//mysql2
这里多出了一个[mysqld_multi]的配置项,需要在每个数据库里配置一个multi_admin来管理mysql
下面新建数据库:
mysql_install_db --user=mysql --datadir=/data2/mysql1mysql_install_db --user=mysql --datadir=/data2/mysql2
启动mysql服务器
mysqld_multi start 1,2
这个时候使用 mysqld_report来查看是否已启动是会失败的,因为还没有新建 multi_admin来查询状态;我们可以通过 netstat来查看端口
# netstat -tulnp | grep mysqltcp 0 0 :::3306 :::* LISTEN 716784/mysqldtcp 0 0 :::3307 :::* LISTEN 3669/mysqldtcp 0 0 :::3317 :::* LISTEN 714503/mysqld
可以看到3306和3307端口已经监听;同时目录下生成了相应的.socket文件;
下面我们可以连接mysql来配置multi_admin用户;由于有多个实例,连接需要使用socket连接
mysql -u root -S /tmp/mysql1.sockgrant shutdown on *.* to multi_admin@'localhost' identified by'my_password';flush privileges;quit
同样道理配置另一台3307;
也可以拷贝一份mysql来创建新的实例,这样里面的用户也会被拷贝。注意目录权限必须是mysql , chown -R mysql.mysql /data2/mysql2
下面可以使用
mysqld_multi --defaults-file=/etc/my.cnf start 启动全部实例
如果启动出错的话,可以到对应目录下查看日志文件,看哪里出错了。
使用mysqld_multi需要手动启动数据库,也可以加入开机启动项:
echo "mysqld_multi" >> /etc/rc.local