在数据库服务器上,能够架构多个Mysql服务器,进行单机多实例的读写分离;mysql
能够经过mysqld_multi来进行多实例的管理,mysqld_multi是用perl写的脚本,原理是经过mysql_admin来进行多个数据库的操做;多实例的配置文件也有点不一样,能够看做是多个mysql配置的集合;mysqld_multi命令使用以下:sql
mysqld_multi report/start/stop
能够使用 mysqld_multi --example来查看配置文件的例子;也能够直接复制下来看成本身的配置;注意备份之前的配置;shell
mv /etc/my.cnf /etc/my.cnf.bak
mysqld_multi --example > /etc/my.cnf
按本身的须要修改配置文件,改为多个数据库;数据库
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = multi_admin
password = my_password
[mysqld1]
socket = /tmp/mysql1.sock
port = 3306
pid-file = /data2/mysql1/mysql.pid
datadir = /data2/mysql1
[mysqld2]
socket = /tmp/mysql2.sock
port = 3307
pid-file = /data2/mysql2/mysql.pid
datadir = /data2//mysql2
这里多出了一个[mysqld_multi]的配置项,须要在每一个数据库里配置一个multi_admin来管理mysql服务器
下面新建数据库:架构
mysql_install_db --user=mysql --datadir=/data2/mysql1
mysql_install_db --user=mysql --datadir=/data2/mysql2
启动mysql服务器socket
mysqld_multi start 1,2
这个时候使用 mysqld_report来查看是否已启动是会失败的,由于尚未新建 multi_admin来查询状态;咱们能够经过 netstat来查看端口tcp
# netstat -tulnp | grep mysql
tcp 0 0 :::3306 :::* LISTEN 716784/mysqld
tcp 0 0 :::3307 :::* LISTEN 3669/mysqld
tcp 0 0 :::3317 :::* LISTEN 714503/mysqld
能够看到3306和3307端口已经监听;同时目录下生成了相应的.socket文件; ide
下面咱们能够链接mysql来配置multi_admin用户;因为有多个实例,链接须要使用socket链接ui
mysql -u root -S /tmp/mysql1.sock
grant 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