单机多实例


本文介绍如何在单机环境下部署多个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

3. [Unit]
4. Description=GreatSQL Server
5. Documentation=man:mysqld(8)
6. Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
7. After=network.target
8. After=syslog.target
9. [Install]
10. WantedBy=multi-user.target
11. [Service]
12. User=mysql
13. Group=mysql
14. Type=notify
15. TimeoutSec=0
16. PermissionsStartOnly=true

18. #for single instance
19. #ExecStartPre=/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/bin/mysqld_pre_systemd
20. #ExecStart=/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/bin/mysqld $MYSQLD_OPTS

22. #for multi instance
23. ExecStartPre=/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/bin/mysqld_pre_systemd %I
24. ExecStart=/usr/local/GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/bin/mysqld --defaults-group-suffix=@%I $MYSQLD_OPTS

26. EnvironmentFile=-/etc/sysconfig/mysql
27. LimitNOFILE = 10000
28. Restart=on-failure
29. RestartPreventExitStatus=1
30. Environment=MYSQLD_PARENT_PID=1
31. PrivateTmp=false

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

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

可以直接利用原来的 /etc/my.cnf 配置文件,将 datadir、port、socket、server_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"

10. [mysqld@mgr02]
11. datadir=/data/GreatSQL/mgr02
12. socket=/data/GreatSQL/mgr02/mysql.sock
13. port=3307
14. server_id=103307
15. log-error=/data/GreatSQL/mgr02/error.log
16. group_replication_local_address= "172.16.16.10:33071"

18. #更多实例照此方法继续复制即可

重新加载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