Mysql 数据库单机多实例部署手记
最近的研发机器需要部署多个环境,包括数据库。为了管理方便考虑将mysql数据库进行隔离,即采用单机多实例部署的方式。
找了会资料发现用的人也不是太多,一般的生产环境为了充分发挥机器性能都是单机单实例运行,再进行一系列的配置调优..
找了会资料发现用的人也不是太多,一般的生产环境为了充分发挥机器性能都是单机单实例运行,再进行一系列的配置调优..
多实例的运行机制
通过mysqld_multi启动多个mysqld实例进程,每个实例拥有独立的配置、监听端口、数据库文件、临时文件(日志、socket)等实现步骤
1 初始化数据目录
mysql_install_db --datadir=/web/mysql/prd/data --user=mysql
mysql_install_db --datadir=/web/mysql/dev/data --user=mysql
2 配置多实例文件
multi.cnf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #multi server [mysqld_multi] mysqld = /home/root/local/mysql/bin/mysqld_safe mysqladmin = /home/root/local/mysql/bin/mysqladmin #mysqld_multi log log = /web/mysql/multi .log #用户名密码,用以mysqld_multi操作时透传给mysqladmin(初始化时一般为匿名访问,注释掉即可) #user=root #password= #dev server [mysqld3306] user = mysql port = 3306 socket = /web/mysql/dev/var/mysql .sock pid- file = /web/mysql/dev/var/mysqld .pid log-error = /web/mysql/dev/var/mysqld .log datadir = /web/mysql/dev/data max_connections = 200 default-storage-engine = innodb character_set_server = utf8mb4 #prd server [mysqld3307] user = mysql port = 3811 socket = /web/mysql/prd/var/mysql .sock pid- file = /web/mysql/prd/var/mysqld .pid log-error = /web/mysql/prd/var/mysqld .log datadir = /web/mysql/prd/data max_connections = 1000 default-storage-engine = innodb character_set_server = utf8mb4 |
3 启动多实例
mysqld_multi --defaults-extra-file=multi.cnf start
4 管理多实例
检查运行情况mysqld_multi --defaults-extra-file=multi.cnf report
当然也可以通过网络端口检查:
停止多实例:
netstat -ntlp tcp
tcp 0 0 :::3306 ::: * LISTEN 3919/mysqld
tcp 0 0 :::3307 ::: * LISTEN 15027/mysqld
mysqld_multi --defaults-extra-file=multi.cnf stop
修改密码(针对某个实例):
mysqladmin -uroot -S /web/mysql/prd/var/mysql.sock password 123456
连接某个实例:
mysql -uroot -S /web/mysql/prd/var/mysql.sock -p
常见问题
mysqld_multi执行之后无法启动实例,执行report发现实例没有运行。 原因:mysql实例目录缺少读写权限,将多实例的数据目录设置为mysql:mysql的用户组,并支持读写权限;
启动实例之后无法停止,mysqld_multi stop不生效
原因: mysqld实例的数据库管理员密码与mysqld_multi透传的管理员密码不一致(见multi.conf),通过修改密码可解决。
TIPS
msyqld_multi命令仅仅对配置文件做语法检查,排查问题时需结合multi.log(见配置文件),以及具体实例的错误日志进行;
实例标号必须为整数,如msyqld3307中3307必须为数字标号;

作者: 美码师(zale)
出处: http://www.cnblogs.com/littleatp/, 如果喜欢我的文章,请关注我的公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接 如有问题, 可留言咨询.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?