单机多实例


本文介绍如何在单机环境下部署多个GreatSQL数据库实例。

有时候,需要在同一个系统环境中运行多个数据库实例,以便节省服务器资源。

从MySQL 5.7开始,官方默认采用 systemd 来管理mysqld服务,不建议再使用 mysqld_safe 这种守护进程方式了。

单机单实例模式下,用 systemd 管理mysqld服务可参考这里:增加GreatSQL系统服务

无论是RPM还是二进制包方式安装的GreatSQL,都可以利用 systemd 管理多实例。

假定现在已经实现了用 systemd 管理mysqld单实例,接下来要实现管理多实例。

1. 添加systemd服务文件

手动编辑systemd服务文件:

  1. $ vim /lib/systemd/system/greatsql@.service
  2. [Unit]
  3. Description=GreatSQL Server
  4. Documentation=man:mysqld(8)
  5. Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
  6. After=network.target
  7. After=syslog.target
  8. [Install]
  9. WantedBy=multi-user.target
  10. [Service]
  11. User=mysql
  12. Group=mysql
  13. Type=notify
  14. TimeoutSec=0
  15. PermissionsStartOnly=true
  16. #for single instance
  17. #ExecStartPre=/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/bin/mysqld_pre_systemd
  18. #ExecStart=/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/bin/mysqld $MYSQLD_OPTS
  19. #for multi instance
  20. ExecStartPre=/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/bin/mysqld_pre_systemd %I
  21. ExecStart=/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/bin/mysqld --defaults-group-suffix=@%I $MYSQLD_OPTS
  22. EnvironmentFile=-/etc/sysconfig/mysql
  23. LimitNOFILE = 10000
  24. Restart=on-failure
  25. RestartPreventExitStatus=1
  26. Environment=MYSQLD_PARENT_PID=1
  27. PrivateTmp=false

注意到系统服务文件名相比单实例服务文件名多了 “@” 符,并且文件中 ExecStartPreExecStart 的内容也略有不同。

2. 编辑 /etc/my.cnf 配置文件

可以直接利用原来的 /etc/my.cnf 配置文件,将 datadirportsocketserver_id 等几个选项注释掉,然后在文件末尾再加入类似下面的内容:

  1. # 注意这里的写法和mysqld_multi不同
  2. [mysqld@mgr01]
  3. datadir=/data/GreatSQL/mgr01
  4. socket=/data/GreatSQL/mgr01/mysql.sock
  5. port=3306
  6. server_id=103306
  7. log-error=/data/GreatSQL/mgr01/error.log
  8. group_replication_local_address= "172.16.16.10:33061"
  9. [mysqld@mgr02]
  10. datadir=/data/GreatSQL/mgr02
  11. socket=/data/GreatSQL/mgr02/mysql.sock
  12. port=3307
  13. server_id=103307
  14. log-error=/data/GreatSQL/mgr02/error.log
  15. group_replication_local_address= "172.16.16.10:33071"
  16. #更多实例照此方法继续复制即可

重新加载systemd,使其生效:

  1. $ systemctl daemon-reload

即可识别到这些新增加的服务列表了:

  1. $ systemctl -l
  2. ...
  3. greatsql@mgr01.service loaded active running GreatSQL Server...
  4. greatsql@mgr02.service loaded active running GreatSQL Server...
  5. greatsql@mgr03.service loaded active running GreatSQL Server...
  6. ...

现在可以直接执行类似下面的命令启停多实例服务:

  1. $ systemctl start greatsql@mgr01

这就可以在单机环境下很方便的管理多实例服务了。

问题反馈

联系我们

扫码关注微信公众号

greatsql-wx